본문 바로가기

[라즈베리파이 3B+] 카메라 사용하기(Pi Camera Board v1.3)

by rudals.kim 2021. 5. 21. 댓글 개
반응형

라즈베리파이에서 사용할 수 있는 카메라 모듈은 3가지 종류가 있습니다.

2013년도 출시된 V1(5메가 픽셀 지원), 2016년도 출시된 V2(8메가 픽셀 지원), 2020년도 출시된 V3(12.3 메가 픽셀 지원)로 3가지 모델이 있습니다.

각 모듈의 상세 스펙은 아래 라즈베리파이 사이트에서 가져온 공식 카메라 사양표를 참고하시기 바랍니다.

3가지 모듈 중 가장 저렴하게 카메라 테스트를 할 수 있는 V1 모듈을 구매하였습니다.

출시 당시에는 $25에 판매가 되었지만 8년이라는 시간이 흐른 지금에는 $3 이하로 구매가 가능합니다.

참고로 저는 알리에서 Raspberry Pi Camera Board v1.3을 저렴하게 $2.66에 구매하였습니다.

라즈베리파이 3B+의 전원을 제거 후 HDMI 포트 옆의 커넥터에 FFC 케이블 방향에 주의하여 카메라를 꽂으면 됩니다.

카메라 커넥터 반대편에 파란색 띠(?) 부분을 이어잭 방향으로 보이게 한 후 꽂으면 됩니다.

이런 식으로 연결됩니다.

이렇게 꽂은 후 라즈베리파이 부팅을 합니다.

부팅이 완료되면 Menu -> Preferences -> Raspberry Pi Configuration의 Interfaces 탭을 선택 후 Camera를 Enable 시킵니다.

재부팅 후에 카메라 설정이 완료된다는 메시지가 나옵니다.

'Yes' 버튼을 클릭하여 라즈베리파이 보드를 재부팅해 줍니다.

부팅이 완료되면 Menu -> Programming -> Thonny Python IDE에 아래 코드를 붙여 넣은 후 camera.py 이름으로 저장합니다. (주의 사항 저장될 파일명이 picamera.py로 하시면 라이브러리와 이름이 같아서 동작이 안됩니다.)

from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.start_preview()
sleep(5)
camera.stop_preview()

 

실행해 보면 5초 동안 카메라 프리뷰가 동작된 후 창이 닫힙니다.

 

만약 라즈베리파이와 VNC를 연결한 상태에서 위 코드를 실행해 보면 화면에 아무것도 나오지 않습니다.

이유는 VNC가 단지 display 화면을 재전송해 주는 역할만 하는 거라 direct로 화면에 보여주는 PiCamera의 preview 화면은 전송되지 않기 때문입니다.

 

VNC의 옵션을 보면 direct capture 관련 옵션을 설정함으로써 camera preview 화면도 전송시킬 수 있습니다.

Task Bar의 VNC 아이콘을 클릭하여 VNC Server 프로그램을 띄운 후 오른쪽 메뉴의 Options를 선택합니다.

Options 창의 왼쪽의 Troubleshooting을 선택 후 'Enable direct capture mode'를 체크하여 활성화시킵니다.

'Apply' 버튼을 클릭하면 화면이 한번 깜박이며 적용이 됩니다.

 

다시 위의 camera preview 파이썬 코드를 실행해 보면 VNC 환경에서도 정상적으로 preview 화면이 디스플레이됩니다. 

 

camera preview 디스플레이는 잘 보이는데 preview 화면이 너무 크게 나와 불편합니다.

이럴 경우 start_preview에 파라미터를 적용하여 preview 사이즈를 조절할 수 있습니다.

아래 코드를 적용 후 테스트해 봅니다.

from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.start_preview(fullscreen=False, window=(200, 200, 640, 480))
sleep(5)
camera.stop_preview()

 

실행해 보면 x축으로 200, y축으로 200의 좌표에 640x480 크기의 윈도우로 preview 화면이 나옵니다.

preview가 잘 되어 좀 더 여러 가지 테스트를 해 보고 싶은데 preview 화면이 5초 후에는 강제적으로 창이 닫힙니다.

자동으로 창이 닫히지 않으면 좋을 것 같아 코드를 조금 수정해 보았습니다.

더불어 이 문제도 수정할 겸 테스트도 보다 쉽게 하기 위해 파이썬에서 제공되는 tkinter 모듈을 사용하여 camera preview start/stop/capture/quit 동작을 할 수 있도록 GUI 프로그램을 구현해 보았습니다.

import tkinter as tk
import picamera

pic_number = 0

camera = picamera.PiCamera()

def camera_start():
    camera.resolution=(640, 480)
    camera.start_preview(fullscreen=False, window=(200, 200, 640, 480))

def camera_stop():
    camera.stop_preview()

def close_window():
    root.destroy
    camera.stop_preview()
    camera.close()
    quit()

def camera_capture():
    global pic_number
    pic_number += 1
    camera.capture('/home/pi/Desktop/image_' + str(pic_number) + '.jpg')

root = tk.Tk()
root.title("Camera Test")
root.geometry("250x150+1000+50")

frame = tk.Frame(root)
frame.pack(pady = 0, padx = 0)

button1 = tk.Button(frame, text = "카메라 시작", width=20, padx = 20, pady = 10, command = camera_start)
button1.grid(row = 0, column = 0, padx = 1, pady = 3)

button2 = tk.Button(frame, text = "카메라 중지", width=20, padx = 20, pady = 10, command = camera_stop)
button2.grid(row = 1, column = 0, padx = 1, pady = 3)

button3 = tk.Button(frame, text = "카메라 캡쳐", width=20, padx = 20, pady = 10, command = camera_capture)
button3.grid(row = 2, column = 0, padx = 1, pady = 3)

root.protocol("WM_DELETE_WINDOW", close_window)
root.mainloop()

 

실행해 보면 아래와 같은 GUI 창이 나옵니다.

카메라 시작/중지/캡쳐 버튼을 클릭하여 각 기능을 실행시킬 수 있습니다. 

최종 테스트된 환경입니다. 

카메라 시작 버튼을 클릭하면 preview 화면이 나오고 캡처 버튼을 클릭하면 바탕화면에 캡처된 이미지가 저장됩니다.

구매한 Pi Camera Board v1.3 모듈이 정상적으로 잘 동작됨을 확인해 보았습니다.

 

이상한 점은 위 스크린샷에서 보여주는 preview나 capture 된 이미지의 품질이 많이 안 좋게 나왔습니다.

camera resolution과 상관없이 실제로 카메라를 들고 이곳저곳 preview 화면을 보면 꽤 괜찮은 품질로 보여지는데 모형 피사체를 앞에 놓고 찍으면 노이즈가 많이 탄 것 같은 이미지가 나옵니다.

아마도 너무 가까운 피사체의 포커스 문제거나 아니면 카메라 사용 환경 또는 저조도 등의 문제로 인해 이런 문제가 발생되는 듯 보입니다.

 

저렴하게 구매한 Pi Camera Board v1.3 모듈이 5메가 픽셀을 지원하니 나름 괜찮은 화면을 보여주므로 카메라 테스트를 할 경우 유용하게 사용될 것 같습니다.

반응형

댓글