Search This Blog

Friday, March 9, 2018

DIY Smart Surveillance Camera Using Raspberry Pi Camera and C++

RPi ကို သုံးပြီး smart surveillance ကင်မရာ တစ်ခု ကို ကိုယ်တိုင် ပြုလုပ် ဖန်တီး ကြည့် ပါမယ်။ ပုံမှန် ဘာမှ ထူးခြားမှု မရှိတဲ့ အချိန်မှာ 5x speed နဲ့ နေ့စဉ်၊ ဒါမှ မဟုတ် နာရီ အလိုက် ဗွီဒီယို ဖိုင်တွေ ခွဲပြီး record လုပ်ပေး နိုင် အောင် လုပ်ပါမယ်။ ဖမ်းယူ ရရှိတဲ့ ပုံရိပ် တွေကို analysis လုပ်နေပြီး လူ့ ကိုယ်ခန္ဓာ တွေကို တွေ့တာ နဲ့ ပုံမှာ အစိမ်းရောင် စတုဂံ နဲ့ ဘောင်ခတ် ပြပြီး၊ ပုံမှန် speed နဲ့ ပြောင်းပြီး record လုပ် ပါမယ်။ Passive infrared sensor (PIR sensor) ကိုပါ သုံးပြီး sensor က လူရိပ် ကို အာရုံခံ မိရင် လည်း၊ ပုံရိပ် မှာ အနီရောင် indicator ပြပြီး၊ ပုံမှန် နှုန်းနဲ့ ပြောင်း record လုပ်နိုင် ပါမယ်။

ဒီ နမူနာ ပရိုဂရမ် မှာ လုပ်လို့ ရတဲ့ အကြောင်း ကုဒ် အကြမ်း ရေးကြည့် ရုံ ဖြစ်ပြီး၊ တစ်ခုခု ထူးခြားရင် ကိုယ့်ရဲ့ အီးမေးလ် ကို လှမ်းပို့ တာ၊ အိမ်က လူတွေ ရဲ့ မျက်နှာကို မှတ်မိတာ၊ သတ်မှတ် ထားတဲ့ အချိန် အပိုင်း အခြား အလိုက် လိုသလို record လုပ်တာ စတာ တွေကို စိတ်ကူး ရှိရင် ရှိသလို ထပ်ဖြည့် နိုင် ပါတယ်။

Figure. PIR sensor ကို ချိတ်ဆက်ခြင်း။


စျေးပေါတဲ့ HC-SR505 mini PIR motion sensor လေးကို Aliexpress စတဲ့ online shop တွေ ကနေ အလွယ် တကူ မှာ သုံးနိုင် ပါတယ်။ သူ့က 3.3~V ရော၊ 5~V နဲ့ ပါ သုံးလို့ ရပြီး၊ RPi နဲ့ သုံးမှာ ဖြစ်လို့ 3.3~V ပါဝါပေး၊ sensor ရဲ့ output pin ကို RPi ရဲ့ GPIO23 နဲ့ ပုံ မှာ ပြထား သလို ဆက်နိုင် ပါတယ်။

ပုံရိပ် ထဲမှာ Body detection လုပ်ဖို့ အတွက် တော့ အရင်ပို့စ်
Real-time Face Detection
မှာ လုပ်သလို ပဲ Haar feature-based cascade classifiers ကို သုံးမှာ ဖြစ်လို့ အဲဒီ မှာ haarcascade_fullbody.xml ဆိုတဲ့ ဖိုင် နာမည် ပြောင်း လိုက်ရုံပါပဲ။ PIR sensor ဆက်ထား တဲ့ input ကို ဖတ်ပြီး၊ active ဖြစ်နေရင် PIR DETECTED ဆိုတဲ့ စာကို puttext ဖန်ရှင် သုံးပြီး အနီရောင် နဲ့ ဖော်ပြ ပါမယ်။ နမူနာ SmartCam.cpp ဆိုတဲ့ ပရိုဂရမ် လေးကို အောက်က လင့်ခ် မှာ ပြထား ပါတယ်။

https://github.com/yan9a/rpi/tree/master/SmartCam

အဲဒီ ပရိုဂရမ် မှာ computer vision နဲ့ ဆိုင်တာ တွေ အတွက် OpenCV ကို သုံးထား တာမို့ အောက်က ပို့စ် မှာ ဆွေးနွေးခဲ့ သလို OpenCV ကို RPi မှာ တပ်ဆင် ထားဖို့ လိုပါတယ်။
OpenCV on Linux using g++, CMake, Qt, Code::Blocks

Using RaspiCam with C++

USB WebCam ကို သုံး မယ် ဆိုရင် ဘာမှ ထပ်လုပ် စရာ မလို ပေမယ့် Raspberry Pi Camera Module ကို သုံးမယ် ဆိုရင် သူ့ အတွက် C++ မှာ သုံးဖို့ library တစ်ခု ထပ် တပ်ဆင် ဖို့ လိုပါတယ် [Sal17]raspicam-0.1.6.zip ကို download လုပ် ပြီးတဲ့ အခါ၊ ဖိုင်ကို uncompress လုပ်ပြီး၊ compile လုပ်ဖို့ အတွက် အောက်က စာရင်း မှာ ပြထားတဲ့ command တွေကို သုံးနိုင် ပါတယ်။
$ unzip raspicam-0.1.6.zip
$ cd raspicam-0.1.6
$ mkdir build
$ cd build
$ cmake ..
OpenCV ရှိနေ တယ် ဆိုရင် ပုံ မှာ ပြထား သလို
-- CREATE OPENCV MODULE=1
လို့ ပြနေ ပါမယ်။

