Как сделать распознавание лиц и наложение с помощью изображения (Python2 и OpenCV: png с прозрачностью альфа-канала)

Распознавание лиц никогда не было проще!

Используя XML-модели с открытым исходным кодом, мы можем отслеживать лица, глаза и даже накладывать изображения на интересующую область! (ROI)

Этот код делает используйте альфа-канал PNG, чтобы получить прозрачность файлов PNG!

очки.png

Код (Гитхаб)

Я опубликовал весь код этого проекта на своем GitHub!

Оформить заказ, раскошелиться и пометить репозиторий !!!

Подпишитесь на меня на GitHub, чтобы узнать больше о крутых проектах 😃

#Blade Nelson
#Written in August 2019
import cv2
import numpy as np

eyeData = "xml/eyes.xml"
faceData = "xml/face.xml"
DOWNSCALE = 3

#Bools for control
add_face_rect = False
add_objects = False
add_eye_rect = False

#OpenCV boiler plate
webcam = cv2.VideoCapture(0)
cv2.namedWindow("Webcam Facial Tracking")
classifier = cv2.CascadeClassifier(eyeData)
faceClass = cv2.CascadeClassifier(faceData)

#Loading glasses asset
glasses = cv2.imread('assets/glasses.png', cv2.IMREAD_UNCHANGED)

ratio = glasses.shape[1] / glasses.shape[0]

if webcam.isOpened(): # try to get the first frame
    rval, frame = webcam.read()
else:
    rval = False

#Main loop
while rval:
    # detect eyes and draw glasses
    minisize = (frame.shape[1]/DOWNSCALE,frame.shape[0]/DOWNSCALE)
    miniframe = cv2.resize(frame, minisize)
    faces = faceClass.detectMultiScale(miniframe)
    eyes = classifier.detectMultiScale(miniframe)
    
    if add_eye_rect:
        for eye in eyes:
            x, y, w, h = [v * DOWNSCALE for v in eye]

            pts1 = (x, y+h)
            pts2 = (x + w, y)
            # pts1 and pts2 are the upper left and bottom right coordinates of the rectangle
            cv2.rectangle(frame, pts1, pts2, color=(0, 255, 0), thickness=3)

            if add_objects:
                h = w / ratio
                y += h / 2
                # resize glasses to a new var called small glasses
                smallglasses = cv2.resize(glasses, (w, h))
                # the area you want to change
                bg = frame[y:y+h, x:x+w]
                np.multiply(bg, np.atleast_3d(255 - smallglasses[:, :, 3])/255.0, out=bg, casting="unsafe")
                np.add(bg, smallglasses[:, :, 0:3] * np.atleast_3d(smallglasses[:, :, 3]), out=bg)
                # put the changed image back into the scene
                frame[y:y+h, x:x+w] = bg

    if add_face_rect:
        for face in faces:
            x, y, w, h = [v * DOWNSCALE for v in face]

            pts1 = (x, y+h)
            pts2 = (x + w, y)
            # pts1 and pts2 are the upper left and bottom right coordinates of the rectangle
            cv2.rectangle(frame, pts1, pts2, color=(255, 0, 0), thickness=3)

    cv2.imshow("Webcam Glasses Tracking", frame)

    # get next frame
    rval, frame = webcam.read()

    key = cv2.waitKey(20)
    if key in [27, ord('Q'), ord('q')]: # exit on ESC
        cv2.destroyWindow("Webcam Face Tracking")
        break

    #Keyboard input
    if key == ord('1'):
        if add_face_rect:
            add_face_rect = False
        else:
            add_face_rect = True

    if key == ord('2'):
        if add_eye_rect:
            add_eye_rect = False
        else:
            add_eye_rect = True

    if key == ord('3'):
        if add_objects:
            add_objects = False
        else:
            add_objects = True

Не стесняйтесь, пишите мне, если у вас есть какие-либо вопросы!
Это файл Python2. В прошлом, когда я пробовал это с Python3, это не сработало. Все модели и файловые ресурсы есть как в Git, так и в Интернете!

Теги:
Python2, OpenCV, Python3, распознавание лиц, наложение, наложение, png, альфа, альфа-канал, канал, .png, компьютерное зрение, видение, cv, gpu, xml, модель, мл, машинное обучение, ai, Snapchat, фильтр, веб-камера , в реальном времени, Python OpenCV, Python2 OpenCV2

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *