Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python

Dieses Mal möchte ich die Form des Kopfes mit Dlib, OpenCV extrahieren oder die Ellipse als Modell anzeigen.

Umgebung ・ Python 3.7.5 ・ Opencv 4.1.2 ・ Dlib 19.18.0

Ich verweise auf die folgenden Seiten. →https://cppx.hatenablog.com/entry/2017/12/25/231121 Ich habe das trainierte Modell von der folgenden Seite heruntergeladen, um die Gesichtsorgane zu erwerben. http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

Die Programme, die bisher gemacht wurden, sind wie folgt.

head.py


import dlib
import cv2

detector = dlib.get_frontal_face_detector()#Gesichtsdetektor
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
#↑ Prädiktor(Angeben des Pfades des trainierten Modells)

def get_center(gray_img):#Finden Sie den Schwerpunkt des Bildes ↓ opencv erledigt dies für Sie
    moments = cv2.moments(gray_img, False)
    try:
        return int(moments['m10'] / moments['m00']), int(moments['m01'] / moments['m00'])
    except:
       return None
    #Gelegentlich tritt eine 0-Division auf, daher verarbeiten wir sie ↑
    #Die damit erhaltenen Koordinaten sind die Position des Schülers ↑


def is_close(y0, y1):#Sind deine Augen geschlossen?
    if abs(y0 - y1) < 10:#Die Argumente sind die y-Koordinate des oberen Augenlids und die y-Koordinate des unteren Augenlids.
        return True      #Unterscheiden Sie durch den Unterschied zwischen den y-Koordinaten des oberen und unteren Augenlids
    return False


def head_point(img,parts):
    heads = [
             parts[1],part[16],
            ]
    
#Holen Sie sich Schülerkoordinaten
def eye_point(img, parts, left=True):
    #Gesichtsbild und Gesichtsorgankoordinaten, linkes oder rechtes Auge(Echtes linkes Auge)
    #Holen Sie sich die Koordinaten des Herzstücks ↓
    if left:
        eyes = [
                parts[36],
                min(parts[37], parts[38], key=lambda x: x.y),
                max(parts[40], parts[41], key=lambda x: x.y),
                parts[39],
                ]
    #Da es sich um den 36. bis 39. handelt, extrahieren Sie diese 4 Punkte
    else:
        eyes = [
                parts[42],
                min(parts[43], parts[44], key=lambda x: x.y),
                max(parts[46], parts[47], key=lambda x: x.y),
                parts[45],
                ]
    #Am Augenrand (36, 39), der über dem oberen Augenlid(37 or 38)
    #Der unter dem unteren Augenlid(40 or 41)
    #Erhalten Sie die Koordinaten so, dass der gesamte Augapfel eingeschlossen ist, wenn er von einem Quadrat umgeben ist
    #Rechtes Auge zu den Koordinaten des linken Auges+Holen Sie sich 6 ↑
    org_x = eyes[0].x
    org_y = eyes[1].y
    #↑ Speichern Sie die Koordinaten, um den Ursprung am Augapfel auszurichten
    hrg_x = heads[0].x
    if is_close(org_y, eyes[2].y):#Wenn Ihre Augen geschlossen sind, können Sie Ihre Augen nicht erkennen
        return None 
#Finden Sie heraus, ob Ihre Augen geschlossen sind
#↓ Schneiden Sie die Augäpfel und binärisieren Sie sie ↓
    eye = img[org_y:eyes[2].y, org_x:eyes[-1].x]#Trimmen
    _, eye = cv2.threshold(cv2.cvtColor(eye, cv2.COLOR_RGB2GRAY), 30, 255, cv2.THRESH_BINARY_INV)
#Binarisierung
    center = get_center(eye)#Ich suche den Schwerpunkt
    if center:
        return center[0] + org_x, center[1] + org_y
    return center


def p(img, parts, eye):#Die Argumente sind Gesichtsbild, Gesichtsorgakoordinaten und Pupillenkoordinaten.(Links rechts)
    if eye[0]:#Die Pupillenkoordinaten werden als grüne Punkte und die Koordinaten der Gesichtsorgane als blaue Punkte auf dem Gesichtsbild angezeigt.
        cv2.circle(img, eye[0], 3, (255, 255, 0), -1)
    if eye[1]:
        cv2.circle(img, eye[1], 3, (255, 255, 0), -1)

    for i in parts:
        cv2.circle(img, (i.x, i.y), 3, (255, 0, 0), -1)

    cv2.imshow("face", img)

