def main(in_img_path):
    rgb_img = cv2.imread(in_img_path)
    overlay_img = cv2.imread(OVERLAY_IMG_PATH, -1)
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    faces = cascade.detectMultiScale(cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY),
                                     scaleFactor=1.1,
                                     minNeighbors=1,
                                     minSize=(1, 1))
    if len(faces) <= 0:
        return

    for (x, y, w, h) in faces:
        face_img = rgb_img[y:y + h, x:x + w]

        check_img(face_img, 'face_img', CHECK_IMG_FLAG, OUT_IMG_PATH)
        if not is_skin(face_img):
            continue

        alpha_channel = get_alphachannel(face_img)
        check_img(alpha_channel, 'alpha_channel', CHECK_IMG_FLAG, OUT_IMG_PATH)
        alpha_channel = fill_void(alpha_channel)

        resized_overlay_img = cv2.resize(overlay_img, tuple((w, h)))
        mask_img = cv2.bitwise_and(resized_overlay_img,
                                   resized_overlay_img,
                                   mask=alpha_channel)
        check_img(mask_img, 'mask_img', CHECK_IMG_FLAG, OUT_IMG_PATH)
        for i, j in [(i, j) for i in range(h) for j in range(w)]:
            if any(mask_img[i, j]):
                rgb_img[y + i, x + j] = mask_img[i, j]

    check_img(rgb_img, 'total', CHECK_IMG_FLAG, OUT_IMG_PATH)
def main(in_img_path):
    rgb_img = cv2.imread(in_img_path)
    overlay_img = cv2.imread(OVERLAY_IMG_PATH, -1)
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    faces = cascade.detectMultiScale(cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY),
                                     scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
    if len(faces) <= 0:
        return

    for (x, y, w, h) in faces:
        face_img = rgb_img[y:y + h, x:x + w]

        check_img(face_img, 'face_img', CHECK_IMG_FLAG, OUT_IMG_PATH)
        if not is_skin(face_img):
            continue

        alpha_channel = get_alphachannel(face_img)
        check_img(alpha_channel, 'alpha_channel', CHECK_IMG_FLAG, OUT_IMG_PATH)
        alpha_channel = fill_void(alpha_channel)

        resized_overlay_img = cv2.resize(overlay_img, tuple((w, h)))
        mask_img = cv2.bitwise_and(resized_overlay_img, resized_overlay_img,
                                   mask=alpha_channel)
        check_img(mask_img, 'mask_img', CHECK_IMG_FLAG, OUT_IMG_PATH)
        for i, j in [(i, j) for i in range(h) for j in range(w)]:
            if any(mask_img[i, j]):
                rgb_img[y + i, x + j] = mask_img[i, j]

    check_img(rgb_img, 'total', CHECK_IMG_FLAG, OUT_IMG_PATH)
    def main(in_img_path):
        rgb_img = cv2.imread(in_img_path)
        overlay_img = cv2.imread(OVERLAY_IMG_PATH, -1)
        cascade = cv2.CascadeClassifier(CASCADE_PATH)

        faces = cascade.detectMultiScale(cv2.cvtColor(rgb_img,
                                                      cv2.COLOR_BGR2GRAY),
                                         scaleFactor=1.1,
                                         minNeighbors=1,
                                         minSize=(1, 1))
        if len(faces) <= 0:
            check_img(rgb_img, 'total', True, OUT_IMG_PATH)
            return

        for (x, y, w, h) in faces:
            face_img = rgb_img[y:y + h, x:x + w]
            if not is_skin(face_img):
                continue

            # color = hsv_to_bgr(get_hair_color_hsv(face_img))
            name, hsv = detect_aikatsu_charactors['anime_based']['bgr_diff'](
                get_hair_color_hsv(face_img))
            color = hsv_to_bgr(hsv)
            cv2.rectangle(rgb_img, (x, y), (x + w, y + h), color, thickness=7)

        check_img(rgb_img, 'total', True, OUT_IMG_PATH)
    def main(in_img_path):
        rgb_img = cv2.imread(in_img_path)
        overlay_img = cv2.imread(OVERLAY_IMG_PATH, -1)
        cascade = cv2.CascadeClassifier(CASCADE_PATH)

        faces = cascade.detectMultiScale(cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY),
                                         scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
        if len(faces) <= 0:
            check_img(rgb_img, 'total', True, OUT_IMG_PATH)
            return

        for (x, y, w, h) in faces:
            face_img = rgb_img[y:y + h, x:x + w]
            if not is_skin(face_img):
                continue

            # color = hsv_to_bgr(get_hair_color_hsv(face_img))
            name, hsv = detect_aikatsu_charactors['anime_based']['bgr_diff'](get_hair_color_hsv(face_img))
            color = hsv_to_bgr(hsv)
            cv2.rectangle(rgb_img, (x, y), (x + w, y + h), color, thickness=7)

        check_img(rgb_img, 'total', True, OUT_IMG_PATH)
Example #5
0
def overlay(faces, rgb_img, cascade):
    if len(faces) <= 0:
        return rgb_img

    for (x, y, w, h) in faces:
        face_img = rgb_img[y:y + h, x:x + w]
        # if w < 40:
        #     continue
        if not is_skin(face_img):
            continue

        overlay_img = switch_overlay_img(face_img)
        resized_overlay_img = cv2.resize(overlay_img, tuple((w, h)))
        # alpha_channel = fill_void(get_alphachannel(face_img))
        # mask_img = cv2.bitwise_and(resized_overlay_img, resized_overlay_img,
        #                            mask=alpha_channel)
        mask_img = overlay_img
        for i, j in [(i, j) for i in range(h) for j in range(w)]:
            if any(mask_img[i, j]):
                rgb_img[y + i, x + j] = mask_img[i, j]

    return rgb_img