Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~

Dinge die zu tun sind

Dies

Zinedine_Zidane_0001

so was

Zinedine_Zidane_0001 jpg 03-36-34-700

Umgebung

MacOS Catalina 10.15.4
Python 3.7.6

Was ist Gesichtserkennung?

Eine Bibliothek, die eine Bildverarbeitung wie die Gesichtserkennung mit einem trainierten Modell durchführen kann. Es wird gesagt, dass dlib verwendet wird. https://github.com/ageitgey/

Repository

Dies ist ein Code, der face_recognition verwendet. https://github.com/komiyakomiyakomiya/face_trim

terminal


$ git https://github.com/komiyakomiyakomiya/face_trim.git

Bibliothek

opencv-python==4.2.0.34
face-recognition==1.3.0

Installation

terminal


$ pip install opencv-python==4.2.0.34 face-recognition==1.3.0

Code

face_trim.py


import os
from pathlib import Path
import subprocess
import sys

import cv2
import face_recognition
from IPython.display import display
from IPython.display import Image


cwd = Path().resolve()


def exec_cmd(cmd):
    """Befehlsausführung"""
    #Löschen, wenn vor oder nach der cmd-Zeichenfolge ein Leerzeichen steht->Teilen Sie durch Leerzeichen und erstellen Sie eine Liste
    cmd_split = cmd.strip().split()
    #Erhalten Sie die Standardausgabe mit den Standardeinstellungen
    cp = subprocess.run(cmd_split, stdout=subprocess.PIPE)
    # cp = subprocess.check_output(cmd_split)
    if cp.returncode != 0:
        print(f'{cmd_split[0]} faild.', file=sys.stderr)
        sys.exit(1)
    #Gibt zurück, wenn Standardausgabe vorhanden ist
    if cp.stdout is not None:
        # bytes ->Dekodiere nach str
        return cp.stdout.decode('utf-8')


def get_face_location(img_path):
    """Holen Sie sich Gesichtskoordinaten"""
    img = face_recognition.load_image_file(img_path)
    # location = face_recognition.face_locations(img, model='cnn')
    location = face_recognition.face_locations(img, model='hog')
    print(location)
    # [(82, 175, 180, 76)]
    top = location[0][0]
    right = location[0][1]
    bottom = location[0][2]
    left = location[0][3]
    return top, right, bottom, left


def get_face_location_cli(img_path):
    """CLI-Werkzeugfläche_Führen Sie die Erkennung aus, um Gesichtskoordinaten zu erhalten
    load_image_file()Verwenden Sie diese Option, wenn die Methode aufgrund eines Fehlers nicht verwendet werden kann"""
    #Erkennt Gesicht und Oberseite, Right, Bottom,Befehl zur standardmäßigen Ausgabe der linken Koordinaten
    cmd_face_detection = f'face_detection {img_path}'
    # cmd_face_detection = f'face_detection --model cnn {img_path}'
    #Standardausgabe empfangen
    stdout = exec_cmd(cmd_face_detection)
    print(stdout)
    # /Users/USER_NAME/path/to/dir/input/Zinedine_Zidane_0001.jpg,89,181,192,77
    #Liste durch Kommas getrennt
    stdout_list = stdout.strip().split(',')
    top = int(stdout_list[1])
    right = int(stdout_list[2])
    bottom = int(stdout_list[3])
    left = int(stdout_list[4])
    return top, right, bottom, left


def display_image(img_path):
    """Bild anzeigen"""
    #Bilder laden
    img = cv2.imread(img_path)
    #Erweiterung erhalten
    format = os.path.splitext(img_path)[1]
    #Verlängerung bestanden(format)Codiert im Format von
    decoded_bytes = cv2.imencode(format, img)[1].tobytes()
    print(cv2.imencode(format, img)[1])
    # [[255]
    # [216]
    # [255]
    # ...
    # [103]
    # [255]
    # [217]]
    # print(decoded_bytes)
    # b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x0......
    display(Image(data=decoded_bytes))


if __name__ == '__main__':
    #Bitte ersetzen Sie es durch Ihr Lieblingsbild
    file_name = f'Zinedine_Zidane_0001.jpg'
    #Wo soll das Originalbild abgelegt werden?
    input_path = f'{cwd}/../input'
    #Ausgabeziel des zugeschnittenen Bildes
    output_path = f'{cwd}/../output'
    #Erstellen, wenn kein Ausgabezielverzeichnis vorhanden ist
    os.makedirs(output_path, exist_ok=True)

    #Holen Sie sich Gesichtskoordinaten
    top, right, bottom, left = get_face_location(f'{input_path}/{file_name}')

    #Lesen Sie die Originaldatei
    img = cv2.imread(f'{input_path}/{file_name}')
    #Anzeige
    display_image(f'{input_path}/{file_name}')
    #Trimmen
    img_face = img[top:bottom, left:right]
    #Im Ausgabeverzeichnis speichern
    cv2.imwrite(f'{output_path}/{file_name}', img_face)
    #Anzeige
    display_image(f'{output_path}/{file_name}')

