工业用 Raspberry Pi 可以轻松连接摄像头。

当许多人听说要在工业领域引入图像识别设备时,他们可能会想象一台大型机器和一大笔预算。
除了定制程序外,如果硬件是 PL-R4 等工业用 Raspi,还可以利用通用摄像头和各种传感器,以低廉的成本构建系统。
对于小规模应用来说,这似乎也不无道理。

我们测试的产品 PL-R4 ComputeModule4(”RPI CM4″)与业余爱好者使用的 Raspberry Pi 4(”Pi 4″)几乎完全相同。我们可以用常见的 USB 连接网络摄像头和摄像头模块进行测试,官方渠道也有提供。

我们连接了一个摄像头,以查看不同之处,包括工业 Raspi 的独特设置。

可连接的摄像机

可连接的摄像机

与普通 Raspi 一样,工业 Raspi 可以安装各种摄像头,拍摄静态和动态图像。

连接到电路板 CSI 端口的摄像头作为摄像头模块出售。
也可以使用 USB 连接的普通网络摄像头。
我可以根据自己所需的质量从多种产品中进行选择。

  • CSI
  • USB

相机模块可从 Raspberry Pi 基金会正式购买。

其中,HQ 摄像机还可与长焦镜头和广角镜头一起使用,对于可连接到 Raspberry Pi 的摄像机来说,图像质量非常高(1290 万像素)。
(1290 万像素),在工业应用中可能具有特殊价值。

HQ 摄像机
摄像头模块

本研究中测试的摄像头从左到右依次为高质量 HQ 摄像头(官方提供,三脚架需单独购买)、摄像头模块 V3(官方提供,外壳需单独购买)和罗技 C270n 网络摄像头。

この他にも多種多様なカメラが接続できます。(赤外線カメラ、熱感知用途、屋外用途など)
使用環境に適したカメラが選べると思います。

易于插入的网络摄像头


自从 Corona 灾难发生后,许多人都有机会使用连接 USB 的网络摄像头。 就像 Windows 和 Mac 一样,连接 USB 的摄像头无需修改即可在 Raspberry Pi 上使用。这一点与标准 PC 相似。

工业用 Raspi 也是如此。
只需连接 USB,PL-R4 还可以在桌面(图形用户界面)和命令(CUI)环境中操作。

您只需选择软件,就能在 Raspberry Pi 操作系统上使用摄像头。

Guvcview.

推荐使用的图形用户界面环境是 Guvcview。

它分为两个窗口,一个用于控制,一个用于显示。
无论是静态图像还是动态图像,使用该按钮都毫不费力。

Gnvcview.

只需安装 Guvcview 即可识别网络摄像头。
什么都没有设置。

sudo apt install guvcview

与 Pi 4 一样,如果您想使用 USB 连接的摄像头,在 RPI CM4 Raspi 上使用 Guvcview 也很容易。

与 Raspberry Pi 一起使用的 USB 连接网络摄像头更有可能与不太现代化的产品一起使用。
我们测试的 C270n 是 2019 年发布的型号,如果能有一个就更好了。

连接摄像头模块

如果是正式的 Raspberry Pi 摄像头模块,只需插入 CSI 线缆即可识别,就像 USB 连接的网络摄像头一样。
这也适用于 libcamera 命令,无需任何特殊配置。

不过,第三方摄像头模块不会自动识别,因此配置文件需要稍加改写。

除了重写配置文件外,本次试验中使用的 PiLink 公司的 PL-R4 还需要在硬件方面进行配置,才能使用 CSI 端口。

  • 改变硬件开关
  • 编辑 config.txt。
  • 准备启动时加载的 dt-blob.bin 文件。
连接 CSI 电缆

注意连接 CSI 端口的扁平电缆的方向。在照片中,背面是蓝色条带,正面是接线端。

所测试的产品为 USB 型(IP20),其面板上有一条缝隙,可将摄像机电缆拉出。

用于 CSI calbe 的狭缝

小心处理扁平电缆和末端的端子部分,以免断开。

硬件配置更改

工业 Raspi 的功能越多,需要切换的硬件设置就越多。

电路板上有几个开关,需要将这些拨码开关设置为正确的设置。

该区域不同于业余爱好区。
请注意,普通 Pi 4 和 Pi 5 的设置不同。

使用的 PL-R4 中对此有解释。

拨码开关

/boot/config.txt除硬件更改外,还要对 .NET Framework 进行必要的修改。

例如,对于家庭使用的 Pi 4,如果使用官方摄像头模块,只需连接即可识别,无需做任何更改。
config.txtdisplay_auto_detect=1中的启用对官方摄像头模块有效。

第三方相机模块和工业用 Raspis(如本机)需要注释自动识别功能并指定相机类型。

/boot/config.txt示例说明:

# Automatically load overlays for detected DSI displays
#display_auto_detect=1
[all]
dtoverlay=imx708

请注意,要指定的名称取决于摄像机模块。

按图像传感器命名:








| 官方相机模块 | 型号 | 名称 | | :——–: | :-: | :—-: | | | V1 | OV5647 | | V2 | IMX219 | | HQ | IMX477 | | GS | IMX296 | | | V3 | IMX708 | 这次我们使用了官方 V3 和官方 HQ 相机,因此分别指定了 IMX708 和 IMX477。所以分别指定了 IMX708 和 IMX477。

他にもサードパーティー製カメラモジュールもあり、IMX290、IMX327、IMX378、IMX519、OV9281と分けられています。
CSI接続カメラの製品詳細などで、イメージセンサー名として記載されています。指定する名称は説明書や購入先で確認してください。

除此以外,PL-R4 需要修改的不仅仅是型号的名称,最终的修改将涉及以下方面

sudo nano /boot/config.txt
# 自動認識をコメントアウト
# Automatically load overlays for detected cameras
#camera_auto_detect=1

#ディスプレイの自動認識をコメントアウト
# Automatically load overlays for detected DSI displays
#display_auto_detect=1

# ドライバの有効化
# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=2

#WD/CSIに関する記述をコメントアウト
#dtparam=i2c0_baudrate=400000
#dtoverlay=i2c0,pins_0_1
#WD/CSI select
#dtparam=i2c1_baudrate=400000
#dtoverlay=i2c1,pins_44_45

# Camera Module
dtoverlay=imx708

每条说明都是预先存在的。您几乎可以启用/禁用注释。

此外,如果型号设置了看门狗,请注释相关部分。

sudo nano /etc/rc.local
# ウォッチドッグコメントアウト
#WD
#python /home/pi/wdrst.py

config.txt在 Pi 5 处理的 “书虫 “中,”…… “的位置首先是不同的。/boot/firmware/config.txt
/boot/config.txt(bookworm: ) 本文是在 Pi 4 系统的牛眼环境下编写的,地址为 .

修改 dt-blob.bin

对于配有 RPI CM4 和 I/O 板的 PL-R4,需要进一步改装。

dt-blob.bin您需要修改 GPU 使用的 ,尽管您可能对它并不熟悉。

简单解释一下,这是因为连接到 GPIO 的设备需要重新编号,以便将其分配给其他功能。

