[PYTHON] Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (3: Gesichtsbildgenerierung aus Kandidatenbildern Teil 1)

Generieren Sie Kandidatenbilder, die das Ziel zeigen, bis Letztes Mal und Letztes Mal Ich habe erwähnt, wie man es bekommt, aber dieses Mal werde ich vorstellen, wie man den Gesichtsbereichsteil daraus extrahiert und ein Gesichtsbild erzeugt.

Entwicklungsumgebung verwendet dieses Mal

Fluss, um ein Gesichtsbild aus dem Kandidatenbild zu erzeugen

Um ein Gesichtsbild zu erzeugen, schneiden Sie nur den Bereich, in dem das Gesicht von den Kandidatenbildern reflektiert wird, und generieren Sie den zugeschnittenen Bereich als neues Bild = Gesichtsbild. Die manuelle Ausführung dieser Arbeit erfordert jedoch viel Zeit und Mühe. Um sie auch nur ein wenig zu lösen, verwenden wir dieses Mal die folgende Gesichtserkennungs-API (Bibliothek).

Wenn Sie diese APIs verwenden, ist es möglich, automatisch nur den Gesichtsbereich aus dem Kandidatenbild zu extrahieren. Dieses Mal wird die Methode jedoch mit OpenCV und dlib erläutert. Der spezifische Fluss der Gesichtsbilderzeugung ist im Wesentlichen der gleiche wie folgt.

  1. Erfassen Sie durch Eingabe eines Kandidatenbilds in die Gesichtserkennungs-API die Koordinateninformationen, die als Gesichtsbereich erscheinen.
  2. Schneiden Sie den Koordinatenbereich basierend auf den Koordinateninformationen, die in 1 aus dem Kandidatenbild erhalten wurden.
  3. Generieren Sie den zugeschnittenen Bereich als neues Bild und verwenden Sie ihn als Gesichtsbild

Der obige Prozess wird durch die face_detect-Methode im folgenden Code definiert.

# -*- coding: utf-8 -*-
import glob

#Verzeichnispfad mit Kandidatenbildern
IMG_PATH = "/home/hoge/image/"

def face_detect(img_list):
	#Definieren Sie mit dieser Methode den Prozess zur Erzeugung von Gesichtsbildern
	return


if __name__ == '__main__':
	
	#Holen Sie sich Kandidatenbilder aus dem angegebenen Verzeichnis und generieren Sie Gesichtsbilder mithilfe der API usw.
	images = glob.glob(IMG_PATH + '*.jpg')	
	face_detect(images)
	

dlib dlib ist eine Bibliothek, die für C ++ entwickelte Bildverarbeitungs- und maschinelle Lernfunktionen kombiniert, aber auch mit Python verwendet werden kann. (Informationen zum Installieren von dlib in einer Mac-Umgebung finden Sie in diesem Artikel usw.)

dlib bietet eine Methode "get_frontal_face_detector" für die Gesichtserkennung. Verwenden Sie diese. Wenn Sie SVM-bezogene Methoden verwenden, bei denen es sich um eine Art nichtlinearen Diskriminator mit hoher Unterscheidungsgenauigkeit handelt, ist eine erweiterte Erkennung möglich. Diesmal wird jedoch die Benutzerfreundlichkeit priorisiert. Der Code zur Generierung von Gesichtsbildern, der tatsächlich die Methode "get_frontal_face_detector" verwendet, lautet wie folgt.

import dlib
import cv2

def face_detect(img_list):

	#Identifikatoranruf zur Erkennung des Gesichtsbereichs
	detector = dlib.get_frontal_face_detector()
	
	#Erhalten Sie Koordinateninformationen, indem Sie das Kandidatenbild auf den Klassifizierer anwenden
	for img_path in img_list:
	
		#Kandidatenbild zum Trimmen (Farbmodus)
		img = cv2.imread(img_path, cv2.IMREAD_COLOR)
		
		#Setzen Sie die Bildanordnung wieder zusammen und geben Sie sie in den Klassifizierer ein, um Koordinateninformationen zu erhalten, die als Gesichtsbereich erscheinen
		cv_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
		faces = detector(cv_img, 1)

		#Gesichtsbildgenerierung, wenn ein Gesichtsbereich erkannt wird
		img_count = 1
        for face in faces:
        	
        	#Holen Sie sich die Bildgröße des Kandidaten
        	height, width = img.shape[:2]
        	
        	#Holen Sie sich Koordinatenpunkte des Gesichtsbereichs
        	top = face.top()
        	bottom = face.bottom()
        	left = face.left()
        	right = face.right()
        	
        	#Ignorieren Sie unregelmäßige Gesichtsbereiche
        	if not top < 0 and left < 0 and bottom > height and right > width:
            	break
            else:
            	#Trimmen des Gesichtsbereichs
            	dst_img = img[top:bottom, left:right]
            	
            	#Gesichtsbildgröße Normalisiert und gespeichert
            	face_img = cv2.resize(dst_img, (64,64))
            	new_img_name = str(img_count) + '.jpg'
            	cv2.imwrite(new_img_name, face_img)
            	img_count += 1