Schneiden Sie alle Bilder im Verzeichnis

if __name__ == '__main__':
    #Wo soll das Originalbild abgelegt werden?
    input_path = f'{cwd}/../input'
    #Ausgabeziel des zugeschnittenen Bildes
    output_path = f'{cwd}/../output'
    #Erstellen, wenn kein Ausgabezielverzeichnis vorhanden ist
    os.makedirs(output_path, exist_ok=True)

    #Pfadobjekt generieren
    path_obj = Path(input_path)
    #Musterabgleich mit Glob
    files_path = path_obj.glob('*')
    #Posix-Konvertierung
    files_path_posix = [file_path.as_posix() for file_path in files_path]
    print(files_path_posix)

    for file_path in files_path_posix:
        #Dateinamen abrufen
        file_name = file_path.split('/')[-1]
        #Holen Sie sich Gesichtskoordinaten
        top, right, bottom, left = get_face_location(file_path)
        #Lesen Sie die Originaldatei
        img = cv2.imread(file_path)
        #Anzeige
        display_image(file_path)
        #Trimmen
        img_face = img[top:bottom, left:right]
        #Im Ausgabeverzeichnis speichern
        cv2.imwrite(f'{output_path}/{file_name}', img_face)
        #Anzeige
        display_image(f'{output_path}/{file_name}')

Error

Ich habe manchmal einen solchen Fehler bekommen.

AttributeError: module 'face_recognition' has no attribute 'load_image_file'

Das Problem stand auch, aber ich konnte es nicht lösen, selbst wenn ich versuchte, was hier geschrieben stand. https://github.com/ageitgey/face_recognition/issues/318

Als ich aufgab und die Brute-Force-Methode zum Abrufen der Gesichtskoordinaten aus der Standardausgabe des CLI-Tools ausprobierte, wurde sie behoben, bevor ich es wusste ...

Cluster beschnittene Bilder

Ich habe hier einen Artikel geschrieben. Wenn du nichts dagegen hast

Das Ende

Vielen Dank für das Lesen bis zum Ende! Zidane hat keine Bedeutung. Ich war zufällig an meiner Seite.

Recommended Posts

Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
Gesichtserkennung aus mehreren Bilddateien mit openCV, ausschneiden und speichern
Es ist schwierig, einen grünen Bildschirm zu installieren, daher habe ich nur das Gesicht ausgeschnitten und es dem Hintergrundbild überlagert
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Starten Sie die Webkamera, machen Sie ein Standbild und speichern Sie es lokal
Ich möchte nur den Befehl SMTP MAIL FROM und den Befehl RCPT TO verwenden, ohne E-Mails mit Pythons smtplib zu senden
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Ich möchte mit Python in eine Datei schreiben
Die mit vim bearbeitete Datei war schreibgeschützt, aber ich möchte sie speichern
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte einen Quantencomputer mit Python betreiben
[Python] Ich habe ein System erstellt, um "das Rezept, das ich wirklich will" von der Rezeptseite einzuführen!
[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Ich habe versucht, die Entropie des Bildes mit Python zu finden
POST das ausgewählte Bild auf der Website mit mehrteiligen / Formulardaten und speichere es in Amazon S3! !!
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
[Python] Ich habe das Spiel von pip installiert und versucht zu spielen
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ① Objekterkennung
[Python] Ich möchte ein Gourmet sein. [Datengesteuerter Ansatz] Auswahl eines Geschäfts für die Jahresend- und Neujahrsfeiertage
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
(Memo) Bis Sie nur den gewünschten Teil von einer bestimmten Webseite extrahieren, konvertieren Sie ihn in eine Sphinx-Seite und drucken Sie ihn als PDF
Ich möchte Informationen von fstab am ssh-Verbindungsziel abrufen und den Befehl ausführen
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Kapitel 1 Einführung in Python Schneiden Sie nur die guten Punkte des Deeplearning aus, die von Grund auf neu erstellt wurden
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich möchte die Frage nach der Methode "__init__" und dem Argument "self" der Python-Klasse klären.
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Betreiben Sie Firefox mit Selen aus Python und speichern Sie die Bildschirmaufnahme
Schneiden Sie ein Bild mit Python aus
Schneiden Sie das Gesicht mit Python + OpenCV aus
Schneiden wir das Gesicht aus dem Bild
Ich möchte mit Python debuggen
Python - Holen Sie sich in regelmäßigen Abständen die Bitcoin-Rate BTC / JPY von Bitflyer und speichern Sie sie in einer Datei
Geben Sie den Bericht mit Python aus DB in PDF aus, hängen Sie ihn automatisch an eine E-Mail an und senden Sie ihn
Ich habe versucht, Objekte aus dem Bild des Steak-Set-Essens zu sortieren - Ähnliches Bild Wärmekartenerkennung