利用OK6410与OV9650搭建的在yeelink平台上搭建的视频监控平台

硬件环境:

飞凌OK6410开发板

OV9650摄像头

目标要求:

通过开发板平台,上传摄像头采集的图像。

步骤:

1.开发板驱动摄像头显示;

2.搭建web服务器,通过浏览器查看摄像头图像;

3.抓取网页图像

4.上传至yeelink

5.通过motion软件包实现图像的监控

系统硬件图,有图有真相:



参考资料

1.huawei hg255d(openwrt)+logitech c270+ wget&http-post 上传yeelink

http://bbs.yeelink.net/thread-188-1-1.html

2.图像侦测:探测运动的软件包motion

http://skpsun.blog.163.com/blog/static/27600552009121109154/

3.发送图像:linux下使用sendmail发送带附件的邮件

http://jamesbond0479.blog.163.com/blog/static/241475820115229336243/


步骤1

【问题1】

烧写如官方提供的uboot、zImage、rootfs.yaffs2,然后使用#testcamera命令测试摄像头,屏幕没有反应,打印消息如下:

[root@FORLINX6410]# ./testcamera
Start Main 
already open the devicise codec 
Before openning FB 
VIDIOC_S_FMT is c0cc5605
VIDIOC_STREAMON is 40045612
start to get pic 0

而且点击QT界面下的照相机,提示信息no camera。

【猜想】

是不是PIC总线没有在内核勾选?

 │   Location:                                                                                   │  
  │     -> Device Drivers                                                                         │  
  │       -> Staging drivers (STAGING [=n])                                                       │  
  │         -> Data acquisition support (comedi) (COMEDI [=n])                                    │  
  │           -> Comedi PCI drivers (COMEDI_PCI_DRIVERS [=n]) 


   Location:                                                                                   │  
  │     -> Device Drivers                                                                         │  
  │       -> HID Devices (HID_SUPPORT [=y])                                                       │  
  │         -> Special HID drivers                                                                │  
  │           -> PicoLCD (graphic version) (HID_PICOLCD [=n])  

勾选后重新编译生成zImage。

【问题1解决】

内核支持PCI,只不过光盘给的烧写文件有问题,其中,zImage需要换成最新的OK6410-B的烧写文件,网址如下:

http://pan.baidu.com/share/link?shareid=1595880558&uk=2754759285#dir/path=%2F%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83%E8%B5%84%E6%96%99%E5%85%89%E7%9B%98%E6%96%87%E4%BB%B6%2FOK6410-B%20%206410%E5%AE%98%E6%96%B9%E5%9F%BA%E7%A1%80%E8%B5%84%E6%96%99-1G%2FLinux-3.0.1%2Ffilesystem

效果是输入

#testcamera,LCD有显示,不过LCD效果很不好。


LCD显示效果:


LCD上部即为摄像头的图像,QT里的测试程序没有编写好,不过至少摄像头能用了。

开发环境:

主机:VMware+ubuntu

FS:nfs

nfs的配置过程及注意事项见:

http://blog.csdn.net/jason6765599/article/details/19759689

步骤1基本完成,继续步骤2的工作


步骤2

想复杂了,在开发板端构建web服务器没有什么意义,想要外网能够访问,就必须借助于具有外网IP与内网IP的设备,在开发板上搭建web服务器只能够自娱自乐一下。将摄像头采集的头像发布到类似yeelink的平台上,其实只需要将图像打包,然后调用平台的API即可,所以说这一步看似必要,其实是鸡肋,另外motion获取图像并且发送邮件,这个扩展功能能够实现真是极好的了,好了,可以洗洗睡觉了,可惜宿舍停水,热水脚都没得洗,悲催。

开发板通过网络上传图像的基本步骤是:

开发板----wget----->图像-------curl-------->POST至Yeelink平台

主机中,通过VMware建立了ubuntu系统,在ubuntu下测试使用crul来向yeelink平台上传一幅位于ubuntu下的图像。

