본문 바로가기

Raspberry Pi/Web Cam

라즈베리파이 웹캠 스트리밍

라즈베리파이 USB 웹캠 설치 및 웹스트리밍 서비스 설정하기


라즈베리파이에 웹캠을 연결하고 영상 데이터를 외부로 스트리밍하는 기능은 인터넷에서 쉽게 찾을 수 있다. 그러나 그 자료를 바탕으로 테스트해보면 잘 되지 않는 경우가 더 많았는데, 가벼운 설정사항들은 생략하거나 혹은 정리할 때 빠뜨리고 기록하는 이유인 것 같다. 그래서 여기서는 가급적 설정사항들을 빠짐없이 설명하려고 한다


테스트 환경

라즈베리파이 B+ (2014년 구입, 2016년 최신 OS, Jessie 설치)

웹캠: 최저가로 구입한 중국산 웹캠(4천원)

USB 허브(유전원, 2만원) : 웹캠을 라즈베리파이 본체에 연결하면 전원이 약해서 작동하지 않으므로 독립전원을 가진 USB허브가 필요함



테스트 결과

고가의 장비가 아니더라도 라즈베리파이와 저가의 웹캠 그리고 스트리밍 서버(motion)가 있다면 보안 카메라로 활용할 수 있다는 것을 확인할 수 있었다. 정지영상과 동영상을 저장할 수 있었고 설정파일을 편집함으로써 정지영상 이미지는 저장되지 않도록 할 수도 있었다. 영상의 변화가 없으면 동영상으로 저장되지 않기 때문에 불필요한 디스크 낭비도 없었다. 스트리밍 URL을 다른 웹페이지에 이미지로 포함하여 실시간 생방송 서비스를 할 수도 있었다



설치하기 전에 시스템 업데이트

sudo apt-get update

sudo apt-get upgrade



라즈베리파이에 연결된 USB 허브와 허브에 연결된 웹캠이 인식되는지 확인

lsusb

위의 명령으로 USB허브와 웹캠이 확인되면 일단 성공!



설치할 프로그램들

nmap : 현재 열린 포트를 검사할 수 있으므로 motion 스트리밍 서버가 8080, 8081 포트에서 정상적으로 작동하는지 확인할 수 있다

motion: 웹캠의 영상을 인터넷으로 송출할 수 있는 스트리밍 서버 프로그램

fswebcam : 웹캠을 사용하여 정지영상을 촬영하여 이미지 파일로 저장할 수 있는 프로그램



nmap 설치

motion 스트리밍 서버는 디폴트로 8080, 8081포트를 사용하므로 nmap 프로그램을 이용하면 현재 열린 포트를 검사할 수 있으므로 motion 스트리밍 서버가 정상적으로 작동하는지 열린 포트를 통해 확인할 수 있다. 그러므로 motion 스트리밍 서버를 설치하고 테스트하는데 많은 도움이 된다


sudo apt-get install nmap



아래의 명령으로 현재 사용 중인 포트를 확인할 수 있다

nmap localhost


8080 포트에 웹브라우저가 접속하면 스트리밍 영상 데이터를 웹브라우저 화면에서 볼 수 있다

8081 포트는 관리용



motion(스트리밍 서버), fswebcam(정지영상 촬영 및 저장) 설치

아래의 명령으로 스트리밍 서버인 motion과 정지영상을 촬영하여 이미지 파일로 저장할 수 있는 fswebcam 을 설치한다. 반드시 동시에 설치할 필요는 없다

sudo apt-get install motion  fswebcam

sudo service motion start

sudo service motion restart

sudo service motion stop



스트리밍 영상 확인

웹브라우저 주소창에 라즈베리파이의 IP주소나 도메인을 입력하고 8081 포트로 접속하면 다음과 같이 영상을 볼 수 있다

http://192.168.8.47:8081





정지영상 촬영 및 사진 저장

아래의 명령으로 fswebcam을 이용하여 정지영상을 촬영하여 저장할 수 있다

sudo fswebcam image.jpg


nmap으로 사용되는 포트 확인

motion 스트리밍 서버가 정상적으로 작동한다면 사용되는 포트가 nmap 명령으로 확인된다

nmap localhost


motion 스트리밍 서버가 실행 직후 바로 종료되는 문제

motion 서버를 실행한 직후에는 위의 nmap 명령 결과 8080, 8081 포트가 열린 것을 확인할 수 있었지만 잠시 후 다시 확인해보면 이들 포트가 다시 닫혀 있는 것으로 확인되는 문제가 있었다


motion 스트리밍 서버가 바로 종료되어 버리는 현상의 해결

motion 스트리밍 서버는 지정된 시간마다 영상을 캡쳐하여 이미지 파일로 저장하는데, 저장할 디렉토리의 권한설정이 적절치 않아서 이미지를 저장하지 못하고 프로그램이 멈추게 된다는 것이다. 그러므로 임의의 디렉토를 하나 생성하고 그 디렉토리의 접근 권한을 적절히 설정한 후에 /etc/motion/motion.conf 파일을 열고 target_dir 항목을 /home/pi/images 등으로 편집하고 저장하면 된다


motion 설정파일의 주요 항목 설정

/etc/motion/motion.conf

daemon on : 백그라운드 프로그램으로 실행되도록 한다

stream_localhost off : 로컬에서만 스트리밍 서비스할 것인가?

output_pictures off : 영상을 파일에 저장할 것인가 ( on, off 를 적절히 설정 )

target_dir /home/pi/images : 영상을 저장할 경로, 이미지파일을 저장하는 경우 디렉토리를 지정하고 접근 권한을 적절히 설정해야 한다

stream_port 8081 : 영상 데이터를 송출하는 포트(이 포트에 웹브라우저로 접속하면 영상을 볼 수 있다)

stream_motion on 

stream_maxrate 1 : 동작이 감지되는 경우 송출할 영상의 초당 최대 횟수(1~100)

webcontroll_port 8080 : 스트리밍 서버를 제어할 때 사용될 포트

webcontroll_localhost off : 로컬에서만 스트리밍 서버를 제어하도록 할 것인가?



/etc/default/motion

start_motion_daemon=yes