Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >荔枝派Zero(全志V3S)驱动开发之USB摄像头

荔枝派Zero(全志V3S)驱动开发之USB摄像头

作者头像
Gnep@97
发布于 2023-08-10 03:06:09
发布于 2023-08-10 03:06:09
72200
代码可运行
举报
运行总次数:0
代码可运行

前言

上一篇博客实现了在ubuntu打开usb摄像头,也确认了 usb 摄像头支持 UVC,这节我们将 usb 驱动移植到荔枝派开发板上,并实现拍照的功能以及做 mjpeg-streamer 视频流服务器测试。

一、内核配置 UVC

1、进入 linux 源码目录,执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make menuconfig

2、Device Drivers -> USB support 按照下图进行配置

输出识别的每个usb设备的基本信息,比如idVendor、idProduct、制造商、产品、和序列号等

3、Device Drivers -> Multimedia support,按照下图进行配置

4、Device Drivers --> Multimedia support --> Media USB Adapters

二、编译内核并烧录到 SD 卡

1、编译内核

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make -j16
make  -j16 modules #编译模块
make -j16 modules_install INSTALL_MOD_PATH=out #安装模块
make dtbs #编译设备树

2、烧录到 SD 卡

把 zImage, sun8i-v3s-licheepi-zero-dock.dtb 拷贝到 sd 卡的 kernel 分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find ./ -name zImage
cp ./arch/arm/boot/zImage /media/Gnep/KERNEL/
find ./ -name  sun8i-v3s-licheepi-zero-dock.dtb
cp ./arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb /media/Gnep/KERNEL/

三、上电测试

1、插上 usb 摄像头,查看打印信息

2、lsusb 可以看到摄像头 PID:VID,在 dev 下可见 video0 设备

3、fswebcam 抓取摄像头图片,抓取一帧图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fswebcam -d /dev/video0 --no-banner -r 320x240 capture0.jpg
fswebcam -d /dev/video0 --no-banner -r 320x240 capture1.jpg

4、我手头没有 LCD 屏幕,先把 SD 拔下来在 ubuntu 上看一下图片效果

一张拍的是门,一张是电脑显示器,效果还不错。

四、mjpeg-streamer 视频流服务器测试

1、jpeg 库的移植

这里可以参考我前面的博客 荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示jpg图片,只看第一步即可,这里面有讲述到具体的步骤,就不再重复描述了。

在指定的目录下会生成包括 bin、include、lib、share,标红的这两个文件夹是 mjpg_streamer 需要的。

2、移植 mjpeg-streamer

①、前置软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update
sudo apt-get install g++ libjpeg8-dev imagemagick libv4l-dev cmake git

②、下载 mjpg-streamer 源码

<1>、点击此处:MJPG-streamer

<2>、点击 Code,如下图所示:

<3>、进去后,点右上的 “Download Snapshot” 下载最新版的 mjpg-streamer-code-182,因为旧版编译时会出现缺少一个头文件的错误

目录 mjpg-streamer-code-182 里内容如下:

doc/ 、mjpg-streamer/、udp_client/、mjpeg-client/、mjpg-streamer-experimental/、uvc-streamer/

  • mjpg-streamer:目录下提供了的执行程序和各个输入输出设备组件,支持输入有 control、file、gspcav(早期摄像头)、testpicture、uvc(现在主流摄像头),正式发布的版本。我们采用这个版本。
  • mjpg-streamer-experimental:目录下提供实验性版本的组件,支持输入有 control、file、http、ptp2、testpicture、uvc(现在主流摄像头)。对 yuv 的摄像头兼容性不行。若要兼容 yuv 摄像头,需要需改较多的地方。
  • uvc-streamer:目录下提供了 uvc-streamer 的可执行目录。
  • udp_client:udp 输出的客户端。
  • mjpeg-client:分别有 linux 和 windows 的客户端。

③、修改 mjpg-streamer 源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd mjpg-streamer-code-r182/mjpg-streamer
vim ./plugins/input_uvc/Makefile
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 14#CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
 15 CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/Gnep/licheepi_zero/tools/include
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 34#$(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
 35     $(CC) $(CFLAGS) -L /home/Gnep/licheepi_zero/tools/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)

④、编译 mjpg-streamer 源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make CC=arm-linux-gnueabihf-gcc

编译生成 *.so 文件和可执行文件 mjpg_streamer

3、搬移文件到 nfs 目录