更多信息,请参阅官方文档。
(正式文件:https://www.raspberrypi.com/documentation/computers/compute-module.html#device-tree)

PL-R4 用户的修改程序。

minimal-cm-dt-blob.dts请参阅前面的官方文件。
这可以通过编辑来定义。

从第 271 行开始编辑:

          pin_define@ID_SDA {
             type = "internal";
             number = <44>;
          };
          pin_define@ID_SCL {
             type = "internal";
             number = <45>;
          };
          pin_define@CAMERA_0_I2C_PORT {
             type = "internal";
             number = <1>;
          }; 

然后进行编译。编译器从一开始就已经安装好了。(我收到了一个警告,但没有问题)。

sudo dtc -I dts -O dtb -o minimal-cm-dt-blob.dtb minimal-cm-dt-blob.dts

dt-blob.bin最后,用文件名将其复制并放入 /boot 目录,就大功告成了。重启后即可生效。

sudo cp minimal-cm-dt-blob.dtb /boot/dt-blob.bin

这方面的工作稍显困难。可以说,角色可以得到更好的改变。

如上所述,主要做了三处修改。

  • 作为硬件的交换
  • 修改 dt-blob.bin
  • 修改 config.txt。

设置完成后,请尝试执行以下命令,以便在重启后进行检查。

按命令使用(连接 CSI 的摄像机模块)。

连接到 CSI 端口的相机模块可以使用 libcamera 命令和由 Python 处理的 Picamera2 模块。*这两个模块已预装在 bullseye 或更高版本中。

我们说的是操作系统版本的靶心;在 Pi 5 bookworm 中是 rpicam 命令。这有点复杂。
在处理早期 Raspi 型号和操作系统上的摄像头模块时要小心。

raspi-config传统摄像机模式可从传统摄像机模式中设置,也禁用

解释起来有点夸张,这是处理 Pi 3 上的 raspistill 命令所需的选项。
可能存在以下关系。

  • Pi3 系列(buster)raspistill 命令
  • Pi4 系列(牛眼)libcamera 命令
  • Pi5 系列(书虫)rpicam 命令。

Raspberry Pi 和摄像头模块的历史有点复杂。

Raspberry Pi OS Bookworm 已将相机捕捉应用程序从 libcamera-* 更名为 rpicam-*。在 Bookworm 之前的 Raspberry Pi OS 版本中将继续使用 libcamera-* 名称。

官方信息也基本上是在 Pi 5 和书虫环境下解释的,稍早的信息在靶心下有效。
互联网上有很多信息,但 2022 年前后的信息会很有用。

检查连接的命令

连接相机模块后,检查相机是否已被识别。

使用 libcamera 命令显示摄像机列表。
config.txt如果此处出现错误,请检查 CSI 连接电缆是否插错,或者您添加的部分是否有误,例如 .

libcamera-hello --list-cameras

如果它被识别,则应显示如下。

Available cameras
-----------------
0 : imx708 [4608x2592] (/base/soc/i2c0mux/i2c@1/imx708@1a)
    Modes: 'SRGGB10_CSI2P' : 1536x864 [120.13 fps - (768, 432)/3072x1728 crop]
                             2304x1296 [56.03 fps - (0, 0)/4608x2592 crop]
                             4608x2592 [14.35 fps - (0, 0)/4608x2592 crop]

imx*您也可以在 ,即摄像机名称处查找错误。imx219例如

dmesg | grep imx*

如果此时仍不工作,请检查插入 CSI 端口的扁平电缆。它可能没有插好。

libcamera 命令

libcamera 命令有许多选项和参数。

如果只想拍摄静态图像,请执行以下操作。

libcamera-jpeg -o test1.jpg -t 2000 --width 640 --height 480

如果要像在实时取景中一样显示,请执行以下操作。

libcamera-hello -t 0

命令分为静态图像和视频。请参见相应选项。

libcamera-jpeg
libcamera-raw
libcamera-still
libcamera-vid 

也可以通过 VNC 查看。

用 Python 处理相机模块

相机模块可以是 Python 中的 Picamera2,如果操作系统是 bullseye 或更高版本,该模块从一开始就已安装。

计划样本:

from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2()
camera_config = picam2.create_preview_configuration()
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL)
picam2.start()
time.sleep(2)
picam2.capture_file("test.jpg")

官方网站: https://www.raspberrypi.com/documentation/computers/camera_software.html#rpicam-apps

根据指令使用(USB 连接的网络摄像头)。

USB 连接的网络摄像头使用一个名为 fswebcam 的应用程序,它允许基于命令的控制。

sudo apt install fswebcam

インストールしてから、ユーザーをvideoグループに加えます。今ログインしているユーザー名に置き換えて読んでください。
これでsudo権限のエラーは出なくなります。

sudo usermod -a -G video ユーザ名

基本格式是这样的

fswebcam test.jpg

默认分辨率为 352×288。

可选择指定分辨率并再次运行。

fswebcam -r 1280x720 test2.jpg

默认情况下,拍摄图像的底部会出现一个条形图,日期和时间会合成在右下角。
如果出现乱码,安装日文字体(noto-fonts)即可解决问题。

sudo apt install fonts-noto-cjk

--no-banner如果想停止图像底部的条状输出,可使用选项使其消失。
fswebcam --help参阅选项。

日期文件名。

fswebcam 不提供日期或顺序编号等文件命名功能。官方版本引入了一个 shell 脚本来代替它。

Shell 脚本非常简单,只需三行代码。
在合适的位置创建一个新的 sh 文件,如下所示,添加三行,并在末尾设置执行权限。

