Получаем ссылки на профили Vk из выдачи SearchFace с помощью Python (но это не точно)

  • Tutorial
Картинка для привлечения внимания:


Кадр из сериала Person Of Interest

Сегодня мы поговорим о лёгком распознавании лиц с помощью доступных инструментов.
Используются: Python 3.6, searchface.ru, внешний сервис для преобразования ссылок на фото в id (бот в телеграме, на текущий момент)


Итак, у нас есть сайт, который ищет по лицам.
Заглянем внутрь.

Внутри обычная форма, которая отправляет Post запрос, который в ответ возвращает json.

пример
Отправляем фото, к примеру, Гарольда Финча из сериала Person Of Interest (Майкл Эмерсон):


Получаем:

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


Своего рода API, с единственным(?) методом.

Я автоматизировал этот процесс на Python, с сохранением ссылок в файл для последующего анализа:

Пример
Отправляем фото photo.jpg, результат сохраняем в 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()


Идея практического применения простая: Отправляем фото нужных людей, заносим ссылки (или хэши ссылок) в базу, отправляем по очереди кучу фото, если человек интересующий нас на фото один и не будет ошибок, ссылка при проверке по базе укажет нам на него.


Кадр из сериала Person Of Interest

Остается узнать id в vk.

Тут есть несколько вариантов:

1. Вытащить id из некоторых старых ссылок

пример кода
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. Создать свою базу из людей с известными id (друзья, знакомые, знаменитости..)

3. Воспользоваться внешним сервисом, т.к. задача парсинга базы фото вк тривиальна, просто на нее спросу раньше не было. Сейчас такие сервисы появляются.

Для примера, воспользуемся ботом в телеграме @VkUrlBot.

База бота ограничена, ищет не все id, поэтому, для ручного поиска он неудобен, зато, бесплатен (на момент публикации).

Т.к телеграм не разрешает ботам общаться между собой, во избежание зацикливания, прикинемся пользователем. Для этого, устанавливаем telethon, регистрируем новое приложение телеграм, вбиваем полученные учетные данные (id и hash).

Пример

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


Я использовал Telegram Portable + левый аккаунт, на случай возможной блокировки. Так же, в приложении удобно наблюдать за ходом выполнения:


данные замазаны для приличия, особого смысла в этом мало.

Бот не всегда выдает правильный результат, может выдать несколько.

Комментарий разработчика по этому поводу:


Можно этот процесс улучшить, например, писать в виртуальный файл и сразу его проверять.
Это можно сделать различными способами: например, создать виртуальный файл в ОЗУ c помощью tempfile.SpooledTemporaryFile, либо, записать в переменную типа String c помощью StringIO.
Это может быть удобно при скачивании фото с того же вк и последующей обработки.

Также, я объединил два примера в один, для большего удобства. Пример не идеален, но рабочий.

Полагаю, каждый его сможет поправить для своих нужд.

код
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()


Зачем мне это нужно? Допустим, у меня есть микроконтроллер ESP-32 с камерой.

Например, такой


Если настроить отправку запроса на распознавание лица на внешний сервер, например, по тревоге, можно получить продвинутую систему, не нагружая ресурсы мк. Для ESP есть библиотеки распознавания лица в кадре, соответственно, можно выделить подходящий кадр для отправки.

Disclaimer
Автор не является сторонником глобальной слежки, но это, реальность сегодняшнего дня. Я долго думал, стоит публиковать эту инструкцию или нет, но «Ящик Пандоры» уже открыт. Подобные системы продолжат появляться.

Автор не несёт ответственности за действия третих лиц.
Пожалуйста, не используйте систему во вред людям.
Рекомендую воздержаться от политики в комментариях.
Проект полностью Just for fun.

Отдельное спасибо создателям вышеупомянутого сериала и
Saransh Kejriwa
Также, создателям SearchFace и VkUrlBot.

Картинка для размышления:


Кадр из сериала Person Of Interest

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Писать цикл статей? В планах анализ видеопотока и поиск по лицам

Поддержать автора
Поделиться публикацией