#Holen Sie sich Video von der Kamera
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
#Fügen Sie hier die Verarbeitung hinzu---

#Zum Beispiel, wenn Sie die oberen Koordinaten der Nase erhalten möchten
#parts[33].x
#parts[33].y    

    #↓ Holen Sie sich die Koordinaten der Gesichtsorgane
    dets = detector(frame[:, :, ::-1])
    if len(dets) > 0:
        parts = predictor(frame, dets[0]).parts()

        left_eye = eye_point(frame, parts)#Neben den Gesichtsorganen der Augen werden auch die Augen angezeigt
        right_eye = eye_point(frame, parts, False)

        p(frame, parts, (left_eye,right_eye))#frame*Bei 0*Wenn Sie nicht 0
#Auf dem ursprünglichen Gesichtsbild werden Punkte überlagert angezeigt
#

    if cv2.waitKey(1) == 27:
        break
#Geben Sie die Aufnahme frei und schließen Sie alle Fenster
#Bisher----
cap.release()
cv2.destroyAllWindows()

#Wenn Sie keine Kamera haben
#frame = cv2.imread("Bildpfad")
#cv2.imshow("me", frame) #Zur Bestätigung
#Fügen Sie hier die Verarbeitung hinzu---

#Bisher----

#cv2.waitKey(0)
#cv2.destroyAllWindows()


Ich möchte diesem Programm mehr hinzufügen, um ein Modell des Kopfes zu erstellen. Ich wünschte, ich könnte es extrahieren, aber ich möchte ein elliptisches Modell (Kopfmodell) erstellen, das mit den 68 Orientierungspunkten 1 und 17 im Bild unten verbunden ist. Ich habe viel recherchiert, aber es hat nicht funktioniert. Wenn jemand es verstehen kann, lassen Sie es mich bitte wissen. Ich freue mich darauf, mit Dir zu arbeiten. images.jpeg

Recommended Posts

Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Schätzung der Kopforientierung mit Python und OpenCV + dlib
Schätzen Sie die Haltung des AR-Markers mit Python + OpenCV + Drohne
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Holen Sie sich mit Python den Betriebsstatus von JR West
[Python] Verwenden von OpenCV mit Python (Basic)
Verwenden von OpenCV mit Python @Mac
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Beispiel für das Parsen von HTTP GET und JSON mit Pfefferpython
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Umgebungskonstruktion von Python und OpenCV
Leuchtendes Leben mit Python und OpenCV
Die Geschichte von Python und die Geschichte von NaN
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Holen Sie sich das Wetter mit Python-Anfragen
Holen Sie sich das Wetter mit Python-Anfragen 2
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Grundlegendes Studium von OpenCV mit Python
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Hinweis: Holen Sie sich das erste und letzte Element von Python OrderedDict zerstörungsfrei
Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Ausrichten gescannter Bilder von animiertem Videopapier mit OpenCV und Python
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Der schnellste Weg, um regelmäßig Kamerabilder mit Pythons OpenCV zu erhalten
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
Verwenden von Python und MeCab mit Azure Databricks
Überprüfen Sie die Existenz der Datei mit Python
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
Bilder mit Pupil, Python und OpenCV aufnehmen
Arbeiten mit OpenStack mit dem Python SDK
Einfache Einführung in die Python3-Serie und OpenCV3
Ich verwende Tox und Python 3.3 mit Travis-CI
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Holen Sie sich Bilder von OpenStreetMap und Geographical Institute Map mit Python + py-staticmaps
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Abrufen und Konvertieren der aktuellen Zeit in der lokalen Systemzeitzone mit Python
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ruft den Rückgabewert eines externen Shell-Skripts (ls) mit python3 ab
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Erkennen Sie die Kontur und Richtung eines geformten Objekts mit OpenCV3 und Python3 (Hauptkomponentenanalyse: PCA, Eigenvektor)
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Holen Sie sich den Inhalt von Git Diff aus Python