- DeepFace 분석 및 내부 함수 생성: 사용하려고 하는 함수 stream()에서 우리에게 필요한 기능을 수행하는 함수는 실질적으로 perform_demography_analysis()와 analysis() 라고 판단함
- stream() 의 return = None, analysis() 의 return = None, perform_demography_analysis() 의 return = img (np.ndarray 타입)
- perform_demography_analysis() 함수를 수정 → 기존 np.ndarray를 return하던 함수를 나이값을 int로 return 하도록 수정
- streaming.py의 analysis() 함수를 수정해 새 함수perform_age_analysis() 생성
- 얼굴 인식 모델 제외
- 카메라 화면 디스플레이 제외
- 인식 대기 시간 2초로 단축 (기존 5초)
- 각 if 문에서 어떤 조건에 걸리는지 test
- 기존 return 값 None 에서 perform_demography_analysis()에서 받아온 나이를 return 하도록 함.
def perform_age_analysis(db_path: str,
model_name="VGG-Face",
detector_backend="opencv",
distance_metric="cosine",
enable_face_analysis=True,
source=0,
time_threshold=2,
frame_threshold=2,):
build_demography_models(enable_face_analysis=enable_face_analysis)
# call a dummy find function for db_path once to create embeddings before starting webcam
_ = search_identity(
detected_face=np.zeros([224, 224, 3]),
db_path=db_path,
detector_backend=detector_backend,
distance_metric=distance_metric,
model_name=model_name,
)
freeze = False
num_frames_with_faces = 0
cap = cv2.VideoCapture(source) # webcam
while True:
has_frame, img = cap.read()
if not has_frame:
print(">>>>>>>>>현재 카메라가 작동 가능하지 않습니다. 직원에게 문의해주세요.<<<<<<<<<<")
faces_coordinates = []
if freeze is False:
faces_coordinates = grab_facial_areas(img=img, detector_backend=detector_backend)
# we will pass img to analyze modules (identity, demography) and add some illustrations
# that is why, we will not be able to extract detected face from img clearly
detected_faces = extract_facial_areas(img=img, faces_coordinates=faces_coordinates)
num_frames_with_faces = num_frames_with_faces + 1 if len(faces_coordinates) else 0
freeze = num_frames_with_faces > 0 and num_frames_with_faces % frame_threshold == 0
print(">>>>>>freeze가 False일 때: 카메라에서 벗어났을 때, 카메라가 가려져있을 때, freeze 발생 전 5초 때(time_threshold, frame_threshold = 2로 변경해서 2초) <<<<<<")
if freeze:
# add analyze results into img - derive from raw_img
# img = highlight_facial_areas(img=img, faces_coordinates=faces_coordinates)
# age, gender and emotion analysis
demo = perform_demography_analysis(
enable_face_analysis=enable_face_analysis,
img=img,
faces_coordinates=faces_coordinates,
detected_faces=detected_faces,
)
print("demo >>>>>>>>", demo)
if demo:
break
print("perform_age_analysis >>>>>>>", demo)
return demo