[라즈베리파이 강좌] OpenCV 예제 1.1. 동영상 예제와 얼굴인식 예제 합치기

메카 2017-11-20 (월) 23:03 6년전 10164  

 

라즈베리파이 강좌

  OpenCV 예제 1.1. 동영상 예제와 얼굴인식 예제 합치기




  안녕하세요. 메카솔루션 알도입니다.

  지난 번에 힘겹게 라즈베리파이에 OpenCV를 설치해보았는데요. 이번 주에는 OpenCV를 어떻게 사용하는지 알 수 있도록 제공한 샘플들을 살펴보도록 하겠습니다.


 


  세상에는 좋은 라이브러리들이 참 많은데요. 사실 라이브러리를 만드는 것도 고되지만, 만든 후에 사용 방법을 정리하는 것도 만만치 않게 힘든 일입니다. 그래서 이런 사용 방법이 잘 정리되어 있지 않아 코 앞에 두고도 사용하지 못하는 라이브러리들이 참 많습니다. 다행이 OpenCV는 사용 방법이 매우 잘 정리되어 있고, 다양한 예제까지 제공하고 있습니다.

 


 

     OpenCV video face detection



  시작하기 전

  아직 OpenCV를 설치하지 않으신 분들은 아래 링크를 참조하시기 바랍니다.

http://blog.naver.com/roboholic84/221139256044


  설치하는데에는 상당한 시간과 노력이 소요됩니다. 거의 저녁 혹은 퇴근 1시간 전 쯤에 시작하고 다음 날 확인하는 것이 가장 현명한 선택이라고 할 수 있겠습니다.

  만약 아직 라즈베리파이와 SD카드를 준비하지 않으셨거나, 여유가 안되시는 분들은 저희 메카솔루션에서 라즈비안 최신 버전에 OpenCV 3.3.0이 설치완료되어있는 SD카드를 판매 중이오니 관심 가져주시면 감사하겠습니다.

http://mechasolution.com/shop/goods/goods_view.php?goodsno=543841&category=046


  아직 카메라가 없으시다면 메카솔루션에서 라즈베리파이용 카메라를 구매하실 수 있습니다.



내 얼굴 인식하기

  오늘은 지난 번에 사용해본 얼굴인식과 동영상 예제를 이용해서 실시간으로 내 얼굴 인식하기를 해보겠습니다. 지난 예제는 아래 링크에서 보실 수 있습니다.


http://blog.naver.com/roboholic84/221140338041

  먼저  라즈베리파이에서 터미널로 들어갑니다. OpenCV를 설치할 때 만든 가상환경으로 들어갑니다.


 $ source ~/.profile

 $ workon cv


  myface.py 란 이름으로 파일을 만들어 작업해보도록 하겠습니다.

 (cv) $ nano myface.py


  두 영상을 합치는 프로그램 코드는 다음과 같습니다. 처음의  detect(img, cascade) 와  draw_rects(img, rects, color) 함수는 facedetect.py에서 복사해왔습니다.
  그 다음  cascade 부분은 다소 수정을 하였는데요.  opencv-3.3.0/data/haarcascades/  폴 더 안에 있는 haarcascade_frontalface_alt.xml  파 일을 먼저 facedetect.py와는 다른 위치에서 불러와야 하기 때문입니다.
  마지막으로  img = frame.array ...  cv2.imshow("Frame", vis)  부 분은 복사해오되 앞뒤로 변수 이름을 변경해주었습니다.

# import the necessary packages

from picamera.array import PiRGBArray

from picamera import PiCamera

import time

import cv2


def detect(img, cascade):

    rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),

                                     flags=cv2.CASCADE_SCALE_IMAGE)

    if len(rects) == 0:

        return []

    rects[:,2:] += rects[:,:2]

    return rects


def draw_rects(img, rects, color):

    for x1, y1, x2, y2 in rects:

        cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)


# initialize the camera and grab a reference to the raw camera capture

camera = PiCamera()

camera.resolution = (640, 480)

camera.framerate = 32

rawCapture = PiRGBArray(camera, size=(640, 480))


cascade = cv2.CascadeClassifier("opencv-3.3.0/data/haarcascades/haarcascade_frontalface_alt.xml")


# allow the camera to warmup

time.sleep(0.1)


# capture frames from the camera

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

    # grab the raw NumPy array representing the image, then initialize the timestamp

    # and occupied/unoccupied text

    img = frame.array

    

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    gray = cv2.equalizeHist(gray)


    rects = detect(gray, cascade)

    vis = img.copy()

    draw_rects(vis, rects, (0, 255, 0))


    # show the frame

    cv2.imshow("Frame", vis)

    key = cv2.waitKey(1) & 0xFF


    # clear the stream in preparation for the next frame

    rawCapture.truncate(0)


    # if the `q` key was pressed, break from the loop

    if key == ord("q"):

        break


  코드 작성이 완료되었으면 저장하고 나온 후에 실행시켜 봅니다.


 (cv) $ nano myface.py


  카메라로 자신의 얼굴을 비춰보세요.


 


  코드를 직접 작성하는 것 자체보다 주어진 예제 파일을 어떻게 사용하는지 이해하면, 별도의 자료가 없어도 예제만으로 많은 공부가 되고, 다양한 기능을 손쉽게 사용할 수 있습니다. 다른 예제 파일들도 시도해보세요.

메카리워즈 Image Map


모바일 버전으로 보기