移动物体监控系统(ALSA、V4L2、Motion、CGI、Web/Boa)--个人笔记

关于项目移动物体监控与报警系统,进行了全程资料整理与流程记录,仅供日后回顾与复习用。


1.声音报警子系统
        1.1 OSS/ALSA声卡驱动内核配置
            a. OSS、ALSA、ALSA-OSS封装架构介绍
            b. 内核配置与运行
                配置、编译、下载、运行,然后在SecureCRT窗口检查开发板上声卡驱动是否完整(ls /dev/dsp、ls /dev/mixer);若无,则将驱动复制到rootfs的lib子目录,通过insmod命令安装(snd-soc-wm8960.ko,snd-soc-mini210-wm8960.ko)
        1.2 Madplay嵌入式播放器移植
            a.分别解压三个lib依赖库文件压缩包
            b.运行脚本配置文件命令,生成Makefile
               ./configure --host=arm-liunx ==prefix=${PWD}/_install
            c.编译、复制.so.a库文件到根文件系统下
                make、make install
            d.解压madplay包,配置、编译,拷贝应用程序到/rootfs/
                make
            e.若madplay缺少其他库,将库拷贝至rootfs下子目录


2.摄像头子系统
        2.1 摄像头驱动内核配置
            a. 硬件选择
                USB摄像头,内置芯片ZC30系列
            b. 内核配置
                选择万能摄像头驱动、ZC30对应的驱动程序
            c. 编译下载
                make uImage ARCH=arm CROSS_COMPILE=arm-linux
            d. 驱动测试
                camera
        2.2 V4L2编程接口学习
            a. 驱动架构
                硬件层:摄像头->
                内核空间:摄像头驱动->V4L2接口规范->
                用户空间:图像采集应用程序
            b. 设计架构图
                取出帧缓冲(出队列)-> 读取帧缓冲中的数据 -> 放回帧缓冲入队列
            c. V4L2编程举例
                1)打开摄像头设备文件 
                fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);//非阻塞方式
                2)获取驱动信息
                ioctl(fd,VIDIOC_QUERYCAP,&cap); 
                3)设置图像格式 
                ioctl (fd, VIDIOC_S_FMT, &fmt);
                4)申请帧缓冲 
                ioctl (fd, VIDIOC_REQBUFS, &req);
                5)获取帧缓冲地址、长度信息 
                ioctl (fd, VIDIOC_QUERYBUF, &buf); 
                6)使用mmap把内核空间的帧缓冲映射到用户空间
                mmap (NULL , buf.length, PROT_READ | PROT_WRITE , MAP_SHARED , fd, buf.m.offset);
                7)将申请的帧缓冲入队列 
                ioctl (fd, VIDIOC_QBUF, &buf);
                8)开始采集图像
                ioctl (fd, VIDIOC_STREAMON, &type);
                9)取出帧缓冲(出队)
                ioctl (fd, VIDIOC_DQBUF, &buf);
                10)访问帧缓冲数据 
                 write(file_fd,buffers[buf.index].start,buffers[buf.index].length);
                11)帧缓冲重新入队 
                ioctl(fd, VIDIOC_QBUF, &buf);


3.移动图像监控主系统
        3.1原理
            通过获取的摄像头图像,比较前后每一帧图像数据,从而实现移动物体监控
        3.2实现
            a. 移植移动监控软件motion
                1)下载开源包并解压,编译,拷贝可执行文件到根文件系统
                ./configure
                make
                make install
                2)修改配置文件motion_dist_conf
                更改驱动设备文件、图像存储个数、图像大小、像素变化门限值、框出移动物体、图像存储目录
                3)运行 motion -c /motion-dist.conf即可捕获到移动物体
            b. 关联报警功能
                在motion_dist_conf配置文件中,配置项on_motion_detected后面加上"madplay alarm.mp3"
            c. ffmpeg抓取视频
                解压、编译、安装、拷贝库文件
                修改配置文件motion_dist_conf,添加--ffmpeg配置选项
                重新编译,运行motion -c /motion-dist.conf


4.嵌入式web服务器移植
        4.1BOA嵌入式服务器的移植
            a.下载boa服务器,解压,进入src目录
            b.执行./configure生成Makefile,修改Makefile(arm-linux-gcc),并修改源代码
            c.编译,拷贝可执行文件boa到根文件系统
            d.配置boa
                修改boa.conf,指明开发板网页路径等
        4.2CGI网页控制
            a. 控制流程
                1)用户浏览器-->(请求连接)-->web服务器
                    web服务器包括:
                        a.供浏览器登录的网页界面程序(HTML);
                        b.供服务器调用的CGI程序(扩展服务器功能)
                2)浏览器登录web服务器指定的网页界面,给予指令-->调用.cgi程序进行控制
                3)获取的返回结果->web服务器发送到网络中,用户即可通过浏览器远程获取数据信息。
            b. CGIC库移植
                1)解压CGIC库
                2)修改Makefile(不需配置)
                3)编译,拷贝库文件至根文件系统
                4)boa配置文件修改boa.conf (指明CGI程序路径)
            c. CGIC程序设计
                1)网页文件.html文件修改,跳转cgi程序
                    <a class="menu" href="/cam/image.cgi">   //获取图片的程序,跳转运行/CGI程序
                2)cgi主程序
                    (1)print_file(cgiOut,"../top.html");  //加头,将top.html内容打印到cgiOut
                    (2)total = list_pic("/mnt/sd","jpg");  //将.jpg图片文件加入显示列表
                    (3)if (cgiFormSubmitClicked("gopage") == cgiFormSuccess)    //处理用户的选择请求
                    (4)show_pic(start,end,total);  //显示图片
                    (5)show_select_form(total); //实现下拉框
                    (6)print_file(cgiOut,"../bottom.html");  //加尾,将bottom.html内容打印到cgiOut
                3)编译生成.cgi文件
                    arm-linux-gcc -L CGIC绝对路径 -lcgic -l CGIC 绝对路径 C语言源文件 -o cgi后缀目标文件
                4)获取视频的程序开发
                    (1)<a class="menu" href="/cam/movie.cgi">   //获取视频的程序,跳转运行.cgi程序
                    (2)fprintf(cgiOut, "<embed src = \" / sd / % s\" autostart = true loop = true width = \"640\" height =\"480\">< / embed>","01-19700101000405.avi");

【注:以上内容,仅供本人日后复习与回顾用】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值