Комментарии 24

    +1
    Продолжение интересует!
      +2
      Что насчет законности и этичности применения таких инструментов? Люди загружали информацию в ВК для того, чтобы общаться с друзьями, а не для того, чтобы какой-нибудь гадкий дядька мог бы их распознавать. Разрешения на индексацию своих фото они, скорее всего, вам не давали.

      А вообще, соцсети злоупотребляют доверием людей. Они по умолчанию делают страницу открытой (а аватарка доступна даже для закрытых страниц). Неудивительно, что люди переходят на мессенджеры, так как для общения с друзьями они ничем не хуже, но не выкладывают информацию о пользователе в паблик.
        +3
        Если бы люди хотели, чтобы их фотографию видел ограниченный круг лиц, то они бы им в личку свои фотографии слали. Большинство же либо хотят, что бы их красивых/солидных/спортивных видели, да любовались, либо же работает групповое сознание («ну все же выкладывают, наверное это хорошо»)
          +1
          А люди знают, что их данные публично доступны, если они не специалисты? Не все ведь грамотные и знают, как лазать в настройках и смотреть права доступа. Предупреждает ли соцсеть перед загрузкой фото, что она будет публично доступна?

          Вполне возможно, что люди как раз не понимают, как это работает. У многих людей даже компьютера нет, они с телефона заходят в соцсеть и это выглядит как обычное приложение.

          Более того, люди, публикуя фото в соцсети, дают разрешение на его обработку лишь соцсети. Они не дают вам разрешения обрабатывать их фото. И я помню, был судебный процесс как раз по поводу сбора данных из соцсетей: www.rbc.ru/rbcfreenews/5b4de9b39a794707d5530514

          Там правда это аргументировалось законом об охране баз данных, то есть рассматривались именно интересы соцсети, а интересы пользователей никого не волновали.

          Думаю, потому мессенджеры и становятся популярны, что они точно так же позволяют общаться с друзьями, но без выкладывания всей своей подноготной в открытый доступ. В отличие от соцсетей, которые предают пользователей.

          В общем, мое мнение: делать исследование на своих фото и фото своих друзей, публиковать статьи — вполне этично. Использовать это для индексирования не давших свое согласие пользователей — не очень-то этично.
            0
            Почитал сейчас правила ВК. Как минимум пункт 5.12 говорит о том что информация публична если не скрыта настройками.
            И правила FB — более чеовеческим языком, но смысл тот же.
              0
              Ага, только в отличие от фотографий, почему-то никто не выкладывает на своих страницах паспортные данные/пароли/пин-коды от банковских карточек (за исключением единиц упоротых, но их ничто не спасёт). Может люди всё-таки не столь тупы и всё же понимают (хотя бы в общих чертах) как это работает?
                0
                В начале нулевых, когда я был еще маленький и только постигал интернет, зающие люди меня предупреждали:
                — не бери за правду ни чего из интернета, а обязательно проверяй.
                — все что ты выгрузил в интернет — рано или поздно станет общедоступным и навсегда в нем останется.
                С того времени разве что то изменилось? Это к вопросу об этичности искать людей по тем данным, которые они добровольно обнародовали.
              0
              Использовать информацию из открытых источников — Этично. Размещать в открытых источниках информацию которую не хочется делать публичной — не этично.
                +1
                О, в тред подтянулись коммунисты, когда раз открытое, значит общее и ничьё!

                Этично — спрашивать людей, чью информацию вы пытаетесь собирать и использовать.
                Потому что публичность информации не означает появления у вас прав на её использование как угодно.
                Лично вы можете на них посмотреть, ага.

                Наглядно: демонстрация вашей картины в обще-доступном месте не означает, что кто угодно может её изображение использовать на упаковке молока, например.
                То, что фотограф выложил на свой сайт фотографию — не означает, что можно эту фотографию скопировать просто так и выложить на сайте организации.
                Данные общедоступны? Да. Данные можно использовать для чего угодно? С чего бы?

                Вы можете на эти данные посмотреть. Использовать — в ограниченном количестве случаев.
                И да, пользователь даёт право собирать и обрабатывать данные о нём только соцсети и через неё другим, подписавшим с оной договор. Вам он никаких прав не даёт.
                  0
                  Вспомнилось старая паста
                  «Т.к с понедельника старую программу VK удаляют, я оставлю эту запись, чтобы мои фото, переписки и т.п не разлетелись по интернету.
                  В ответ на новую политику «ВКонтакте» я настоящим объявляю, что все мои персональные данные, фотографии, рисунки, переписка и так далее являются объектами моего авторского права (согласно Бернской Конвенции). Для коммерческого использования всех вышеупомянутых объектов авторского права в каждом конкретном случае необходимо мое письменное разрешение.
                  «ВКонтакте» теперь является публичной компанией. Именно поэтому всем пользователям данной социальной сети рекомендуется разместить на своих страницах подобное «уведомление приватности», в противном случае (если уведомление не опубликовано на странице хотя бы однажды), вы автоматически разрешаете любое использование данных с вашей страницы, ваших фотографий и информации, опубликованной в сообщениях на стене вашей страницы.
                  Каждый, кто читает этот текст, может скопировать его на свою стену в «ВКонтакте». После этого вы будете находиться под защитой законов об авторском праве. Этот коммюнике оповещает «ВКонтакте» о том, что разглашение, копирование, распространение моей личной информации или любые другие противоправные действия по отношению к моему профилю в социальной сети строго запрещены.»
                    0
                    Это правила какой из стран и почему стартап который удумал обрабатывать публично доступные данные должен находиться в стране где это не законно? Скоро ещё обещают дешевый спутниковый интернет — надо успеть начать предоставлять услугу датацентров в нейтральных водах.
                    Кто в здравом уме будет размещать в общедоступном месте что-то приватное?
                      0
                      Чужая инфа может быть не приватной, общедоступной, но прав от этого у вас всё равно не появится.
                      Это правила какой из стран
                      Развитых. Смотреть причины по которым тот же гугл замазывает лица и номера машин на снимках улиц. Почему как минимум в некоторых странах ЕС запрещали отслеживание поведения пользователей на других сайтах фейсбуку и прочее.
                      Что б настигло просветление: наличие окон в вашем доме не даёт право окружающим дроном снимать через него видео о вашей жизни, хотя казалось бы это публично размещенная инфа.
                        0
                        Дроном нельзя, а вот бинокли никто не запретил. Потому что бинокль информацию не хранит. Это так, к размышлению…
                0
                Можно поподробнее про
                библиотеки распознавания лица в кадре
                для ESP?
                0
                Чего-то совсем не густо у бота с результатами, ноль совпадений на пару десятков ссылок.
                  +1
                  Общался с разработчиками в их чате по этому поводу и вот что удалось выяснить. Первое — этот сервис лишь временные костыли, которые они предложили страждущей публике, пока доводят до ума свой полноценный сервис по распознаванию лиц. Второе — максимальная глубина парсинга для базы данных составляла 100 фото на профиль и парсились только открытые на данный момент аккаунты; в то время как база SearchFace начала формироваться давно и содержит ссылки на фотографии, которые бот не способен находить по обозначенным выше причинам. Бот не гарантирует выдачу результатов. Вот такие, вкратце, объяснения разработчиков. Примите это к сведению.
                  0
                  Маленькая база у бота…

                  У старых фотографий id был в url, в какой-то момент алгоритм работы изменили.
                    0
                    Про старые ссылки я писал
                    там всё элементарно
                    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]


                    Можно написать тест бота, чтобы определить размер базы. Т.е. перебираем id с шагом 10000, к примеру и проверяем ссылки на фото из профиля.
                    0
                    Круто, никогда бы не подумал, что на еспишке можно камеру встроить и организовать распознавание лиц
                      0
                      а что за контроллер ESP-32 с камерой? Хочу такой же!
                      Можно узнать модель?
                        0
                        ESP32-CAM или подобные
                        0
                        Вся суть бота от автора:

                        Кидаешь картинку, ничего не происходит
                        @
                        Чтобы узнать как пользоваться ботом — зайди в группу автора
                        @
                        Заходишь в группу — ссылка на пикабу
                        @
                        На пикабу узнаешь, что бот принимает только ссылки, а не сами изображения
                        @
                        Кидаешь боту ссылку на пример изображения из статьи:
                        screenshotscdn.firefoxusercontent.com/images/e7660662-f1e1-417e-a61c-182d5604e310.png
                        @
                        Не повезло…
                          0
                          @
                          Заходишь в группу бота, а там уже обсуждают твой коммент на хабре
                          цитата
                          Извините, но давно я так не смеялся.
                          habr.com/ru/post/441744/comments/#comment_19886200
                          Особенно последний пункт «Кидаешь боту ссылку на пример изображения из статьи»
                          Блин, мужик умудрился пройти такой квест и в итоге нихрена не понять, как это работает. А ведь взрослый человек с хабрахабра.



                          UPD:
                          А ссылка действительно не работает, раньше работала.
                          Кто-то убрал её из выдачи…

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое