top drop menu

Recent Post

화요일, 8월 23

WebioPi와 UV4L를 이용하여 라즈베리파이 파이카메라 스트리밍 컨트롤러 만들기(3)

WebIOPi는 웹상에서 라즈베리파이의 GPIO를 컨트로할 수 있게 해준다. 라즈베리파이2에는 대응하지 않는다고 하지만 소스를 수정하면 사용이 가능하다고 한다. 지금은 상관 없는 일이다.

http://webiopi.trouch.com/DOWNLOADS.html

에서 최신 파일을 다운로드 받을 수 있다. wget이 안되서 여기서 다운로드 받아서 라즈베리파이에 옮겨 놓았다.

$ tar xvzf WebIOPi-x.y.z.tar.gz
$ cd WebIOPi-x.y.z

*추가사항 : 라즈베리파이 2에서 Webiopi를 사용하기 위해서 패치를 해줘야 한다.

$ wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch

$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh

※ webiopi를 설치 하고 나서 기본적으로 실행되는 웹서버 문서 위치는 /usr/share/webiopi/htdocs 이다. 이곳에 이동해서 보면 index.html 등 브라우저 접속해서 보이는 것들이 위치해 있다.

$ sudo /etc/init.d/webiopi start

부팅시 자동 실행 되게 할려면

$ sudo update-rc.d webiopi defaults

그리고 웹브라우저에서 라즈베리파이의 주소에 포트 :8000 으로 접속하면 된다.

※ Webiopi를 디버깅 모드로 실행하는 방법은
$ sudo webiopi -c /etc/webiopi/config -d 로 실행해 주면된다. 터미널에 메세지가 출력된다.

이렇게 해서 필요한 3가지를 모두 설치했다.
웹화면은 이전에 만들어 놓았던것을 그대로 활용했다. 예전에 작업했던것과 다를게 없다. 단지 영상만 UV4L을 이용한것으로 바꾸어 준 셈이다. 백업을 제대로 안해서 중간 작업단계의 것인듯 ... 음~




상단의 스트리밍 영상은 UV4L를 이용한 것이다. 영상과 모터 움직이는것은 관련성이 별로 없다. 카메라 움직이는대로 영상을 스트리밍 할 뿐이다.
WebioPi 스크립트도 이전에 것을 그대로 사용했다. 거의 다시 타이핑했다. 스트리밍 영상을 웹페이지에 끼워 넣는것은 쉽다. http를 지원하는(?) 스트리밍이기 때문에 그냥 소스 한줄이면 웹페이지에서 보인다.
<img src="http://raspberrypi-ip:8080/stream/video.mjpeg">


그냥 이미지 태그에 소스에 링크만 걸어 주면 된다. 물론 UV4L이 정상적으로 설치되고 설정이 되어 있어야 겠지만 ... 컨트롤러 부분을 살펴 보자.
이 부분은 WebioPi서버를 이용해서 파이썬 스크립트에 동작함수를 실행하게 해서 모터를 원하는 방향으로 움직이게 하면 된다.  파이썬에서 모터를 동작하게 하는것은 터미널에서 echo 0=150 > /dev/servoblaster 해서 모터를 움직이듯이 버튼에 따라 터미널에 명령을 주어 실행하게 하는 방식을 사용했다.

call("sudo echo 0=150 > /dev/servoblaster", shell =  True)
한줄이면 파이썬에서 모터를 움직이게 한다. sudo는 안해 줘도 되나?
버튼에 따라 패닝과 틸트 동작을 하게 하고 사각버튼은 기본위치로 돌아 가게 했다. auto scan은 자동으로 좌우로 움직이게 했다. 속도바를 조절하면 움직이는 속도가 변경된다. WebioPi를 이용하면 웹페이지에서 함수를 실행할때 인자를 같이 볼 수 있다. 속도의 변경값을 보내서 모터의 움직임을 조절하는 것이다.
맨 하단에 on/off버튼이 있는데 이게 좀 말썽이다. 어떤 기능을 줘야 하는지 명확하지 않다. 뭘 끄고 뭘 켜는 거지? ㅋㅋ 일단 영상과 서보모터의 동작을 끄거나 다시 켜는 것으로 해주었다. 그런데 영상 부분이 원하는대로 잘 안된다. UV4L 서비스를 중단하고 가동하는게 잘 모르겠다. 음~

