コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
import cv2
from functions import get_hair_color_hsv, hsv_to_bgr

# カスケード分類器の特徴量を取得する
cascade_path = "../cascade/lbpcascade_animeface.xml"
cascade = cv2.CascadeClassifier(cascade_path)

overlay_img_path = "../test_imgs/face_up3.jpg"
in_img_path = "../test_imgs/hirari-hitori-kirari/face_detecting5.png"
out_img_path = "../test_imgs/hirari-hitori-kirari/face_detecting_out.png"

img = cv2.imread(in_img_path)
overlay_img = cv2.imread(overlay_img_path)

color = (0, 187, 254)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

if len(faces) > 0:
    # 検出した顔を囲む矩形の作成
    for (x, y, w, h) in faces:
        face_img = img[y:y + h, x:x + w]
        color = hsv_to_bgr(get_hair_color_hsv(face_img))
        cv2.rectangle(img, (x, y), (x + w, y + h), color, thickness=7)
        # cv2.rectangle(img, (x, y), (x + w, y + h), color, thickness=7)
        # resized_overlay_img = cv2.resize(overlay_img, tuple((w, h)))
        # img[y:y + h, x:x + w] = resized_overlay_img[:, :]

cv2.imwrite(out_img_path, img)