Abrufen von Links zu Vk-Profilen aus SearchFace-Ergebnissen mit Python (dies ist jedoch nicht korrekt)

Bild, um Aufmerksamkeit zu erregen:


Rahmen aus der Serie Person Of Interest

Heute werden wir über die einfache Gesichtserkennung mit den verfügbaren Tools sprechen.
Verwendet: Python 3.6, searchface.ru, ein externer Dienst zum Konvertieren von Links zu Fotos in ID (Bot im Telegramm, derzeit)


Wir haben also eine Website , die nach Gesichtern sucht.
Schau mal rein.

Darin befindet sich das übliche Formular, das eine Post-Anfrage sendet, die als Antwort json zurückgibt.

ein Beispiel
Wir senden zum Beispiel ein Foto von Harold Finch aus der Serie Person Of Interest (Michael Emerson):


Wir bekommen:

[[0.991, [['https://pp.userapi.com/h2ViUULg76AaNRw9XBBJOkBMOhQbphQivldE8A/wledD6KFj7I.jpg', 310, 136, 122]]], [0.984, [['https://pp.userapi.com/c622531/v622531393/4fa11/x-N_Rv4lUp0.jpg', 251, 178, 99]]], [0.972, [['https://pp.userapi.com/c840426/v840426427/5f090/m9XVCm9Zd4k.jpg', 200, 143, 78]]], [0.918, [['https://pp.userapi.com/c840339/v840339996/30f51/h_HS2peh0Hs.jpg', 80, 100, 75], ['https://pp.userapi.com/c840138/v840138996/52746/lgYobQh0EIo.jpg', 281, 201, 112], ['https://pp.userapi.com/c840420/v840420996/32a0e/MsauPmM6obU.jpg', 293, 137, 80]]], [0.906, [['https://pp.userapi.com/uacyJQkkoESbTNhRAo6JcqfyKVsPMwZYqTEzfw/GZKQ9rLNlpA.jpg', 310, 122, 127], ['https://pp.userapi.com/QQJWVDF2YT1MvkupPgahB2Uz3_vkZ7-FAhIucw/tva0l9dBAj8.jpg', 642, 325, 257], ['https://pp.userapi.com/LI5hCDYqB8Ju9KA8hQjf1yzYVmuliA7uBXuJoA/_4q-yoLXCRI.jpg', 293, 277, 170]]], [0.893, [['https://pp.userapi.com/xvSllwTcM3tJ8bwi8yhn10fnCgT68X_24Q3peQ/yY8N1DxpQ5o.jpg', 324, 340, 194], ['https://pp.userapi.com/h2ViUULg76AaNRw9XBBJOkBMOhQbphQivldE8A/wledD6KFj7I.jpg', 310, 136, 122], ['https://pp.userapi.com/HJeMSYoCLGdub2ueloZA7pqOin9QVkLhnHCRUw/49ngz53y4gw.jpg', 306, 347, 140], ['https://pp.userapi.com/SpuLGp49INoN0mr0J1cs5uQD6G9Zqb8boABlpQ/Zfh9Ay8zHvc.jpg', 235, 254, 66]]], [0.891, [['https://pp.userapi.com/c628825/v628825986/ac15/ucROr8sUVto.jpg', 304, 120, 90]]], [0.886, [['https://pp.userapi.com/nxyVWitUFsvxOP1bAbabmGGEg8GPrjEryvFRRQ/NOjnG-Oxl_Q.jpg', 142, 192, 121], ['https://pp.userapi.com/L-40BbkBjFiy4BZJNIlFBqASysOPldnZEqzraA/HM9rgh9hKpo.jpg', 813, 383, 172], ['https://pp.userapi.com/tJpeoXXZzm2EIgajpUxh8AuXHDtBcF1NJ1OefA/TMrMSuLb9eE.jpg', 497, 357, 199]]], [0.879, [['https://pp.userapi.com/c836527/v836527332/5212c/pz-mv3JoSoY.jpg', 298, 216, 161]]], [0.877, [['https://pp.userapi.com/c637416/v637416770/60691/dfGmo0NzQxE.jpg', 298, 215, 156]]], [0.871, [['https://pp.userapi.com/c636926/v636926559/35798/8VjR2jNfPfU.jpg', 399, 381, 216], ['https://pp.userapi.com/c636927/v636927559/33577/vFJobCuXEAw.jpg', 199, 150, 65], ['https://pp.userapi.com/c636927/v636927559/337d5/OAeQ3Hw2mb4.jpg', 506, 139, 65], ['https://pp.userapi.com/c841334/v841334162/799ce/R0XkD7T4B44.jpg', 521, 288, 293], ['https://pp.userapi.com/c824204/v824204162/f0dec/q_cZvfXl8Wc.jpg', 317, 407, 246]]], [0.869, [['https://pp.userapi.com/QJ1FU4eGuSes4UxeitONvx3uolZvNDXq61JDcg/9bBDAO3RKwo.jpg', 330, 236, 170]]], [0.861, [['https://pp.userapi.com/c305901/v305901469/57ed/y3u2vHkdbLY.jpg', 235, 192, 197], ['https://pp.userapi.com/c622124/v622124469/51cc/sCsVgsWILT8.jpg', 234, 202, 223], ['https://pp.userapi.com/c625321/v625321469/1093d/RL1x2C9ZXXo.jpg', 255, 154, 135], ['https://pp.userapi.com/c630924/v630924469/3baf2/wUNtCyOtxkk.jpg', 311, 264, 561], ['https://pp.userapi.com/c630924/v630924469/3bb6c/gCq6-DJMrxw.jpg', 466, 170, 211]]], [0.849, [['https://pp.userapi.com/c604631/v604631165/12043/vFf7H0_YMn8.jpg', 300, 145, 223], ['https://pp.userapi.com/c636625/v636625165/3ebc1/xNAwmB38DLM.jpg', 989, 223, 156], ['https://pp.userapi.com/c636625/v636625165/3ebcb/BoFgWTDlNt4.jpg', 725, 381, 247]]], [0.847, [['https://pp.userapi.com/c621930/v621930615/1fee3/mxs1ujqVJNw.jpg', 797, 362, 345], ['https://pp.userapi.com/c625428/v625428615/391fa/czEn2oj77kQ.jpg', 462, 205, 152], ['https://pp.userapi.com/c623928/v623928615/344b0/fntYJm5VtWw.jpg', 744, 789, 461]]], [0.841, [['https://pp.userapi.com/rw-gkzZmq2p_HqVCFmUKcY6DWveJFqS6P4mqTA/uLsYHKv1u2E.jpg', 332, 179, 135], ['https://pp.userapi.com/ObAY2Vt1s1xF7MacRbdMEDtOoQ8mvdIPZpMPtA/e8jJydqmyRM.jpg', 303, 369, 240], ['https://pp.userapi.com/TWNCYtNxiq1KadoXtILhiKIx2XKcmg-56Ks8ow/siomQIkxTiU.jpg', 174, 249, 141], ['https://pp.userapi.com/3kDEgo6u3pnVfDq5wj3FLYJtDVPJReTpuL_cPg/o-pZesCYX3s.jpg', 357, 238, 111], ['https://pp.userapi.com/xaPb0xwcLy9NPVfujOv8EmZJnscQeKhiITWvyg/rCAfnO81Mco.jpg', 426, 292, 288]]]] 


