라즈베리파이 카메라 모듈 사용하기

 

이번 포스팅에선 라즈베리파이 카메라에 대해 알아보도록 하겠습니다.


사진 출처: https://www.raspberrypi.org/products/camera-module-v2/

 

 

포스팅에서 쓰인 카메라는 카메라 모듈 v2입니다.

사진출처: https://www.element14.com/community/docs/DOC-80899/l/raspberry-pi-3-model-b-technical-specifications

 

라즈베리파이를 보면 카메라 모듈을 연결할 수 있는 단자가 있습니다.

CSI(Camera Serial Interface) 포트라고 하죠.

비슷하게 DSI(Display Serial Interface) 포트도 존재합니다. 이 포트는 라즈베리파이 디스플레이 연결할 때 쓰여요.

 

 

카메라 모듈을 사용하려면 라즈베리파이 CSI 포트에 카메라 모듈을 연결해야겠죠?

연결해 보겠습니다.

 

 

* 연결하기에 앞서 주의사항

- 카메라 모듈 선의 양쪽 끝이 생각보다 날카롭습니다.

  잘못하면 베일 것 같은 느낌? 조심해서 연결하면 좋겠습니다.

- 카메라 모듈을 연결할 때에는 라즈베리파이의 전원 연결을 끊고 연결해 주세요.


이곳에 카메라 모듈을 연결해 주면 됩니다.

 

연결부위를 자세히 보면 흰색과 검은색으로 나누어져 있는데

표시한 검은색 부분을 살짝 들어올리면 올라갑니다.


왼쪽 오른쪽 각각 살짝 들어 올려주면 됩니다.


카메라 모듈의 끝을 보면 흰부분과 파란색 부분이 있는데

흰부분을 HDMI 단자 방향으로 하여 라즈베리파이에 연결해 줍니다.


넣으면 들어가는 느낌이 듭니다.

마지막에 딱 그 손맛이 있어요. 아 이걸 표현을 못하겠네.

아무튼 잘 끼워졌구나 하는 느낌이 듭니다.


연결 단자의 검은색 부분을 닫아서 카메라 모듈을 고정시켜 줍니다.

카메라 모듈을 살짝 당겨서 연결이 잘되어 있는지 확인해 주세요.

 

카메라 모듈 연결이 끝났으면, 라즈베리파이를 켜서 카메라 설정을 해줘야 합니다.


라즈베리파이 터미널에서

~ $ sudo raspi-config

명령을 입력합니다.


 

interfacing Options 항목을 선택합니다.


Camera 항목을 선택합니다.

 

<예>를 선택해 줍니다.

 

확인을 선택하면 raspi-config 초기 화면으로 돌아갑니다.

Finish를 선택해줍니다.



Finish를 선택하면 위와 같은 화면이 출력됩니다.
라즈베리파이 카메라모듈 설정을 저장하기 위해 재시작합니다.
이후 라즈베리파이가 다시 시작되면서 카메라 설정이 완료됩니다.
위의 재시작 확인창이 뜨지 않는 경우 터미널에서  sudo reboot을 입력하여 직접 재시작 해주세요.

카메라 설정이 완료되었으니 카메라 모듈을 사용해 봅시다.

터미널 창을 열고
~$ raspistill -o test.jpg
명령을 입력합니다.
라즈베리파이 화면에 잠시동안 카메라 모듈로 찍은 영상이 출력되다가,
마지막 장면을 test.jpg 파일로 현재 디렉토리에 저장합니다.
파일이름을 변경하지 않고, 같은 명령어를 다시 입력하면 이전 파일을 덮어쓰기 합니다.
혹시라도 잘찍힌 사진이 날아가지 않게 조심해야겠네요.

이번엔 사진을 몇초의 간격을 두고 찍어보겠습니다.

~$ raspistill -o test.jpg -t 10000
명령을 입력합니다.
-t 명령어는 10초 후에 사진을 찍는다는 명령입니다.
-t의 단위는 밀리초.

아래는 카메라 모듈을 이용해 찍은 사진입니다.

찍긴 찍었는데... 사진이 뒤집어져 있습니다.

