Пример #1
0
def recognize_iris(frame, detector, estimator, estimator2, out_frame=None):
    _, img128, scale, pad = iut.resize_pad(frame[:, :, ::-1])
    input_data = img128.astype('float32') / 127.5 - 1.0
    input_data = np.expand_dims(np.moveaxis(input_data, -1, 0), 0)

    # inference
    # Face detection
    preds = detector.predict([input_data])
    detections = iut.detector_postprocess(
        preds, anchor_path="../../face_recognition/facemesh/anchors.npy")

    # display bbox
    if args.bbox:
        detections2 = iut.denormalize_detections(detections[0].copy(), scale,
                                                 pad)
        display_hand_box(out_frame, detections2)

    # Face landmark estimation
    if detections[0].size != 0:
        imgs, affines, box = iut.estimator_preprocess(frame[:, :, ::-1],
                                                      detections, scale, pad)

        landmarks = np.zeros((imgs.shape[0], 1404))
        normalized_landmarks = np.zeros((imgs.shape[0], 468, 3))
        confidences = np.zeros((imgs.shape[0], 1))
        for i in range(imgs.shape[0]):
            landmark, confidences[i, :] = estimator.predict(
                [imgs[i:i + 1, :, :, :]])
            normalized_landmark = landmark / 192.0
            normalized_landmarks[i, :, :] = fut.denormalize_landmarks(
                normalized_landmark, affines)

            landmarks[i, :] = landmark

        #Added
        for i in range(len(normalized_landmark)):
            landmark, confidence = normalized_landmarks[i], confidences[i]
            draw_landmarks_face(out_frame, landmark[:, :2], size=1)

        # Iris landmark estimation
        imgs2, origins = iut.iris_preprocess(imgs, landmarks)

        eyes = np.zeros((imgs2.shape[0], 213))
        iris = np.zeros((imgs2.shape[0], 15))
        for i in range(imgs2.shape[0]):
            eyes[i, :], iris[i, :] = estimator2.predict(
                [imgs2[i:i + 1, :, :, :]])

        eyes, iris = iut.iris_postprocess(eyes, iris, origins, affines)
        for i in range(len(eyes)):
            draw_eye_iris(out_frame,
                          eyes[i, :, :16, :2],
                          iris[i, :, :, :2],
                          size=2)
Пример #2
0
def recognize_from_video():
    # net initialize
    env_id = ailia.get_gpu_environment_id()
    print(f'env_id: {env_id}')
    detector = ailia.Net(DETECTION_MODEL_PATH, DETECTION_WEIGHT_PATH, env_id=env_id)
    estimator = ailia.Net(LANDMARK_MODEL_PATH, LANDMARK_WEIGHT_PATH, env_id=env_id)
    estimator2 = ailia.Net(LANDMARK2_MODEL_PATH, LANDMARK2_WEIGHT_PATH, env_id=env_id)

    capture = get_capture(args.video)

    # create video writer if savepath is specified as video format
    if args.savepath != SAVE_IMAGE_PATH:
        f_h = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
        f_w = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
        save_h, save_w = webcamera_utils.calc_adjust_fsize(
            f_h, f_w, IMAGE_HEIGHT, IMAGE_WIDTH
        )
        writer = webcamera_utils.get_writer(args.savepath, save_h, save_w)
    else:
        writer = None

    while(True):
        ret, frame = capture.read()
        if (cv2.waitKey(1) & 0xFF == ord('q')) or not ret:
            break

        frame = np.ascontiguousarray(frame[:,::-1,:])

        _, img128, scale, pad = iut.resize_pad(frame[:,:,::-1])
        input_data = img128.astype('float32') / 127.5 - 1.0
        input_data = np.expand_dims(np.moveaxis(input_data, -1, 0), 0)

        # inference
        # Face detection
        preds = detector.predict([input_data])
        detections = iut.detector_postprocess(preds)

        # Face landmark estimation
        if detections[0].size != 0:
            imgs, affines, box = iut.estimator_preprocess(frame[:,:,::-1], detections, scale, pad)

            dynamic_shape = False

            if dynamic_shape:
                estimator.set_input_shape(imgs.shape)
                landmarks, confidences = estimator.predict([imgs])
            else:
                landmarks = np.zeros((imgs.shape[0], 1404))
                confidences = np.zeros((imgs.shape[0], 1))
                for i in range(imgs.shape[0]):
                    landmarks[i,:], confidences[i,:] = estimator.predict([imgs[i:i+1,:,:,:]])

            # Iris landmark estimation
            imgs2, origins = iut.iris_preprocess(imgs, landmarks)

            if dynamic_shape:
                estimator2.set_input_shape(imgs2.shape)
                eyes, iris = estimator2.predict([imgs2])
            else:
                eyes = np.zeros((imgs2.shape[0], 213))
                iris = np.zeros((imgs2.shape[0], 15))
                for i in range(imgs2.shape[0]):
                    eyes[i,:], iris[i,:] = estimator2.predict([imgs2[i:i+1,:,:,:]])

            eyes, iris = iut.iris_postprocess(eyes, iris, origins, affines)
            for i in range(len(eyes)):
                draw_eye_iris(frame, eyes[i, :, :16, :2], iris[i, :, :, :2], size=1)

        cv2.imshow('frame', frame)

        # save results
        if writer is not None:
            writer.write(frame)

    capture.release()
    cv2.destroyAllWindows()
    print('Script finished successfully.')
    pass