Eine Art API mit einer einzigen (?) Methode.

Ich habe diesen Prozess in Python automatisiert und die Links zu einer Datei zur weiteren Analyse gespeichert:

Beispiel
Senden Sie photo photo.jpg und speichern Sie das Ergebnis in file.txt

 import requests import os import sys import re photo = 'photo.jpg' file = 'file.txt' url = 'http://searchface.ru/request/' proxies = { 'http': '46.101.1.221:80', 'https': '46.101.1.221:80', } def request_page(filename): try: files = { 'upl': (filename, open(filename, 'rb')), } r = requests.post(url, files=files, proxies=proxies) return r except: print("no file") r = {} return r def save_image_links(r, filename): try: j = r.json() # print(j) except: print("no json") return False print("Save images links:") img_file = open(filename, 'w') for i in r.json(): # print(i[1][0][0]) print(i[0]) img_file.write(str(i[0]) + '\n') for k in i[1]: # print(str(k)) print(str(k[0])) img_file.write(str(k[0])+ '\n') img_file.close() return True def main(): r = request_page(photo) print(r) save_image_links(r, file) if __name__ == '__main__': try: main() except KeyboardInterrupt: exit() 


Die Idee der praktischen Anwendung ist einfach: Wir senden Fotos der richtigen Personen, fügen Links (oder Hashes von Links) in die Datenbank ein, senden nacheinander eine Reihe von Fotos. Wenn die Person, an der wir interessiert sind, allein auf dem Foto ist und keine Fehler auftreten , weist uns der Link beim Überprüfen der Datenbank darauf hin.


Rahmen aus der Serie Person Of Interest

