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.
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 **.
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,
Machen Sie zwei Schritte. Wie oben erwähnt, wird OpenCV daher als Bibliothek zum Importieren benötigt.
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.
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.
Informationselement | Inhalt |
---|---|
Ocp-Apim-Subscription-Key | Zeichenfolge für Abonnementschlüssel |
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.
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