Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Python中的Streamlink Streamdata处理_Python_Opencv_Stream_Twitch - Fatal编程技术网

OpenCV Python中的Streamlink Streamdata处理

OpenCV Python中的Streamlink Streamdata处理,python,opencv,stream,twitch,Python,Opencv,Stream,Twitch,我正在尝试通过streamlink()读取twitch流 导入OpenCV,以便在Python中进行进一步处理 通过popen将流读入stream.ts文件,然后读入opencv,这样做有效: import subprocess import os import time def create_new_streaming_file(stream_filename="stream0", stream_link="https://www.twitch.tv/tsm_viss"):

我正在尝试通过streamlink()读取twitch流 导入OpenCV,以便在Python中进行进一步处理

通过popen将流读入stream.ts文件,然后读入opencv,这样做有效:

import subprocess
import os
import time

def create_new_streaming_file(stream_filename="stream0", stream_link="https://www.twitch.tv/tsm_viss"):

            try:
                os.remove('./Engine/streaming_util/'+stream_filename+'.ts')
            except OSError:
                pass

            cmd = "streamlink --force --output ./Engine/streaming_util/"+stream_filename+".ts "+stream_link+" best"
            subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

create_new_streaming_file()

video_capture = cv2.VideoCapture('./Engine/streaming_util/stream0.ts')
速度非常慢,流在大约30秒后停止

我想从streamlink的pythonapi中将bytestream直接读入openCV。 工作原理是将流的最新n字节打印到控制台:

import streamlink

streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()

while True:
    data = fd.read(1024)
    print(data)
我正在寻找这样的东西(不起作用,但你会得到这个概念):


提前多谢

不过,要以合理的性能完成这项任务相当棘手

查看该项目:

主文件是引擎文件夹中的realtime\u Videostreamer.py。如果初始化此对象,它将创建一个ffmpeg子进程,并在额外线程中用视频帧填充队列。此体系结构可防止主线程阻塞,因此根据您的网络速度和cpu功率,可以并行分析两个流

此解决方案非常适用于twitch streams。没有尝试其他流媒体网站


关于这个项目。

嗨,我在创建管道时遇到了一个错误,可能是因为我的电脑中没有这个目录“/home/sd092/ffmpeg-git-20180111-32bit-static/ffmpeg”,你知道如何修复它吗?是的,对不起,这个项目是一个黑客大学的挑战。这个路径应该是你自己的ffmpeg文件路径。我对这个错误没有意见,但是当我尝试在高清流(1920x1080)上逐帧捕获时,我的电脑会得到完整的RAM和CPU。您有相同的问题吗?是的,此实现是资源密集型的,我建议使用较低的分辨率。如果我没记错的话,twitch&streamlink支持一个关键字,您可以在其中更改视频分辨率。我们访问了一台服务器,该服务器具有128Gb RAM、64核和1080 GTX Titan图形。随时可以打开拉取请求并推送您的版本!
streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()
bytes=''


while True:
# to read mjpeg frame -
    bytes+= fd.read(1024)

    a = bytes.find('\xff\xd8')
    b = bytes.find('\xff\xd9')

    if a!=-1 and b!=-1:
        jpg = bytes[a:b+2]
        bytes= bytes[b+2:]
        img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR)
        cv2.imwrite('messigray.png', img)
        cv2.imshow('cam2', img)

    else:
        continue