将前面编译生成文件,还有 start.sh 、/www/ 搬移到 nfs 根目录中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo mount -t nfs 192.168.25.25:/nfsroot /mnt -o nolock # 挂载 nfs
sudo mkdir /mnt/mjpg-streamer
sudo cp -rf *.so /mnt/mjpg-streamer/
sudo cp -rf mjpg_streamer /mnt/mjpg-streamer/
sudo cp -rf start.sh www/ /mnt/mjpg-streamer/
sudo mkdir /mnt/mjpg-streamer/lib
sudo cp -rf ../../tools/lib/* /mnt/mjpg-streamer/lib/

挂载 nfs 效果:

把前面编译生成文件,还有 start.sh ./www/ 搬移到 nfs 根目录中

此时 nfs 中 mjpg-streamer 目录下存在这些文件:

4、开发板测试

①、挂载 nfs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mount -t nfs 192.168.25.25:/nfsroot /mnt -o nolock

②、把 nfs 目录下的 mjpg-streamer/ 拷贝到当前目录(/root 目录下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp -rf /mnt/mjpg-streamer/ ./
ls

③、设置环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/mjpg-streamer/lib

④、开启 web 服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 320x240 -f 30 -yuv" -o "out
put_http.so -w /root/mjpg-streamer/www"

注: -i 输入协议选择,这里是 uvc 摄像头 -o 输出选择,这里是输出为 http 协议 -f 帧率的设置,这里是1秒30帧 -d 输入设备的选择,这里是摄像头0 -w 这里是 web -y 表示输入格式为 YUV,如果不加 -y 表示 mjpg 输入 -r 表示图片尺寸640x480 input_uvc.so:UVC输入组件 output_http.so:网页输出组件

⑤、浏览器地址栏输入 单板ip:端口号 可以看到摄像头捕捉的图片

192.168.25.20:8080

上面的页面是刷新一次网页才会更新一次,我们可以在网页地址栏输入http://192.168.25.20:8080/?action=stream 这样就可以实时更新显示视频了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
    上面的包源已经发生变化 可前往https://fivecc.coding.net/public/mjpg-streamer/mjpg-streamer/git 查看,
Fivecc
2022/11/21
3K0
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
荔枝派Zero(全志V3S)驱动开发之串口
修改设备树打开 uart1 和 uart2,在 buildroot 移植 minicom 用来测试 uart1 和 uart2。
Gnep@97
2023/08/10
5970
荔枝派Zero(全志V3S)驱动开发之串口
树莓派/PC实现实时摄像头数据共享—最优方法(搭建网络摄像头)
方法一:Python+OpenCv实现树莓派数据采集,树莓派搭建服务器,PC机作为客户端实现数据传输,结果发现传输画质太差。
不脱发的程序猿
2021/01/20
7.3K2
利用全志H616 MangoPi MQ Quad部署一个网络摄像头
考虑到芒果派MangoPi MQ Quad开发板SoC较强的处理能力,直接在板子上编译安装mjpg-streamer。
阿志小管家
2024/02/02
1840
利用全志H616 MangoPi MQ Quad部署一个网络摄像头
荔枝派Zero(全志V3S)编译Kernel
上文我们讲述了uboot编译及配置,本文讲述了如何编译kernel,对编译过程中遇到的问题进行解决
Gnep@97
2023/08/10
5870
荔枝派Zero(全志V3S)编译Kernel
「玩转树莓派」搭建智能家居远程监控系统
前几天,在食堂吃饭,本来每天中午的新闻三十分换成了视频监控。我们已经习惯了,前十分钟看着领导都很忙,中间十分钟中国人民都很幸福,后十分钟别的国家都生活在水深火热里,顺便跟同事谈谈国家大事。突然主角换成了我们自己,便毫无抬头的欲望。
小柒2012
2019/12/09
3.3K0
「玩转树莓派」搭建智能家居远程监控系统
Mjpg-Streamer+Node.js实现在树莓派上的监控与拍照
最近在做一个机器人项目,需要将试试捕获安装于机器人身上的视频图像,并能够对机器人进行无线运动控制。作为前端工程师的我,很自然的想到了使用Node作为服务器和机器人的控制中心,通过前端页面实现对机器人控制和视频图像的捕捉。
vincentKo
2022/09/19
2.2K0
Mjpg-Streamer+Node.js实现在树莓派上的监控与拍照
荔枝派Zero(全志V3S)烧录Uboot、Kernel及rootfs到SD卡并运行在板子上
2、这里选择 /dev/sdb,这个是我们的 SD 卡,/dev/sda是我们的系统磁盘,千万不要选错,否则接下里的格式化会把系统磁盘格式化
Gnep@97
2023/08/10
1K0
荔枝派Zero(全志V3S)烧录Uboot、Kernel及rootfs到SD卡并运行在板子上
ubuntu打开usb摄像头
1、保持在 ubuntu 界面,插上 usb 摄像头,将 usb 摄像头连接到虚拟机上。
Gnep@97
2023/08/10
1.9K0
ubuntu打开usb摄像头
手把手教你视频监控之 MJPG-Streamer 方案
https://www.100ask.net/detail/p_5f0fc9e9e4b0ee0b8872c2c3/6
Jasonangel
2021/07/07
2.6K0
Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示
本文介绍了如何使用Jetson TX1开发板通过V4L2和OpenCV3.1实现USB摄像头图像的采集和实时显示。首先介绍了V4L2的基础知识和摄像头驱动配置,然后介绍了OpenCV的图像解码和显示功能。最后,通过具体的示例代码展示了如何编译和运行程序,并总结了程序的结果。
Jack_Cui
2018/01/08
4.7K0
Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示
荔枝派Zero(全志V3S) tftp下载 kernel 和 nfs 挂载文件系统
传输文件每次都插拔 SD 卡太麻烦了,还是使用网线传输文件比较快,借此机会讲述一下 通过 tftp下载 kernel 和 nfs 挂载文件系统
Gnep@97
2023/08/10
8591
荔枝派Zero(全志V3S) tftp下载 kernel 和 nfs 挂载文件系统
树莓派控制摄像头_树莓派连接摄像头
树莓派外接摄像头,最常用的有两种:CSI摄像头、USB摄像头。当然网络摄像头也是可以的。
全栈程序员站长
2022/11/07
3K0
树莓派控制摄像头_树莓派连接摄像头
荔枝派Zero(全志V3S)运行Qt5程序
2、Target packages -> Graphic libraries and applications (graphic/text) -> Qt5 ,勾选上 gui module 和 widgets module
Gnep@97
2023/08/10
4690
荔枝派Zero(全志V3S)运行Qt5程序
Linux下采集摄像头的图像再保存为JPG图片存放到本地(YUYV转JPG)
操作系统:ubuntu18.04 X64位 和 嵌入式Linux操作(ARM)
DS小龙哥
2022/01/12
4.6K0
Linux下采集摄像头的图像再保存为JPG图片存放到本地(YUYV转JPG)
荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示jpg图片
由于从上篇博文 “荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示bmp图片” 中只实现了显示 bmp 图片,实际上我们很常用到的图片多数是 jpg 格式图片,因此我们需要折腾一下,实现 jpg 文件的显示。
Gnep@97
2023/08/10
4700
荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示jpg图片
荔枝派Zero(全志V3S)编译Uboot及配置
本文讲述了如何编译uboot并进行配置,对编译过程中遇到的问题进行解决,此外还对uboot的结构进行了简介
Gnep@97
2023/08/10
7800
荔枝派Zero(全志V3S)编译Uboot及配置
全志D1-H开发板USB摄像头拍照Demo
D1-H哪吒开发板上有一个USB Host接口(即电脑上那种插鼠标键盘的USB口),同时D1-H Tina Linux支持UVC(USB Video Class,USB视频类),这样D1-H就具备了开发和使用USB摄像头的软硬件条件。
阿志小管家
2024/03/05
3110
全志D1-H开发板USB摄像头拍照Demo
树莓派3B+ python 实时监控(USB摄像头)并显示
  执行后会 延时10帧 拍摄 (给个准备时间)产生 一张 名称为  test 的图片
Fivecc
2022/11/21
1.2K0
树莓派3B+ python 实时监控(USB摄像头)并显示
荔枝派Zero(全志V3S)基于QT实现在LCD显示图片
有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作为入参传入进去,从而对其进行显示,在之前的文章中已实现了在板子上运行 QT5 程序,此需求要自己写个 QT 程序,且需要对 buildroot 进行裁剪支持一些常用的图片格式即可。
Gnep@97
2023/08/10
6180
荔枝派Zero(全志V3S)基于QT实现在LCD显示图片
推荐阅读
相关推荐
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验