마이크로소프트의 C#은 그리 어렵지 않게 OpenCV를 설치할 수 있는데요. 아직까지도 외부 언어들에 대해서는 에러가 발생하곤 합니다. 이번에 Visual Studio에서 Python을 개발하기 위한 환경을 구성하면서 여러가지 난관에 부딪히고 있네요-_-;
No module named 'cv2'
import cv2를 입력하면 모듈이 인식이 안됩니다. 하지만~ 대문자로 CV2를 import 시키면 인식하죠. 어떤 이유인지는 모르겠지만 Visual Studio의 PyPI로 설치하면 무언가 대소문자가 잘못되는듯 합니다. 뭐 예상만 할뿐~ 로우레벨까지 까볼(분석) 생각은 하지도 않게 되네요. 바쁘니까요-_-;
아무튼, 설치되어 있는 아나콘다3을 이용해서 설치해보기로 합니다. 윈도우 시작 메뉴 옆 검색창에서 anaconda를 입력하고 Anaconda Prompt (Anaconda3)을 클릭하세요. 아나콘다는 [ 여기 ]에서 다운로드 받을 수 있습니다.
아래와 같이 입력하고 설치하세요.
pip install opencv-python
뭐 비주얼 스튜디오에서 설치하는 것과 크게 다르지 않습니다. 그런데 왜 비주얼 스튜디오에서는 CV2로 모듈 이름이 만들어지는지 모르겠네요-_-; 아무튼 잘 되는지 확인해봐야겠죠? 간단한 샘플 코드인데요. Python 딥러닝 게시판에 있는 코드를 토대로 작성했습니다. [ 원본 블로그 보기 ] 솔루션 소스 코드는 첨부되어 있으니 다운로드 받아서 해보세요^^
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import cv2 as cv import numpy as np
img_rgb = cv.imread('images/test.png') img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
template1 = cv.imread('images/cactus1.png', 0) template2 = cv.imread('images/cactus2.png', 0) template3 = cv.imread('images/bird1.png', 0) template4 = cv.imread('images/bird2.png', 0)
w1, h1 = template1.shape[::-1] w2, h2 = template2.shape[::-1] w3, h3 = template3.shape[::-1] w4, h4 = template4.shape[::-1]
res1 = cv.matchTemplate(img_gray, template1, cv.TM_CCOEFF_NORMED) res2 = cv.matchTemplate(img_gray, template2, cv.TM_CCOEFF_NORMED) res3 = cv.matchTemplate(img_gray, template3, cv.TM_CCOEFF_NORMED) res4 = cv.matchTemplate(img_gray, template4, cv.TM_CCOEFF_NORMED)
threshold = 0.8 loc1 = np.where(res1 >= threshold) loc2 = np.where(res2 >= threshold) loc3 = np.where(res1 >= threshold) loc4 = np.where(res2 >= threshold)
for pt in zip(*loc1[::-1]): cv.rectangle(img_rgb, pt, (pt[0] + w1, pt[1] + h1), (0, 0, 255), 2)
for pt in zip(*loc2[::-1]): cv.rectangle(img_rgb, pt, (pt[0] + w2, pt[1] + h2), (0, 255, 0), 2)
for pt in zip(*loc1[::-1]): cv.rectangle(img_rgb, pt, (pt[0] + w3, pt[1] + h3), (0, 0, 255), 2)
for pt in zip(*loc2[::-1]): cv.rectangle(img_rgb, pt, (pt[0] + w4, pt[1] + h4), (0, 255, 0), 2)
cv.imshow('result', img_rgb) cv.waitKey(0)
|
cs |
참고한 블로그의 결과와 다르게 나오는군요-_-; 아무튼 그래도 검출은 잘 되었네요. 아마도... 2번 실행된게 아닌가 생각됩니다.
아래는 얼굴 인식인데요. 이것도 그렇게 인식률이 좋지는 않네요. 머신 러닝 관련 자료들을 찾다보니 정말 다양한 형식으로 모델이 존재하고 방식도 천차만별인걸 알게 되었습니다. 어떤걸 선택해서 사용해야 할지 참 고민이네요...ㅋ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import cv2 import sys
image_file = "images/face.jpg" cascade_file = "data/haarcascades/haarcascade_frontalface_alt.xml"
image = cv2.imread(image_file) image_gs = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(cascade_file) face_list = cascade.detectMultiScale(image_gs, scaleFactor=1.1, minNeighbors=1, minSize=(150, 150))
if len(face_list) > 0: print(face_list) color = (0, 0, 255) for face in face_list: x, y, w, h = face cv2.rectangle(image, (x, y), (x+w, y+h), color, thickness=8) else: print("no face")
cv2.imshow('result', image) cv2.waitKey(0) |
cs |
위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다. 50프로밖에 인식이 안되네요. 전체 솔루션 소스는 첨부해두었으니 관심 있는 분들은 다운로드 받아서 테스트 해보세요~
간단하게 에러만 해결하려고 했는데... 글을 적다보니 길어졌네요-_-;
댓글