라즈베리 파이의 공식 카메라 모듈(?)인 파이 카메라(PiCamera)를 이용해서 CCTV를 만드는 방법입니다. CCTV라고 하기엔 좀 거창한 감이 있긴 한데, 기본은 JPG 이미지를 연속으로 스트리밍해서 웹캠처럼 보여지도록 하는 것입니다. MJPEG 라고 합니다.
먼저 전원을 끄고, 카메라를 라즈베리 파이에 연결합니다. 연결 방법은 아래 페이지에 자세히 나와 있습니다.
http://www.raspberrypi-spy.co.uk/2013/05/installing-the-raspberry-pi-camera-module/
파이 카메라는 간단한 설정만으로 사용이 가능합니다. 라즈베리 파이 설정을 실행합니다.
- sudo raspi-config
Enable Camera 항목을 선택하고 Enable 선택해서 활성화 해주세요.
이 과정은 재부팅이 필요합니다.
카메라를 테스트 해봅니다. 먼저 preview 이미지를 가져오기.
- raspistill -v -o
Raspistill 을 이용해서 사진을 찍습니다.
- raspistill -v -o xxx.jpg
Raspivid 를 이용하면 녹화가 가능합니다. 녹화 기본 설정이 1080p (1920×1080) 입니다. 5초간 비디오를 녹화해 봅니다.
- raspivid -t 5000 -o xxx.h264
이제 Motion-MMAL 을 이용해서 스트리밍을 할 수 있도록 설정해 보겠습니다.
JPG 이미지 파일을 연속적으로 전송하는 형태로 동작하는 것이 MJPEG 입니다. 이걸 지원해주는 스트리밍 어플리케이션이 motion 입니다. 그런데 원래 motion 어플은 USB 웹캠 같은 모듈용으로 설계된 것 같습니다. PiCamera 를 Motion과 연동하기 위해서는 설치과정이 조금 다릅니다. Motion-MMAL을 설치해야 합니다.
아래 명령으로 motion 을 설치합니다.
- sudo apt-get install motion
설치가 끝나면 아래 명령으로 motion 패키지를 삭제합니다.
- sudo apt-get remove motion
설치하자마자 다시 지워버리다니… 뭔가 삽질 같지만 motion을 설치하면서 외부 모듈/패키지와 관련된(dependency) 설정이 만들어집니다. motion 패키지를 지워도 이 설정들이 남아있기 때문에 이렇게 사용합니다. 일반적인 Motion 패키지가 삭제되었으므로 대신 MMAL 용 motion 파일을 다시 설치하면 됩니다.
Motion-MMAL을 설치하기 위한 가장 간단한 방법은 미리 컴파일된 버전을 가져와서 사용하는 것입니다. 먼저 적당한 폴더로 이동해서 아래 작업을 실행합니다.
압축을 풀고
- tar zxvf motion-mmal.tar.gz
설정 파일을 수정해 줍니다.
- sudo nano motion-mmalcam.conf
아래처럼 화면이 나오면 필요한 부분들을 수정합니다.
데몬 설정
- daemon on
이미지 회전 설정 (기울어져서 보이는 경우 수평을 맞추는 작업, 0-90-180-270 중 선택)
- rotate 0
Image resolution 640×480 (이미지 해상도가 높으면 끊김, 시스템 불안정의 원인이 될 수 있음)
- width 640
이미지 캡쳐 (동작이 감지되면 이미지를 저장)
- output_pictures off
비디오 포맷으로 저장
- ffmpeg_output_movies off
모든 네트웍에서 접근이 가능하도록 설정
- stream_localhost off
Ctrl-X –> Y 를 눌러서 저장합니다.
아래와 같이 Motion 실행합니다.
- sudo ./motion -c motion-mmalcam.conf
브라우저에서 라즈베리 파이 IP, 8081 포트로 접속하면 스트리밍 영상을 보실 수 있습니다. 단, 크롬과 IE에서는 안보이네요.
PC 브라우저가 지원하지 않는다면 아래 링크에서 전용 프로그램을 받아서 보세요.
http://www.softpedia.com/get/Internet/Other-Internet-Related/Motion-JPEG-Player.shtml
Motion을 데몬(백그라운드 서비스)로 실행하고 싶으시면 아래처럼 해보세요.
- sudo cp motion /usr/bin/
- sudo cp motion-mmalcam.conf /etc/motion/
- sudo nano /etc/default/motion
데몬 설정을 yes 로 수정 - sudo service motion start
- sudo service motion stop
(데몬 상태에서의 사용법은 추후 업데이트 예정)
주의!!! Motion-MMAL 을 실행할 때 libjpeg.so 9 is missing 과 유사한 에러가 발생한다면 해당 라이브러리 설치가 필요합니다. 아래 명령어를 실행해서 라이브러리 설치하고 다시 실행하면 됩니다.
- sudo apt-get install libjpeg62
일반 USB 웹캠을 사용한 Motion 사용 방법은 아래 링크를 참고하세요.
참고자료
- 파이카메라 활용하기 : 파이카메라 MOTION 적용하기
http://www.rasplay.org/?p=4910 - INSTALL MOTION-MMAL
http://embeddedday.com/projects/raspberry-pi/a-step-further/install-motion-mmal/
좋은 자료 감사합니다.
좋은 자료 정말 감사합니다. 정말 궁금한것이 있는데 저기 위에 보면 동작이 감지도면 이미지 캡쳐라는 설정이 있는데 제가 안드로이드로 신호를 보내면 캡처를 하는 기능을 추가하고싶은데 저설정말고 신호를 받으면 캡처가되는 것은 없나요??
그건 직접 프로그래밍 하셔야 합니다. 먼저 아두이노에서 응답을 받을 방법을 고려해야 하고.. 응답을 받으면 쉘 커맨드로 이미지를 캡쳐하는 방식으로 구현해야 할 겁니다.
감사합니다. 저는 다르게 아두이노는 쓰지 않고 라즈베리파이로 지금 서버 열어서 mjpg스트리머를 사용해서 안드로이드로 영상을띄우느데 까지는 성공했는데 캡처버튼을 누르면 라즈베리에서 스넵샷을 찍어 폰으로 전송을 하는것이라. 소켓통신까지는 다짜져잇는데 쉘을 공부해서 다시 시도해봐야겠어요 .
그럼혹시 자바에서 파이카메라를 제어 할 수 있는 방법이라도 없나요?? 그러면 지금 찍고있는 영상을 그림으로 가져오도록 코딩하면될 듯한데 인터럽트처리만 쪼금하면 될꺼같아서 이쪽이 더 쉬울꺼같기는한데…
자바는 잘 모르겠는데 파이썬을 이용해서 카메라 제어가 가능합니다. 파이카메라 라이브러리 설치해서 사용하시면 됩니다.
답변감사합니다 시도해보겠습니다
현재 안드로이드 라즈베리파이 캠과 스트리밍 연동을 해보고있는데요.
darwin streaming 해보려니, 라즈베리파이에서 설치가 잘안되서 motion쪽 시도해봤습니다.
근데 문제가, mjpeg방식이라 그런지, 일단 옵션에서 framerate를 25로 바꿔서 해봤는데도, 사진 프레임빈도가 너무 안좋았구요 제가확인해봣을땐..
그리고 , 사진이 다 찍혀서 jpg형식으로 하드에 저장이 되네요 ..혹시 제가 뭐 잘못한 부분이있는걸까요
프레임레이트도 거의 2~3정도 수준으로 나와서요..
아 output_picture 옵션이 on이엿네요. 사진저장문제는 해결햇는데, 혹시 프레임이 저만큼 안나오시나요?
제 경우에는 MMAL motion 실행할 때 변경된 옵션이 적용이 안되는 문제가 있어서요.. 대신 MJPG Streamer를 이용해서 테스트 해봤습니다.
http://www.hardcopyworld.com/ngine/aduino/index.php/archives/2431
설정을 10frame으로 변경해서(640×480) 해도 초당 2~3 프레임 밖에 안나오네요. 브라우저 리프레시가 느려서 그런건가 아님 MJPG의 한계인가 싶기도 하구요…
./motion : error while loading shared libraries : libavformat.so.53: cannot open shared object file : No such file or directory
라고 메시지가 뜹니다. 어떻게 해결해야 될지요…..ㅠㅠ
지금 초음파 센서를 이용하여 센서 이벤트 시 녹화가 되게는 했는데, 항상 영상이 보이다가 센서 이벤트 시 녹화되도록 하려고 하고 있습니다. 도움주시면 감사 드립니다.^^
혹시 총 비용이 얼마정도 나오나요?
Hello, This is Future Dimension,
we provide sposync.com to access to your device with
streaming and control using webRTC technology Free.
Only one required app is a web browser – Chromium and
provided python websocket server on RPI.
(tested for Buster and Chromium 72)
You can define the control command and extra security key if needed.
With these inputs, only you can access to your device remotely.
Please contact misdiva1bil@gmail.com
Thanks,
David FDI
RPI 탑재 Chromium 활용 원격 접속 제어 및 스트리밍 서비스 무료 – 앱 개발전 간단한 제어 명령만 정의되면 기능등 시험 가능 sposync.com