OpenCV 개발환경 윈도우 버전

Page content

개요

  • Windows에서 Opencv 개발환경을 구축한다.
  • 아나콘다를 설치하지 않고 구축한다.

사전 준비

  • 파이썬 설치는 이미 진행된 것으로 가정한다.
  • 또한 가상환경을 이미 설치한 것으로 가정한다.

주요 설치 명령어

  • opencv-pythonOpenCV의 메인 모듈을 포함하고, opencv-contrib-python은 메인 모듈과 Extras 모듈을 포함한다.
    • 설치 시, NumPy는 자동으로 설치 된다.
  • matplotlib 라이브러리는 파이썬 기본 시각화 라이브러리이다.
  • pafy 라이브러리는 Youtube의 메타 데이터를 수집/검색하거나 다운로드 할 수 있도록 도와줌
  • youtube_dl 라이브러리는 터미널에서 사용 가능한 라이브러리이다.
  • pygame은 파이썬에서 제공하는 게임 라이브러리이다.
pip install opencv-contrib-python
pip install matplotlib
pip install pafy youtube_dl pygame
  • 그런데, python 3.11.* 버전에서는 pygame이 설치가 안될 수 있다. 이럴 경우 downgrade를 통해 설치를 진행한다.
pip install pygame --pre

테스트

  • 먼저 opencv 라이브러리가 잘 작동하는지 테스트 한다.

이미지 출력

  • 먼저 opencv 라이브러리를 활용하여 아래 코드를 실행한다.
import cv2
imgFile = 'RGB_paint.png'
img = cv2.imread(imgFile)

cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

Untitled

비디오 파일 녹화 - 안드로이드 버전

Untitled

  • 아래 코드를 실행하여 캡쳐를 하도록 한다.
  • 아이폰은 아직까지는 되지 않았다.
# -*- coding:utf-8 -*-
# 안드로이드 스마트 폰만 가능
# DroidCam 앱 설치
# Ref : https://docs.opencv.org/4.7.0/d8/dfe/classcv_1_1VideoCapture.html

import cv2

def main():

    cap = cv2.VideoCapture('http://172.30.1.18:4747/mjpegfeed') # droid cam
    ##cap = cv2.VideoCapture('http://172.30.1.18:4747/mjpegfeed?640x480')
    ##cap = cv2.VideoCapture('http://172.30.1.18:8080/video')  # IP Webcam

    frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
                int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print('frame_size =', frame_size)

    while True:   
        retval, frame = cap.read() # 프레임 캡처
        if not retval:
            break

        cv2.imshow('frame',frame)
        
        key = cv2.waitKey(25)
        if key == 27: # Esc
            break
    if cap.isOpened():
        cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

유투브 동영상

  • 아래코드를 실행한다.
  • pafy 버전은 0.5.5 에서 진행했다.
# -*- coding:utf-8 -*-
# 유투브에서 영상 가져오기

'''
 pip install youtube_dl
 pip install pafy
'''

import cv2
import pafy

def main():

    url = 'https://www.youtube.com/watch?v=u_Q7Dkl7AIk'
    video = pafy.new(url)

    print('title = ', video.title)
    print('video.rating = ', video.rating)
    print('video.duration = ', video.duration)

    best = video.getbest() # video.getbest(preftype='mp4')
    print('best.resolution', best.resolution)

    cap=cv2.VideoCapture(best.url)
    while(True):
            retval, frame = cap.read()
            if not retval:
                    break
            cv2.imshow('frame',frame)

            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            edges = cv2.Canny(gray,100,200)
            cv2.imshow('edges',edges)

            key = cv2.waitKey(25)
            if key == 27: # Esc
                    break
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()
  • 그런데 실행하면 아래와 같은 에러가 나올 수 있다.

Untitled

Untitled

  • 라이브러리 소스코드를 찾는다.
    • pafy - backend_youtube_dl.py

Untitled

  • 기존 코드는 아래와 같다.
.
.
self._likes = self._ydl_info['like_count']
self._dislikes = self._ydl_info['dislike_count']
.
.
  • 수정된 코드는 아래와 같다.
self._likes = self._ydl_info.get('like_count',0)
self._dislikes = self._ydl_info.get('dislike_count',0)

Untitled

  • 이제 다시 실행을 한다.

Untitled