안녕하세요 키노코더입니다.


오늘은 USB WebCAM을 라즈베리파이 (Raspberry Pi)에 연결하고, Python을 통해 웹캠의 영상을 가져오는 방법에 대해 포스팅하겠습니다.


사전 점검

라즈베리파이에 아직 OpenCV가 설치되지 않으신 분들은 저의 이전 포스트를 참고해서 설치를 먼저 해주시기 바랍니다. 오늘 필요한 것은 다음과 같습니다.

  • Python 2.7
  • OpenCV & OpenCV Python Library
  • USB WebCAM
[OpenCV] 라즈베리파이(Raspberry Pi) 3에 OpenCV 설치하여 Python에서 사용하기

Python에서 WebCAM으로 영상보기

라즈베리파이는 데비안 리눅스를 기반으로하기 때문에, 이미 표준 USB 웹캠을 사용하기 위한 드라이버가 설치되어 있습니다. 그렇기 때문에 표준 USB 웹캠이라면 어떠한 웹캠이든 라즈베리파이에 꽂는 것만으로 사용이 가능합니다. 별도의 설정없이 바로 Python Script를 실행하여 웹캠의 영상을 불러올 수 있습니다.

제가 테스트에 사용한 웹캠은 Microsoft의 Lifecam Studio입니다. 1080p 해상도까지 지원하면서 가격도 적절하여 제 첫 USB 웹캠으로 장만한 녀석이네요. 지금까지 사용한 바로는 맥북과 라즈베리파이, 윈도우 모두에 호환이 잘 되는 것 같습니다.

참고로 아래 스크립트는 라즈베리파이를 데스크탑 모드로 접속하여 GUI 환경에서 실행해야 합니다.
# -*- coding: utf-8 -*-

import cv2
import sys

# WebCAM을 불러옴 (장치가 여러개 연결된 경우 인덱스는 0이 아닐 수도 있습니다)
vc = cv2.VideoCapture(0)

while True:
    # WebCAM에서 이미지 읽어오기
    ret, frame = vc.read()
    # 위에서 읽어온 이미지를 "Video Window"이름을 가진 윈도우에서 보여줌
    cv2.imshow("Video Window", frame)

    # 키보드의 'q' 가 눌리면 while loop 빠져나가기
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# WebCAM 리소스를 해제
vc.release()
# 열린 모든 윈도우 닫기
cv2.destroyAllWindows()
워낙 간단한 스크립트이기 때문에 별도로 코드를 설명하지는 않겠습니다. 혹시 스크립트 관련해서 질문이 있으시면 댓글로 남겨주시기 바랍니다.



라즈베리파이의 출력 화면을 캡쳐한 이미지입니다. 영상이 잘 나오네요. 그런데! 영상이 너무 밝습니다! 약간의 조명에도 너무 밝아서 푸우의 이목구비가 구분이 안되네요.

WebCAM 설정하기

이미지가 밝게 나오면, python script에서 추출된 이미지의 밝기를 조절하는 방법도 있지만, 너무 밝거나 어둡게 찍혀 saturation된 부분들은 스크립트에서 아무리 밝기를 조정하여도 실제에 가깝게 복원하기 어렵습니다. 그렇기 때문에 가장 좋은 방법은 웹캠을 설정하여 촬영되는 영상 자체의 밝기를 줄이는 것입니다.


리눅스에서는 표준 USB 웹캠을 설정할 수 있는 fswebcam 이라는 좋은 패키지가 있습니다. 웹캠에 접근하여 이미지를 캡쳐할 수도 있고, 지금하려는 웹캠의 기본 밝기도 조정할 수 있습니다.

sudo apt-get install fswebcam
fswebcam --set brightness=0%


밝기를 0%으로 낮추니 훨씬 낫네요! 이제야 푸우의 이목구비가 좀 보입니다. 밝기는 -100%까지도 가능하지만, 일정이하로 내려가면 변화가 없습니다.


참고로 fswebcam 명령을 실행하실 때는 위에서 실행한 python script를 중지하셔야합니다. 하나의 웹캠을 여러 프로그램에서 동시에 접근할 수 없기때문에 반드시 한 프로그램만 접근하여야 합니다.


fswebcam에서는 밝기 외에도 해상도나, frame rate을 설정할 수도 있습니다. (여기서 frame rate은 동영상 모드로 사용할 때이고, python script에서는 steel image를 가져오는 방식이기 때문에 이곳의 frame rate을 높인다고 해서 python script의 영상 rate이 올라가지는 않습니다.)


라즈베리파이에서 표준 USB 웹캠을 사용하는 방법에 대해서는 다음 라즈베리공식 포스트에 자세히 나와있는데요. 해당 포스트에는 fswebcam을 사용하는 방법도 잘 나와있습니다. 참고하시면 좋을 것 같습니다.

Using a standard USB webcam - Raspberry Pi Documentation

한글이 편하신 분들은 아래의 번역된 WikiDocs을 참고하시면 됩니다.

12. 표준 USB 웹캠 사용하기 - Raspberry Pi 문서 - WikiDocs


블로그 이미지

키노코더

각종 이야기를 다루는 키노코더의 블로그입니다

,