成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟

用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟

熱門標簽:富錦商家地圖標注 江西省地圖標注 沈陽外呼系統(tǒng)呼叫系統(tǒng) 沈陽人工外呼系統(tǒng)價格 如何申請400電話費用 外呼系統(tǒng)哪些好辦 池州外呼調(diào)研線路 武漢外呼系統(tǒng)平臺 沈陽防封電銷卡品牌

演示地址:

https://replit.com/@PaoloAmoroso/spacestills

這是一個具有GUI的簡單系統(tǒng),它訪問feed流并從Web下載數(shù)據(jù)。該程序僅需350行代碼,并依賴于一些開源的Python庫。

關(guān)于程序

Spacestills會定期從feed流中下載NASA TV靜止幀并將其顯示在GUI中。
該程序可以校正幀的縱橫比,并將其保存為PNG格式。它會自動下載最新的幀,并提供手動重新加載,禁用自動重新加載或更改下載頻率的選項。
Spacestillsis是一個比較初級的版本,但是它可以做一些有用的事情:捕獲并保存NASA TV直播的太空事件圖像。太空愛好者經(jīng)常在社交網(wǎng)絡(luò)或論壇共享他們從NASA TV手動獲取的屏幕截圖。Spacestills節(jié)省了使用屏幕捕獲工具的時間,并保存了可供共享的圖像文件。您可以在Replit上在線運行Spacestills。

開發(fā)環(huán)境

筆者用Replit開發(fā)了Spacestills。Replit是云上的開發(fā),部署和協(xié)作環(huán)境,它支持包括Python在內(nèi)的數(shù)十種編程語言和框架。作為Chrome操作系統(tǒng)和云計算愛好者,筆者非常喜歡Replit,因為它可以在瀏覽器中完全正常運行,無需下載或安裝任何內(nèi)容。

資源和依賴包

Spacestills依賴于一些外部資源和Python庫。

NASA TV feed 流

肯尼迪航天中心的網(wǎng)站上有一個頁面,其中包含精選的NASA視頻流,包括NASA電視公共頻道。feed流顯示最新的靜止幀并自動更新。
每個feed都帶有三種尺寸的幀,Spacestills依賴于具有704x408像素幀的最大NASA TV feed流。最大更新頻率為每45秒一次。因此,檢索最新的靜止幀就像從feed流的URL下載JPEG圖像一樣簡單。
原始圖像被垂直拉伸,看起來很奇怪。因此,該程序可以通過壓縮圖像并生成未失真的16:9版本來校正縱橫比。

Python

因PySimpleGUI的原因需要安裝 Python 3.6 版本。

第三方庫

  • Pillow:圖像處理
  • PySimpleGUI:GUI框架(Spacestills使用Tkinter后端)
  • Request:HTTP請求

完整代碼

from io import BytesIO
from datetime import datetime, timedelta
from pathlib import Path
import requests
from requests.exceptions import Timeout
from PIL import Image
import PySimpleGUI as sg


FEED_URL = 'https://science.ksc.nasa.gov/shuttle/countdown/video/chan2large.jpg'

# Frame size without and with 16:9 aspect ratio correction
WIDTH = 704
HEIGHT = 480
HEIGHT_16_9 = 396

# Minimum, default, and maximum autoreload interval in seconds
MIN_DELTA = 45
DELTA = MIN_DELTA
MAX_DELTA = 300


class StillFrame():
    """Holds a still frame.
    
    The image is stored as a PNG PIL.Image and kept in PNG format.
    Attributes
    ----------
        image : PIL.Image
            A still frame
        original : PIL.Image
            Original frame with wchich the instance is initialized, cached in case of
            resizing to the original size
    
    Methods
    -------
        bytes : Return the raw bytes
        resize : Resize the screenshot
        new_size : Calculate new aspect ratio
    """

    def __init__(self, image):
        """Convert the image to PNG and cache the converted original.
        Parameters
        ----------
            image : PIL.Image
                Image to store
        """
        self.image = image
        self._topng()
        self.original = self.image

    def _topng(self):
        """Convert image format of frame to PNG.
        Returns
        -------
            StillFrame
                Frame with image in PNG format
        """
        if not self.image.format == 'PNG':
            png_file = BytesIO()
            self.image.save(png_file, 'png')
            png_file.seek(0)
            png_image = Image.open(png_file)
            self.image = png_image
        return self

    def bytes(self):
        """Return raw bytes of a frame image.
        
        Returns
        -------
            bytes
                Byte stream of the frame image
        """
        file = BytesIO()
        self.image.save(file, 'png')
        file.seek(0)
        return file.read()

    def new_size(self):
        """Return image size toggled between original and 16:9.
        
        Returns
        -------
            2-tuple
                New size
        """
        size = self.image.size
        original_size = self.original.size
        new_size = (WIDTH, HEIGHT_16_9) if size == original_size else (WIDTH, HEIGHT)
        return new_size

    def resize(self, new_size):
        """Resize frame image.
        
        Parameters
        ----------
            new_size : 2-tuple
                New size
        Returns
        -------
            StillFrame
                Frame with image resized
        """
        if not(self.image.size == new_size):
            self.image = self.image.resize(new_size)
        return self
    

