강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

주피터 얼굴인식

해결된 질문

작성

·

196

0

안녕하세요, 나도코딩님의 강의를 보다가 의도대로 되지 않아 질문 남깁니다.

 

나도코딩님의 얼굴인식 강의에서

with mp_face_detection.FaceDetection(model_selection=0, min_detection_confidence = 0.7) as face_detection:

min_detection_confidence = 0.5 이걸로 얼굴인식 정확도를 올리던데 저는 이거를 0.5를 하던 0.7이나 1을 하던 정확성이 올라가지 않습니다. 이유가 뭘까요..?

 

 

혹시 몰라 모든 코드를 남기고 갑니다.

import cv2
import mediapipe as mp

#얼굴을 찾고, 찾은 얼굴에 표시를 해주기 위한 변주 정의
mp_face_detection = mp.solutions.face_detection # 얼굴 검출을 위한 face_detection 모듈을 사용
mp_drawing = mp.solutions.drawing_utils # 얼굴의 특징을 그리기 위한 drawing_utils 모듈을 사용

# 동영상 파일 열기
cap = cv2.VideoCapture('face_video.mp4')

# 이미지 불러오기
image_right_eye = cv2.imread('right_eye.png')
image_left_eye = cv2.imread('left_eye.png')
image_nose = cv2.imread('nose.png')

with mp_face_detection.FaceDetection(model_selection=0, min_detection_confidence = 0.7) as face_detection:
    while cap.isOpened():
        success, image = cap.read()
        if not success:
            break
        # 보기 편하기 위해 이미지를 좌우를 반전하고, BGR 이미지를 RGB로 변환합니다.
        image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
        # 성능을 향상시키려면 이미지를 작성 여부를 False으로 설정하세요.
        image.flags.writeable = False
        results = face_detection.process(image)

        # 영상에 얼굴 감지 주석 그리기 기본값 : True.
        image.flags.writeable = True
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        
        if results.detections: # 특징 6개 = 눈, 코 끝 부분, 입 중심, 귀(이주)
            for detection in results.detections:
                # mp_drawing.draw_detection(image, detection)
                # print(detection)
                
                # 특정 위치 가져오기
                keypoints = detection.location_data.relative_keypoints
                right_eye = keypoints[0]
                left_eye = keypoints[1]
                nose_tip = keypoints[2]
                
                h, w, _ = image.shape
                right_eye = (int(right_eye.x * w), int(right_eye.y * h))
                left_eye = (int(left_eye.x * w), int(left_eye.y * h))
                nose_tip = (int(nose_tip.x * w), int(nose_tip.y * h))
                
                # 양 눈에 동그라미 그리기
                # cv2.circle(image, right_eye, 50, (255, 0, 0), 10, cv2.LINE_AA) # blue
                # cv2.circle(image, left_eye, 50, (0, 255, 0), 10, cv2.LINE_AA) # green
                # 코에 동그라미 그리기
                # cv2.circle(image, left_eye, 75, (0, 255, 255), 10, cv2.LINE_AA) # yellow
                
                # 각 특징에 이미지 그리기
                image[right_eye[1] - 50:right_eye[1]+50, right_eye[0]-50:right_eye[0]+50] = image_right_eye
                image[left_eye[1] - 50:left_eye[1]+50, left_eye[0]-50:left_eye[0]+50] = image_left_eye
                image[nose_tip[1] - 50:nose_tip[1]+50, nose_tip[0]-150:nose_tip[0]+150] = image_nose
                
        cv2.imshow('MediaPipe Face Detection', cv2.resize(image, None, fx=0.5, fy=0.5))
                
        cv2.imshow('MediaPipe Face Detection', cv2.resize(image, None, fx=0.5, fy=0.5))
        if cv2.waitKey(1) == ord('q'):
            break
cap.release()
cv2.destroyAllWindows()

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.

HanJun님, 나도코딩님의 얼굴인식 강의를 수강 중이시군요. min_detection_confidence 값을 조정하더라도 얼굴 인식의 정확성이 올라가지 않는 경우, 몇 가지 가능한 원인을 확인해볼 수 있습니다.

  1. min_detection_confidence는 얼굴 인식 알고리즘이 얼굴로 간주하는 데 필요한 신뢰도의 임계값입니다. 이 값이 낮으면 더 많은 얼굴을 감지할 수 있지만, 정확도가 낮을 수 있습니다. 더 높은 값은 더 높은 신뢰도를 의미하지만, 감지 가능한 얼굴의 수가 줄어들 수 있습니다. 그러나 실제 정확성 향상은 감지 환경, 비디오 품질, 얼굴의 조명과 각도 등 많은 요소에 달려 있습니다.

  2. model_selection 파라미터는 사용할 모델을 지정합니다. 0은 근거리 얼굴 인식에 더 적합하고, 1은 멀리 있는 얼굴을 감지하도록 최적화되어 있습니다. 예를 들어 멀리 있는 얼굴을 인식하는 데에는 model_selection=1을 사용하는 것이 더 좋을 수 있습니다.

  3. 사용하고 있는 비디오나 이미지의 품질이나 얼굴 인식에 필요한 조건이 충분하지 않을 수도 있습니다. 예를 들어, 빛이 부족하거나, 얼굴이 일부 가려져 있거나, 해상도가 낮은 경우 인식 성능에 악영향을 줄 수 있습니다.

  4. mediapipe 라이브러리나 관련 의존성 패키지들이 최신 버전이 아닐 경우, 업데이트 후 성능 개선이 있을 수 있습니다.

사용하고 계신 코드에 문제가 없는지 다시 한 번 확인하시고, 비디오 및 신뢰도 임계값과 관련한 다양한 실험을 진행해 보시기를 추천드립니다. 각 변수가 결과에 어떤 영향을 미치는지 실험을 통해 파악하는 것이 중요합니다.

더 나아가, 만약 다른 계정으로 구매하셨을 가능성이 있거나 별도의 기술적 지원이 필요하시면, 인프런 [고객 문의] 페이지(https://www.inflearn.com/faq)를 통해 직접 문의하셔서 도움을 받으시는 것도 좋은 방법입니다.

도움이 되길 바라며, 공부하시는 데 성공적인 결과가 있기를 바랍니다!

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

질문하기