1.进入yeelink平台,建立设备PostImageTestDevice,建立图像型传感器ImageTest,建立ImageTest后会生成CURL可以使用的网址:


定义CURL命令格式:

参看

请求实例 (运用curl):
curl --request POST --data-binary @datafile.jpg --header "U-ApiKey: YOUR_API_KEY_HERE" http://api.yeelink.net/v1.0/device/12/sensor/3/photos
需要在HTTP Header中增加API Key来授权写入操作, 具体请参照API Key. 支持一次传送一幅图像数据.

Note: 目前限定相邻图像数据上传间隔须大于等于10s, 过于频繁的请求会收到406 Response.

参照API的文档,定义上传VMWAREubuntu下/monitor/hero.jpg文件至yeelink平台,新建上传命令文件:/monitor/curl-test,主要参数为:上传图片、数据格式、U-ApiKey、传感器网址。

curl --request POST --data-binary @/monitor/hero.jpg --header "U-ApiKey: YOUR_API_KEY_HERE" http://api.yeelink.net/v1.0/device/7811/sensor/12369/photos

在ubuntu安装CURL:

#apt-get install curl

运行curl-test

#./curl-test

效果:


nice!

下面考虑的是如何获得传感器的图像

2014-02-24

今天弄了一天,飞凌OV9650摄像头通用性不好,本以为只是LCD显示问题,但是自带的测试程序的将VGA转存为jpg文件的函数并不能够通过编译,此路不通咱们换一条路,准备走安装mjpg-STRAMER的老路,可是当mjpg-STREAMER安装上后,根本不能够利用摄像头通过web服务器发布图像,在此估计是摄像头的通用性能不好,毕竟不是USB的,还是MARK一下,制作OK6410兼容的mjpg-STREAMER的方法,详情请猛点如下网址:

http://blog.csdn.net/jason6765599/article/details/19838621

2014-02-25

还是放弃原来的的OV9650,向同学借了一个摄像头,发现能用,那怎么才能知道摄像头是符合UVC标准,还有测试摄像头呢?

请猛戳如下网址:

http://blog.csdn.net/jason6765599/article/details/19907263

摄像头能用,本来luvcview支持两种格式的显示1.jpg格式2.yuv格式,此摄像头只支持yuv格式,这就导致了mjpeg-STREAMER不能用了,土办法,首先使用摄像头拍照,yuv格式拍照的照片格式为*.pnm,然后使用图片格式工具netpbm将pnm格式图片转换为jpg格式,当然这一部分是在ubuntu下操作的啦。

1.可以使用在资料光盘中的路径为:Linux-3.0.1\apptest\摄像头测试\USB摄像头\USBCamera- linux+android\linux3.0.1系统下-2012-07-05/luvcview-2012-07-05.tar,源码默认是不能够拍照的,但是具有拍照功能,修改源码luvcview.c中:

if (videoIn->getPict) 前添加代码

videoIn->getPict=1;

代表使能拍照功能,重新编译后,将执行文件luvcview拷贝至开发板的根目录下,然后执行:

# ./luvcview -d /dev/video2 -f yuv

开发板将拍的照片存放至与luvcview同样的目录路径下,也就是根目录下,扩展名为.pnm

2.问题在于yeelink平台并不支持pnm格式的图片,因此需要转换,暂时开发板上是搞不定了的,只能依靠强大的ubuntu了,百度了一下,发现一款图片转换工具netpbm,能够将pnm等多种图片格式转换为jpg,在主机上安装netpbm:

#sudo apt-get install netpbm

转换图片,命令格式为:

#pnmtojpeg -quality=60 foo.ppm > foo.jpg

命令可以参考

http://netpbm.sourceforge.net/doc/pnmtojpeg.html

3.然后使用主机ubuntu中的CURL工具上传至yeelink平台。

这一套是成功了,但是问题是开发板对于主机的依赖太大,图片转换和上传图片都是ubuntu完成的,OK6410完成的仅仅是驱动摄像头,然后拍照。

在OK6410需要完善的工作是:

