【昉·星光 2 RISC-V单板计算机】HTTP网络摄像头
本文介绍了昉·星光2 (StarFive2)单板计算机实现基于 HTTP 协议的网络摄像头的项目设计。
项目介绍
本项目设计主要包括
- 准备工作:网络摄像头的方案调研、硬件测试
- 网络摄像头:实现摄像头画面的 HTTP 协议传输
- Home Assistant:摄像头画面推送至 HA 平台,实现远程画面监控
准备工作
完成前面帖子描述的软件库更新流程后(详见:【昉·星光 2 RISC-V单板计算机】SSH登录与GPIO控制及软件库更新 );
运行指令 ffmpeg -version
检查是否安装 ffmpeg
程序;
方案调研
实现摄像头的网络推流,可采用的方案包括
- Nginx + RTMP/HTTP
- MJPG-Streamer
- OpenCV + FFmpeg 推流RTSP 协议 (暂不支持 RISC-V 架构)RTMP 协议HTTP 协议
- OpenCV + HTTP-MJPEG 推流
考虑到 VisionFive2 系统架构以及应用开发支持,采用 OpenCV + MJPEG + HTTP 的方案实现摄像头画面的网络推送。
获取设备号
连接 USB 摄像头;
通过指令 v4l2-ctl --list-devices
查询已连接图像采集设备及其索引号;
测试使用的罗技 C270 是标准的 UVC 设备,对应的索引号为 /dev/video4 .
摄像头测试
使用基于 Python 的 OpenCV 实现摄像头画面的实时显示
OpenCV
创建一个 Python 脚本 usb_cam_test.py
,代码如下
import cv2
# open camera (/dev/video4)
cap = cv2.VideoCapture(4)
if not cap.isOpened():
print("Cannot Open Camera")
exit()
while True:
# Read one frame figure
ret, frame = cap.read()
if not ret:
print("Cannot obtain figure")
break
# Show the Figure
cv2.imshow("Camera Test", frame)
# Press 'q' to exit
if cv2.waitKey(1) == ord('q'):
break
# relase source
cap.release()
cv2.destroyAllWindows()
测试效果
运行程序后,系统自动弹出摄像头采集画面的窗口
摄像头画面的动态播放存在卡顿,可能原因是采用 SSH 远程连接测试,受限于网络连接等情况。
网络摄像头
在本地摄像头连接无误的基础上,进一步通过 HTTP 协议实现网络超链接访问摄像头画面。
新建 cam_opencv_htpp_mjpeg.py
可执行 python 文件,添加如下代码
from http.server import BaseHTTPRequestHandler, HTTPServer
import cv2
import time
cap = cv2.VideoCapture(4)
class MJPEGHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'multipart/x-mixed-replace; boundary=frame')
self.end_headers()
while True:
ret, frame = cap.read()
if not ret:
break
_, jpeg = cv2.imencode('.jpg', frame)
self.wfile.write(b'--frame\r\n')
self.send_header('Content-type', 'image/jpeg')
self.send_header('Content-length', len(jpeg))
self.end_headers()
self.wfile.write(jpeg.tobytes())
time.sleep(0.05)
server = HTTPServer(('0.0.0.0', 8080), MJPEGHandler)
server.serve_forever()
保存代码,执行指令
python3 cam_opencv_htpp_mjpeg.py
HTTP 显示
运行程序,浏览器中输入 http://192.168.1.112:8080
实现摄像头画面的 HTTP 网络显示
VLC 显示
使用 VLC 软件实现网络推流显示
依次选择 媒体
- 打开网络串流
- 网络
- 输入 URL http://192.168.1.112:8080
显示效果
该方案采集的摄像头画面播放非常流畅,基本没有延时。
Home Assistant
在实现摄像头画面的网页浏览的基础上,进一步实现 Home Assistant (HA) 智能家居平台的摄像头添加,实现远程监控。
网页端
依次选择 设置
- 设备与服务
- 添加集成
- 搜索并选择 Android IP Webcam
集成 - 输入摄像头 ip 地址及端口 - 点击 提交
完成摄像头的添加;
进入概览标签页面,刷新网页,可看到新增的摄像头卡片,点击打开摄像头采集的实时画面,运行流畅,无延时。
APP
依托 HA 丰富的生态建设,在移动端可通过 Home Assistant 应用或网页链接实现摄像头画面捕获和实时监控。
总结
本文介绍了昉·星光2 (StarFive2)单板计算机实现基于 HTTP 协议的网络摄像头的项目设计,为该开发板在物联网领域的应用提供了参考。
结合前面帖子介绍的人工智能识别方案,可为其提供远程项目实施的解决方案,如
- 远程智能监控(人脸识别、动作和姿态识别)
- 物体状态实时分析(物体识别、边缘检测)
- 流水线监测(缺陷检测)
- ...
可不断扩展应用场景,结合各种 AI 模型并给出相应的远程连接方案。