전체적으로 이 프로그램이 동작하는 방식에 대해서는 더 고민을 해봐야 겠다. 라즈베리파이가 부팅하면 WebioPi는 자동으로 실행되게 해주었다. 그래야 브라우저에서 접속을 하니깐. 그런데 자동으로 영상을 보일것인지 서보블라스터를 가동해야 할지? 이 라즈베리파이가 딱 이 목적을 위한것이면 모두 부팅시 실행되게 해주면 고민 끝이지만 이런 저런 용도로 사용해야 한다면 사용하지 않을때는 쓸데없이 이런 서비스를 가동시켜 놓을 필요가 없기 때문이다. 이부분은 일단 두고 보자.


이렇게 작업한 것이 실제로 쓸만하지는 객관적으로 판단하기는 힘들다. 일단 라즈베리파이가 구모델 이라는 점과 일반 광랜에 유선도 아닌 무선랜을 사용하는 있으니 성능이 떨어지는것은 당연한 것 같기도 하다. 잠깐 야외에서 LTE로 접속해서 보니 자연스러운 동영상 스트리밍을 기대하기는 힘든것 같다. 역시 폰에서는 그냥 JPEG로 한장 한장 보는게 나을듯 하다. 일단 이정도에서 마무리~

WebioPi와 UV4L를 이용하여 라즈베리파이 파이카메라 스트리밍 컨트롤러 만들기(2)

이제 서보모터를 쉽게 컨트롤 할 수 있는 Servoblaster를 설치해 보자.

$ git clone https://github.com/richardghirst/PiBits
Pi계정 홈디렉토리 다운로드 받는다.

$ cd PiBits/ServerBlaster/user/
이동

$ sudo make install
데몬이 설치되고 실행이 된다. 단순 라이브러리 개념이 아닌듯 하다. 데몬이 항상 떠 있어야 한다.
사용법은 간단하다. 서보블라스터에서 라즈파이의 핀들을 자기들 번호로 매핑을 해 놓았다. 그 번호를 잘 맞춰서 핀번호=위치값을 파일로 저장하는 듯 하다. 그럼 데몬이 주시하고 있다가 모터를 작동시키는 것 같다. 떨림도 없고 간편하고 좋은것 같다.


sudo ./servod 해보면 어떤 핀번호를 사용해야 할지 알 수 있다. servod이게 정확히 어떤 역활인지는 모르겠다. 핀을 관리 하는것 같기도 하다. 어쨌든 나는 모터 두개를 GPIO-23과 GPIO-24에 연결해 놓았다. 그럼 서보블라스터 기준으로 봐서 5번과 6번이다. 이제 모터를 돌려 보자.

$ echo 0=150 > /dev/servoblaster
$ echo 1=150 > /dev/servoblaster

컨멘트 라인에 입력해 주면 모터가 동작하는 것을 확인 할 수 있다.

더 자세한 내용은 아래 링크에서 확인해 보자.

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster

<다음편에서 계속>

WebioPi와 UV4L를 이용하여 라즈베리파이 파이카메라 스트리밍 컨트롤러 만들기(1)

이 글에서는 WebioPi와 UV4L를 이용해서 파이카메라를 조작하여 원하는 방향을 촬영할 수 있도록 만들어 보자. 이 작업을 위해서는 아래 3가지를 설치해야 한다.

1. UV4L 설치하기
2. Servoblaster 설치하기
3. WebioPi설치하기

UV4L은 파이카메라의 비디오를 스트림하는 역활을 한다. Servoblaster는 파이카메라를 움직이는 서보모터 두개를 쉽게 조작할 수 있도록 해준다. WebioPi는 라즈베리파와 웹브라우저간에 통신을 하게 해서 영상과 컨트롤 정보를 주고 받게 해준다. 하나씩 설치해 보자.

1) UV4L 설치

http://www.linux-projects.org/

위 링크에 상세한 설치 방법이 소개되어 있다. 간단히 적어 보면 아래와 같다.

$ curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -

$ sudo nano /etc/apt/sources.list 파일을 열어서 아래 한줄 추가해 주자.(자신의 설치 버전에 따라 다름)
deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ jessie main

$ sudo apt-get update
$ sudo apt-get install uv4l uv4l-raspicam

$ sudo apt-get install uv4l-raspicam-extras
부팅시 모듈을 자동으로 드라이버를 로드하게 할려면  extras 패키지를 설치한다. 또한 서비스를 시작, 중지 재시작등의 편리한 기능을 제공한다.
편하게 살려면 해지...