1.搭建类似CURL能够HTTP-POST数据的工具;

2.得到jpg格式的图片,要么换摄像头,要么移植图片转换工具。

今天的效果如下:


后面要做的工作是:

1.测试摄像头是否合格,使用命令:

#luvcview -L -d /dev/video2

# luvcview -d /dev/video2 -f jpg -s 320x240

2.mjpeg-STREAMER能顾正常使用:

#mjpg_streamer -i "/mjpeg/input_uvc.so -d /dev/video2" -o "/mjpeg/output_http.so"

用火狐浏览器打开一个网页输入下面地址就能够看到一个视频(开发板的IP为192.168.1.100):
        http://192.168.1.100:8080/?action=stream 
        打开一个网页输入下面地址就能够看到一个静态图片:
        http://192.168.1.100:8080/?action=snapshot

3.更新wget命令或者安装CURL命令

4.上传图片


突然想起来,那个mjpeg-TREAMER的库的名字就叫做:input_uvc.so,怎么可能不能够输入yuv模式的图片,然后想了一下,报错是由于ERROR: could not find input plugin,也就是找不到入口,应该就是入口库,然后试着把所有的库拷贝至/usr/lib,然后再使用命令:

# mjpg_streamer -i "input_uvc.so -y -f 15 -r 320*240 -q 50 -d /dev/video2" -o "output_http.so -p 8080 -w /www/camwww"

然后就可以了啊!用火狐浏览器打开,效果如下:


好了,上句命令参考了:

http://hi.baidu.com/xhk7777/item/35a1afb553dc6ae84fc7fd33

不过主要原因还是库找不到,需要拷贝至指定文件夹下。

好了,OK6410开发板通过摄像头,利用mjpeg-STREAMER搭建网页视频流,并且利用wget工具截取视频为图片一条龙服务搭建完成,通过执行脚本文件getimage.sh,即可完成全套动作:

#! /bin/sh
mjpg_streamer -i "input_uvc.so -y -f 15 -r 320*240 -q 50 -d /dev/video2" -o "output_http.so -p 8080 -w /www/camwww" &
wget "http://192.168.1.100:8080/?action=snapshot" -O /test.jpg

注意第一句的&,此符号代表在后台执行程序,第二句表示将视频流截取为test.pg的图片,整套系统的基本版剩下的任务是通过利用类似CURL的服务将图片文件传输至yeelink。

今天基本上完工了,晚上将curl安装至NFS下,nice。

首先需要交叉编译,然后安装,具体的编译方法可以猛戳如下连接:

http://blog.csdn.net/jason6765599/article/details/19927041

安装好curl后就只需要POST-DATA了,在开发板中输入如下命令:

curl --request POST --data-binary @/hero.jpg --header "U-ApiKey: YOUR_KEY" http://api.yeelink.net/v1.0/device/7811/sensor/12369/photos

就会出现如下惊喜的结果:


接下来只需要将以上内容整合,优化上传图片了,NICE,man!

2014-02-27

接下来写shell脚本文件了,将下载图片与上传图片的功能写入update shell中,并且向crontab添加计划任务,每格一定的时间wget image,并且curl图片之yeelink平台.

1.首先需要测试crontab任务,主要添加的是:每隔一定时间,执行一次update,具体配置busybox下crontab任务,参见下文,请猛戳如下网址:

http://blog.csdn.net/jason6765599/article/details/20045583

2.编写shell脚本.

2.1首先判断mjpeg-STREAMER是否已经启动,若未启动,则执行启动命令,若启动完成,则继续执行2.2;

2.2判断是否执行成功,成功则执行2.3,失败则退出;

2.3使用wget命令得到image.jpg文件,若成功,则继续2.4,若失败则退出;

2.4使用curl命令将图片POST至yeelink平台,成功与失败均推出程序。

所有的执行结果均记录如updatelog日志文件。

今天初步完成了基本功能,逻辑判断内容还没有添加,有待完善,看到自己摄像头拍摄的图片在yeelink上成功显示,真是倍儿爽啊!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值