본문 바로가기
기술팁/라즈베리파이(raspberry)

라즈베리파이 카메라 사용, motion 설치, 움직임 녹화, 스트리밍

by nyg -i 2019. 7. 5.

먼저 파이에 카메라를 연결하고,,,, 

라즈비안 설치하고 업데이트랑 업그레이드를 안했다면, 먼저 해야해요......

터미널창을 열고,,

이제  sudo apt-get update  

다음  sudo apt-get upgrade

시간이 좀 소비됩니다.

이제 카메라를 켜야하는데, 터미널 창에서 sudo raspi-config 입력후 

5. interfacing option  --> 1 . pi camera 고른후 enable 설정합니다.

재부팅합니다(sudo reboot)

터미널 창에  raspistill -o 파일이름.jpg 라고 입력하면,, 사진이 찍히고,,,

라즈비안 /home/pi 폴더안에 파일이름.jpg가 저장됩니다.^^

             raspistill -vf -hf -o 파일네임.jpg  (hf상하변경,vf좌우변경)

동영상 저장 : raspivid -o 파일명.h264 -t 10000     ->10초동안 저장

카메라설정은 아래처럼 라즈비안 gui 로도 설정가능합니다

설정창을 연 후 카메라 enable 하면 됩니다.

참쉽죠^^ 

 

Motion 프로그램 설치 후 움직임 녹화 동작

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

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

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

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

sudo apt-get install motion  -->모션 설치

sudo nano /etc/modules   ->부팅시 자동으로bcm2835-v4l2모듈 로드하려면,,,,

sudo nano /etc/motion/motion.conf  -> nano 편집기에서 수정하려면,,

컨트롤 W 누르면 키워드로 검색하며 수정할수 있다. 아래에는 motion.conf의 스크립트이다.

 

~ 중략

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

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

daemon off            à "on"으로 변경

~ 중략

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

# for FreeBSD default is /dev/bktr0

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

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)# Always save images even if there was no motion (default: off)

움직임이 감지되었을 때 이미지와 함께 비디오 파일을 저장할 것인지를 지정(기본값:오프(움직임감지),on:항상)

emulate_motion off

~ 중략

# 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 )

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

ffmpeg_video_codec mp4

~ 중략

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

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

webcam_port 8081     

~ 중략

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

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

webcam_localhost on   à "off"으로 변경

~ 중략

# Target base directory for pictures and films

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

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

target_dir /var/lib/motion

~ 중략

 

다음은 "/etc/default/motion" 파일에서의 설정작업

텍스트 편집기 프로그램을 이용해서 필요한 내용을 수정한다. 수정할 때는 super user 권한이 필요하다.

# set to 'yes' to enable the motion daemon

이 설정은 시스템이 booting될 때 <Motion> 프로그램을 자동으로 구동시킬 것인가에 대한 설정이다. daemon start 한다고 설정해 놓으면 init script에서 자동으로 daemon을 시작하도록 이 프로그램이 만들어져 있는 것이다.  

start_motion_daemon=no        à"yes"로 변경

설정이 완료되었으면, 이제 <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> 프로그램이 과연 움직임을 포착해서 필요한 처리를 했는지 확인해 보자. 카메라 앞에서 적당히 움직이는 동작을 만든 다음에 해당 움직임이 이미지나 동영상으로 저장되는 "/var/lib/motion" 폴더의 내용을 확인한다.

pi@raspberrypi ~ $ ls /var/lib/motion -l

-rw-r--r-- 1 motion motion  47533 May 5 18:35 02-20191112205432.mp4

 

그러면 다음과 같이  "mp4" 형식의 동영상이 저장되어 있는 것을 알 수 있다. 이것은 어떤 움직임이 있을 때, 그 움직임을 포착하여 내용을 저장한 것이다.  참고로 라즈베리파이에 깔려있는 VLC 플레이어는 h264, swf는 재생하지만, mkv,mp4 파일은 재생하지 못한다. 

 

참고출처 >  http://www.realomega.com/publish/raspberry-pi_kor_22-1-8/

 

 

Web으로 streaming 동영상 출력하기

 

sudo nano /etc/motion/motion.conf  -> 설정,,,, 컨트롤 W 누르면 검색할수 있다..

daemon                       ->   on   프로그램을 백그라운드에서 별도로 실행가능

framerate                     -> 100

stream_maxrate             ->100

stream_port                  ->8081  송출 포트번호 설정

stream_quality               -> 100

webcontrol_localhost on   ->  off   로컬호스트에서만 연결을 제한하지 않도록

stream_localhost on        ->   off  로컬에만 사용할지(on) 다른 컴이나 장비로 접속할지(off)

quality                         ->100

post_capture                 ->5

output_pictures on          ->  off 영상을 저장할지, 저장하면 끊김

ffmpeg_output)movies on ->  off 실시간 mpeg 인코딩 라이브러리(ffmpeg) 

stream_motion on  움직임이 없으면 1프레임, 감지되면 stream_maxrate 값으로..

stream_maxrate 100  감지되는 초당 횟수

sudo nano /etc/default/motion

start_motion_daemon->yes 데몬 모션 사용

sudo service motion start

sudo motion  시작

 

종료하고 끝내려면

sudo service motion stop

sudo service motion restart

 

이제 와이파이 내에서는 내부주소로 웹캠을 웹브라우저에서 볼수 있다..   192.168.x.x :8081 의 주소로 확인 가능하다..

만약 와이파이를 벗어나 외부에서 접속하려면 내부 포워딩할수 있도록 공유기를 설정해야한다.

공유기 관리 모드로 입장해서 포트포워드 설정에 라즈베리파이 주소를 추가 한다(192.168.x.x  내부포트 8081) 외부포트는 임의....

 이제 외부에서 접속할땐 공유기에 아이피를 확인한 후 주소끝에 외부포트 번호를 추가하여 입력하면 접속가능하다.

 

파이카메라 파이썬 소스 --> https://enng.tistory.com/41