Es bleibt abzuwarten, id in vk.

Es gibt mehrere Möglichkeiten:

1. Holen Sie sich die ID von einigen alten Links

Codebeispiel
 import re def id_in_string(s): result = re.findall(r'/u\d+/', s) a = s.find('/u') if(len(result) > 0): b = str(result).find("/']") return 'https://vk.com/id' + str(result)[4:b] 

2. Erstellen Sie Ihre Basis aus Personen mit berühmtem Ausweis (Freunde, Bekannte, Prominente ..)

3. Verwenden Sie einen externen Dienst als Die Aufgabe, die Basis des VK-Fotos zu analysieren, ist trivial, es gab vorher einfach keine Nachfrage danach. Jetzt erscheinen solche Dienste.

Zum Beispiel verwenden wir den Bot im Telegramm @VkUrlBot.

Die Bot-Datenbank ist begrenzt, nicht alle IDs werden durchsucht, daher ist die manuelle Suche unpraktisch, aber kostenlos (zum Zeitpunkt der Veröffentlichung) .

Da Telegramme es Bots nicht erlauben, miteinander zu kommunizieren, geben wir vor, ein Benutzer zu sein, um Schleifen zu vermeiden. Installieren Sie dazu telethon, registrieren Sie eine neue Telegrammanwendung und geben Sie die empfangenen Anmeldeinformationen (ID und Hash) ein.

Beispiel
 import socks import time import re from telethon import TelegramClient, sync from telethon.tl.functions.messages import SendMessageRequest api_id = #int api_hash = '' phone = '' username = '' file = "file.txt" def string_to_vk_id(s): return re.findall(r'(https?://[^\s]+)', s) def main(): with TelegramClient(username, api_id, api_hash, proxy=(socks.SOCKS5, '127.0.0.1', 9150)) as client: print("Client OK") ''' ,  'some_name'      ( ,      ),  'some_name.session'  .         Python sqlite3. ,           ,          .         ,     .''' # Ensure you're authorized if not client.is_user_authorized(): client.send_code_request(phone) try: client.sign_in(phone, input('Enter the code: ')) except SessionPasswordNeededError: client.sign_in(password=input('Password: ')) me = client.get_me() print(me) from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty message_id_prev = 0 get_dialogs = GetDialogsRequest( offset_date=None, offset_id=0, offset_peer=InputPeerEmpty(), limit=30, hash=0 ) f = open(file, 'r') for line in f: line = str(line) line = line[:line.find('\n')] if len(str(line)) > 10: print("read line:", line) dialogs = client(get_dialogs) print() print("------") print() print("------") print() print(dialogs.messages[0]) print("***") print('Message: ', dialogs.messages[0].id) if message_id_prev != dialogs.messages[0].id: if int(dialogs.messages[0].from_id) == 758548535: #id=758548535, username='VkUrlBot' print("------") print(dialogs.messages[0].message) print("------") print(string_to_vk_id(str(dialogs.messages[0].message))) # print(dialogs.messages[0].media) print("...sleep") time.sleep(4) #  print(".........") message_str = str(line) try: result = client(SendMessageRequest(client.get_input_entity('VkUrlBot'), message_str)) except: print("Exception") time.sleep(1) print("------") time.sleep(1) print("------") dialogs = client(get_dialogs) print(dialogs.messages[0].message) if __name__ == '__main__': try: main() except KeyboardInterrupt: exit() 


Ich habe Telegram Portable + linkes Konto für den Fall einer möglichen Sperre verwendet. In der Anwendung ist es außerdem praktisch, den Fortschritt zu überwachen:


Die Daten sind aus Anstand verschmiert, es macht wenig Sinn.

Der Bot liefert nicht immer das richtige Ergebnis, er kann mehrere produzieren.

Entwicklerkommentar dazu:


Sie können diesen Prozess verbessern, indem Sie beispielsweise in eine virtuelle Datei schreiben und diese sofort überprüfen.
Dies kann auf verschiedene Arten geschehen: Erstellen Sie beispielsweise eine virtuelle Datei im RAM mit tempfile.SpooledTemporaryFile oder schreiben Sie mit StringIO in eine Variable vom Typ String.
Dies kann praktisch sein, wenn Sie Fotos von derselben VK herunterladen und anschließend verarbeiten.

Außerdem habe ich die beiden Beispiele zur Vereinfachung zu einem zusammengefasst. Das Beispiel ist nicht perfekt, aber es funktioniert.

Ich glaube, dass jeder in der Lage sein wird, es für seine Bedürfnisse zu korrigieren.