Пример #3
0
def recognize_from_image():
    # prepare input data
    src_img = cv2.imread(args.input)
    _, img128, scale, pad = iut.resize_pad(src_img[:,:,::-1])
    input_data = img128.astype('float32') / 127.5 - 1.0
    input_data = np.expand_dims(np.moveaxis(input_data, -1, 0), 0)

    # net initialize
    env_id = ailia.get_gpu_environment_id()
    print(f'env_id: {env_id}')
    detector = ailia.Net(DETECTION_MODEL_PATH, DETECTION_WEIGHT_PATH, env_id=env_id)
    estimator = ailia.Net(LANDMARK_MODEL_PATH, LANDMARK_WEIGHT_PATH, env_id=env_id)
    estimator2 = ailia.Net(LANDMARK2_MODEL_PATH, LANDMARK2_WEIGHT_PATH, env_id=env_id)

    # inference
    print('Start inference...')
    if args.benchmark:
        print('BENCHMARK mode')
        for _ in range(5):
            start = int(round(time.time() * 1000))
            # Face detection
            preds = detector.predict([input_data])
            detections = iut.detector_postprocess(preds)

            # Face landmark estimation
            if detections[0].size != 0:
                imgs, affines, box = iut.estimator_preprocess(src_img[:,:,::-1], detections, scale, pad)
                estimator.set_input_shape(imgs.shape)
                landmarks, confidences = estimator.predict([imgs])

                # Iris landmark estimation
                imgs2, origins = iut.iris_preprocess(imgs, landmarks)
                estimator2.set_input_shape(imgs2.shape)
                eyes, iris = estimator2.predict([imgs2])

                eyes, iris = iut.iris_postprocess(eyes, iris, origins, affines)
                for i in range(len(eyes)):
                    draw_eye_iris(src_img, eyes[i, :, :16, :2], iris[i, :, :, :2], size=1)
            end = int(round(time.time() * 1000))
            print(f'\tailia processing time {end - start} ms')
    else:
        # Face detection
        preds = detector.predict([input_data])
        detections = iut.detector_postprocess(preds)

        # Face landmark estimation
        if detections[0].size != 0:
            imgs, affines, box = iut.estimator_preprocess(src_img[:,:,::-1], detections, scale, pad)
            estimator.set_input_shape(imgs.shape)
            landmarks, confidences = estimator.predict([imgs])

            # Iris landmark estimation
            imgs2, origins = iut.iris_preprocess(imgs, landmarks)
            estimator2.set_input_shape(imgs2.shape)
            eyes, iris = estimator2.predict([imgs2])

            eyes, iris = iut.iris_postprocess(eyes, iris, origins, affines)
            for i in range(len(eyes)):
                draw_eye_iris(src_img, eyes[i, :, :16, :2], iris[i, :, :, :2], size=1)

    cv2.imwrite(args.savepath, src_img)
    print('Script finished successfully.')