def make_blank_image(size=(WIDTH, HEIGHT)):
    """Create a blank image with a blue background.
    
    Parameters
    ----------
        size : 2-tuple
            Image size
    
    Returns
    -------
        PIL.Image
            Blank image
    """
    image = Image.new('RGB', size=size, color='blue')
    return image


def download_image(url):
    """Download current NASA TV image.
    Parameters
    ----------
        url : str
            URL to download the image from
    
    Returns
    -------
        PIL.Image
            Downloaded image if no errors, otherwise blank image
    """
    try:
        response = requests.get(url, timeout=(0.5, 0.5))
        if response.status_code == 200:
            image = Image.open(BytesIO(response.content))
        else:
            image = make_blank_image()
    except Timeout:
        image = make_blank_image()
    return image


def refresh(window, resize=False, feed=FEED_URL):
    """Display the latest still frame in window.
    
    Parameters
    ----------
        window : sg.Window
            Window to display the still to
        feed : string
            Feed URL
    
    Returns
    -------
        StillFrame
            Refreshed screenshot
    """
    still = StillFrame(download_image(feed))
    if resize:
        still = change_aspect_ratio(window, still, new_size=(WIDTH, HEIGHT_16_9))
    else:
        window['-IMAGE-'].update(data=still.bytes())
    return still


def change_aspect_ratio(window, still, new_size=(WIDTH, HEIGHT_16_9)):
    """Change the aspect ratio of the still displayed in window.
    
    Parameters
    ----------
        window : sg.Window
            Window containing the still
        new_size : 2-tuple
            New size of the still
    
    Returns
    -------
        StillFrame
            Frame containing the resized image
    """
    resized_still = still.resize(new_size)
    window['-IMAGE-'].update(data=resized_still.bytes())
    return resized_still


def save(still, path):
    """Save still to a file.
    Parameters
    ----------
        still : StillFrame
            Still to save
        path : string
            File name
    
    Returns
    -------
        Boolean
            True if file saved with no errors
    """
    filename = Path(path)
    try:
        with open(filename, 'wb') as file:
            file.write(still.bytes())
        saved = True
    except OSError:
        saved = False
    return saved


def next_timeout(delta):
    """Return the moment in time right now + delta seconds from now.
    Parameters
    ----------
        delta : int
            Time in seconds until the next timeout
    
    Returns
    -------
        datetime.datetime
            Moment in time of the next timeout
    """
    rightnow = datetime.now()
    return rightnow + timedelta(seconds=delta)


def timeout_due(next_timeout):
    """Return True if the next timeout is due.
    Parameters
    ----------
        next_timeout : datetime.datetime
    
    Returns
    -------
        bool
            True if the next timeout is due
    """
    rightnow = datetime.now()
    return rightnow >= next_timeout


def validate_delta(value):
    """Check if value is an int within the proper range for a time delta.
    Parameters
    ----------
        value : int
            Time in seconds until the next timeout
    
    Returns
    -------
        int
            Time in seconds until the next timeout
        bool
            True if the argument is a valid time delta
    """
    isinteger = False
    try:
        isinteger = type(int(value)) is int
    except Exception:
        delta = DELTA
    delta = int(value) if isinteger else delta
    isvalid = MIN_DELTA = delta = MAX_DELTA
    delta = delta if isvalid else DELTA
    return delta, isinteger and isvalid


LAYOUT = [[sg.Image(key='-IMAGE-')],
          [sg.Checkbox('Correct aspect ratio', key='-RESIZE-', enable_events=True),
           sg.Button('Reload', key='-RELOAD-'),
           sg.Button('Save', key='-SAVE-'),
           sg.Exit()],
          [sg.Checkbox('Auto-reload every (seconds):', key='-AUTORELOAD-',
                       default=True),
           sg.Input(DELTA, key='-DELTA-', size=(3, 1), justification='right'),
           sg.Button('Set', key='-UPDATE_DELTA-')]]


