Ich habe im April angefangen, maschinelles Lernen zu studieren, und manchmal wünschte ich mir, ich hätte ein Gesichtsbild einer bestimmten Person, also habe ich beschlossen, es durch Web-Scraping zu sammeln. Vielleicht kann ich einen solchen Datensatz finden, wenn ich danach suche, aber ich wollte es trotzdem mit einem Foto des Gesichts meiner Lieblingsperson machen. Mit der openCV-Gesichtserkennung allein werden Teile, die keine Gesichter sind, extrahiert oder sogar Gesichtsbilder von nicht verwandten Personen gesammelt. Daher besteht der Zweck darin, ein Gesichtserkennungssystem hinzuzufügen und nur die Gesichtsbilder einer bestimmten Person zu sammeln.
Web Scraping ist sehr grau. Achten Sie daher darauf, den Server beim Ausführen nicht zu überlasten.
Winsows10 Anaconda3 Python 3.5.6 cmake 3.17.1 dlib 19.19.0 face-recognition 1.3.0 opencv-python 4.2.0.34
Ich werde die Ergebnisse später detailliert schreiben, aber dieses Programm sammelt Gesichtsbilder mithilfe der Gesichtserkennung, aber das Gefühl, mit dem ich experimentiert habe, ist das Gesicht einer bestimmten Person mit fast 100% iger Genauigkeit. Ich habe ein Bild, aber wenn es ein japanisches Gesicht (oder eher ein asiatisches) ist, sinkt die Genauigkeit. Beim Sammeln japanischer Gesichter müssen diese nach der Ausführung manuell sortiert werden.
Der Programmcode wurde auf github veröffentlicht. Laden Sie ihn daher von dort herunter. Wenn Sie dies tun möchten, weil die Erklärung gut ist, lesen Sie bitte die einfache Prozedur auf github und führen Sie sie aus.
Dieses Mal möchte ich Gesichtsbilder von ** Ai Shinozaki, dem süßesten in Japan ** sammeln
Dieses Mal werden wir eine Bibliothek namens face_recognize verwenden. Dies erfordert cmake und dlib, wie in der Dokumentation (https://github.com/ageitgey/face_recognition) beschrieben. Sie müssen lediglich die erforderlichen Bibliotheken hinzufügen.
getExternalLinks
def getExternalLinks(page):
externalLinks = []
for url in search(name, lang="jp", start=(page-1)*10, stop=10,pause = 2.0):
externalLinks.append(url)
return externalLinks
Diese Funktion erfasst und gibt 10 URLs von Websites zurück, die im Suchwort mithilfe der Google-Suchbibliothek angezeigt werden. Dieses Mal lautet das Suchwort "Ai Shinozaki image" und wird im Variablennamen gespeichert.
DownloadImage Sie können tatsächlich über den von der vorherigen Funktion erhaltenen Link darauf zugreifen und das Bild dort hochladen.
def DownloadImage(externalLinks):
for url in externalLinks:
global num
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3'}
req = Request(url, headers=header)
try:
html = urlopen(req).read()
except HTTPError as err:
return None
bs = BeautifulSoup(html, 'html.parser')
#get path of image
downloadList = bs.find_all('img')
for download in downloadList:
try:
#convert relative path to absolute path
fileUrl = getAbsoluteURL(url, download['src'])
except:
continue
if fileUrl is not None:
#get all faces in the picture
face_list = face_detect(fileUrl)
print(fileUrl)
if face_list is None:
continue
for face in face_list:
#judge face
result = face_recog(face)
true_num = 0
#when the number of True is more than the threshold, write the image in local
for i in result:
true_num += i*1
if true_num >= threshold:
try:
if ".png " in fileUrl:
cv2.imwrite(downloadDirectory+str(num)+".png ", face)
else:
cv2.imwrite(downloadDirectory+str(num)+".jpg ", face)
num += 1
except:
print("Fail to save")
time.sleep(1)
return None
Holen Sie sich zuerst alle Bilder, die auf die Website hochgeladen wurden, schneiden Sie das Gesichtsbild aus jedem aus und rufen Sie es ab. Dann definiert die Funktion face_recog, ob die Person die Person für das Gesichtsbild ist oder nicht.
face_recog
def face_recog(face):
#load some images that contain target's face
sample_image = face_recognition.load_image_file("sample_image/<image file>")
sample_image1 = face_recognition.load_image_file("sample_image/<image file>")
sample_image2 = face_recognition.load_image_file("sample_image/<image file>")
sample_image3 = face_recognition.load_image_file("sample_image/<image file>")
sample_image4 = face_recognition.load_image_file("sample_image/<image file>")
sample_image = face_recognition.face_encodings(sample_image)[0]
sample_image1 = face_recognition.face_encodings(sample_image1)[0]
sample_image2 = face_recognition.face_encodings(sample_image2)[0]
sample_image3 = face_recognition.face_encodings(sample_image3)[0]
sample_image4 = face_recognition.face_encodings(sample_image4)[0]
try:
unknown_image = face_recognition.face_encodings(face)[0]
except:
return [False]
known_faces = [
sample_image,
sample_image1,
sample_image2,
sample_image3,
sample_image4
]
results = face_recognition.compare_faces(known_faces, unknown_image)
return results
Holen Sie sich ein Bild, das das Gesicht der Person zeigt, die Sie zur Gesichtserkennung im Voraus aufnehmen möchten. Dieses Mal werden wir zur Verbesserung der Genauigkeit 5 Bilder aufnehmen, jedes mit dem eingegebenen Gesichtsbild vergleichen und jeweils das Ergebnis zurückgeben.
Und dieses Mal, wenn 2 oder mehr von 5 wahr sind, werde ich das Bild speichern. (Wenn es eine ist, werden verschiedene Personen, die übereinstimmen, gespeichert, und wenn es 5 von 5 ist, erhöht sich die Genauigkeit, aber die Anzahl nimmt ab.) Und auf der Github-Seite ist am Ende auch der Vorgang des Löschens genau des gleichen Bildes enthalten.
Hier ist das Ergebnis des Sammelns von Bildern für eine Seite der Google-Suche.
Wie Sie sehen können, werden die Gesichtsbilder ganz unterschiedlicher Personen gespeichert.
Als nächstes werde ich mit Scarlett Johansson experimentieren, der sexiesten und schönsten in Übersee.
Dies ist hervorragend gefüllt mit Scarlett Johansson, Insbesondere waren 342 von 343 Scarlett Johansson. Dies ist wesentlich genauer als bei Ai Shinozaki. Möglicherweise ist die Bibliothek face_recongnize für Gesichter von Ausländern gedacht und nicht zur Identifizierung asiatischer Gesichter geeignet.
Ich würde gerne in Zukunft mit verschiedenen Leuten experimentieren und es versuchen
Recommended Posts