Opencv

1-9 Anaconda3 OpenCV 설치와 웹캠(카메라) 튜토리얼

coding art 2020. 1. 27. 16:05
728x90

 

윈도우즈 10에서 아나콘다를 사용하는 환경에서 카메라 또는 웹캠을 설치하여 Image Classification 작업을 위한 환경을 준비해 보기로 하자. 이미 라즈베리 파이에서 경험이 있긴 하지만 윈도우즈10에서 어떻게 처리해야 되는지 알아보자.

 

TesorFlow를 사용하기 위해 가상환경을 설치하느 과정에서 pip 명령을 사용하여 matplotlib, pandas, keras, scikit-learn, PyQt5 user 라이브러리를 설치하였고 이어서 Anaconda Navigator에서 Spyder 아이콘의 install 버튼을 클릭하여 launch 버틍을 생성하여 Spyder 설치를 완료하였다.

 

추가로 Anaconda Prompt 창에서 command line 명령을 사용하여 OpenCV를 설치하기로 한다. 이때에 사용하는 pip 명령은 다른 라이브러리들과는 좀 다르게 pythonbinding 하는 방식으로 다음과 같이 처리하자. 아울러 설치 후 확인하려면 python 명령을 실행 후 cv2import 하고 version을 문의하면 된다.

 

 

한편 카메라 설치 측면에서는 윈도우즈10에서 인터페이스 문제로 Pi Camera를 설치할 수는 없으므로 USB 인터페이스가 가능한 웹캠을 사용하도록 한다. 지금 설치하여 데모하려는 웹캠은 로지텍사의 C-270 모델이다. 여러 가지 모델이 있겠지만 드라이버 소프트웨어를 찾아 실행을 통해 설치하고 Logitek 설정 아이콘을 한번 실행해 보거나 아니면 윈도우즈 시작 바에 등록되어 있는 카메라를 클릭하면 된다. 로지텍 웹캠에서 비데오 및 카메라 이미지가 잘 잡히면 이미 윈도우즈에 디바이스로 등록이 된 것이고 아나콘다의 OpenCV와도 인터페이스가 이루어졌다고 보면 된다. 다음의 파이선 명령을 실행하여 웹캠을 작동시키는 것이 가능하다.

import cv2

cap = cv2.VideoCapture(0)

라즈베리 파이에 Pi Camera 설치와 굳이 차이점을 지적하라면 라즈베리 파이 Configuration에서 Camera Enable 로 지정하는 정도일 것이며 윈도우즈 로지텍 웹캠에서는 드라이버 소프트웨어를 설치하는 것으로 퉁치면 될 것이다.

다음은 쥬피터 노트북에서 비데오 코드를 실행 시킨 결과이다. 비데오 실행을 멈추려면 자판에서 “q”를 입력하면 된다.

 

 

웹캠 비데오 기능이 파이선 코드로 실행이 가능해지면 OpenCV에 의한 머신 러닝이 가능해진다.

첨부된 코드는 스파이더나 쥬피터 노트북에서 실행 가능하다.

 

#opencv_camera_01.py

import cv2
import numpy as np
 
# Create a VideoCapture object
cap = cv2.VideoCapture(0)
 
# Check if camera opened successfully
if (cap.isOpened() == False):
  print("Unable to read camera feed")
 
# Default resolutions of the frame are obtained.The default resolutions are system dependent.
# We convert the resolutions from float to integer.
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
 
# Define the codec and create VideoWriter object.The output is stored in 'outpy.avi' file.
out = cv2.VideoWriter('outpy.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))
 
while(True):
  ret, frame = cap.read()
 
  if ret == True:
    
    # Write the frame into the file 'output.avi'
    out.write(frame)
 
    # Display the resulting frame   
    cv2.imshow('frame',frame)
 
    # Press Q on keyboard to stop recording
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
 
  # Break the loop
  else:
    break
 
# When everything done, release the video capture and video write objects
cap.release()
out.release()
 
# Closes all the frames
cv2.destroyAllWindows()