def main(layout):
    """Run event loop."""
    window = sg.Window('Spacestills', layout, finalize=True)
    current_still = refresh(window)

    delta = DELTA
    next_reload_time = datetime.now() + timedelta(seconds=delta)

    while True:
        event, values = window.read(timeout=100)
        if event in (sg.WIN_CLOSED, 'Exit'):
            break
        elif ((event == '-RELOAD-') or
                (values['-AUTORELOAD-'] and timeout_due(next_reload_time))):
            current_still = refresh(window, values['-RESIZE-'])
            if values['-AUTORELOAD-']:
                next_reload_time = next_timeout(delta)
        elif event == '-RESIZE-':
            current_still = change_aspect_ratio(
                window, current_still, current_still.new_size())
        elif event == '-SAVE-':
            filename = sg.popup_get_file(
                'File name', file_types=[('PNG', '*.png')], save_as=True,
                title='Save image', default_extension='.png')
            if filename:
                saved = save(current_still, filename)
                if not saved:
                    sg.popup_ok('Error while saving file:', filename, title='Error')
        elif event == '-UPDATE_DELTA-':
            # The current cycle should complete at the already scheduled time. So
            # don't update next_reload_time yet because it'll be taken care of at the
            # next -AUTORELOAD- or -RELOAD- event.
            delta, valid = validate_delta(values['-DELTA-'])
            if not valid:
                window['-DELTA-'].update(str(DELTA))

    window.close()
    del window


if __name__ == '__main__':
    main(LAYOUT)

以上就是用 Python 監(jiān)控 NASA TV 直播畫面的實現(xiàn)步驟的詳細內(nèi)容,更多關(guān)于Python 監(jiān)控 NASA TV 直播畫面的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python實時監(jiān)控網(wǎng)站瀏覽記錄實現(xiàn)過程詳解
  • python實現(xiàn)批量監(jiān)控網(wǎng)站
  • 利用Python自動監(jiān)控網(wǎng)站并發(fā)送郵件告警的方法
  • python監(jiān)控網(wǎng)站運行異常并發(fā)送郵件的方法
  • 用python實現(xiàn)監(jiān)控視頻人數(shù)統(tǒng)計
  • Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗
  • 教你怎么用Python監(jiān)控愉客行車程
  • Python實現(xiàn)用手機監(jiān)控遠程控制電腦的方法
  • python實現(xiàn)的web監(jiān)控系統(tǒng)
  • 用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?

標簽:常德 株洲 呂梁 通遼 阿里 銅川 潛江 黑龍江

