Raspberry Pi_Kor_22.1.2 Raspberry Pi camera 처리 API


Published Book on Amazon


All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1
All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)
최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


22.1.2  Raspberry Pi camera 처리 API

 

Raspberry Pi 시스템에서 Raspberry Pi 전용 camera 기능을 처리하는 API으로 MMAL 방식과 V4L2 방식을 사용할 수 있다.   

 

22.1.2.1    MMAL (Multi-Media Abstraction Layer)

 

Raspberry Pi A+/B+시스템은 Broadcom에서 제작한 BCM2835 system board를 사용하는데, 여기서 그래픽을 처리하는 GPU VideoCore Ⅳ이다

 

MMAL(Multi-Media Abstraction Layer) Videocore Ⅳ 장착 systems에서만 사용할 수 있는 Broadcom 전용 API이다. MMAL API OpenMAX를 기반으로 실행되는 API로서, OpenMAX를 이용했을 때보다 시스템을 다루기 쉽다. MMAL API는 다른 API에 비해서 low level API로서, 보다 세밀한 그래픽 처리가 가능하고, 성능 면에서 보다 높은 기능을 활용할 수 있다

 

Raspberry Pi에서 MMAL API를 사용하는 camera 도구로는 다음과 같은 것을 사용할 수 있다.

    Motion                  -- 영상에서 움직임을 감지하여 촬영

    G-Streaming            -- 네트워크의 다른 컴퓨터로 영상 전송

    VLC                      -- Web으로 영상 방송

 

MMAL에 대한 상세한 자료는 다음을 참조하기 바란다.

    http://www.jvcref.com/files/PI/documentation/html/index.html#features


 

22.1.2.2    V4L2 (Video For Linux2)

 

   V4L (Video For Linux) V4L2(Video For Linux 2)

 

V4L (Video For Linux ) Linux에서 TV 튜너나 USB 웹 카메라 같은 다양한 비디오 장치에 대한 기능을 처리하는 표준 API이다. Video For Linux(V4L) 인터페이스의 첫번쨰 버전은 Alan Cox에 의해서 Linux2.2에서 개발되었다. 1999년에 두번쨰 버전인 V4L2(Video For Linux 2)인터페이스 개발이 시작되었고, V4L에서 발견된 버그를 고치고 더 많은 디바이스를 지원하게 되었다.

 

V4L2 driver는 일반적인 kernel module처럼 실행된다. 이것은 관리자에 의해 load될 수도 있고, device file을 열 때 자동으로 load될 수도 있다. 드라이버들은 기본 “videodev” 커널 모듈을 사용한다. 이 커널 모듈은 video device로 작업하기 위한 kernel device와 일치한다.

 

   Raspberry Pi UV4L (Userspace Video For Linux )

 

Raspberry Pi 초기에는 V4L 기능을 사용할 수 없었다. 그래서 특정한 개발자 그룹이 Raspberry Pi에서 V4L을 사용하기 위해서 만들어 낸 비공식적인 V4L(Video4Linux) UV4L (Userspace Video4Linux) driver이다. driver는 시스템의 firmware에 포함되지 않고, 별도로 설치되는 형식이므로 "Userspace"라고 한다. driver를 이용하면 Linux에서 USB webcams 용으로 개발된 많은 표준 Linux Application Raspberry Pi에서 사용할 수 있다.

 


 

   Raspberry Pi V4L2 (Video For Linux 2)

 

Raspberry Pi가 선풍적인 인기를 얻게 되자, Raspberry Pi Foundataion에서 V4L2(Video4Linux2 )기능을 시스템의 firmware에 포함시킬 필요성이 있어서 Broadcom과 협력하여 Raspberry pi 용으로 kernel-space V4L2 driver를 공식적인 개발하였다.  

 

최근에 제공되는 Raspberry Pi에는 kernel V4L2 driver가 포함되어 있고, Raspbian image에는 V4L2-ctl 과 같은 V4L2 utilities들이 기본으로 포함되어 제공되고 있다. driver firmware에 포함되어 운영되므로 별도의 설치가 필요 없고, UV4L보다 향상된 성능을 보여준다. driver를 이용하면 Linux에서 USB webcams 용으로 개발된 많은 표준 Linux Application Raspberry Pi에서 사용할 수 있다.

 

V4L2 driver "/dev/video0"~"/dev/videon"과 같은 장치 파일을 통해서 interface를 할 수 있는데, 시스템을 처음 설치했을 때는 이러한 장치가 보이지 않는다. 아래와 같이 확인해 보면 해당 장치가 없다.

 

pi@raspberrypi ~ $ ls /dev/video*

ls: cannot access /dev/video*: No such file or directory

 

driver firmware에 포함되어 제공되고 있지만 비활성화 상태로 되어 있어서 해당 기능을 사용하고자 하면 driver를 활성화시켜야 한다. 다음과 같은 "modprobe" 명령으로 활성화시킨다. "modprobe" 명령 사용법에 대한 상세한 설명은 여기서 다루지 않을 것이므로, 추가 자료가 필요하면 별도의 자료를 찾아보기 바란다.

 

sudo modprobe bcm2835-v4l2

 

이제 다시 장치를 확인해 보면 아래와 같이 장치가 활성화되어 있는 것을 확인할 수 있다.

 

pi@raspberrypi ~ $ sudo ls /dev/video*

/dev/video0

 


 

이제 "dd" 명령을 이용하여 해당 "video0" device가 정상적으로 작동하는지 확인해 보자. 아래와 같이 "video0" device에서 약간의 자료를 읽어서 다른 파일에 저장한다. 그러면 "test_snap2.jpg" 파일이 생성되어 있는 것을 확인할 수 있다.

 

pi@raspberrypi ~/Image_Camera $ dd if=/dev/video0 of=test_snap2.jpg bs=64M count=1

0+1 records in

0+1 records out

152064 bytes (152 kB) copied, 0.581062 s, 262 kB/s

pi@raspberrypi ~/Image_Camera $ ls -l

-rw-r--r-- 1 pi pi 2799282 May 13 14:06 test_snap1.jpg

-rw-r--r-- 1 pi pi  152064 May 16 23:07 test_snap2.jpg

 

그런데 V4L2 driver 활성화는 시스템이 작동 중에만 유효하고, 다음 booting에서는 계속 유지되지 않으므로, 시스템이 boot 할 때마다 다시 활성화시켜 주어야 한다. 시스템이 boot할 때마다 자동으로 활성화되도록 하려면 "/etc/rc.local" 파일에서 해당 내용을 설정하여 사용할 수 있다. init script를 사용하여 설정하는 방법은 [20.3.3 init script 작성]의 설명을 참조하기 바란다.

 

Raspberry Pi에서 V4L2 API를 사용하는 camera도구로는 다음과 같은 것을 사용할 수 있다.

    Motion                  -- 영상에서 움직임을 감지하여 촬영

    Open CV

    VLC --RTSP 방식      -- Web으로 영상 방송

    Mjpg-streamming     -- Web으로 영상 방송

    luvcview                 -- Web으로 영상 방송


 

Leave a Reply