Mendapatkan tautan ke profil Vk dari hasil SearchFace menggunakan Python (tapi ini tidak akurat)

Gambar untuk menarik perhatian:


Bingkai dari seri Person Of Interest

Hari ini kita akan berbicara tentang pengenalan wajah yang mudah menggunakan alat yang tersedia.
Digunakan: Python 3.6, searchface.ru, layanan eksternal untuk mengubah tautan ke foto menjadi id (bot di telegram, saat ini)


Jadi, kami memiliki situs web yang mencari berdasarkan wajah.
Lihatlah ke dalam.

Di dalam adalah bentuk biasa yang mengirim permintaan Posting, yang mengembalikan json sebagai tanggapan.

sebuah contoh
Kami mengirim foto, misalnya, dari Harold Finch dari seri Person Of Interest (Michael Emerson):


Kami mendapatkan:

[[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]]]] 


Semacam API, dengan Metode (?) Tunggal .

Saya mengotomatiskan proses ini dengan Python, menyimpan tautan ke file untuk analisis lebih lanjut:

Contoh
Kirim foto photo.jpg, simpan hasilnya di 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() 


Gagasan aplikasi praktisnya sederhana: Kami mengirim foto orang yang tepat, menaruh tautan (atau hash tautan) ke dalam basis data, mengirim banyak foto secara bergantian, jika orang yang kami minati sendirian di foto dan tidak akan ada kesalahan , tautan saat memeriksa database akan mengarahkan kami ke sana.


Bingkai dari seri Person Of Interest

Masih mencari tahu id di vk.

Ada beberapa opsi:

1. Dapatkan id dari beberapa tautan lama

contoh kode
 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. Buat basis Anda dari orang-orang dengan id terkenal (teman, kenalan, selebriti ..)

3. Gunakan layanan eksternal, seperti Tugas parsing dasar foto VK adalah sepele, sama sekali tidak ada permintaan untuk itu sebelumnya. Sekarang layanan seperti itu muncul.

Misalnya, kami akan menggunakan bot di telegram @VkUrlBot.

Database bot terbatas, tidak semua id dicari, oleh karena itu, untuk pencarian manual itu tidak nyaman, tetapi gratis (pada saat publikasi) .

Karena telegram tidak memungkinkan bot untuk berkomunikasi satu sama lain, untuk menghindari perulangan, kami akan berpura-pura menjadi pengguna. Untuk melakukan ini, instal telethon, daftarkan aplikasi telegram baru, drive dalam kredensial yang diterima (id dan hash).

Contoh
 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() 


Saya menggunakan akun Telegram Portable + kiri, jika ada kemungkinan kunci. Juga, dalam aplikasi itu nyaman untuk memantau kemajuan:


data dioleskan untuk kesopanan, itu tidak masuk akal.

Bot tidak selalu memberikan hasil yang benar, bot dapat menghasilkan beberapa.

Komentar pengembang tentang ini:


Anda dapat meningkatkan proses ini, misalnya, menulis ke file virtual dan segera memeriksanya.
Ini dapat dilakukan dengan berbagai cara: misalnya, membuat file virtual dalam RAM menggunakan tempfile.SpooledTemporaryFile , atau menulis ke variabel tipe String menggunakan StringIO .
Ini nyaman ketika mengunduh foto dari VK yang sama dan pemrosesan selanjutnya.

Juga, saya menggabungkan dua contoh menjadi satu, untuk kenyamanan yang lebih besar. Contohnya tidak sempurna, tetapi berhasil.

Saya percaya bahwa setiap orang akan dapat memperbaikinya untuk kebutuhan mereka.

kode
 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() 


Mengapa saya membutuhkan ini? Katakanlah saya memiliki mikrokontroler ESP-32 dengan kamera.

Misalnya, begini


Jika Anda mengkonfigurasi pengiriman permintaan pengenalan wajah ke server eksternal, misalnya, dengan alarm, Anda bisa mendapatkan sistem canggih tanpa memuat sumber daya mikron. Untuk ESP ada pustaka pengenalan wajah dalam bingkai, masing-masing, Anda dapat memilih bingkai yang sesuai untuk dikirim.

Penafian
Penulis bukan pendukung pengawasan global, tetapi ini adalah kenyataan hari ini. Saya berpikir untuk waktu yang lama apakah akan menerbitkan instruksi ini atau tidak, tetapi Kotak Pandora sudah terbuka. Sistem serupa akan terus muncul.

Penulis tidak bertanggung jawab atas tindakan pihak ketiga.
Tolong jangan gunakan sistem untuk merugikan orang.
Saya merekomendasikan untuk menahan diri dari kebijakan dalam komentar.
Proyek ini sepenuhnya hanya untuk bersenang-senang.

Terima kasih khusus kepada pencipta seri yang disebutkan di atas dan
Saransh kejriwa
Juga, pencipta SearchFace dan VkUrlBot.

Gambar untuk dipikirkan:


Bingkai dari seri Person Of Interest

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


All Articles