Code
 import requests import socks import time import re from telethon import TelegramClient, sync from telethon.tl.functions.messages import SendMessageRequest api_id = api_hash = '' phone = '' username = '' file = "file.txt" photo = 'photo.jpg' url = 'http://searchface.ru/request/' proxies = { 'http': '46.101.1.221:80', 'https': '46.101.1.221:80', } def request_page(filename): #    ,     files = { 'upl': (filename, open(filename, 'rb')), } r = requests.post(url, files=files, proxies=proxies) return r def id_in_string(s): result = re.findall(r'/u\d+/', s) a = s.find('/u') if(len(result) > 0): b = str(result).find("/']") return 'https://vk.com/id' + str(result)[4:b] else: return '' def save_image_links(r, filename): try: j = r.json() # print(j) except: print("no json") return False print("Save images links:") img_file = open(filename, 'w') imagename = 0 for i in r.json(): # print(i[1][0][0]) print(i[0]) img_file.write(str(i[0]) + '\n') for k in i[1]: # print(str(k)) print(str(k[0])) img_file.write(str(k[0])+ '\n') img_file.close() return True def string_to_vk_id(s): return re.findall(r'(https?://[^\s]+)', s) def main(): r = request_page(photo) #  #   -     print(r) save_image_links(r, file) #   ,     #    with TelegramClient(username, api_id, api_hash, proxy=(socks.SOCKS5, '127.0.0.1', 9150)) as client: print("Client OK") ''' ,  'some_name'      ( ,      ),  'some_name.session'  .         Python sqlite3. ,           ,          .         ,     .''' # Ensure you're authorized if not client.is_user_authorized(): client.send_code_request(phone) try: client.sign_in(phone, input('Enter the code: ')) except SessionPasswordNeededError: client.sign_in(password=input('Password: ')) me = client.get_me() print(me) from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty message_id_prev = 0 get_dialogs = GetDialogsRequest( offset_date=None, offset_id=0, offset_peer=InputPeerEmpty(), limit=30, hash=0 ) for i in r.json(): # print(i[1][0][0]) print(i[0]) for k in i[1]: # print(str(k)) # print(str(k[0])) print("link to image: ", str(k[0])) dialogs = client(get_dialogs) print() print("---------") print() print(dialogs.messages[0]) print("---------") print('Message: ', dialogs.messages[0].id) if message_id_prev != dialogs.messages[0].id: if int(dialogs.messages[0].from_id) == 758548535: #id=758548535, username='VkUrlBot' print("---------") print(dialogs.messages[0].message) print("---------") print("vk id list: ",string_to_vk_id(str(dialogs.messages[0].message))) # print(dialogs.messages[0].media) print("...sleep") time.sleep(4) #  print(".........") message_str = str(k[0]) try: result = client(SendMessageRequest(client.get_input_entity('VkUrlBot'), message_str)) except: print("Exception") time.sleep(1) print("---------") time.sleep(1) print("---------") dialogs = client(get_dialogs) print(dialogs.messages[0].message) if __name__ == '__main__': try: main() except KeyboardInterrupt: exit() 


Warum brauche ich das? Angenommen, ich habe einen ESP-32-Mikrocontroller mit einer Kamera.

Zum Beispiel wie z


Wenn Sie das Senden einer Anforderung zur Gesichtserkennung an einen externen Server konfigurieren, z. B. per Alarm, können Sie ein erweitertes System erhalten, ohne die Ressourcen von Mikrometern zu laden. Für ESP gibt es Bibliotheken zur Gesichtserkennung im Frame. Sie können den entsprechenden Frame zum Senden auswählen.

Haftungsausschluss
Der Autor ist kein Befürworter der globalen Überwachung, aber dies ist die Realität von heute. Ich habe lange überlegt, ob ich diese Anleitung veröffentlichen soll oder nicht, aber die Büchse der Pandora ist bereits geöffnet. Ähnliche Systeme werden weiterhin angezeigt.

Der Autor ist nicht verantwortlich für die Handlungen Dritter.
Bitte benutzen Sie das System nicht zum Nachteil von Personen.
Ich empfehle, von der Richtlinie in den Kommentaren abzusehen.
Das Projekt ist komplett nur zum Spaß.

Besonderer Dank geht an die Macher der oben genannten Serien und
Saransh kejriwa
Auch die Macher von SearchFace und VkUrlBot.

Bild zum Nachdenken:


Rahmen aus der Serie Person Of Interest

Source: https://habr.com/ru/post/de441744/


All Articles