$ sudo service uv4l_raspicam restart (서비스 실행하기)
서비스가 시작되면 기본적으로 UV4L은 /etc/uv4l/uv4l-raspicam.conf 파일을 참조해서 실행이된다. 기본값을 변경하고 싶다면 이 파일을 원하는대로 수정하면 된다. 해상도나 화면 반전등 다양한 옵션을 변경해 주면 된다. 이것은 나중에 웹페이지로 접속해서 변경을 해줄도 있는것 같다. 수동으로 실행할때 추가해 줄 수도 있다. 이 값을 초기 실행될때의 기본값이 들어 있는 파일인듯 하다.

$ sudo nano /etc/uv4l/uv4l-raspicam.conf


파이카메라가 준비 되었다. 테스트로 JPG 사진을 찍어 보자.

$ uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding jpeg
(이건 앞에서 extras를 설치하지 않고 수동으로 직접 로드해주는 방식이다. 아니면 다시 옵션을 다르게 해서 실행하고 싶을때 해 줄 수 있다. 파이 카메라를 어떤식으로 작동 시킬것인지 설정해 주는것 같다.)

$ dd if=/dev/video0 of=snapshot.jpeg bs=11M count=1 (찰칵!)
스트리밍 및 추가 기능을 사용하기 위해 아래 것들을 모두 추가 설치해 주자. 뭔지 정확히 모르겠지만 일단 모두 설치해 주자.

$ sudo apt-get install uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream uv4l-dummy

$ pkill uv4l
실행중인 프로세스를 죽이는 명령이다.  앞의 설정을 지우고 다시 로드 하고 싶을때도 사용하면 되는것 같다. 즉, 뭔가 제대로 동작을 않을 때도 죽였다 다시 실행해 주자.
이렇게 하면 UV4L 코어 컴포넌트와 V4L2 드라이버 설치가 마무리된 것이다.
이제 웹브라우저에서 http://raspberrypi_ip:8080 으로 접속해보자. 다양한 옵션이나 기능을 보다 쉽게 이용하거나 변경해 줄 수 있다.



위 페이지로 접속한다. 터미널로 일일히 타이핑하는것보다 사용하기 쉽다. MJPEG/Stills stream을 선택하면 스트리밍되는 영상을 웹브라우저에서 확인할 수 있다. 크롬이나 파이어폭스에서 가능하다. 문제의 MS 익스플로러에서는 안되는것 같다. 안드로이드 폰 웹어플에서도 가능하다. Control Panel 아이콘을 선택하면 앞에서 해줬던 이런 저런 설정을 바로 변경해 줄 수 있다. 다른 아이콘 메뉴들은 개인적으로는 거의 사용할리 없거나 상관없는 것들이다. 일대일 혹은 다자간 화상회의 같은게 가능하다는 것 같다.
최신 기술로 WebRTC라는게 있는데 이게 라즈베리파이1에서는 안된다는 것 같다. 파이2부터는 된다고 ... 이런! 이건 포기하자.


해상도를 변경하고 화면 밝기나 콘트라스트 조절, 상하, 좌우 반전하기 등 잡다한 옵션을 설정할 수 있다. 역시 눈으로 보고 하는게 편하다. 파이카메라를 뒤집어 장착해 놔서 화면을 반전해주는 옵션을 선택했다. fullHD등 고해상도도 지원하지만 아무래도 재생 성능이 떨어지는 듯하다.



정확한 테스트인지는 모르겠지만 대략 가늠해 볼 수 있을듯 하다. 라즈베리파이에는 무선랜을 사용하였다. PC의 파이어폭스 브라우저로 접속하여 테스트 해 보았다. 스트리밍 해상도를 FullHD -> HD -> SD로 바꾸어 가며 촬영하였다. 이건 PC의 성능과도 연관이 좀 있을것 같고 ... SD급으로는 거의 지연없는 스트리밍이 가능해 보인다.
재미 있는 기능도 들어 있다. 바로 얼굴인식 ... 브라우저에서 컨트롤판넬에서 object/face detection에 사용함으로 변경해 주거나 아래 명령으로 실행해 주면 된다.

$ uv4l --driver raspicam --auto-video_nr --object-detection --min-object-size 80 80 --main-classifier /usr/share/uv4l/raspicam/lbpcascade_frontalface.xml --object-detection-mode accurate_detection --width 320 --height 240 --framerate 15 --encoding h264

