前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式Linux系列第13篇:USB摄像头拍照

嵌入式Linux系列第13篇:USB摄像头拍照

作者头像
用户2366192
发布2021-05-31 10:40:24
2.9K0
发布2021-05-31 10:40:24
举报
文章被收录于专栏:TopSemic嵌入式

1.引言

本篇介绍USB摄像头的使用,实现的功能是通过摄像头进行拍照,生成jpg格式图片。

2.环境介绍

2.1.硬件

1) 网上的一个第三方做的NUC972开发板:

有兴趣购买的朋友,可以去他们的淘宝店购买:

https://s.click.taobao.com/X8mza8w

2) USB摄像头

京东购买链接:https://u.jd.com/D18Rf8

2.2.软件

1) Uboot继续使用之前文章用的,无须改动。

2) Kernel在上一篇基础上,要做一定的修改,用来支持USB摄像头识别。

3) Rootfs在上一篇用Buildroot生成的基础上,无须改动。

3.内核配置

Linux 内核中已经包含了USB摄像头的驱动,只要勾选上相关配置即可。

配置完,保存,编译,之后下载到板子里。

插入USB摄像头,打印信息如下:

说明驱动已经OK了。

4.libjpeg库安装

之前buildroot编出来的根文件系统里是有jpeglib库的,版本是libjpeg.so.9.1.0,由于我们应用程序依赖的版本是8.0,所以单独编译了一个。

步骤如下:

1) 解压jpegsrc.v8b.tar.gz

2) 进入到解压后的jpeg-8b目录里,执行

./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr

其中:

–prefix参数是强制设定install之后生成文件的存放目录,这里将其放到了交叉编译工具链文件夹的/usr 目录下,放到这里的原因是因为后面编译应用程序时会在交叉工具链的目录下查找相关的库。

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ ./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr

3)make 编译

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make

4)最后make install

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make install

在/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr/lib下生成相应的库。

注:之前buildroot生成的文件系统里其实已经有了libjpeg,在上面可以看到文件为libjpeg.so.9.1.0,或者我们登陆到板子上

find / -name "libjpeg*" 查找下,在/usr/lib目录下也可以看到

这三者的关系是:

使用ls -al 查看

其中libjpeg.so 和libjpeg.so.9是软连接文件,相当于windows下的快捷方式,如果我们在winscp下查看,可以看到他们的图标上有个箭头

真正使用的库文件是libjpeg.so.9.2.0

5)我们需要将新编译的libjpeg库放到板子上,方法是先把板子上原有的三个文件删掉,然后通过winscp拷贝libjpeg.so.8.0.2到板子的/usr/lib目录下,

最后使用ln -s 源文件 目标文件 命令,新建两个软连接

5.应用程序

应用程序的编译步骤如下:

1) 进入到v4l2_demo目录

2) make编译

3) 生成的可执行文件是bin目录下的mainapp

4) 将其放到板子里,运行结果如下:

# ./mainapp

----------- connected --------------

v4l2_open function open /dev/video0 success!

driver: uvcvideo

card: USB2.0 PC CAMERA

bus_info: usb-nuc970-ehci-2

version: 199276

capabilities: 84000001

Device /dev/video0: supports capture.

Device /dev/video0: supports streaming.

fmt.type: 1

pix.pixelformat: YUYV

pix.width: 640

pix.height: 480

pix.field: 1

Frame buffer 5: address = 0xb6c88000, length = 614400

Frame buffer 5: address = 0xb6bf2000, length = 614400

Frame buffer 5: address = 0xb6b5c000, length = 614400

Frame buffer 5: address = 0xb6ac6000, length = 614400

Frame buffer 5: address = 0xb6a30000, length = 614400

open /dev/video success!

call yuyv_to_rgb function

yuyv_to_rgb function excute OK!

path3=./jpeg1.jpg 1

程序在不断的拍摄并保存图像,图像名称为jpegx.jpeg(x为1,2,3 依次增加)

6.结束语

本期相关的资料在https://github.com/TopSemic/NUC972_Linux 中

本篇为大家介绍了Linux下USB摄像头的简单使用,欢迎大家多交流,可以在网页下方留言讨论,或者发邮件:Topsemic@sina.com ,微信公众号如下,欢迎关注:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TopSemic嵌入式 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档