Opencv

7-3-6 라즈베리파이 OpenCV에 Webcam 설치 및 실행

coding art 2020. 4. 21. 18:31
728x90

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 발행

http://blog.daum.net/ejleep1/1175

 

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 하이퍼링크 목차 pdf 파일

본서는 10월 26일 교보문고 퍼플 POD 출판 신청하였습니다. 일정 기간 검토 후 출판 결정이 될 것이며 11월 초부터 주문 구입이 가능합니다. 참고로 책 목차에 따른 내용별 학습을 위한 코드는 이미

blog.daum.net

______________________________________________________________________________________________________________________________

지금까지 라즈베리파이 보드에서 웹캠(WebCam)을 배제한 PiCamera 만 사용이 가능한 줄 알았다. 검색을 해보면 후줄그레한 수준의 웹캠 설치과정이 흔하게 나열 되어 있으나 적어도 라즈베리파이에 OpenCV 설치 가능한 사용자라면 웹캠도 아무런 지장 없이 사용 가능함을 알아야 할 것이다.

    현재 사용하는 웹캠은 로지텍사의 C-270 으로서 해상도가 충분한 편이다. 이 웹캠은 윈도우즈 10 데스크 탑에 USB를 꽂으면 막바로 마이크로소프트 카메라 기능을 사용할 수 있으면 사용자에 따라서는 로지텍사에서 드라이버를 다운받아 설치하면 된다.

 

그렇다면 과연 라즈베리파이에도 꽂기만 하면 되는 것인가? 그렇지는 않다. 일단 OpenCV 가 설치되어 있다고 가정하자. 설치과정에서는 다음 블로그 정보를 참조하도록 하자.

7-3 라즈베리 파이 Stretch버전 OSOpenCV 3.3 설치

http://blog.daum.net/ejleep1/908

 

가상환경에 Opencv가 설치되어 있다면 다음 사실을 확인할 수 있어야 할 것이다. sourcs~/.profile 명령과 Workon cv 명령을 실행하여 가상환경 cv) 에 들어갈 수 있어야 한다. python 명령에 의해서 버전이 3.5 임을 확인 후 OpenCV 버전이 3.3 임을 확인하자.

사실 라즈베리파이 보드에서 Opencv AI 작업할 것이 아니라면 웹캠을 굳이 설치할 필요도 없을 것이다.

 

OpenCV 가 설치되어 있음이 확인되면 시작 바에서 기본설정RaspberryPi Configuration>창이 뜨면 Interfaces 탭 선택 후 Camera Enable Disable 중에 Enable 이 설정되어 있다면 이는 PiCamera 설정에 해당하므로 Disable을 선택하도록 하자. PiCamera 사용 안함이란 뜻이다.

cv2.VideoCapture(0) OpenCV에서 0번 카메라 디바이스를 선택한다. 숫자 대신에 문자열 파일명으로 동영상 파일을 지정할 수도 있다. 이미지 출력 해상도 설정은 frame 과 관련되어 있다. 아울러 로지텍 C270frame rate는 고정된 값 30을 가지며 PiCamera에서처럼 임의로 설정 불가하다. 한편 GaussianBlur는 옵션이라 없어도 무방하다. 읽어 들인 프레임 이미지는 반드시 변환해서 hsv 파일로 만들어야 한다. 출력하면 비데오 영상을 볼 수 있을 것이다. 비데오를 끄려면 30msec 이후 아무 키나 누르면 그 ASCII 코드 값이 0 이상이므로 꺼지며 영상 위도우즈들이 파괴되어 제거된다.

 

이 코드는 평범한 OpenCV 코드이지만 현재 웹캠이 선택된 상태이며 웹캠을 가지고 여러 가지 컴퓨터 비전 응용을 시도할 수 있다는 의미이다. 라즈베리 파이에 PiCamera를 설치하는 하는 것도 상당한 고역임을 인지하자. 웹캠의 장점은 그냥 디스플레이 위에 걸어 놓으면 된다. 아울러 오디오 마이크 기능도 있으므로 사용자가 연구해 보도록 권한다.

 

#Webcam_opencv_01.py

import cv2

import numpy as np
import sys
#import time
 
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
fps = cap.get(cv2.CAP_PROP_FPS)
print("Frames per second using video.get(cv2.CAP_PROP_FPS)
      : {0}".format(fps))
 
 
while True:
 
    ret, image = cap.read()
    image = cv2.GaussianBlur(image,(5,5), cv2.BORDER_DEFAULT)
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    cv2.imshow('Image', image)
 
    if cv2.waitKey(30) > 0:
        break
 
cv2.destroyAllWindows()