1. 程式人生 > >利用OK6410與OV9650搭建的在yeelink平臺上搭建的視訊監控平臺

利用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命令測試攝像頭,螢幕沒有反應,列印訊息如下:

[[email protected]]# ./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的燒寫檔案,網址如下:

效果是輸入

#testcamera,LCD有顯示,不過LCD效果很不好。


LCD顯示效果:


LCD上部即為攝像頭的影象,QT裡的測試程式沒有編寫好,不過至少攝像頭能用了。

開發環境:

主機:VMware+ubuntu

FS:nfs

nfs的配置過程及注意事項見:

步驟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的方法,詳情請猛點如下網址:

2014-02-25

還是放棄原來的的OV9650,向同學借了一個攝像頭,發現能用,那怎麼才能知道攝像頭是符合UVC標準,還有測試攝像頭呢?

請猛戳如下網址:

攝像頭能用,本來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

命令可以參考

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"

然後就可以了啊!用火狐瀏覽器開啟,效果如下:


好了,上句命令參考了:

不過主要原因還是庫找不到,需要拷貝至指定資料夾下。

好了,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。

首先需要交叉編譯,然後安裝,具體的編譯方法可以猛戳如下連線:

安裝好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任務,參見下文,請猛戳如下網址:

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上成功顯示,真是倍兒爽啊!