해결된 질문
작성
·
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
값을 조정하더라도 얼굴 인식의 정확성이 올라가지 않는 경우, 몇 가지 가능한 원인을 확인해볼 수 있습니다.
min_detection_confidence
는 얼굴 인식 알고리즘이 얼굴로 간주하는 데 필요한 신뢰도의 임계값입니다. 이 값이 낮으면 더 많은 얼굴을 감지할 수 있지만, 정확도가 낮을 수 있습니다. 더 높은 값은 더 높은 신뢰도를 의미하지만, 감지 가능한 얼굴의 수가 줄어들 수 있습니다. 그러나 실제 정확성 향상은 감지 환경, 비디오 품질, 얼굴의 조명과 각도 등 많은 요소에 달려 있습니다.
model_selection
파라미터는 사용할 모델을 지정합니다. 0
은 근거리 얼굴 인식에 더 적합하고, 1
은 멀리 있는 얼굴을 감지하도록 최적화되어 있습니다. 예를 들어 멀리 있는 얼굴을 인식하는 데에는 model_selection=1
을 사용하는 것이 더 좋을 수 있습니다.
사용하고 있는 비디오나 이미지의 품질이나 얼굴 인식에 필요한 조건이 충분하지 않을 수도 있습니다. 예를 들어, 빛이 부족하거나, 얼굴이 일부 가려져 있거나, 해상도가 낮은 경우 인식 성능에 악영향을 줄 수 있습니다.
mediapipe
라이브러리나 관련 의존성 패키지들이 최신 버전이 아닐 경우, 업데이트 후 성능 개선이 있을 수 있습니다.
사용하고 계신 코드에 문제가 없는지 다시 한 번 확인하시고, 비디오 및 신뢰도 임계값과 관련한 다양한 실험을 진행해 보시기를 추천드립니다. 각 변수가 결과에 어떤 영향을 미치는지 실험을 통해 파악하는 것이 중요합니다.
더 나아가, 만약 다른 계정으로 구매하셨을 가능성이 있거나 별도의 기술적 지원이 필요하시면, 인프런 [고객 문의] 페이지(https://www.inflearn.com/faq)를 통해 직접 문의하셔서 도움을 받으시는 것도 좋은 방법입니다.
도움이 되길 바라며, 공부하시는 데 성공적인 결과가 있기를 바랍니다!