Raspberry Pi_Kor_22.1.8 동작 감지 web camera – Motion 프로그램


Published Book on Amazon


All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1
All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)
최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


22.1.8   동작 감지 web camera - <Motion> 프로그램

 

22.1.8.1    동작 감지 동영상 Web 접속 framework

 

<Motion> 프로그램은 카메라에서 오는 영상신호를 모니터링하는 프로그램이다. 이것은 영상에서 중요한 변동, 즉 움직임이 발생했는지를 감지해 내는 기능을 가지고 있다. 이 프로그램은 카메라로 촬영하는 화면을 인터넷으로 전송하여 web으로 실시간 내용을 확인할 수 있는 기능뿐만 아니라, 화면에서 움직임이 감지되면 그 움직임을 이미지나 동영상으로 저장하는 기능도 가지고 있다.

 

여기서는 동작 감지 동영상을 Web으로 방송하기 위해서 다음과 같은 체계를 이용한다.

 


여기서 <Motion> 프로그램은 "/dev/video0" 장치를 사용하여 V4L2 API를 통해 동영상을 촬영하고, 촬영한 동영상을 network을 통하여 Web으로 전송한다. 그러면 인터넷상의 computer에서 streaming 자료를 처리할 수 있는 media player 프로그램이 해당 동영상 자료를 수신해서 재생한다.

 

이를 위해서는 Raspberry Pi <Motion> 프로그램이 설치되어 있어야 하고, Web 상의 computer에는 streaming 동영상 자료를 처리할 수 있는 media player 프로그램이 설치되어 있어야 한다

 

<Motion> 프로그램에 대한 여러 가지 자료는 다음을 참조하기 바란다.

    http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

 


 

22.1.8.2    Raspberry Pi 시스템에서 동작 감지 작동

 

먼저 Raspberry Pi에서 <Motion> 프로그램이 설치되어 있어야 한다. 다음과 같이 설치한다.

 

sudo  apt-get  install  motion

 

프로그램 설치가 완료되면 <Motion> 프로그램에 대한 몇 가지 설정작업을 해야 한다. 이 프로그램에 대한 중요한 설정사항은 "/etc/motion/motion.conf" 파일에 저장되어 있다. 다음은 파일의 내용 중에서 중요한 항목만 발췌한 것이다. 텍스트 편집기를 이용해서 필요한 내용을 수정한다. 이 파일을 수정할 때는 super user 권한이 필요하다.

 

~ 중략

~ 중략

# Start in daemon (background) mode and release terminal (default: off)

daemon off            à "on"으로 변경

~ 중략

~ 중략

# Videodevice to be used for capturing  (default /dev/video0)

# for FreeBSD default is /dev/bktr0

videodevice /dev/video0

~ 중략

~ 중략

# Threshold for number of changed pixels in an image that

# triggers motion detection (default: 1500)

threshold 1500

~ 중략

~ 중략

# Use ffmpeg to encode mpeg movies in realtime (default: off)

ffmpeg_cap_new on

~ 중략

~ 중략

# Codec to used by ffmpeg for the video compression.

# Timelapse mpegs are always made in mpeg1 format independent from this option.

# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.

# mpeg1 - gives you files with extension .mpg

# mpeg4 or msmpeg4 - gives you files with extension .avi

# msmpeg4 is recommended for use with Windows Media Player because

# it requires no installation of codec on the Windows client.

# swf - gives you a flash film with extension .swf

# flv - gives you a flash video with extension .flv

# ffv1 - FF video codec 1 for Lossless Encoding ( experimental )

# mov - QuickTime ( testing )

ffmpeg_video_codec swf

~ 중략

~ 중략

# The mini-http server listens to this port for requests (default: 0 = disabled)

webcam_port 8081      à 필요시 변경한다.

~ 중략

~ 중략

# Restrict webcam connections to localhost only (default: on)

webcam_localhost on   à "off"으로 변경

~ 중략

~ 중략

# Target base directory for pictures and films

# Recommended to use absolute path. (Default: current working directory)

target_dir /tmp/motion

~ 중략

~ 중략

 

    "daemon"에 대한 설정.

daemon이란 어떤 서비스 요청을 받았을 때 즉시 처리해 줄 수 있도록 사전에 미리 가동시켜 놓은 어떤 프로그램을 의미하는데, 통상 시스템이 boot 될 때 자동적으로 실행되도록 설정한다. 위와 같이 "daemon off"로 되어 있는 부분을 "daemon on"으로 설정을 변경한다.

 

    "videodevice"에 대한 설정

"videodevice /dev/video0"라는 설정은 <Motion> 프로그램이 V4L2 driver를 활용하여 "/dev/video0" 장치를 통하여 영상을 촬영한다는 것을 의미한다.

 

    "threshold"에 대한 설정.

