ArmSoM-W3开发板 (RK3588) 之 USB摄像头图像预览

2023-10-09 17:20

本文主要是介绍ArmSoM-W3开发板 (RK3588) 之 USB摄像头图像预览,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

硬件准备

RK3588开发板(armsom-w3)、USB摄像头(罗技高清网络摄像机 C93)、1000M光纤 、 串口调试工具

在这里插入图片描述

v4l2采集画面

v4l2-ctl是一个用于Linux系统的命令行实用程序,用于控制视频4 Linux 2(V4L2)设备。V4L2是Linux内核中的视频设备驱动框架,用于支持各种摄像头、摄像头和视频采集设备。

将USB摄像头插入开发板后,会有如下打印:

[14720.842825] usb 7-1: new low-speed USB device number 2 using xhci-hcd
[14720.986597] usb 7-1: New USB device found, idVendor=413c, idProduct=301a, bcdDevice= 1.00
[14720.986638] usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[14720.986653] usb 7-1: Product: Dell MS116 USB Optical Mouse
[14720.986667] usb 7-1: Manufacturer: PixArt
[14721.008123] input: PixArt Dell MS116 USB Optical Mouse as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.5.auto/usb7/7-1/7-1:1.0/0003:413C:301A.0001/input/input5

使用v4l2-ctl --list-devices来获取usb摄像头的节点:

root@linaro-alip:~# v4l2-ctl --list-devices
rk_hdmirx (fdee0000.hdmirx-controller):/dev/video20rkisp-statistics (platform: rkisp):/dev/video18/dev/video19rkcif-mipi-lvds2 (platform:rkcif):/dev/media0rkisp_mainpath (platform:rkisp0-vir0):/dev/video11/dev/video12/dev/video13/dev/video14/dev/video15/dev/video16/dev/video17/dev/media1罗技高清网络摄像机 C93 (usb-fc880000.usb-1):/dev/video21/dev/video22/dev/media2

运行 v4l2-ctl -d /dev/video21 --list-formats-ext 命令可以查看你的摄像头支持的格式:

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNLjyCGx-1690975182908)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230802164835405.png)]

从这个命令可以看到这款摄像头支持两种格式“YUYV” “MJPG”.

摄像头YUYV格式画面采集

介绍一些常用的v4l2-ctl命令选项和功能

v4l2-ctl -d /dev/video21 -D // 确认video节点v4l2-ctl -d /dev/video21 --get-fmt-video // 确认分辨率和图像格式v4l2-ctl -d /dev/video21 --get-dv-timings //获取当前timingsv4l2-ctl -d /dev/video21 --query-dv-timings // 实时查询timings

查看当前参数:使用v4l2-ctl -d /dev/video21 -l命令,将显示当前连接到/dev/video21设备的所有控制参数和其当前值。

设置视频格式和帧率:通过指定视频格式和帧率来配置摄像头,例如:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=YUYV
v4l2-ctl -d /dev/video0 --set-parm=30

这里使用如下命令采集一帧画面报错到/data/01.yuv

v4l2-ctl --verbose -d /dev/video21 --set-fmt-video=width=640,height=480,pixelformat=YUYV --stream-mmap=4 --stream-skip=3 --stream-count=5 --stream-to=/data/01.yuv --stream-poll

将文件通过使用adb上传到PC端使用7YUV工具查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4KF0v9W-1690975182909)(C:\Users\Administrator\AppData\Local\Temp\Image.png)]

摄像头MJPG格式画面采集

mjpg-streamer 是 github上一个开源的 uvc 视频应用,它可以获取摄像头的视频流,然后通过局域网传输,可以直接在armsom-w3开发板上编译这个代码并运行:

git clone https://github.com/andyshrk/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental/
apt install cmake libjpeg62-turbo-dev build-essential
make

在编译过程中,遇到两个报错问题,防止后续遇上再找资料,这里也附上:

Scanning dependencies of target input_opencv
make[3]: 离开目录“/root/mjpg-streamer/mjpg-streamer-experimental/_build”
make[3]: 进入目录“/root/mjpg-streamer/mjpg-streamer-experimental/_build”
[ 34%] Building CXX object plugins/input_opencv/CMakeFiles/input_opencv.dir/input_opencv.cpp.o
/root/mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp:86:5: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
86 | " Help for input plugin…: “INPUT_PLUGIN_NAME”\n"
| ^
/root/mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp: In function ‘void* worker_thread(void*)’:
/root/mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp:408:34: error: ‘CV_IMWRITE_JPEG_QUALITY’ was not declared in this scope; did you mean ‘IN_CMD_JPEG_QUALITY’?
408 | compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
| ^~~~~~~~~~~~~~~~~~~~~~~
| IN_CMD_JPEG_QUALITY
make[3]: *** [plugins/input_opencv/CMakeFiles/input_opencv.dir/build.make:82:plugins/input_opencv/CMakeFiles/input_opencv.dir/input_opencv.cpp.o] 错误 1
make[3]: 离开目录“/root/mjpg-streamer/mjpg-streamer-experimental/_build”
make[2]: *** [CMakeFiles/Makefile2:468:plugins/input_opencv/CMakeFiles/input_opencv.dir/all] 错误 2
make[2]: 离开目录“/root/mjpg-streamer/mjpg-streamer-experimental/_build”
make[1]: *** [Makefile:149:all] 错误 2
make[1]: 离开目录“/root/mjpg-streamer/mjpg-streamer-experimental/_build”
make: *** [Makefile:19:all] 错误 2
root@linaro-alip:~/mjpg-streamer/mjpg-streamer-experimental#

  • 1.关于无效后缀的警告: 找到 “/root/mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp” 文件的第86行,并确保在" Help for input plugin..: "INPUT_PLUGIN_NAME"\n"中的字符串宏INPUT_PLUGIN_NAME之前有一个空格。

  • 2.关于 ‘CV_IMWRITE_JPEG_QUALITY’ 未声明的错误: 找到 “/root/mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp” 文件的第408行,并将 ‘CV_IMWRITE_JPEG_QUALITY’ 替换为 ‘IN_CMD_JPEG_QUALITY’。

编译成功之后执行如下命令验证

./mjpg_streamer -i "./input_uvc.so -n -f 30 -r 640x480 -d /dev/video21" -o "./output_http.so -w ./www" &

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4mkYuwI-1690975182909)(C:\Users\Administrator\AppData\Local\Temp\Image.png)]
查看开发板的ip地址
在这里插入图片描述

在局域网内,任何电脑的网页端打开如下网址:http://192.168.100.103:8080/?action=stream 你就能实时看到摄像头采集到的视频流。

RK3588开发板 (armsom-w3) 之 USB摄像头

ArmSoM 产品介绍: http://wiki.armsom.org/index.php/ArmSoM-w3

ArmSoM 技术论坛: http://forum.armsom.org/

这篇关于ArmSoM-W3开发板 (RK3588) 之 USB摄像头图像预览的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174369

相关文章

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB