看到有博客上采用motion搭建移動圖像監測系統,感覺很強大,但大多缺少遠程監測能力,大多局限于局域網。OK,筆者手頭剛好有一個30W像素的USB攝像頭,那么借用yeelink服務,也來DIY一把,哈哈。
筆者DIY系列參考文章:DIY遠程監控室內溫度設備(tiny6410+ds18b20+yeelink+curl)http://www.CUOXin.com/IDoIUnderstand/p/3537858.htmlDIY遠程控制開關(tiny6410+LED+yeelink+curl) http://www.CUOXin.com/IDoIUnderstand/p/3538356.html一、目的 DIY一個遠程移動圖像監控的系統,可以自動抓拍移動圖像并上傳服務器同時具有定時抓拍功能,實現可以通過web/android/ios/微信查看或接收報警。效果:提供個鏈接,歡迎大家圍觀:http://www.yeelink.net/devices/7376二、軟硬件環境 硬件:tiny6410+USB攝像頭+有線網絡 or USB wifi 軟件:linux+QT/motion/curl/crontab/shell/YeeLink服務三、移動圖像監控實現1、工作原理 所謂移動圖像監測,簡單來說就是利用USB攝像頭定點監測某個區域,平時攝像頭并不拍照,只有當有移動物體經過時,攝像頭便自動抓拍(要監測多大物體、按拍照速率都是可調的),并把拍到的圖像存儲在指定目錄或網絡服務器,實現無人監控功能。 motion 是一套免費開源的移動圖像監測程序。2、motion移植(在Ubuntu中進行的交叉編譯)下載一個motion-3.2.12.tar.gz,通過samba拷到ubuntu下,然后按如下步驟tar zxvf motion-3.2.12.tar.gzcd motion-3.2.12./configure --PRefix=/自定義安裝目錄,我是直接安裝源碼下${PWD}/_install / --host=arm-linux--with-ffmpeg=/home/ffmpeg/ffmpeg-0.5.1/_install/ (若要視頻記錄則添上藍色字體,否則會報出一大堆ffmpeg錯誤,但不影響拍照功能,這部分我沒有使用)makemake installmkdir -p /開發板根文件系統目錄/var/run/motioncp /motion安裝目錄/bin motion /開發板根文件系統目錄/usr/sbin/cp /motion安裝目錄/etc/motion-dist.conf /開發板根文件系統目錄/etc/motion/motion.conf3、motion配置motion.conf中的基本配置見資料1中說明,詳情見“七、詳細操作步驟小結”中提供的下載文件包。一些重要配置:snapshot_interval 600 //設置定時600s抓拍一次target_dir /dev/shm/motion_pic //設置抓拍圖片存放路徑snapshot_filename snapshot//設置定時抓拍圖片文件名jpeg_filename %v-%Y%m%d%H%M%S-%q_motion//設置移動抓拍圖片文件名格式,方便后續shell中進行文件分析處理四、tiny6410實現定時獲取yeelink開關狀態1、在yeelink中注冊一個圖像傳感器。2、根據yeelink的api接口上傳數據。在tiny6410 linux系統上采用shell腳本進行實現。2.1 上傳移動圖像抓拍數據腳本post_motion.sh1 #!/bin/sh 2 3 #在單引號中填入yeelink給你的API KEY 4 YL_ApiKey='xxxxx' 5 YL_URL=http://api.yeelink.net/v1.0/device/7376/sensor/11703/photos 6 7 while : 8 do 9 # 查找/dev/shm/motion_pic文件夾下最舊的1個以 motion.jpg 結尾的文件,并獲取其文件名10 PIC=$(find /dev/shm/motion_pic -name "*motion.jpg" | xargs ls -rt | head -n 1)11 echo $PIC > /dev/shm/motion_name12 grep -q "motion.jpg" /dev/shm/motion_name && status=yes || status=no13 echo $status14 if [ $status = yes ];15 then16 upcmd="curl --request POST --data-binary @"$PIC" --header U-ApiKey:$YL_ApiKey --verbose $YL_URL"17 echo $upcmd|sh18 rm $PIC19 sleep 15 # 延時15s 因為yeelink上傳數據要求最小間隔10s,否則報錯20 echo "upload motion picture finish"21 else22 echo "no motion"23 break24 fi25 done2.2 上傳定時抓拍數據腳本post_timelapse.sh
1 #!/bin/sh 2 3 #在單引號中填入yeelink給你的API KEY 4 5 YL_ApiKey='xxxxx' 6 YL_URL=http://api.yeelink.net/v1.0/device/7376/sensor/11703/photos 7 PIC=/dev/shm/motion_pic/snapshot.jpg 8 9 upcmd="curl --request POST --data-binary @"$PIC" --header U-ApiKey:$YL_ApiKey --verbose $YL_URL"10 11 echo $upcmd|sh六、增加定時運行服務在crontab服務中加入下面加紅的一行, 讓腳本每分鐘運行一次, 保存退出。[root@FriendlyARM crontabs]# crontab -e*/10 * * * * /dev/shm/post_timelapse.sh // 新增任務*/1 * * * * /dev/shm/post_motion.sh // 新增任務[root@FriendlyARM crontabs]# crond& // 開啟crond七、詳細操作步驟小結下面提供了交叉編譯后的可執行文件(交叉工具鏈為:FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc)http://download.csdn.net/detail/v_hyx/6907379使用說明及操作步驟:
1 /** 2 * @file readme.txt 3 * @brief 基于tiny6410、USB攝像頭、motion、curl的遠程移動圖像監測實現說明 4 * @details 5 * @version V1.0.0 6 * @author Richard.hmm 7 * @date 2014-2-9 8 */ 9 10 1、拷貝motion所需的動態庫到tiny6410開發板系統的/lib/下11 cp /sdcard/motion_lib/* /lib/12 13 2、拷貝motion到usr/sbin/下14 cp /sdcard/motion /usr/sbin/15 16 3、拷貝curl到usr/bin/下17 cp /sdcard/curl /usr/bin/18 19 4、拷貝腳本文件到tiny6410的內存文件系統/dev/shm中20 cp /sdcard/post_timelapse.sh /dev/shm/21 cp /sdcard/post_motion.sh /dev/shm/22 cp /sdcard/motion_alarm.sh /dev/shm/23 24 5、配置crontab25 [root@FriendlyARM crontabs]# crontab -e26 */10 * * * * /dev/shm/post_timelapse.sh // 新增任務27 */1 * * * * /dev/shm/post_motion.sh // 新增任務28 [root@FriendlyARM crontabs]# crond& // 開啟crond29 30 6、拷貝配置文件到/etc下31 cp /sdcard/motion.conf /etc/motion/32 33 7、后臺運行motion34 motion -c /etc/motion/motion.conf &八、實現效果yeelink的web頁面效果圖
新聞熱點
疑難解答