nano webcam.sh

示例脚本的文件名中包含日期,并使用分辨率为 1280×720 的 fswebcam 执行命令。

#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H-%M-%S")
fswebcam -r 1280x720 --no-banner $DATE.jpg

执行权限由 chmod 授予。

chmod +x webcam.sh

如果您已转移到同一目录,可以使用以下 shell 命令拍摄静态图像。

./webcam.sh

运行后阅读终端输出,确认文件名现在是日期和时间。

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '2024-09-23_13-27-18.jpg'.

只要准备好应用程序,只需插入 USB 连接的标准网络摄像头,就能轻松使用。

对 USB 连接的网络摄像头使用 ffmpeg。

下一步是视频。
如前所述,使用 Guvcview 时,只需在图形用户界面屏幕上按一个按钮,但执行命令则需要一个单独的应用程序。

连接 CSI 的摄像头模块也会预装录制视频的命令,但也可以使用 ffmpeg 命令替代连接 USB 的网络摄像头。

执行命令前需要检查一些事项。
该命令需要在选项中指定参数,因此必须了解所使用摄像机的支持范围。

这是为了避免错误的参数,因为不同的相机有不同的性能。

对于我们使用的 C270 摄像机,我们发现帧频 30 仅支持低于 640x 的 YUYV(YUYV 4:2:2)格式。这有点小。

MJPG(Motion-JPEG,压缩)格式也支持 1270x。

v4l2-ctl -d /dev/video0 --list-formats-ext






YUYV”(YUYV 4:2:2) 尺寸:离散 640×360 间隔:离散 0.033 秒(30.000 fps) “MJPG”(Motion-JPEG,压缩) 尺寸:离散 1280×720 间隔:离散 0.033 秒(30.000 fps间隔:离散 0.033 秒(30.000 帧/秒)

可以通过 v4l2-ctl 命令更改该设置,为 c 选项指定一个值即可。-c <ctrl>=<val> 例如

更多信息,请查看可用控件列表。

v4l2-ctl -d /dev/video0 --list-ctrls-menu

使用 ffmpeg 命令录制视频

ffmpegを使うには、様々なオプションを付けて実行することになります。
ffmpegはラズパイだけに限った話ではありません。詳しくは別途、ffmpegを調べてください。

以下命令是 C270 可以记录的选项。

摄像机还配备了麦克风,因此可以与摄像机一起采集音频。录音非常灵敏和干净。
out.mkv输出文件名在选项末尾指定。

ffmpeg -f alsa -i pulse -f v4l2 -input_format mjpeg -video_size 1280x720 -framerate 30 -i /dev/video0 -c:v copy -c:a libopus -b:a 192k "out.mkv"

详细说明从略,但由于这取决于摄像机,请根据视频尺寸和帧频的支持程度调整参数。
根据是否使用麦克风,选项的指定方式也有所不同。

Ctrl + C 停止录制。

在工业用 Raspi 上使用 USB 网络摄像头的方式与业余爱好使用的方式相同。
这很容易做到。

用于工业应用的 CSI 摄像机模块和 USB 连接的摄像机

工业 Raspi 还可以通过 USB 连接摄像头,或使用带有 CSI 端口的摄像头模块。
在使用摄像头和各种传感器的工业场所,对摄像头的需求也在不断增加。

下面的例子是常见的情况。

  • 我想检测和识别人的身份。
  • 我希望它们能检测到热量变化。
  • 我希望能够识别我的作品的形状。
  • 我想读取二维码。
  • 我想获取简单的监控录像。

工业用 Raspi PL-R4 需要切换输入/输出板和更改配置,这与家用 Pi 4 不同。
否则,其使用方法与 Pi 4 相同。

工业用 Raspi 是一种可作为硬件部署的低成本设备。
与家庭使用不同的是,即使配备了坚固的外壳和连接器,低功率依然不变。

该系统可以是多功能的,配有摄像头、传感器和系统链接,因此无论规模大小,引进该系统都有好处。


文章由拉斯必达提供

非工程师也能愉快使用的 Raspberry Pi 信息网站。 raspida.com Raspida 运行着 raspida.com,这是一个非工程师也能愉快使用的 Raspberry Pi 信息网站。为有关工业用 Raspberry Pi 的 PiLink 网站供稿。