1. OpenCV란 무엇인가?

   : Open Source Computer Vision의 약자로 그래픽을 자유자재로 주무를 수 있는 라이브러리이다.


2. Python에서 OpenCV설치

   : pip install opencv-python

    (특정버전을 설치하려면 pip install python-opencv==버전번호)


3. 추가설치가 필요한 것들

   - 시각화하기 위한 라이브러리 설치 : pip install matplotlib

   - 이미지는 숫자의 집합으로 이루어져 있는데 이 형태를 주무르기 위한 틀을 제공하는 numpy 설치 

     : pip install numpy


4. 원하는 대상을 검출하기 위해 Haar알고리즘으로 미리 학습된 xml파일을 다운로드 받는다.

   향후에 실력이 붙으면 자기가 원하는 것을 인식할 수 있는 Haar파일을 만들 수도 있지만 

   지금은 만들어져 있는 파일을 사용하도록 하겠다.

   아래 링크에서 얼굴과 눈을 인식할 수 있는 파일만 다운로드 하겠다. (It's up to you~~)

   - 링크 : https://github.com/opencv/opencv/tree/master/data/haarcascades

     아래의 haarcascase_eye.xml 과 haarcascade_frontalface_default.xml 파일을 오른쪽 클릭 후 다른이름으로 링크 저장해서 

     하단의 예제소스와 같은 폴더상에 저장한다.

   


 5. 이제 python 코드를 한번 짜볼까?

    파일명은 아무렇게 지으면 되는데 본인은 detectFace.py 로 만들었다.

    혹시 사람몸을 인식하고자 하면 위에서 body 관련된놈을 다운받아서 xml 파일 읽어들이는 부분만 변경하면 되겠지....

## -*- coding: utf-8 -*-  # 한글 주석쓸려면 적기

import cv2

font = cv2.FONT_ITALIC

def faceDetect():
    eye_detect = False
    face_cascade = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml")  # 얼굴찾기 haar 파일
    eye_cascade = cv2.CascadeClassifier("./haarcascade_eye.xml") # 눈찾기 haar 파일

    try:
        cam = cv2.VideoCapture(0)
    except:
        print("camera loading error")
        return

    while True:
        ret, frame = cam.read()
        if not ret:
            break

        if eye_detect:
            info = "Eye Detention ON"
        else:
            info = "Eye Detection OFF"

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray,1.3, 5)

        faces = face_cascade.detectMultiScale(gray, 1.3, 5)

        #카메라 영상 왼쪽위에 위에 셋팅된 info 의 내용 출력
        cv2.putText(frame, info, (5,15), font, 0.5, (255,0, 255),1)

        for(x,y, w,h) in faces:
            cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0), 2)  #사각형 범위
            cv2.putText(frame, "Detected Face", (x-5, y-5), font, 0.5, (255,255,0),2)  #얼굴찾았다는 메시지
            if eye_detect:  #눈찾기
                roi_gray = gray[y:y+h, x:x+w]
                roi_color = frame[y:y+h, x:x+w]
                eyes = eye_cascade.detectMultiScale(roi_gray)
                for (ex,ey,ew,eh) in eyes:
                    cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0,255,0), 2)

        cv2.imshow("frame", frame)
        k=cv2.waitKey(30)

        #실행 중 키보드 i 를 누르면 눈찾기를 on, off한다.
        if k == ord('i'):
            eye_detect = not eye_detect
        if k == 27:
            break
    cam.release()
    cv2.destroyAllWindows()

faceDetect()


위 파일을 실행시키면 아래와 같이 나온다. (이상하게 나온 인물을 이해해주기 바랍니다.^^)




만족하셨나요? ~~~~~~~


+ Recent posts