Python + OpenCV로 미소 실시간 감지

배경



온라인 해커슨에 참가했을 때 작성한 앱이 입상했기 때문에 기념에 올려두려고 생각했다.
건의 해커슨에서는, 「어려운 기술에 도전하고 있는지, 새로운 기술에 도전하고 있는지」가 평가 기준의 하나였기 때문에, 이번은 OpenCV와 PySimpleGUI에 도전해 보았다. 프로그램의 전체 용도는 여기 .

개요



실시간으로 미소를 감지하는 앱을 만들었습니다.

이미지는 이런 느낌 ↓.


・미소 때만 붉은 직사각형이 표시되어, 그 직사각형의 종횡비를 미소의 점수로 하고 있다.
・점수에 정수를 곱한 것을 우측에 리얼타임 묘화 하고 있다.
· py2app에서 mac 용 독립 실행 형 응용 프로그램입니다.

코드



OpenCV와 PySimpleGUI에서는 실시간으로 처리하고 싶기 때문에 기본적으로

sample.py
while True
    #何かしらの処理
  if a:  #何かしらの条件
      break

라는 형태가 된다.

실제 코드를 발췌하면

SmileDetector.py
def main():
  #省略
  while True:
    stage += 1

    event, values = win.read(timeout=1)
    if event in (None, "Quit"):
        break

    ret, frame = camera.read()

    image = frame[90:990, 0:-1]
    image_ = cv2.resize(image, (750,400), cv2.INTER_LANCZOS4)


    # -----------------  Process images here. ---------------- #
    gray = cv2.cvtColor(image_, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    smile_value = 0

    for (x, y, w, h) in faces:
        cv2.rectangle(image_, (x, y), (x + w, y + h), (255, 0, 0), 2)
        face = image_[y:y + h, x:x + w]
        face_gray = gray[y:y + h, x:x + w]

        smiles = smile_cascade.detectMultiScale(face_gray, 1.8, 20)
        for (sx, sy, sw, sh) in smiles:
            cv2.rectangle(face, (sx, sy), ((sx + sw), (sy + sh)), (0, 0, 255), 2)

           #省略

    # ----------------- End of Image Processing ----------------- #  


이런 느낌.

while True 로 항상 화면의 정보를 받아들이면서, 그것에 대해서 화상 처리를 더해 간다.

OpenCV 단체로 실시간 화상 처리를 하는 경우도, PySimpleGUI 단체로 앱을 만드는 경우의 양자 모두,
while True: 를 사용하기 때문에, 그 부분을 하나로 정리하는 것으로 구현할 수 있다.

끝에



입상할 수 있어 5천엔 이내의 기술서를 받게 되었다. 기뻤다.
이 앱을 온라인 면접의 백으로 움직여 놓고, 웃을 수 있는지를 체크해 면접을 극복하고 싶다.

좋은 웹페이지 즐겨찾기