OpenCV und dlib verarbeiten unterschiedliche Pixelwerte von RGB (Rot / Grün / Blau), bei denen es sich um die Farbinformationen des Bildes handelt. In OpenCV werden RGB-Pixelwerte (Rot / Grün / Blau) in der Reihenfolge BGR im Array gespeichert, in dlib jedoch in der Reihenfolge RGB, sodass die Array-Struktur mit der Methode "cvtColor" konvertiert werden muss. Es gibt.

Außerdem gibt get_frontal_face_detector selten die Koordinatenwerte außerhalb des Bildbereichs als Koordinateninformationen des Gesichtsbereichs zurück. Dies liegt daran, dass das Gesicht am Rand des Bildes reflektiert wird. In vielen Fällen fehlt ein Teil des Gesichts. Selbst wenn es als Gesichtsbild wie als Trainingsdaten generiert wird, ist es schwierig, es zu verwenden. Ignorieren Sie es daher als unregelmäßigen Gesichtsbereich. Ich bin. OpenCV OpenCV ist eine Bildverarbeitungsbibliothek, die in C ++, Python usw. verwendet werden kann und in dieser Artikelserie bekannt ist. Hier wird jedoch die Klasse "CascadeClassifier" als Kaskadenklassifikatorklasse vorbereitet Benutzen. Mit dieser Klasse ist es möglich, einen Klassifizierer zu erstellen, der verschiedenen Objekten entspricht, abhängig vom Inhalt der XML-Datei, in der die Lernergebnisse gespeichert sind, die beim Erstellen des Klassifizierers gelesen werden sollen. Diesmal unter Bezugnahme auf "haarcascade_frontalface_default.xml" (bereitgestellte Site), bereitgestellt von OpenCV, als Gesichtsdetektor Ich werde es benutzen.

import cv2

#XML-Dateipfad, auf den der HaarCascade-Klassifizierer verweist
XML_PATH = "./haarcascade_frontalface_default.xml"
    
def face_detect(img_list):   
    
    #Stellen Sie den Gesichtsbereichsklassifikator ein
    classifier = cv2.CascadeClassifier(xml_path)

	#Gesichtsbildgenerierung, wenn ein Gesichtsbereich erkannt wird
    img_count = 1
    for img_path in img_list:
    
		#Farbbild zum Trimmen
		org_img = cv2.imread(img_path, cv2.IMREAD_COLOR)

		#Graustufenbild für die Klassifizierungseingabe
        gray_img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
        
        #Geben Sie ein Kandidatenbild (Graustufenbild) in den Klassifizierer ein und erfassen Sie Koordinateninformationen, die als Gesichtsbereich erscheinen
        face_points = classifier.detectMultiScale(gray_img, \
                scaleFactor=1.2, minNeighbors=2, minSize=(1,1))
        
        #Gesichtsbilderzeugung durch Trimmen des Farbbildes aus dem Identifikationsergebnis (rechteckige Koordinateninformationen)
        for points in face_points:
            
            #Holen Sie sich Koordinatenpunkte des Gesichtsbereichs
            x, y, width, height =  points
            
            #Trimmen des Gesichtsbereichs
            dst_img = org_img[y:y+height, x:x+width]
            
            #Gesichtsbildgröße Normalisiert und gespeichert
            face_img = cv2.resize(dst_img, (64,64))
            new_img_name = str(img_count) + '.jpg'
            cv2.imwrite(new_img_name, face_img)
            img_count += 1
            

Bei der Methode mit OpenCV werden zwei Arten von Kandidatenbildern erstellt: ein Farbbild zum Trimmen und ein Graustufenbild für die Klassifizierungseingabe. Dies liegt daran, dass die Methode "detectMultiScale" die Eingabe von Farbbildern nicht unterstützt.

Die Methode "detectMultiScale" verwendet die folgenden Parameterargumente.