이렇게 해서 파이카메라 사용과 영상 스트리밍을 위한 UV4L 설치와 설정에 대해 알아 보았다.

<다음편에 계속>


수요일, 8월 17

라즈베리파이에게 이동의 자유를 - 무선랜 설치하기 iptime N100 mini - AP



유선랜이 속도면에서 안정적이고 빨라서 좋기는 하지만 유선의 불편함은 어쩔 수 없다. 라즈베리파이를 다목적으로 활용하기 위해서는 이동을 자유롭게 해야 한다. 그래서 유선랜 대신 USB방식 무선랜을 설치하고 설정해 보기로 하자. 전원은 샤오미 배터리팩으로 하면 된다.
일단 유선랜으로 연결된 상태에서 무선랜을 USB포트에 연결하자. 라즈베리파이에서 이 장치를 제대로 인식을 하고 있는지 확인해 보자.
$ lsusb



Realtek 어쩌고 저쩌고 .... 제대로 붙었다.
wifi동글이 제대로 인식이 되었는지 확이해 보자.
$ iwconfig



wlan0 이라고 제대로 인식이 되어 있은것을 확인할 수 있다.
이제 주변 AP를 검색해 보자. 여기서 자신의 공유기를 찾는 과정이다.
$ iwlist wlan0 scan



자신의 공유기 이름과 암호방식을 확인해 둔다.



$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
파일을 열어서 아래 내용을 추가해 주자. 여기서 다른 파일 이름을 지정해 주고 복잡하게 설정하는게 있던데 보안면서 그게 더 좋은지 모르겠지만 간단하게 가자.

network={
    ssid="자신의 공유기 이름"
    psk="공유기접속 암호"
    key_mgmt=WPA-PSK
}



저장하고 빠져 나오자.
$ sudo ifdown wlan0
$ sudo ifup wlan0
랜카드를 재시작 해주자.
$ ifconfig 해서 wlan0에 제대로 ip를 부여 받았는지 확인한다. 제대로 되지 않는다면 라즈베리파이를 재부팅 한번 하자. 이제 유선랜은 뽑아 버리고 무선랜으로 라즈베리파이를 즐길 수 있게 된다.


월요일, 8월 15

라즈베리파이에 서보모터 컨트롤을 위한 서보블라스터(Servoblaster) 설치하기

파이카메라를 움직이기 위해 서보모터를 달아 놓았다. 모터를 컨트롤 하기 위한 '서보블라스터'를 설치해 보자.
먼저 github로 부터 프로젝트를 복사해야 한다.

pi@raspberrypi:~ $ git clone https://github.com/richardghirst/PiBits


pi@raspberrypi:~ $ cd PiBits/ServoBlaster/user/

user폴더 까지 이동한다.

pi@raspberrypi:~/PiBits/ServoBlaster/user $ sudo make install


설치가 끝났다. 그리고 데몬이 시작 되어 있다. 이제 모터를 컨트롤 할 수 있게 되었다.

pi@raspberrypi:~ $ echo 0=150 > /dev/servoblaster


연결된 모터의 인덱스 번호와 위치값을 주면 해당 위치로 모터가 회전한다. 간단하다. 패닝동작을 하는 모터 한개를 서보블라스터 0번에 해당하는 라즈베리파이의 GPIO 4번핀에 연결했다. 틸트 역활을 하는 모터를 추가로 연결한다면 1번에 연결하면 된다.


좀더 최적화 하는 방법이 있지만 일단 이 상태로 테스트를 할 수 있다.


간단히 동작하는 모습. 이제 이런저런 프로그램에 모터를 컨트롤 할 수 있도록 작업을 하면 된다. 다음 프로젝트로 CCTV 처럼 원하는 방향으로 카메라를 회전하는 기능을 만들어 보자.
여기까지 서보블라스터를 설치하고 동작하는 방법에 대해 알아 보았다.



목요일, 8월 11

라즈베리파이에서 V4L2 - RTSP 서버로 비디오 스트리밍하기

Live555를 사용하여 비디오 스트리밍을 해 봤지만 결과가 신통찮았다. 그래서 다른 솔루션을 찾아 보니 다른게 또 있다. 음~ 이것도 하번 해보자. 언제까지? 제대로 될때까지... 왜 이걸 할려고 하는지 깜빡 할때가 있기는 하지만.
V4L2는 카메라 입력을 받기 위한 표준 인터페이스이다. 이번에는 이녀석을 이용해서 동영상 스트리밍을 해보자.

