[PYTHON] Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)

Bei der Bilderkennung / -klassifizierung mit maschinellem Lernen wie DNN ist beim Ausführen des Lernens eine große Anzahl von Trainingsbildern erforderlich. Es gibt viele Fälle, in denen im Web veröffentlichte Datensätze (Bildersätze) usw. verwendet werden. Bei der Klassifizierung / Erkennung von Gesichtsbildern gibt es jedoch nur wenige Datensätze, die aufgrund von Problemen wie Porträtrechten für die Öffentlichkeit kostenlos zugänglich sind. Infolgedessen fällt es vielen Menschen schwer, Lernbilder zu sammeln. Daher werde ich hier eine Möglichkeit vorstellen, Ihren eigenen Gesichtsbilddatensatz zu erstellen.

Entwicklungsumgebung verwendet dieses Mal

Holen Sie sich Kandidatenbilder

Sammeln Sie zunächst Bilder, die das Zielgesicht zeigen können (im Folgenden als Kandidatenbilder bezeichnet). Mögliche Erfassungsmethoden umfassen die folgenden Methoden.

Dieses Mal möchte ich über ** Wie man Kandidatenbilder mit dem Web-API-Dienst sammelt ** schreiben **.

Sammlung von Kandidatenbildern mithilfe der öffentlich verfügbaren Web-API

Es gibt viele Web-API-Dienste, die als Antwort im Web oder auf SNS veröffentlichte Bildinformationen zurückgeben. Hier verwenden wir die ** Bing Image Search API **, die kostenlos unter Microsoft Cognitive Services bereitgestellt wird.

In dieser Erfassungsmethode, die die Bing Image Search-API verwendet,

  1. Legen Sie die Suchbedingung in der Abfrage fest und rufen Sie die URL des Bildes ab, das mit der API übereinstimmt
  2. Erstellen Sie mit OpenCV eine neue Bildkopie aus der in 1 erhaltenen Bild-URL.

Machen Sie zwei Schritte. Wie oben erwähnt, wird OpenCV daher als Bibliothek zum Importieren benötigt.

Schritte zur Verwendung der Bing Image Search-API

So registrieren Sie sich für Microsoft Cognitive Services und für die Bing Image Search API Weitere Informationen finden Sie im separaten Artikel. So registrieren Sie Microsoft Cognitive Services

Um die API verwenden zu können, benötigen Sie einen Abonnementschlüssel, den Sie nach Abschluss der API-Registrierung erhalten.

Codebeispiel zum Abrufen der Bildinformationen, die das Suchergebnis sind, von der API

Grundsätzlich wird wie bei einer allgemeinen Web-API eine HTTP-Methode (diesmal Anfrage anfordern) an den API-Endpunkt gesendet Sie können die Antwortinformationen (JSON-Format) erhalten, in denen die Bild-URL gespeichert ist, die das Suchergebnis der Abfrage ist. Das Codebeispiel, mit dem dies erreicht wurde, lautet wie folgt.

# _*_ coding: utf-8 _*_

import requests
import urllib.request
import os.path
import cv2
import numpy as np

#API-Endpunkt und Abonnementschlüssel
REQUEST_BASE_URL = 'https://bingapis.azure-api.net/api/v5/images/search'
SUBSCRIPTION_KEY = '********************'


