mini2440基于motion的移动图像监控系统和基于SDL的远程监控

2024-05-09 21:32

本文主要是介绍mini2440基于motion的移动图像监控系统和基于SDL的远程监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这段时间在考虑做基于mini2440移动图像监控系统设计和远程监控设计;这个项目刚开始被我分割成几部分:

1.实现采集开发板上摄像头数据在开发板的LCD显示

2.实现网络远程监控把开发板上摄像头数据发送到PC并在PC机上显示

3.实现网络远程监控及移动图像监控

虽说方向有了,刚开始是跟着国嵌高级项目走,不过摄像头被指定为网眼2000、上位机和资料介绍不多,让我开始卡住了;所以只能在网上找其他资料进行实现,由于刚开始什么都不懂,都不知道从何下手就实现了第一步;几天都一直卡死没啥进展;昨天网上突然发现了问题所在,有点进展了,因此开始我这次项目的记录及总结;

1.实现采集开发板上摄像头数据在开发板的LCD显示

内核编译什么的就没得说了,至少得编译一个LCD能正常正作、支持V4L2和摄像头万能驱动的内核,配置资料网上大把,开发板上搭建好linux环境;市面上的摄像头输出格式有MPEG和YUV两种,好的摄像头能同时支持MPEG和YUV,中芯微ZC301摄像头只支持MPEG;虽说两种格式的摄像头都有,这里我是使用YUV格式的摄像头;需注意的是摄像头采集到的数据时yuv422数据而mini2440LCD显示格式为RGB16,数据转化流程为yuv422>>RGB24>>RGB16;

V4L2程序架构程序我是参考了“草根老师博客(程姚根)”的程序,程序里边注释不多,看的同时也得在网上查阅有关资料才能弄明白;

V4L2编程参考程序: http://blog.chinaunix.net/uid-26833883-id-3249346.html

本人修改后的程序:http://download.csdn.net/detail/u010245383/8105397

错误分析:开发板连接摄像头时出现,可能USB时钟频率原因

修正参考:http://cgsz1992.blog.163.com/blog/static/1797050602012421048701/



第一步就到此实现了,接下来卡壳了;很多东西不知道该怎么做,而网上资料最多的是“ 基于v4l2 ffmpeg x264的视频远程监控”,这种方案是用的V4L2的视频驱动,然后配合ffmpeg、x264的软件编编码成H.264,再头通过网络传输到PC机上显示;自己在编译ffmpeg-1.0.tar.bz2时就出现找不到X264.H的问题,而卡死在这;最后参考了网友mashang123456789  :http://blog.csdn.net/mashang123456789/article/details/8673426  成功编译了ffmpeg;第二步目前到此,不知道怎么把数据编码成H264;


motion的移植和使用

由于第二部卡死的缘故,使得我想先直接在开发板上实现移动图像监控,知道有motion这个东西,开始寻找这个算法,由于能力有限最终不知道怎么使用并移植这个算法(本人那时候不知道motion怎么使用的,使用在开发板还是PC机),通过了解和摸索,才知道motion是一个软件,它可以直接打开摄像头,获取摄像头数据并分析处理,数据有变化时可以相应的把数据保存为jpg格式的照片并输出到指定目录,这时候直接才恍然大悟;

motion的移植和使用时参考网友mashang12345678实现的

网址:http://blog.csdn.net/kangear/article/details/8763790

期间也出现了些问题:在运行motion时出现  motion-/bin/sh: ./motion : Input/output error  在移植ffmpeg时也是如此;网上找资料,折腾了很久也没能解决,偶然一次发现了问题所在,自己编译一个小程序,执行后也是出现Input/output error这种错误,最后才发现是少加了-static,很明显就是动态链接库的原因,以前实验的程序基本都是采用静态链接的方式所以没发觉;建立动态链接库直接从交叉编译器的库文件目录中拷贝过来: 

#cp -f /usr/local/arm/4.4.3/arm-none-linux-gneabi/libc/armv4t/lib/*so* lib/ -a

对于"lib"目录:这个里面放的都是库文件;

再次运行motion又出现缺少 libjpeg.so.62 直接拷贝国嵌高级项目SDK中的文件,又出现libjpeg.so.62 太短错误;最终重新编译libjpeg.so.62解决错误; 

参考网友monahans编译出libjpeg.so.62  网址:http://blog.csdn.net/monahans/article/details/3042604

其中重新下载新版本的libtool以默认方式安装这部分有点小瑕疵,我更正下:

解压完libtool-1.5.26.tar.gz 后进入工作目录

先执行:export  CC=gcc //指定编译器

再执行:export prefix=/XX  //工作目录为jpeg库的工作目录 , 把libtool安装到jpeg工作目录,jpeg库才能成功编译通过

然后:make

再:make install

继续编译JPEG库的编译工作,编译完成后把lib下的

拷贝到开发板文件系统 /lib目录下  运行motion  能正常工作了  到此motion移植完成