Figure. RaspiCam ကို တပ်ဆင်ခြင်း။


အဲဒီ နောက် အောက်က အတိုင်း build လုပ်၊ install လုပ်ပြီး၊ ldconfig ကို update လုပ်လိုက် ပါမယ်။
$ make
$ sudo make install
$ sudo ldconfig
OpenCV ရှိနေတယ် ဆိုရင် utils ဆိုတဲ့ အခန်း ထဲမှာ raspicam_cv_test ဆိုတဲ့ နမူနာ ပရိုဂရမ် ရှိနေ မှာ ဖြစ်ပြီး တပ်ဆင်မှု အဆင်ပြေ မပြေ စမ်းကြည့်ဖို့ အတွက် အောက်က အတိုင်း run ကြည့်နိုင် ပါတယ်။ ပရိုဂရမ် output နဲ့ ပုံရိပ် တွေ အဲဒီ အခန်း ထဲမှာပဲ ရလာ တာကို ပုံ မှာ ပြထား ပါတယ်။
$ cd utils
$ ./raspicam_cv_test

Figure. RaspiCam ကို စမ်းသပ်ခြင်း။


RaspiCam ကို C++ နဲ့ သုံးဖို့ အတွက်
#include 
ဆိုပြီး သူ့အတွက် header ဖိုင် ကို ထည့်ဖို့ လိုပါတယ်။ Webcam အတွက် VideoCapture class ကို သုံးခဲ့ ပေမယ့် Raspberry Pi ရဲ့ camera module အတွက် တော့ RaspiCam_Cv class ကို သုံး ပါမယ်။
raspicam::RaspiCam_Cv cap;
ပုံရိပ် ကို ဖမ်းယူ ဖို့ အတွက် grab နဲ့ retrieve ဆိုတဲ့ method တွေကို သုံးနိုင် ပါတယ်။ RaspiCam ကို OpenCV နဲ့ တွဲ သုံးတဲ့ ရိုးရှင်းတဲ့ နမူနာ raspicamcv.cpp ကို အောက်က လင့်ခ် မှာ ပြထား ပါတယ်။
https://github.com/yan9a/rpi/blob/master/raspicamcv/raspicamcv.cpp

Camera ရဲ့ တန်ဖိုး တွေကို set နဲ့ ပြောင်းလဲ နိုင်ပြီး၊ ပြောင်းတဲ့ နမူနာ တွေကို utils အခန်း ထဲက raspicam_cv_test.cpp ထဲမှာ တွေ့နိုင် ပါတယ်။ ပြောင်းပြီး တဲ့ အခါ release လုပ်ပြီး၊ ပြန် open လုပ်ဖို့ လိုပါတယ်။ နမူနာ ပရိုဂရမ် ကို အောက်က အတိုင်း build လုပ်ပြီး run နိုင် ပါတယ်။
$ g++ raspicamcv.cpp `pkg-config --cflags --libs opencv` -o  raspicamcv \
 -I/usr/local/include/ -lraspicam -lraspicam_cv 
$ ./raspicamcv


Build and Run SmartCam

ဗွီဒီယို တွေိကို သိမ်းတဲ့ အခါ X264 ကို သုံးရင် ဖိုင် အရွယ်အစား တော်တော် သေးငယ်တဲ့ ဗွီဒီယို ဖိုင်တွေကို ရနိုင် ပါတယ်။ ဒါ ပေမယ့် Raspberry Pi ရဲ့ CPU usage က တက်လာပြီး နှေးလေး နေတာ တွေ့နိုင် ပါတယ်။ MJPG နဲ့ ဆိုရင်တော့ ဖိုင် size ကြီးပြီး၊ တွက်ချက် လုပ်ဆောင်မှု ပို ပေါ့ပါး ပါတယ်။ Raspberry Pi camera module ကို သုံးထား ပြီး RaspiCam လိုင်ဘရီ ကို တပ်ဆင်ပြီး ရင်တော့ သူ့အတွက် lraspicam လိုင်ဘရီ ကို ထည့်ပြီး build လုပ်ဖို့ လိုပါလိမ့် မယ်။ ပရိုဂရမ် မှာ c++11 standard လိုတဲ့ အတွက် build လုပ်တဲ့ အခါ အောက်က အတိုင်း bulid လုပ်ပြီး၊ run နိုင် ပါတယ်။
$ g++ SmartCam.cpp ce_io.cpp `pkg-config --cflags --libs opencv` -std=c++11 -o SmartCam \
 -I/usr/local/include/ -lraspicam -lraspicam_cv
$ gksudo ./SmartCam


Related Posts



အကိုးအကားများ

[Sal17] Rafael Munoz Salinas. RaspiCam: C++ API for using Raspberry camera with/without OpenCv. 2017.
url: https://www.uco.es/investiga/grupos/ava/node/40.