본문 바로가기

개발자/Raspberry Pi

OpenCV 기반의 안면인식 1 - V4L2(Video4Linux2) 설치부터

반응형






아래 설명 도움 받은곳 : http://coeleveld.com/harald/291-pi-camera



카메리를 사용한다면 아래부터 확인한다.


라즈베리 파이의 카메라 모듈을 사용한다면 


$sudo raspi-config 명령을 사용하여 카메라를 Enable 해야 한다. 아래 명령으로 라즈베리 파이 카메라 모듈이 정상으로 동작하는지 확인한다


$raspistill -o myimage.jpg    -- 이미지 한장 촬영

 
$raspivid -o myvideo.h264 -t 10000  -- 10초 동영상 촬영




Pi Camera + Motion


현재 라즈베리 파이에 연결한 CSI Camera Board 는 USB webcam이 나니다.  그래서 라즈베리 파이가

카메라를 비데오 장치 (/dev/video0) 로 인식하게 Video4Linux driver를 사용해야 한다.


UV4L은 리눅스에서 카메라를 이용한 영상의 획득과 출력 장치의 제어를 위한 API, 드라이버 프레임 워크를 가리키며, USB 웹캠, TV 튜너장치등을 지원한다. 


라즈베리 파이에 UV4L 의 설치와 업그레이드

UV4L 설치를 위해 터미널에서 아래와 같은 명령을 실행한다.

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

실행 내용을 보자.



pi@raspberrypi ~ $ wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc --2015-06-19 01:34:42--  http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc
Resolving www.linux-projects.org (www.linux-projects.org)... 62.149.140.25
Connecting to www.linux-projects.org (www.linux-projects.org)|62.149.140.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1337 (1.3K) [application/pgp-signature]
Saving to: `lrkey.asc'

100%[========================================================================>] 1,337       --.-K/s   in 0s

2015-06-19 01:34:43 (18.0 MB/s) - `lrkey.asc' saved [1337/1337]

OK
pi@raspberrypi ~ $ ls -al lrkey.asc
-rw-r--r-- 1 pi pi 1337 Jul 22  2013 lrkey.asc
pi@raspberrypi ~ $ cat lrkey.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

mQGiBD/c9TgRBAC25mn8E0zR3Pmh7aSXbWBUtuWpk5uDK86MPy8hEWhGyJuqwnvH
jfmnksCpTy+XZ9Z2MxLgLrcbFK/nECBSDsqvooQuN+5imwiOKG9zA3hfcV/h3GG7
mkN2ZJ3tC0S/7W9CNCaEAhsB8yqyywzw4Hfu/IK8lx0MOXsMN0pc8LPoKwCg6iRe
wADxD8KS5Tkj4/YGT9J3aY8D/RIE58M2Ulq8vLWj8exxJF0y7nejYs2nAk6l1ZEe
a/lziz5YgKKLJwgB5jLjteHLwuJpBi5OxPX0bb1yIsrjv4ap7vIQEwwRjCLXCPUg
QFuySyNrDAPuIGgaa5BMTOGqRvxdGq6QKIhM2ffsaMFq7hp4y+pxHPXTTZniUxTt
nZXRBACuknzahJOhPND1XVCqvsikLOwn6FYY503s1QO9kezZjHMDGAOZgHfu9joz
Z03FlComfDrZJvSHBM8R6exYdBOyuFwVIB6wqDhs7YFp4Lh9orit/KAJaGMAYDil
XIY1hShKveejy+q2hkixOlL/TU/BQwKbtZPgvr15UNF1geJLALQrTHVjYSBSaXNv
bGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PohZBBMRAgAZBQI/3PU4
BAsHAwIDFQIDAxYCAQIeAQIXgAAKCRCZ2l0q/OY1pCoZAKDn5NWTQNpvLFJRiQFJ
JOgV1PZFOACeKvgWd4I0zw/+exwxkmgmFXmACUm5AQ0EP9z1cBAEAJPiWTxKW3As
s45VI8/5uwmUqfsbXDLIco8NSWiCacoJPyCP7skcGxb7zEtEP/DSBTJg4+1Y1qGX
fMMN725plvwEUpMdwzQRDaF6gStttsGY/MMO5o5BtcH4f9cQ3vXUWFWTQp8Hsrhd
uyOGo5E1lI/YAUl1l+UK+UX+hq9ET6mfAAMFA/99FiBNx1M6s4wN489yHRVsFsTp
Nv5itqtZU6WrYWN/zhk0vEywadriWVkpV5QpIXAC86oCGbHe59PT2R2ER4i+J8JN
x1qu6XmEuXnXEWPtBawd7D9JFG0d7BlMRnMqBnuopdDmrK3B9KMq4ambFIwc7Oi2
Hp5XCwBOHoBrglzpQYhGBBgRAgAGBQI/3PVwAAoJEJnaXSr85jWkRY0AoI12RloF
/71dKJZ6Mws2HM8EBnP8AJ9ik4y7DEzRakKm1rGopUKRRF5Qqg==
=M2b1
-----END PGP PUBLIC KEY BLOCK-----
pi@raspberrypi ~ $



다음 파일을 여로 아래 내용을 추가한다. $sudo nano /etc/apt/sources.list :

    deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main 


아래 명령을 실행한다. 


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

위 두명령은 가장 최근 버전으로 UV4L 를 업그레이드 하고 인스톨한다.


부팅시에  UV4L 모듈이 로드되도록 하려면 아래와 같이 추가적으로 패키지를 설치한다.


    $ sudo apt-get install uv4l-raspicam-extras

설치 화면을 아래에 나타낸다. 아래부분에 warning 은 무시하기 바란다.



pi@raspberrypi ~ $ sudo apt-get install uv4l-raspicam-extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  uv4l-raspicam-extras
0 upgraded, 1 newly installed, 0 to remove and 9 not upgraded.
Need to get 4,264 B of archives.
After this operation, 44.0 kB of additional disk space will be used.
Get:1 http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy/main uv4l-raspicam-extras armhf 1.2 [4,264 B]
Fetched 4,264 B in 0s (4,540 B/s)
Selecting previously unselected package uv4l-raspicam-extras.
(Reading database ... 84575 files and directories currently installed.)
Unpacking uv4l-raspicam-extras (from .../uv4l-raspicam-extras_1.2_armhf.deb) ...
Setting up uv4l-raspicam-extras (1.2) ...
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default start runlevel arguments (2 3 4 5) do not match uv4l_raspicam Default-Start values (S)
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match uv4l_raspicam Default-Stop values (none)
pi@raspberrypi ~ $


위 패키지는 사용자 편의를 위해 드라이버의 실행과 종료를 위한 스크립트를 제공한다. 사용법은 아래와 같다.


    $ sudo service uv4l_raspicam restart  -- UV4L 서비스 시작명령


pi@raspberrypi ~ $ sudo service uv4l_raspicam restart
[....] Starting UV4L Raspberry CSI Camera Driver: uv4l
<notice> [core] Trying driver 'raspicam' from built-in drivers...
<warning> [core] Driver 'raspicam' not found
<notice> [core] Trying driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam Video4Linux2 Driver v1.9.27 built Feb 21 2015
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [driver] ROI: 0, 0, 1, 1
<notice> [core] Device detected!
<notice> [core] Registering device node /dev/video0
pi@raspberrypi ~ $

UV4L 서비스를 시작할때 uv4l 는 컨피그 파일  /etc/uv4l/uv4l-raspicam.conf 을 분석하여 드라이버 옵션으로 설정된 값들을 반영한다. 원하는 값으로 수정한 경우 부팅시에 그대로 적용된다. 


이제 CSI 카메라 모듈을 위한 UV4L core component 와 Video4Linux2 driver 를 설치하였다.  예기치 않은 에러와 드라이버 에러가 발생하면 업데이트를 실행하고 다시 해보기 바란다.


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


더 많은 정보와 옵션을 보기 위해 아래 명령어를 사용한다.

    $ man uv4l
    $ man uv4l-raspicam

사용 가능한 옵션을 보기위해 아래 명령어를 사용한다.

    $ uv4l --help --driver raspicam --driver-help

uv4l-raspicam-extras package 을 설치하지 않았다면 아래 명령어를 사용하여 수동으로 로드해야 한다.


    $ uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding jpeg

아래는 JPEG 이미지 캡쳐 명령어를 실행한다.

    $ dd if=/dev/video0 of=snapshot.jpeg bs=11M count=1

실행되는 드라이버를 종료하기 위해 아래 명령어를 사용한다.


    $ pkill uv4l