하지만 걱정마세요! 다 방법이 있죠.


~$ raspistill -vf -o test2.jpg

명령으로 다시 찍어줍니다.


사진이 똑바로 나오네요.
-vf는 상하반전, -hf는 좌우반전 명령어입니다.
그밖의 명령어에 대해 알고 싶다면 터미널에
~$ raspistill
명령을 입력하면 됩니다.

이번에는 동영상을 찍어보겠습니다.

~$ raspivid -o vid.h264
명령을 입력해 줍니다.

아까 사진찍는 명령어와 비슷합니다.
raspistill에서 raspivid가 된 것이죠.
기본 영상은 5초 정도 촬영합니다.
마찬가지로 사용가능한 명령어를 확인하기 위해
~$ raspivid
명령을 입력하면 됩니다.

* 포맷변경
카메라 모듈로 영상을 촬영하면 동영상이 .h264 파일로 저장됩니다.
이 파일은 우리가 보통 사용하는 동영상 플레이어(곰플레이어 등)에서 재생이 되지 않으므로, MP4 파일로 바꿔주어야 합니다.






 

~$ sudo apt-get install -y gpac

명령어를 입력합니다.

-y 옵션은 설치 중 [yes/no] 질문에 대해 모두 yes로 답하게 하는 옵션입니다.

 

설치가 완료되면 .h264 파일을 .mp4 파일로 인코딩해 주어야겠죠?

 

~$ MP4Box -add vid3.h264 vid3.mp4
명령을 입력합니다.

카메라 모듈로 찍은 동영상이 재생됩니다!

이번엔 파이썬 코드를 이용해서 카메라 모듈을 동작시켜 보겠습니다.
파이썬 코드를 작성하기 위해 nano 편집기를 실행합니다.

~$ sudo nano camera.py

위의 명령어를 입력해 줍니다.

 

* 파일 이름을 지을 때 picamera.py로 지으면 에러가 날 수 있습니다.

아래에 이유가 나오지만 import할 모듈 이름이 picamera이기 때문!!


nano 편집기를 실행하여 위의 코드를 입력한 후

Ctrl + X, Y, Enter를 차례대로 입력해 줍니다.

 

소스코드

---------------------------------------------------------

from picamera import PiCamera

from time import sleep


camera = PiCamera()


camera.start_preview()

sleep(5)

camera.capture('/home/pi/capture.jpg')

camera.stop_preview()

---------------------------------------------------------

 

위 코드에서 start_preview() 부분이 실행되면 모니터에 카메라 시점이 출력됩니다.

sleep(5) 코드에 의해 5초 쉬고, (모니터에 카메라 시점이 출력되는 중)

capture('/home/pi/capture.jpg') 코드에 의해 괄호 안의 디렉토리에 capture.jpg라는 파일로 사진이 저장됩니다.

stop_preview() 부분이 실행되면서 카메라가 시점이 종료됩니다.

 

* sleep()

카메라 모듈에 capture() 명령을 주기 전에 sleep() 명령을 입력한 이유는,

카메라가 촬영을 하기 위해 약간의 준비시간이 필요하기 때문입니다.

 

* import의 방법

import의 방법에는 크게 두가지 방식이 있는데

[import 모듈명] 방법과 [from 모듈명 import 메소드] 방법이 있습니다.

첫번째 방법은 모듈 전체를 불러오는 것이고,

두번째 방법은 모듈의 특정 부분만 불러오는 것입니다.

 

큰틀에서 보면 첫번째 방법이 두번째 방법 또한 포함하기 때문에 편해 보이지만, 사용방법이 살짝 다릅니다.

 

첫번째 방법으로 import를 하면 메소드를 사용할 때 모듈의 이름을 붙여주어야 하지만

두번째 방법으로 import를 하면 메소드의 이름만 사용하면 됩니다.

 

위의 코드를 예시로 들면

 

첫번째 방법일 때

camera = picamera.PiCamera()

두번째 방법일 때

camera = PiCamera()

 

어려운 듯 어렵지 않쥬?

 

* 메소드?

간단하게 아두이노의 함수라고 생각하면 됩니다.

