【问题标题】:How to process images in real-time and output a real-time video of the result?如何实时处理图像并输出结果的实时视频?
【发布时间】:2017-12-15 00:05:40
【问题描述】:

我有一个带摄像头的 Rasberry Pi,我正在使用 RPi Cam Web 界面将视频流式传输到我的浏览器。我运行一个脚本来读取图像并如下处理它们。运行代码会打开一个窗口,其中包含当前处理过的图像。当我关闭窗口时,我会得到一个更新的处理图像。

但是,我想做的是输出已处理图像的连续视频。我应该采取什么方法来做到这一点?

while True: 
    image = io.imread('http://[ip-address]/cam_pic.php')
    image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    faces = detect(image_gray)
    image_with_detected_faces = faces_draw(image, faces)
    plt.imshow(image_with_detected_faces)
    plt.show()

【问题讨论】:

  • 这个 github repo 解释了如何使用 tensorflow 对连续视频进行分类可能会有所帮助。
  • 这里有很多缺失的信息,这使得这个问题很难回答。您可以使用plt.savefig() 而不是plt.show() 保存图像,然后我建议您使用ffmpeg(或类似的)将图像转换为视频。为了产生合理的结果,您的处理时间必须相当短,才能获得不错的帧速率。此外,您可能希望在设定的时间而不是尽可能快地捕获图像,以获得更好的“流程”。最后,这当然不会产生实时视频。
  • @JohanL 这很有帮助,谢谢。我应该在我的问题中添加哪些信息?
  • 例如,如果我提出的方法,使用ffmpeg 并且不获取实时流是可以的。另外,您期望的帧速率是多少?序列要存储多长时间?您应该在 RPi 上进行所有处理,还是可以将其卸载到更强大的服务器上?另外,您想对视频进行编码以减小其大小等吗?

标签: python matplotlib raspberry-pi computer-vision


【解决方案1】:

你可能想看看这个问题:update frame in matplotlib with live camera preview 直接使用 VideoCapture。如果您想从 http 读取图像,可以将其更改为以下之一。

交互模式

import cv2
import matplotlib.pyplot as plt

def grab_frame():
    image = io.imread('http://[ip-address]/cam_pic.php')
    image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    faces = detect(image_gray)
    return faces_draw(image, faces)

#create axes
ax1 = plt.subplot(111)

#create image plot
im1 = ax1.imshow(grab_frame())

plt.ion()

while True:
    im1.set_data(grab_frame())
    plt.pause(0.2)

plt.ioff() # due to infinite loop, this gets never called.
plt.show()

FuncAnimation

import cv2
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

def grab_frame():
    image = io.imread('http://[ip-address]/cam_pic.php')
    image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    faces = detect(image_gray)
    return faces_draw(image, faces)

#create axes
ax1 = plt.subplot(111)

#create axes
im1 = ax1.imshow(grab_frame())

def update(i):
    im1.set_data(grab_frame())

ani = FuncAnimation(plt.gcf(), update, interval=200)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多