使用ffmpeg从python opencv流式传输图像

k5hmc34c  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(231)

为了尝试嵌入式ai,我想通过rtsp流传输图像数据集。我试图做的是每x秒读取一幅图像,并将其发送到流中,然后推断出我的ai。我尝试使用此github回购:https://gist.github.com/takidog/2c981c34d5d5b41c0d712f8ef4ac60d3#file-主py
这就是我迄今为止所尝试的:

import cv2
import time

import subprocess as sp 

import glob, os

__PATH = "./DATASET"

os.chdir(__PATH)
IMG_LIST = glob.glob("*.jpg")
IMG_LIST_LEN = len(IMG_LIST)
IMG_INDEX = 0
IMG_DELAY = 2

IMG_WIDTH = 1280
IMG_HEIGHT = 720

IMG_SIZE = str(IMG_WIDTH)+"x"+str(IMG_HEIGHT)
FPS = 5

RTSP_SERVER = "rtsp://localhost:31415/stream"

COMMAND = ['ffmpeg',
           '-re',
            '-s', IMG_SIZE,
            '-r', str(FPS),
            '-i', '-',
            '-bufsize', '64M',
            '-maxrate', "4M",
            '-rtsp_transport', 'tcp',
            '-muxdelay','0.1',
            RTSP_SERVER]

process = sp.Popen(COMMAND,stdin=sp.PIPE)

while(True):

    CURRENT_IMG = cv2.imread(IMG_LIST[IMG_INDEX])
    IMG_INDEX = (IMG_INDEX+1)%IMG_LIST_LEN
    while(CURRENT_IMG.shape[0]!=720): #We dump images with a bad format
        CURRENT_IMG = cv2.imread(IMG_LIST[IMG_INDEX])
        IMG_INDEX = (IMG_INDEX+1)%IMG_LIST_LEN

    _,FRAME = cv2.imencode('.png', CURRENT_IMG)

    process.stdin.write(FRAME.tobytes())

    time.sleep(1/FPS)

意外这不起作用,给了我这个错误:

Input #0, png_pipe, from 'pipe:':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 1280x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
[NULL @ 0x55ba3fe1b860] Unable to find a suitable output format for 'rtsp://localhost:31415/stream'
rtsp://localhost:31415/stream: Invalid argument
Traceback (most recent call last):
  File "main.py", line 47, in <module>
    process.stdin.write(FRAME.tobytes())
BrokenPipeError: [Errno 32] Broken pipe

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题