def first_state()

in source/backend/chalicelib/pose.py [0:0]


def first_state(params, frame, _context):
    _log.debug(f'Params: {params}')
    _log.debug(f'Frame: {frame}')

    faces = frame['rekMetadata']
    num_faces = len(faces)
    _log.debug(f'Number of faces: {num_faces}')
    if num_faces != 1:
        _log.info(f'FAIL: Number of faces. Expected: 1 Actual: {num_faces}')
        return CHALLENGE_FAIL

    face = faces[0]
    confidence = face['Confidence']
    _log.debug(f'Confidence: {confidence}')
    if face['Confidence'] < REKOGNITION_FACE_MIN_CONFIDENCE:
        _log.info(f'FAIL: Confidence. Expected: {REKOGNITION_FACE_MIN_CONFIDENCE} Actual: {confidence}')
        return CHALLENGE_FAIL

    rotation_pose = face['Pose']
    _log.debug(f'Rotation: {rotation_pose}')
    if _is_rotated(rotation_pose):
        _log.info(f'FAIL: Face rotation. Expected: {REKOGNITION_FACE_MAX_ROTATION} Actual: {rotation_pose}')
        return CHALLENGE_FAIL

    expected_eyes = params['pose']['eyes']
    if not _are_eyes_correct(expected_eyes, face):
        _log.info(f'FAIL: Eyes. Expected: {expected_eyes}')
        return CHALLENGE_FAIL

    expected_mouth = params['pose']['mouth']
    if not _is_mouth_correct(expected_mouth, face):
        _log.info(f'FAIL: Mouth. Expected: {expected_mouth}')
        return CHALLENGE_FAIL

    _log.info(f'Success!')
    return CHALLENGE_SUCCESS