OpenCV 개발환경 윈도우 버전
Page content
개요
- Windows에서 Opencv 개발환경을 구축한다.
- 아나콘다를 설치하지 않고 구축한다.
사전 준비
- 파이썬 설치는 이미 진행된 것으로 가정한다.
- 설치 웹사이트 : https://www.python.org/
- 또한 가상환경을 이미 설치한 것으로 가정한다.
주요 설치 명령어
opencv-python
은OpenCV
의 메인 모듈을 포함하고,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()
비디오 파일 녹화 - 안드로이드 버전
- DroidCam 앱을 설치한다.
- 아래 코드를 실행하여 캡쳐를 하도록 한다.
- 아이폰은 아직까지는 되지 않았다.
# -*- 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()
- 그런데 실행하면 아래와 같은 에러가 나올 수 있다.
- 위 에러가 나타나면 소스코드를 수정을 해야 한다.
- 라이브러리 소스코드를 찾는다.
- pafy - backend_youtube_dl.py
- 기존 코드는 아래와 같다.
.
.
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)
- 이제 다시 실행을 한다.