巨人網(wǎng)絡(luò)通訊聲明:本文標題《用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟》,本文關(guān)鍵詞  用,Python,監(jiān)控,NASA,直播,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟》相關(guān)的同類信息!
  • 本頁收集關(guān)于用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    中文字幕在线观看一区二区| 国产精品素人视频| 日韩在线不卡一区| 91成人国产综合久久精品| 91精选福利| 黄色片大全在线观看| 久久久精品在线观看| 中文av字幕在线观看| 日韩精品久久久久久久| 免费av片风间由美在线| 初体验·韩国| 亚洲精品一区二区三区中文字幕| 午夜亚洲福利老司机| 日韩av影音先锋| 亚洲成人国产| 国产日韩av一区二区| 美女露胸视频在线观看| 色综合天天在线| 91精品国产综合久久精品app| 中国老头性行为xxxx| 国产亚洲高清一区| 国产精品扒开腿做爽爽爽视频软件| 人人爽人人爽人人片av| 福利视频在线| 国产日韩综合一区二区性色av| 久久久久久久久国产精品| 国产精品久久久久久久久久久久久久| 奇米影视第四狠狠777| 中文天堂在线观看| 国产95亚洲| 日韩黄色片视频| 国产羞羞视频在线观看| 狠狠色丁香久久综合频道| 美女日韩在线中文字幕| 色天使久久综合网天天| 国产精品免费精品自在线观看| 欧美亚洲成人精品| 污视频免费在线看| 欧美日韩一区二区在线| 亚欧美中日韩视频| а√在线中文在线新版| 亚洲天堂av网| 高清国语自产拍免费视频国产| 欧美日韩不卡一区| 国产成人自拍一区| x88av在线| 91亚洲午夜在线| 成人午夜免费在线观看| 亚洲av中文无码乱人伦在线视色| 亚洲成人激情小说| 国产精品女视频| 99久久精品久久久久久ai换脸| 亚洲欧洲精品在线| 九九热r在线视频精品| 久久久精品一区二区涩爱| 性欧美疯狂xxxxbbbb| 欧美天堂在线观看| 五月天天在线| 国产精品爽爽爽爽爽爽在线观看| 国产91精品高潮白浆喷水| 亚洲成人网在线观看| 91美女主播在线视频| 亚洲精品免费一区亚洲精品免费精品一区| 天海翼在线观看视频| 最新91在线| 在线国产精品网| 姑娘第5集在线观看免费好剧| 天堂va蜜桃一区二区三区漫画版| aⅴ在线视频男人的天堂| 国产成人亚洲综合无码| a天堂中文在线| 无需播放器的av| 亚洲3atv精品一区二区三区| 福利一区二区在线| 久久九九免费视频| 亚洲少妇诱惑| 色婷婷久久一区二区三区麻豆| 欧美日韩高清丝袜| 国产精品xnxxcom| 国产黄频在线观看| av动漫在线观看| 男操女在线观看| av在线私库| 尤物在线免费视频| 无码人妻精品一区二区蜜桃网站| jizz18欧美| 无码人妻丰满熟妇区五十路百度| 中文字幕乱码无码人妻系列蜜桃| 不卡一区二区三区四区| 在线免费黄网| 九色视频在线观看免费播放| 午夜精品久久久久久久99樱桃| 国产目拍亚洲精品99久久精品| 日韩美女爱爱视频| 亚洲视频一区二区三区| 国产一级二级三级| 日韩成人亚洲| 韩国亚洲精品| 久久久久久久久久一区二区| 日韩免费在线观看视频| 91极品尤物在线播放国产| 成片免费观看视频| 精品动漫3d一区二区三区免费版| 亚洲影视在线播放| 99视频在线观看一区三区| 国产一区二区三区视频免费| 一级片久久久久| 性欧美1819sex性高清| 亚洲第一天堂av| 欧美精品一区二区三区一线天视频| 成人无码av片在线观看| 亚洲精品一区二区毛豆| 男人天堂综合| 国产又粗又猛又黄| 国产伦精品一区二区三区照片91| 欧美极品欧美精品欧美视频| 精品国产乱码久久久久夜深人妻| 国产原创剧情av| 欧美日韩在线网站| 免费a级毛片在线观看| 91视频免费观看| 亚洲国产婷婷香蕉久久久久久99| 人人干人人草| 欧美天堂影院| 视频三区在线| 日韩av网址大全| 成午夜精品一区二区三区软件| 漫画在线观看av| 亚洲精品成人av| 成人羞羞国产免费| 欧美日韩综合色| 亚洲男人天堂网| 亚洲嫩模很污视频| av理论在线观看| 蜜臂av日日欢夜夜爽一区| 福利片免费在线观看| 久久久91精品国产一区二区精品| 色婷婷国产精品综合在线观看| 亚洲第一区在线观看| 波多野结衣亚洲一二三| 91精品国产91久久久久久三级| 香蕉久久一区| 亚洲天堂av片| 亚洲va欧美va国产va天堂影院| 亚洲欧美中文日韩在线v日本| 荫蒂被男人添免费视频| 亚洲精品第三页| 国产免费一级| 成人免费xxxxx在线视频| xxxxxxxxx欧美| 午夜久久久精品| 美女视频亚洲色图| 先锋影音欧美性受| 亚洲伊人网站| 亚洲精品乱码久久久久久自慰| 久久久久久三级| 91高清视频免费观看| 国产影视精品一区二区三区| 风流少妇一区二区| 中文字幕777| 一级片黄色录像| 精品日韩在线播放| www.com欧美| 国产一二精品视频| 成人18视频在线播放| 美女精品一区最新中文字幕一区二区三区| 精品国产美女在线| 怡红院成人在线| 欧美老女人性视频| 久久av资源站| 国产毛片视频| 国产精品一区二区小说| 无码人妻久久一区二区三区蜜桃| а天堂中文最新一区二区三区| 国产精品刘玥久久一区| 国产成人亚洲综合a∨猫咪| 凹凸国产熟女精品视频| 手机在线免费av| 69视频在线免费观看| 青青草91久久久久久久久| av免费在线免费| 欧美 亚洲 另类 激情 另类| 日韩美女视频一区二区在线观看| 久久久久久无码午夜精品直播| www.日韩.com| 私人高清影院 强乱中文字| 欧美图片激情小说| 久久精品一二三区| 国产伦精品一区二区三区免费优势| 亚洲三级av在线| 灌醉mj刚成年的大学平面模特| 日本少妇激情视频| 亚洲欧美中文在线视频| 成人性生活免费看| 日本一区二区三区电影| 欧美xxxxbbbb| 亚洲精品一区中文| 国产男女无套免费网站| 5g影院天天爽成人免费下载| 久久亚洲精品无码va白人极品| 九色丨porny丨自拍入口| 欧美视频免费播放| 国产美女高潮在线| 国产99对白在线播放| 免费看污片的网站| 久久免费少妇高潮99精品| 中文字幕在线观看不卡| av永久不卡| 国产精品日韩欧美大师| 97影院秋霞午夜在线观看| 亚洲高清av在线| 欧美一区二区三区免费视频| 国产麻豆综合| 亚洲午夜在线观看| 欧美第一黄网免费网站| 国产精品视频男人的天堂| 国产不卡视频在线观看| 国产无套丰满白嫩对白| 国产乱子伦三级在线播放| 精品一区二区三区四区| wwwwww.欧美系列| 四虎一区二区| www.成人三级视频| 精品日韩av一区二区| 亚洲欧美激情网| 亚洲影院一区二区三区| 亚洲欧美卡通动漫| 国产亚洲一区| 国产在线播放你懂的| 欧美人妖巨大在线| 亚洲精品777| 久草一区二区| 91精品xxx在线观看| 欧美精品v日韩精品v国产精品| 1区2区3区欧美| 亚洲精品国产精品国自产| 在线观看高清免费视频| 久国内精品在线| 久久久亚洲欧洲日产国码αv| 精品少妇一区二区三区| 女女互磨互喷水高潮les呻吟| 欧美放荡办公室videos4k| 久久久久亚洲精品中文字幕| 亚洲淫性视频| 精品av一区二区| 日韩福利视频网| 日日摸天天爽天天爽视频| 亚洲成人a**站| 日韩高清不卡一区| 在线免费观看污视频| 国产 欧美 日韩 在线| 久久久久国产一区二区| 久久77777| av一区二区高清| 在线观看国产精品日韩av| 欧美亚洲视频在线观看| 九色精品蝌蚪| 精品对白一区国产伦| 国产裸体歌舞团一区二区| 日韩脚交footjobhdboots| 亚洲电影免费观看高清完整版在线观看| 成人免费电影网址| 亚洲精品aaaa| 又粗又黑又大的吊av| 欧美精品福利| 日本加勒比一区| 57pao国产成永久免费视频| 色欲久久久天天天综合网| 国产精品视频一| 另类视频在线| 免费在线看污片| 亚洲第一区在线| 久久久国产精彩视频美女艺术照福利| 中文国产亚洲喷潮| 精品成av人一区二区三区| 偷拍25位美女撒尿视频在线观看| 好吊色欧美一区二区三区视频| 成人精品国产亚洲| 国产乱精品一区二区三区| 欧美性在线视频| 韩国专线一区二三区| h视频在线观看网站| 欧美色网站导航| 国产狂喷白浆在线观看视频| 亚洲精品一级| 国产福利在线免费观看| 亚洲图片中文字幕| 久久婷婷国产91天堂综合精品| 国产精品久久久久久av下载红粉| 东方av正在进入| 欧美精品在线视频观看| 性欧美极品另类| 在线亚洲欧美| 亚洲天堂2016| 99久久精品国产成人一区二区| 中文字幕日韩欧美精品在线观看| 看成年女人免费午夜视频| 男人的天堂在线视频| 精品人妻伦一二三区久| 4444kk在线观看| 日韩欧美视频一区二区| 色老头在线一区二区三区| av天在线观看| 欧美一区二区成人6969| 无码人妻丰满熟妇啪啪欧美| 美女视频网站久久| 欧美精品中文字幕亚洲专区| 丝袜美腿诱惑一区二区三区| 成人在线网址| 精品日韩中文字幕| 老鸭窝av在线| av免费在线播放网站| 日韩av在线天堂网| 精品国产乱码一区二区| 亚洲图片欧美视频| 欧美成人免费播放| 亚洲欧美综合自拍| jizz日本免费| 好男人官网在线观看| 日韩av片在线播放| 国产精品久久久久久久美男| 精品在线观看免费| 天天碰夜夜操| 日本一区二区不卡高清更新| 给我免费观看片在线电影的| 香蕉视频xxxx| 国产午夜精品久久久久免费视| 色欧美片视频在线观看在线视频|