def api_request(query, count=10):

    #Header- und Parametereinstellungen
    headers = { 'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY, }
    params = {
        'q': str(query),
        'count': int(count),
        'mkt': 'ja-JP',
        'offset': '0',
    }

    #API-Wurf
    response = requests.get(REQUEST_BASE_URL, headers=headers, params=params)
    res_headers = response.headers
    status_code = response.status_code
    results = None

	#Inhaltseinstellung, um gemäß dem Statuscode und dem Header-Inhalt zum Anrufer zurückzukehren
    if status_code == 200:
        if 'content-length' in res_headers and int(res_headers['content-length']) == 0:
            results = None
        elif 'content-type' in res_headers and isinstance(res_headers['content-type'], str):
            if 'application/json' in res_headers['content-type'].lower():
                results = response.json()['value']['contentUrl'] if response.content else None
            else
                results = None
    else:
        #Wenn der Statuscode nicht 200 ist, wird er zwangsweise beendet.
        print("Error! - status code : {0}".format(response.status_code))
        print("Message : {0}".format(response.json()['error']['message']))
        exit()

	#Gibt die Bild-URL zurück, die das Suchergebnis ist
    return results

Ausführliche Spezifikationen zum Anfordern und Beantworten von APIs finden Sie unter Offizielle API-Referenz. Bitte gib mir. Hier werden nur die Spezifikationen beschrieben, die zum Zeitpunkt der Anforderung als das erforderliche Minimum angesehen werden.

Header-Informationen anfordern

Informationselement Inhalt
Ocp-Apim-Subscription-Key Zeichenfolge für Abonnementschlüssel

Parameter anfordern

Parameterelement Datentyp Inhalt
q String Eine Zeichenfolge, die zu einer Suchabfrage wird
count UnsignedShort Anzahl der als Antwort zurückgegebenen Suchergebnisbilder
mkt String Anfrage Der Name der Region, in der die Anfrage gesendet wird (angegeben durch den Marktcode).

Dieses Mal wird nur die Bild-URL, die das Suchergebnis ist, aus den Antwortinformationen der API abgerufen. Darüber hinaus können die folgenden Informationen mit der Bing Image Search-API abgerufen werden.

Codebeispiel zum Erstellen eines Kandidatenbilds aus der Bild-URL

Nachdem Sie den Bild-URL-Satz des Suchergebnisses von der obigen Methode erhalten haben, Erstellen Sie ein neues Kandidatenbild mit OpenCV unter dieser URL.

def make_image(image_url):
	#Laden Sie die Bildinformationen der URL
	resp = urllib.request.urlopen(image_url)

	#Erstellen Sie den Bildspeicherpuffer neu, damit er von OpenCV gelesen werden kann
	image = np.asarray(bytearray(resp.read()), dtype=np.uint8)
	
	#Bild aus Speicherpuffer lesen
	image = cv2.imdecode(image, cv2.IMREAD_COLOR)

	#Als neues Bild exportieren
	cv2.imwrite("hoge.jpg ", image)

Setzen Sie beim Neuerstellen des Speicherpuffers den Datentyp auf den Typ uint8. Dies liegt daran, dass die Pixelwerte, aus denen ein Bild besteht, im Allgemeinen ganzzahlige Werte innerhalb des Intervalls [0,255] annehmen. Wenn Sie beim Lesen eines Bildes mit der imdecode-Methode "cv2.IMREAD_COLOR" angeben, Es wird als Farbbild gelesen.   Obwohl es einfach ist, habe ich ein Beispiel für das Sammeln von Kandidatenbildern mithilfe der Bing Image Search-API erläutert. Nächstes Mal schreibt eine Methode zum Sammeln von Kandidatenbildern durch Frame-Analyse des Videos mit OpenCV.

Recommended Posts

Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (2: Rahmenanalyse von Videos, um Kandidatenbilder zu erhalten)
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS mit anaconda
Sammeln von Daten zum maschinellen Lernen
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Schnelle Schritte zum Erstellen einer maschinellen Lernumgebung mit Jupyter Notebook unter macOS Sierra mit anaconda
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
[Entwicklungsumgebung] So erstellen Sie einen Datensatz in der Nähe der Produktionsdatenbank
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung
[Zur Aufnahme] Keras-Bildsystem Teil 1: Wie erstelle ich einen eigenen Datensatz?
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Datenversorgungstricks mit deque beim maschinellen Lernen
So codieren Sie eine Drohne mithilfe der Bilderkennung
So erstellen Sie Daten für CNN (Chainer)
So erstellen Sie eine Rest-API in Django
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 erstellen Sie mit Python ein radiales Profil aus astronomischen Bildern (Chandra, XMM usw.)
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
So richten Sie eine Python-Umgebung mit pyenv ein
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
[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
Erstellen einer virtuellen Anaconda-Umgebung für die Verwendung mit Azure Machine Learning und Verknüpfen mit Jupyter
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
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
So generieren Sie eine Abfrage mit dem IN-Operator in Django
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
Datensatz für maschinelles Lernen
Wie wäre es mit Anaconda zum Erstellen einer maschinellen Lernumgebung mit Python?
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
So erstellen Sie mit Faker eine CSV-Dummy-Datei mit Japanisch
Menschen merken sich gelerntes Wissen im Gehirn, wie man gelerntes Wissen im maschinellen Lernen auswendig lernt
[TensorFlow 2.x-kompatible Version] So trainieren Sie eine große Datenmenge mit TFRecord & DataSet in TensorFlow (Keras)