给大家推荐一个非常适合学习的嵌入式开源项目:mjpg-streamer。
如果你有C语言、Linux基础,那研究这个项目将会对你的技术有很大的提升。
mjpg-streamer是谷歌开源的视频采集服务器,可以配合浏览器实现局域网下的视频传输,而且支持市面上大部分的摄像头。
如果你想在开发板上做视频或者图像处理,那使用mjpg-streamer采集数据非常合适。
使用方法非常简单,GitHub下载源码,交叉编译后移植到开发板上就行。
git clone https://github.com/jacksonliam/mjpg-streamer.git
当然我这里偷懒了一下,直接在开发板上编译。
root@NanoPi-Duo2:~# cd C/mjpg-streamer/
root@NanoPi-Duo2:mjpg-streamer# make
gcc -O2 -DLINUX -D_GNU_SOURCE -Wall -c -o mjpg_streamer.o mjpg_strea
mer.cgcc -O2 -DLINUX -D_GNU_SOURCE -Wall -c -o utils.o utils.c
gcc -O2 -DLINUX -D_GNU_SOURCE -Wall mjpg_streamer.o utils.o -lpthread
-ldl -o mjpg_streamerchmod 755 mjpg_streamer
启动脚本的参数可以自行调整,比如摄像头格式、视频分辨率、每秒传输的帧数、视频质量等等。
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y 1 -r 640x480 -f 30 -q 90 -n -fb 0" -o "./output_http.so -w ./www"
运行启动脚本,然后打开浏览器,输入ip地址加上默认的8080端口,就能看到静态的图像或者视频流。前提一定是电脑和开发板在同一个局域网内。
这个项目贯穿了整个嵌入式开发流程,从上层应用到底层驱动,比如socket(tcp udp)多线程 文件 图像处理等等,如果有精力,大家可以去读一读它的源码,看看别人是怎么写代码的。
在mjpg-streamer的基础上,还可以进行二次开发。增加一个舵机、一台公网服务器、再开发一个APP,于是就成了现在家里用的智能摄像头。
也可以配合opencv,实现一些简单的图像处理,比如车道检测、行人检测、人脸识别等等。
最后,我也整理了一份mjpg-streamer源码,如果有需要,v信关注:学益得智能硬件,后台回复「mjpg」,有下载链接。