motion配置文件参考:http://download.csdn.net/detail/u010245383/8105463


革命尚未成功还需继续努力,继续战斗

由于前边是一直想用H264实现传输的,不过摄像头格式是YUV的,数据量比较大,有个严重的缺陷,就是S3C2440芯片USB接口是1.0的虽说兼容2.0,但最高速度也就10M Bit/S(1.25MB/S),实际上也就只有800几KB/S,速度远远不够1秒钟也就能传输1-2帧数据,因此会特别的卡;于是我就放弃了使用YUV格式的摄像头,转而使用JPEG格式的摄像头,数据被压缩成JPEG大大减少数据量;在网上了解到SDL可以显示BMP格式的图片,再移植SDL_image库就可以支持JPEG、PNG,GIF等格式,JPEG格式的摄像头可以把数据存储为.jpg格式的照片,就可以把数据发到PC机上,在PC机上实现播放;一步一步的实现我的想法;最后终于实现远程监控,效果还不错采集640X480分辨率有点延时,但不卡很流畅,都能看到室友浏览网页切换的画面,320X240分辨率延时性问题降得很小,也是很流畅;



jpg图片显示程序是参考了网友 九天雁翎 的程序   http://blog.csdn.net/vagrxie/article/details/5735979


参考网友:绝_影  linux下安装SDL  http://blog.csdn.net/lzx_322/article/details/8307558  

                   chinabinlang   SDL库的安装及游戏测试  http://blog.csdn.net/chinabinlang/article/details/8060139

                   SDL入门学习教程  http://www.linuxidc.com/Linux/2012-12/75255.htm

                   侄狂侄殇侄颠   http://blog.sina.com.cn/s/blog_9c8c371101016ibh.html


本人源代码 :http://download.csdn.net/detail/u010245383/8116589

值得注意的是如果使用了SDL_image库  编译命令要加上 -lSDC_image  (  l的大写是L,不是i的大写哦)


在编译完成,运行时出现./test2: error while loading shared libraries: libSDL_image-1.2.so.0: cannot open shared object file: No such file or directory 

提示没有找到libSDL_image-1.2.so.0  我就在window搜索下,找不到这个库文件于是想重新再编译,在make uninstall之后的信息里居然出现了libSDL_image-1.2.so.0字样,我就重新make install  再把文件拷贝到/usr/lib目录下;再运行程序,可以运行了;


make uninstall之后的信息   :

[root@chenjinpeng SDL_image-1.2.10]# make uninstall
 /bin/sh ./libtool   --mode=uninstall rm -f '/usr/local/lib/libSDL_image.la'
libtool: uninstall: rm -f /usr/local/lib/libSDL_image.la /usr/local/lib/libSDL_image-1.2.so.0.8.2 /usr/local/lib/libSDL_image-1.2.so.0 /usr/local/lib/libSDL_image.so /usr/local/lib/libSDL_image.a
 ( cd '/usr/local/include/SDL' && rm -f SDL_image.h )
 ( cd '/usr/local/lib/pkgconfig' && rm -f SDL_image.pc )
[root@chenjinpeng SDL_image-1.2.10]# make install
make[1]: Entering directory `/opt/SDL_image-1.2.10'
test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib"
 /bin/sh ./libtool   --mode=install /usr/bin/install -c   libSDL_image.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libSDL_image-1.2.so.0.8.2 /usr/local/lib/libSDL_image-1.2.so.0.8.2
libtool: install: (cd /usr/local/lib && { ln -s -f libSDL_image-1.2.so.0.8.2 libSDL_image-1.2.so.0 || { rm -f libSDL_image-1.2.so.0 && ln -s libSDL_image-1.2.so.0.8.2 libSDL_image-1.2.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libSDL_image-1.2.so.0.8.2 libSDL_image.so || { rm -f libSDL_image.so && ln -s libSDL_image-1.2.so.0.8.2 libSDL_image.so; }; })
libtool: install: /usr/bin/install -c .libs/libSDL_image.lai /usr/local/lib/libSDL_image.la
libtool: install: /usr/bin/install -c .libs/libSDL_image.a /usr/local/lib/libSDL_image.a
libtool: install: chmod 644 /usr/local/lib/libSDL_image.a
libtool: install: ranlib /usr/local/lib/libSDL_image.a
libtool: finish: PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/arm/4.3.2/bin:/root/bin:/usr/local/arm/4.3.2/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib


If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'


See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
test -z "/usr/local/include/SDL" || /bin/mkdir -p "/usr/local/include/SDL"
 /usr/bin/install -c -m 644 SDL_image.h '/usr/local/include/SDL'
test -z "/usr/local/lib/pkgconfig" || /bin/mkdir -p "/usr/local/lib/pkgconfig"
 /usr/bin/install -c -m 644 SDL_image.pc '/usr/local/lib/pkgconfig'
make[1]: Leaving directory `/opt/SDL_image-1.2.10'























这篇关于mini2440基于motion的移动图像监控系统和基于SDL的远程监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi