【问题标题】:Stream PiCamera Image Array from one Raspberry Pi to another将 PiCamera 图像阵列从一个 Raspberry Pi 流式传输到另一个
【发布时间】:2019-04-20 09:05:06
【问题描述】:

我正在使用 Raspberry Pi 和 OpenCv 构建家庭监控系统。 基本上,我的设置将包括两个设备,第一个是安全摄像头,它是一个树莓派零和一个 pi 摄像头。另一个设备将是一个主集线器(Raspberry Pi 3),它将完成所有繁重的工作,例如面部识别、语音识别和其他操作。

我想做的是将安全摄像头的镜头流式传输到主集线器,以便它可以处理图像。所以基本上我想从 pi 相机捕获帧,将其转换为 numpy 数组(如果默认情况下没有这样做)并将该数据发送到主集线器,然后转换回要分析的图像帧通过 Opencv。

我将操作分开,因为我的安全摄像头在树莓派零上运行,它不是很快并且无法处理繁重的工作。这也是因为我的安全摄像头连接到电池上,而我正试图降低 Pi 的使用率,因此我将主集线器专用于繁重的操作。

我在两个设备上都使用 python v3 环境。对mqtt、TCP等物联网通信技术了如指掌。但是,为了满足我的需求,我想帮助我在 python 脚本中实际实现这些技术。

【问题讨论】:

  • 嗯,您需要考虑图像的尺寸(以像素为单位的高度和宽度)、颜色或灰度,以及您需要多久发送一次。然后尝试将其转换为以字节/秒为单位的数据速率,并计算出您可以通过有线/wifi 网络实现的带宽。然后考虑是否需要先压缩它们,或者在 YUV 或 MJPEG 中工作。然后考虑丢包/重启机制和缓冲。
  • 好吧,现在这些东西不是那么重要,因为它们很容易配置,我只是在使用允许我将捕获的图像 numpy 数组数据发送到主 pi 的技术之后。但要回答您的观点,尺寸为 1080x1920,彩色,每次检测到运动时都会发送。是的,我也已经尝试过使用 mqtt 进行字节流,但我的代码最终没有工作。

标签: python opencv raspberry-pi raspberry-pi3


【解决方案1】:

我认为分解你的任务会更好。 1. 从 pi0 捕获图像流并进行流式传输。 2.从pi1中取出流并在pi3中处理

帮助您开始图像捕获的示例代码,您可以找到 here

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

您需要自己找到它。将视频流式传输到 URL :: IP.Add.ress.OF_pi0/cam_read

Live Video Streaming Python Flask

然后使用这个URL处理pi3中的视频 来自here的示例代码:

import numpy as np
import cv2

# Open a sample video available in sample-videos
vcap = cv2.VideoCapture('IP.Add.ress.OF_pi0/cam_read')
#if not vcap.isOpened():
#    print "File Cannot be Opened"

while(True):
    # Capture frame-by-frame
    ret, frame = vcap.read()
    #print cap.isOpened(), ret
    if frame is not None:
        # Display the resulting frame
        cv2.imshow('frame',frame)
        # use other methods for object face or motion detection 
        # OpenCV Haarcascade face detection 
        # Press q to close the video windows before it ends if you want
        if cv2.waitKey(22) & 0xFF == ord('q'):
            break
    else:
        print "Frame is None"
        break

# When everything done, release the capture
vcap.release()
cv2.destroyAllWindows()
print "Video stop"

此答案不能直接解决您的问题。相反,它是您入门的骨架。人脸检测可以找到here

【讨论】:

  • 感谢您的回复,尽管它仍然没有真正帮助,因为我正在推动最有效和最轻量级的解决方案。如果我在 Pi0 上使用 opencv,那么我将无法降低其电池消耗,并且会降低其生产力。相反,我想只使用 ghe picamera 模块。以高清和彩色捕获帧,将图像 numpy 数组转换为字节并将其流式传输到 Pi3。但我的问题是流媒体部分。不是如何做opencv或面部识别。我已经尝试过 mqtt 但它只有流字节数组的发布方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2018-08-05
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多