使用 BVS CA 工业相机进行嵌入式实时流监控
1. 导言
现在,嵌入式设备拥有强大的计算能力和各种接口,使其在工业图像处理中的应用变得极为有趣。嵌入式设备可以掌握人工智能(AI)领域的应用,如机器学习(ML)或其子方面深度学习(DL)。近十年来,巴鲁夫一直为基于 ARM 的设备提供支持,并为BVS CA-IGC (USB2.0)、BVS CA-SF ( USB 3. 0) 和BVS CA-GX0 (千兆以太网) 产品系列提供合适的驱动程序。下表概述了我们使用摄像机测试过的平台:
系统 |
ARM 架构 |
技术测试结果 |
性能 |
适用于 |
更多信息 |
||||
USB2.0 |
USB3.0 |
千兆以太网 |
万兆以太网 |
PCIe |
|||||
Arm Cortex-A78AE v8.2 |
! |
X |
X |
X |
X |
+++++ |
高要求应用 |
nvidia.com |
|
英伟达™ Carmel ARMv8.2 |
X |
X |
X |
- |
X |
++++ |
高要求应用 |
nvidia.com |
|
英伟达™ Carmel ARMv8.2 |
X |
X |
X |
- |
X |
+++ |
高要求应用 |
nvidia.com |
|
ARM Cortex-A57 |
X |
X |
X |
- |
* |
+ |
中端应用 |
nvidia.com |
|
英伟达™(NVIDIA®)Denver 2 和 ARM Cortex-A57 |
X |
X |
X |
- |
? |
++ |
高要求应用 |
nvidia.com |
|
ARM Cortex-A72 |
X |
X |
! |
- |
- |
+ |
价格敏感项目 |
raspberrypi.org |
|
ARM Cortex-A72 |
X |
X |
! |
- |
! |
+ |
价格敏感项目 |
raspberrypi.org |
|
ARM 皮质 A53 |
X |
! |
! |
- |
! |
+ |
中端应用 |
nxp.com |
X = 系统在使用此设备时性能良好。
- = 系统无法与此设备配合使用。
* = 由于开发套件不提供 PCI Express 接口,因此无法与此设备配合使用。
!= 系统与此设备的性能有限。
= 系统尚未与此设备一起测试。
Raspberry Pi 在价格敏感型应用中非常受欢迎,互联网上提供了许多与 Raspberry Pi 结合使用的生活小窍门和智能应用。
例如,本文档展示了如何使用BVS CA-SF工业相机和 Raspberry Pi 实现实时流监控。Raspberry Pi 从摄像头接收图像,并将其嵌入可在本地网络上访问的网站。有了适当的硬件,还可以使用 USB 2.0 摄像机BVS CA-IGC或千兆以太网摄像机BVS CA-GX0 实现实时流演示。
本文档涵盖以下要点:
-
需要哪些硬件?
-
Raspberry Pi 上需要哪些软件组件?
-
应用程序实际是如何实现的?
-
如何设置自动启动?
2. 结构
硬件 |
订购代码 |
数量 |
说明 |
BVS CA-SF2-0016ZG-111120-001 |
BVS00JL |
1 |
160 万像素 USB3 工业相机 |
B10M5425C |
B10M5425C |
1 |
5.4 毫米 S 卡口镜头 |
S-C 适配器 AD01S |
1 |
C 卡口至 S 卡口适配器 |
|
MV 锁环 |
1 |
S 型安装锁定环 |
|
树莓派 4 |
1 |
作为主机的 ARM 设备 |
|
USB3 电缆 |
A74-9968-2-001 |
1 |
USB3 电缆 |
以太网电缆 |
A72-8075-5 |
1 |
以太网电缆 |
电源 Raspberry Pi |
1 |
用于 Raspberry Pi 的电源 |
设置非常简单:
3. 安装组件
应用程序必须在 Raspberry Pi 上构建或安装以下软件包(链接指向相应的安装和设置说明):
-
mvIMPACT Acquire Python API(用于图像采集的相机驱动程序和 API)
-
OpenCV(图像操作和处理)
-
numpy(图像处理)
-
Flask(网络界面框架)
4. 实施情况
程序结构如下
| -camera.py
| -main.py
| -模板
| -index.html
camera.py是指定cam 类的辅助文件。它用于管理图像采集,其中包括初始化摄像机(SoftwareTrigger、BGR8 像素格式等)和定义singleFrame函数。singleFrame 函数开始采集图像,并为图像提供时间戳:
- camera.py(请将附录重命名为 *.py)
实际的 Python 主程序名为 main.py。在此导入cam类。在主函数中,创建帧(genFrame)的过程是在一个线程中使用单张图像记录开始的,并通过numpy 复制到 outputFrame 中。
然后,displayFrame函数会将 outputFrame 数据转换为 JPG 格式,然后使用video_feed函数将其显示为 HTML 格式:
- main.py(请将附录重命名为 *.py)
相应的 index.html 调用视频源:
- index.html(请将附件重命名为 *.html)
5. 自动启动
为了将系统用作即插即用设备,必须在启动过程结束时自动启动 Python 程序main.py。这需要在/etc/systemd/system 下运行三个文件:
-
mvIA_env.conf
-
run-script-with-delay.service
-
run-script-with-delay.timer"(名称与 .service相同,只是将 .timer 作为延迟的扩展名)
mvIA_env.conf:为 mvIMPACT Acquire 创建所需的环境变量。这是必要的,因为systemd会忽略/etc/profile.d 下的环境变量,这意味着无法使用 systemd 服务中的 Impact Acquire 软件包。
- mvIA_env.conf(请将附录重命名为 *.conf)
run-script-with-delay.service: 定义启动时启动的服务。此处指定 Python 程序的路径:'ExecStart='.
- run-script-with-delay.service(请将附录重命名为 *.service)
run-script-with-delay.timer: 指定启动后服务启动的延迟时间。可在此处指定延迟时间:'OnBootSec='.
- run-script-with-delay.timer(请将附录重命名为 *.timer)
一切就绪后,就可以按如下方法重新加载systemd:
$sudo systemctl daemon-reload
可以使用以下命令检查状态
$sudo systemctl status run-script-with-delay.service
如果启动成功,则可以启动服务,检查 Python 程序是否也已启动并顺利运行。
$sudo systemctl start run-script-with-delay.service
为此,必须激活延迟配置:
$sudo systemctl enable run-script-with-delay.timer
最后,必须重启系统。重启后,Python 程序会自动启动。
重新启动