완전 동일한 개념은 아닙니다만... 쉽고 빠른 이해를 위해...


코드를 다 입력하고 저장했다면 이제 실행시켜 봅시다.

~$ sudo python camera.py

명령어를 입력합니다.

파이썬 파일이 실행되면서 카메라 모듈에 의해 사진이 찍혔습니다.

확인해 보겠습니다. 

 

사진이 거꾸로 찍혔네요.

코드를 조금 수정해 봅시다.

 

소스코드

---------------------------------------------------------

from picamera import PiCamera

from time import sleep


camera = PiCamera()


camera.start_preview()

sleep(5)

camera.rotation = 180

camera.capture('/home/pi/capture.jpg')

camera.stop_preview()

--------------------------------------------------------

camera.rotation = 180 코드는 카메라 시점을 회전시켜주는 코드입니다.

180은 180도 회전이라는 뜻입니다.

 

다시 출력결과를 확인해 보겠습니다.


이번에는 제대로 찍혔네요.

다음은 파이썬 코드를 이용해 동영상을 찍어보겠습니다.

 

nano 편집기를 실행해 줍니다.

~$ sudo nano camera.py


위와 같이 소스코드를 작성해 줍니다.

 

소스코드

---------------------------------------------------------

from picamera import PiCamera

from time import sleep


camera = PiCamera()


camera.start_preview()

sleep(2)

camera.start_recording('/home/pi/vid.h264')

sleep(10)

camera.stop_recording()

camera.stop_preview()

---------------------------------------------------------

 

start_recording, stop_recording 부분을 이용해서 영상의 시작과 끝을 지정합니다.

그사이에 있는 sleep(10)은 영상이 찍히는 시간이 되겠네요.

위 코드로 찍히는 영상은 10초짜리 영상입니다.

 

영상이 잘 찍혔는지 확인을 해봐야겠죠?

 


~$ omxplayer vid.h264

명령어를 입력해 줍니다.

 

영상이 잘 찍혔다는 것을 확인할 수 있습니다. 



 

  •  96,090
  •  11
  •  0

감사합니다. 2019-02-21 18:42:42

sudo nano camera.py를 작성하고 sudo python camera.py를 입력하면 Traceback (most recent call last): File "camera.py", line 8, in sleep(5) NameError: name 'sleep' is not defined 라고 뜨면서 파이썬 언어가 작동하지 않습니다. 도와주십시오.

관리자 2019-02-26 15:01:39

from picamera import PiCamera from time import time 이 부분 제대로 입력하셨는지 체크하시기 바랍니다.

설렘 2019-03-14 16:50:01

먼저 좋은 글 감사합니다. 나도 위와 같은문제가 있었는데 from time import sleep 로 수정하니까 되네용!!

질문 2020-06-09 16:21:26

vc.ril.camera error 뜨네요 이거 카메라를통째로 바꿔야하나요??

이거모듈 2020-07-01 18:23:37

정말 잘 봤습니다. 그런데 카메라 초점이 안잡혀서 흐릿한데 이건 어떻게 해결할 수 있나요? ㅎㅎ

이봐 코딩해? 2021-03-25 10:23:14

이거묘둘님과 같은 생각이에욤 ㅎ흐릿해욤ㅎ도와쥬세용

sposync 2022-01-06 18:34:19

RPI 탑재 Chromium 활용 원격 접속 제어 및 스트리밍 서비스 무료 - 앱 개발전 간단한 제어 명령만 정의되면 기능등 시험 가능 sposync.com

익명 2022-06-07 01:11:29

그 혹시 omxplayer에 문제가 있는 것 같은 데 omxplayer를 설치를 못 하는 부분은 어떻게 하나요?

코딩 초오오보 2022-12-15 23:21:39

~$ omxplayer vid.h264 에서 command not found가 뜨는데 sudo apt-get install omxplayer도 아닌 것 같고 무엇을 설치해야 하나요?......

가바나쟁이 2023-02-09 17:44:22

유익한 글 감사합ㄴ디ㅏ^^

가바나쟁이 2023-02-09 17:44:22

유익한 글 감사합ㄴ디ㅏ^^


댓글을 남겨 주세요.