라즈베리 파이 카메라 보드 드라이버에 더해서 아래와 같은 추가 모듈과 드라이버를 설치할 수 있다.


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


아래 명령어로 uv4l 을 다시 시작한다. 


$ sudo service uv4l_raspicam restart  -- UV4L 서비스 시작명령


위의 패키지들에서 HTTP Streaming Server module을 설치하였다면 브라우저에 접속하여 라즈베리 파이의 IP, 주소에 접속한다.


 http://raspberry Pi IP 주소:8080/

매뉴얼은 아래 명령으로 볼 수 있다.

    $ man uv4l-server
    $ man uv4l-uvc
    $ man uv4l-xscreen
    $ man uv4l-mjpegstream


---  아래 모션 캡쳐 부분을 참고하라.

Install Motion from the official Raspbian repository:

    raspberrypi ~ $ sudo apt-get install motion

To start with Motion, download and try the following configuration file, which you can change later according to your needs:

    raspberrypi ~ $ wget http://linux-projects.org/downloads/examples/motion.conf 

Now run the driver in background, for example:

    raspberrypi ~ $ uv4l --driver raspicam --auto-video_nr
    [notice] [core] Device detected!
    [notice] [core] Registering device node /dev/video0

Finally, run Motion:

    raspberrypi ~ $ LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c ./motion.conf

If you run motion as daemon and the camera is not detected properly for some reasons, try to load the driver with the --extension-presence=1 option. Check if the Motion HTTP server is up and running on your Raspberry Pi. For example, from your PC with firefox:

    mypc ~ $ firefox http://raspberrypi:8081/ 

---


cd /etc/motion
wget http://linux-projects.org/downloads/examples/motion.conf
uv4l --driver raspicam --auto-video_nr --extension-presence=1
LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c /etc/motion/motion.conf
[20518728] Processing thread 0 - config file /etc/motion/motion.conf
[20518728] Motion 3.2.12 Started
[20518728] Motion going to daemon mode

[2099016] Processing thread 0 - config file /etc/motion/motion.conf
[2099016] Motion 3.2.12 Started
[2099016] ffmpeg LIBAVCODEC_BUILD 3482368 LIBAVFORMAT_BUILD 3478785
[0] Thread 1 is from /etc/motion/motion.conf
[0] motion-httpd/3.2.12 running, accepting connections
[0] motion-httpd: waiting for data on port TCP 8080
[1] Thread 1 started
[1] cap.driver: "raspicam"
[1] cap.card: "Camera Board OV5647"
[1] cap.bus_info: "CSI"
[1] cap.capabilities=0x05000001
[1] - VIDEO_CAPTURE
[1] - READWRITE
[1] - STREAMING
[1] Test palette YU12 (320x240)
[1] Using palette YU12 (320x240) bytesperlines 480 sizeimage 115200 colorspace 00000000
[1] found control 0x00980900, "brightness", range 0,100
[1]     "brightness", default 50, current 50
[1] found control 0x00980901, "contrast", range -100,100
[1]     "contrast", default 0, current 0
[1] found control 0x00980902, "saturation", range -100,100
[1]     "saturation", default 0, current 0
[1] found control 0x0098090e, "red balance", range 0,800
[1]     "red balance", default 100, current 100
[1] found control 0x0098090f, "blue balance", range 0,800
[1]     "blue balance", default 100, current 100
[1] found control 0x08000000, "shutter speed", range 0,65535
[1]     "shutter speed", default 0, current 0
[1] found control 0x08000001, "zoom factor", range 1,8
[1]     "zoom factor", default 0, current 1
[1] mmap information:
[1] frames=4
[1] 0 length=115200
[1] 1 length=115200
[1] 2 length=115200
[1] 3 length=115200
[1] Using V4L2
[1] Resizing pre_capture buffer to 1 items
[1] Started stream webcam server in port 8081
[1] File of type 1 saved to: /home/pi/01-20150115082251-00.jpg

^C
[0] httpd - Finishing
[0] httpd Closing
[0] httpd thread exit
[1] Thread exiting
[1] Calling vid_close() from motion_cleanup
[1] Closing video device /dev/video0
[0] Motion terminating

Experiment with changes in Motion config file:
daemon: on
width: 1280
height: 720
output_normal: off // do not save still images
webcam_localhost: off // allow remote access to live video stream


일단 여기까지...


여기부터는 잘 안되서 다음 포스팅으로...ㅠ.ㅠ.







반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