움직임의 민감도에 대한 설정이다. 장면이 얼마나 변동되어야 움직임으로 감지할 것인가에 대한 것이다. 숫자를 적게 하면 민감하게 하는 것이고, 큰 숫자는 둔하게 만드는 것이다.

 

    "ffmpeg_cap_new"에 대한 설정.

이 것은 움직임이 감지되었을 때 이미지와 함께 비디오 파일을 저장할 것인지를 지정하는 것이다.

 


 

    "ffmpeg_video_codec"에 대한 설정.

움직임이 감지되어 비디오 파일을 저장할 때 어떤 format으로 저장할 것인지를 지정하는 것이다.

 

    "webcam_localhost"에 대한 설정.

webcam loal host에서만 연결하도록 허용할 것인지를 지정하는 것이다. 네크워크상의 다른 컴퓨터에서 접속하도록 허용하기 위해서 "webcam_localhost off" 상태로 변경한다.

 

    "webcam_port"에 대한 설정.

webcam에 연결하기 위해서는 port를 여기서 지정해야 하는데, 기본적으로 "8081"이 지정되어 있다. 다른 port를 사용하고자 하면 이 내용을 변경한다

 

    "target_dir"에 대한 설정.

움직임이 감지되었을 때 이미지와 비디오 파일을 어디에 저장할 것인지를 지정한다.

 

다음은 "/etc/default/motion" 파일에서의 설정작업이다. 텍스트 편집기 프로그램을 이용해서 필요한 내용을 수정한다. 이 파일을 수정할 때는 super user 권한이 필요하다.

 

# set to 'yes' to enable the motion daemon

start_motion_daemon=no        à"yes"로 변경

 

    "start_motion_daemon"에 대한 설정.

이 설정은 시스템이 booting될 때 <Motion> 프로그램을 자동으로 구동시킬 것인가에 대한 설정이다. 여기서 설정을 해 놓으면 Raspberry Pi 시스템이 작동할 때마다 수동으로 <Motion> 프로그램을 작동하지 않아도 된다. 참고로 우리는 [20.3.3 init script 작성]에서 init script이 무엇인지에 대해서 공부했다. 여기서 daemon start 한다고 설정해 놓으면 init script에서 자동으로 daemon을 시작하도록 이 프로그램이 만들어져 있는 것이다.  


 

설정이 완료되었으면, 이제 <Motion> 프로그램을 수작업으로 작동시켜 보자. 다음 명령을 수행하면 <Motion> 프로그램이 작동하기 시작한다.

 

sudo service motion start

 

다음 명령도 동일한 효과를 발휘한다.

 

sudo /etc/init.d/motion start

 

이 명령은 "motion" daemon이 작동되지 않은 상태에서 수작업으로 daemon을 가동시키는 명령이다. 다음에 시스템이 boot할 때는 앞의 설정에 의해서 자동으로 daemon이 시작하기 때문에 이런 작업을 하지 않더라도 <Motion> 프로그램이 자동으로 작동할 것이다.

 

프로그램 작동을 시작한 상태에서 network상의 다른 컴퓨터에서 임의의 media player를 이용해서 camera 화면을 확인할 수 있다. 여기서는 앞에서 설치한 <VLC> 프로그램을 이용하도록 하겠다. 메뉴 Media àOpen Network Stream을 선택하여 <Motion> 프로그램이 실행되고 있는 Raspberry Pi 시스템에 대한 접속정보를 지정한다. 이번에는 기본 port "8081"이므로 "http://<URL>:8081>/"을 입력하고, [Play] 버튼을 누르면 카메라 화면을 실시간으로 조회할 수 있다.

 

다음에는 <Motion> 프로그램이 과연 움직임을 포착해서 필요한 처리를 했는지 확인해 보자. 카메라 앞에서 적당히 움직이는 동작을 만든 다음에 해당 움직임이 이미지나 동영상으로 저장되는 "/temp/motion" 폴더의 내용을 확인한다.

 

pi@raspberrypi ~ $ ls /tmp/motion -l

-rw-r--r-- 1 motion motion  47533 May 17 20:47 07-20150517204646.swf

-rw-r--r-- 1 motion motion   9271 May 17 20:46 07-20150517204647-00.jpg

-rw-r--r-- 1 motion motion   9286 May 17 20:46 07-20150517204647-01.jpg

-rw-r--r-- 1 motion motion   7679 May 17 20:46 07-20150517204648-00.jpg

-rw-r--r-- 1 motion motion   7425 May 17 20:46 07-20150517204648-01.jpg

-rw-r--r-- 1 motion motion   8458 May 17 20:46 07-20150517204649-00.jpg

 

그러면 다음과 같이 여러 개의 "jpg" 형식의 사진과 "swf" 형식의 동영상이 저장되어 있는 것을 알 수 있다. 이것은 어떤 움직임이 있을 때, 그 움직임을 포착하여 내용을 저장한 것이다.

Leave a Reply