Versuchen Sie die Objekterkennung (detectMultiScale) mit verschiedenen Parametern (minNeighbors) Versuchen Sie die Objekterkennung (detectMultiScale) mit verschiedenen Parametern (scaleFactor Edition)

Ein grober Eindruck von der Verwendung der beiden oben genannten Methoden

dlib

OpenCV

Das ist einfach, aber dieses Mal habe ich erklärt, wie man aus einem Kandidatenbild ein Gesichtsbild erzeugt.

Recommended Posts

Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (3: Gesichtsbildgenerierung aus Kandidatenbildern Teil 1)
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (2: Rahmenanalyse von Videos, um Kandidatenbilder zu erhalten)
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Menschen merken sich gelerntes Wissen im Gehirn, wie man gelerntes Wissen im maschinellen Lernen auswendig lernt
Papier: Intrazerebrale Verarbeitung von Musik
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (3: Gesichtsbildgenerierung aus Kandidatenbildern Teil 1)
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Bildausrichtung: von SIFT bis Deep Learning
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
Einfacher Code, der in Kaggles Titanic: Maschinelles Lernen aus Katastrophen eine Punktzahl von 0,81339 ergibt
Sammeln von Daten zum maschinellen Lernen
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
[Zur Aufnahme] Keras-Bildsystem Teil 1: Wie erstelle ich einen eigenen Datensatz?
So bereiten Sie die Umgebung mit Courseras fortgeschrittenem Kurs für maschinelles Lernen auf Google Colab vor
Aufteilen von Trainingsdaten für maschinelles Lernen in objektive Variablen und andere in Pandas
So kratzen Sie Bilddaten von Flickr mit Python
Wie man ein Schießspiel mit toio macht (Teil 1)
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV)
Einführung in das maschinelle Lernen mit Simple Perceptron
Erstellen einer virtuellen Anaconda-Umgebung für die Verwendung mit Azure Machine Learning und Verknüpfen mit Jupyter
Versuchen Sie, wav2pix auszuführen, um ein Gesichtsbild aus der Sprache zu generieren (es gibt auch eine animierte Gesichtsgenerierung).
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
So erhalten Sie mit einer vielseitigen Methode nur die erforderlichen Daten aus der strukturierten Datengruppe
Darstellung der Verteilung der Bakterienzusammensetzung aus Qiime2-Analysedaten in einem Box-Whisker-Diagramm
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So erstellen Sie ein Hacking-Labor - Kali Linux (2020.1) VirtualBox 64-Bit Teil 2-
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Datensatz für maschinelles Lernen
Wird in EDA für maschinelles Lernen verwendet
Maschinelles Lernen (erster Teil) in wenigen Zeilen. Erklären Sie PyCaret im Detail. Von der Datensatzvorbereitung bis zum Genauigkeitsvergleich mehrerer Modelle.
[Tutorial] Erstellen Sie mithilfe von maschinellem Lernen in 30 Minuten einen einzigartigen Ausdrucksextraktor
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
Wie wäre es mit Anaconda zum Erstellen einer maschinellen Lernumgebung mit Python?
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
So erstellen Sie eine .dylib-Bibliothek aus einer .a-Bibliothek mit OSX (El Capitan)
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Menschen merken sich gelerntes Wissen im Gehirn, wie man gelerntes Wissen im maschinellen Lernen auswendig lernt
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Wie erstelle ich eine japanisch-englische Übersetzung?
Machen Sie eine Santa-Kennung aus einem Santa-Bild
So sammeln Sie Bilder in Python
Wie man einen lockeren Bot macht
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Maschinelles Lernen in Delemas (Datenerfassung)
[Blender] So erstellen Sie ein Blender-Plug-In
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
Wie erstelle ich einen Crawler?
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Coursera Machine Learning Challenge in Python: ex6 (Anpassen von SVM-Parametern)
In Vim: Make, um HTML von Markdown mit Pandoc auszugeben
So erstellen Sie mit YOLO in 3 Stunden ein Modell für die Objekterkennung
Mit dem Ziel, ein Ingenieur für maschinelles Lernen zu werden, der MOOCs aus Vertriebspositionen verwendet
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
So machen Sie den Containernamen in Docker als Subdomain zugänglich
Ich habe versucht, Kanas handschriftliche Zeichenerkennung durchzuführen. Teil 2/3 Datenerstellung und Lernen
So finden Sie den Ansichtsnamen mit dem Namespace über die URL (path_info) in Django
[Entwicklungsumgebung] So erstellen Sie einen Datensatz in der Nähe der Produktionsdatenbank