$ sudo apt-get update
$ sudo apt-get upgrade

update만 해 주었다.

$ sudo apt-get install v4l-utils
$ sudo modprobe bcm2835-v4l2 (일회성 실행인듯)

필요한 유틸을 설치(기본적으로 설치는 되어 있는듯 하다)하고 모듈을 실행한다.
이미 설치 되어 있을 수도 있다.


제대로 설정 되었는지 확인해 보자.
계속해서 bcm2835-v4l2를 사용하겠다면 modules에 등록을 해 놓아야 한다.

$ sudo nano /etc/modules
-> bcm2835-v4l2 추가해 준다.

이제 RTSP 서버를 다운받아서 설치해야 한다.

$  sudo git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git
*git가 설치 되어 있지 않다면 먼저 git를 설치해 줘야 한다. 검색해서 참조할것.
$ sudo apt-get install liblivemedia-dev libv4l-dev cmake libasound2-dev

의존성에 필요한 것들(3개)을 추가로 미리 설치해 준다. libasound2-dev 라이브러리를 추가해 주었다. 이것 때문에 에러가 생긴듯 하다.

$ cd h264_v4l2_rtspserver

위에서 다운로드 했던 V4L2-rtspserver 디렉토리로 들어간다.

$ sudo cmake . (끝에 점을 빼 먹지 말자.)
$sudo make
이제 모든 설치가 완료 되었다. 이제 서버를 실행하면 된다.
지금 작업했던 디렉토리에서 실행되어야 한다. 나중에 다시 실행하더라도 이곳으로 이동하거나 경로를 적어 줘야 한다.

pi@raspberrypi:~/h264_v4l2_rtspserver $  sudo ./h264_v4l2_rtspserver -F 25 -W 1280 -H 720 -P 8555 /dev/video0
이제 클라이언트 RTSP 지원 플레이어에서 주소를 열어 접속한다. PC에서 다음팟플레이어를 실행하고 주소열기 창을 열어서 아래 주소를 입력해 준다.


rtsp://raspberrypi-ip:8555/unicast

로 접속하면 영상을 확인 할 수 있다.



RTSP Player 라는 안드로이드 어플로도 접속해 보니 정상적으로 잘 나온다.



- Live555보다 딜레이가 짧고 안정적인듯 하다.
- 하지만 GStreamer보다는 딜레이가 길다.
- 영상을 flip하는 하는 옵션은 뭣인가?
- 안드로이드에서도 딜레이가 더 있지만 Live555 처럼 끊기거나 중단되는 현상은 없는것 같다.
- 또 다른 RTSP 서버를 찾아 봐야 하나? GStreamer가 제일 나은듯 보인다.


*참고

V4L2를 사용하려고 보니 카메라가 뒤접혀 있어서 영상이 또 상하좌우 바껴 있다. 이걸 어떻게 정상으로 뒤집어야 하나 찾아 봐도 정보를 찾기 쉽지 않다. 방법은 v4l2-ctl --set-ctrl 옵션지정 방식으로 다양한 영상 효과를 줄 수 있다. 자세한 목록은 파일로 첨부 하였다.

$ v4l2-ctl --set-ctrl horizontal_flip=1 (수평으로 영상을 반전 시켜 준다. 기본값은 0 이다.)
$ v4l2-ctl --set-ctrl vertical_flip=1





수요일, 8월 3

갤럭시S4 - 사람 깜짝 놀래키는 '긴급재난문자' 차단하기


뜸금없이 갑자기 불현듯 시도때도 없이 폰에서 굉음이 나기 시작한다. 국민안전처에서 보내는 긴급재난문자라는 것이다. 2013년 부터인가 휴대폰에 의무적으로 이 기능을 탑재 해 놨다는 것이다.
내용은 날씨가 덥단다. 지금이 한여름인거 나도 안다. 뻔한 별것도 아닌 문자를 이렇게 요란 스럽게 보내다니...
난 또 어디 전쟁이라도 난 줄 알았다. 그래서 이 긴급재난문자를 차단해 보자.
찾아 보니 폰마다 안드로이드 버전에 따라 다른지 내 폰과는 맞지 않는다? 갤럭시S4는 다음과 같이 해 주면 된다.


메세지 어플을 실행하고 설정으로 들어 가자. 재난문자 항목이 있다. 선택한다.


긴급 메시지 수신 항목을 체크를 풀어 준다.
더위 정도는 각자 알아서 대처 하자.
Blogger Widget