【昉·星光 2 RISC-V单板计算机】HTTP网络摄像头
分享作者:lijinlei
评测品牌:赛昉科技
评测型号:VF202040-A0
发布时间:2025-05-27 15:41:28
0
前言
本文介绍了昉·星光2 (VisionFive2)单板计算机实现基于 HTTP 协议的网络摄像头的项目设计。
开源口碑分享内容

【昉·星光 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 模型并给出相应的远程连接方案。


全部评论
暂无评论
0/144