Кадр из сериала Person Of Interest
Сегодня мы поговорим о лёгком распознавании лиц с помощью доступных инструментов.
Используются: Python 3.6, searchface.ru, внешний сервис для преобразования ссылок на фото в id (бот в телеграме, на текущий момент)
Итак, у нас есть сайт, который ищет по лицам.
Заглянем внутрь.
Внутри обычная форма, которая отправляет Post запрос, который в ответ возвращает json.
Получаем:
[[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, с сохранением ссылок в файл для последующего анализа:
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 есть библиотеки распознавания лица в кадре, соответственно, можно выделить подходящий кадр для отправки.
Автор не несёт ответственности за действия третих лиц.
Пожалуйста, не используйте систему во вред людям.
Рекомендую воздержаться от политики в комментариях.
Проект полностью Just for fun.
Отдельное спасибо создателям вышеупомянутого сериала и
Saransh Kejriwa
Также, создателям SearchFace и VkUrlBot.
Картинка для размышления:
Кадр из сериала Person Of Interest
Комментарии (24)
Sabubu
13.03.2019 08:38+2Что насчет законности и этичности применения таких инструментов? Люди загружали информацию в ВК для того, чтобы общаться с друзьями, а не для того, чтобы какой-нибудь гадкий дядька мог бы их распознавать. Разрешения на индексацию своих фото они, скорее всего, вам не давали.
А вообще, соцсети злоупотребляют доверием людей. Они по умолчанию делают страницу открытой (а аватарка доступна даже для закрытых страниц). Неудивительно, что люди переходят на мессенджеры, так как для общения с друзьями они ничем не хуже, но не выкладывают информацию о пользователе в паблик.prostofilya
13.03.2019 08:53Если бы люди хотели, чтобы их фотографию видел ограниченный круг лиц, то они бы им в личку свои фотографии слали. Большинство же либо хотят, что бы их красивых/солидных/спортивных видели, да любовались, либо же работает групповое сознание («ну все же выкладывают, наверное это хорошо»)
Sabubu
13.03.2019 14:00+1А люди знают, что их данные публично доступны, если они не специалисты? Не все ведь грамотные и знают, как лазать в настройках и смотреть права доступа. Предупреждает ли соцсеть перед загрузкой фото, что она будет публично доступна?
Вполне возможно, что люди как раз не понимают, как это работает. У многих людей даже компьютера нет, они с телефона заходят в соцсеть и это выглядит как обычное приложение.
Более того, люди, публикуя фото в соцсети, дают разрешение на его обработку лишь соцсети. Они не дают вам разрешения обрабатывать их фото. И я помню, был судебный процесс как раз по поводу сбора данных из соцсетей: www.rbc.ru/rbcfreenews/5b4de9b39a794707d5530514
Там правда это аргументировалось законом об охране баз данных, то есть рассматривались именно интересы соцсети, а интересы пользователей никого не волновали.
Думаю, потому мессенджеры и становятся популярны, что они точно так же позволяют общаться с друзьями, но без выкладывания всей своей подноготной в открытый доступ. В отличие от соцсетей, которые предают пользователей.
В общем, мое мнение: делать исследование на своих фото и фото своих друзей, публиковать статьи — вполне этично. Использовать это для индексирования не давших свое согласие пользователей — не очень-то этично.Zibx
13.03.2019 15:37Почитал сейчас правила ВК. Как минимум пункт 5.12 говорит о том что информация публична если не скрыта настройками.
И правила FB — более чеовеческим языком, но смысл тот же.
prostofilya
13.03.2019 18:24Ага, только в отличие от фотографий, почему-то никто не выкладывает на своих страницах паспортные данные/пароли/пин-коды от банковских карточек (за исключением единиц упоротых, но их ничто не спасёт). Может люди всё-таки не столь тупы и всё же понимают (хотя бы в общих чертах) как это работает?
DmitriyRus27
13.03.2019 18:26В начале нулевых, когда я был еще маленький и только постигал интернет, зающие люди меня предупреждали:
— не бери за правду ни чего из интернета, а обязательно проверяй.
— все что ты выгрузил в интернет — рано или поздно станет общедоступным и навсегда в нем останется.
С того времени разве что то изменилось? Это к вопросу об этичности искать людей по тем данным, которые они добровольно обнародовали.
Zibx
13.03.2019 11:43Использовать информацию из открытых источников — Этично. Размещать в открытых источниках информацию которую не хочется делать публичной — не этично.
Am0ralist
13.03.2019 16:09+1О, в тред подтянулись коммунисты, когда раз открытое, значит общее и ничьё!
Этично — спрашивать людей, чью информацию вы пытаетесь собирать и использовать.
Потому что публичность информации не означает появления у вас прав на её использование как угодно.
Лично вы можете на них посмотреть, ага.
Наглядно: демонстрация вашей картины в обще-доступном месте не означает, что кто угодно может её изображение использовать на упаковке молока, например.
То, что фотограф выложил на свой сайт фотографию — не означает, что можно эту фотографию скопировать просто так и выложить на сайте организации.
Данные общедоступны? Да. Данные можно использовать для чего угодно? С чего бы?
Вы можете на эти данные посмотреть. Использовать — в ограниченном количестве случаев.
И да, пользователь даёт право собирать и обрабатывать данные о нём только соцсети и через неё другим, подписавшим с оной договор. Вам он никаких прав не даёт.semen-pro Автор
13.03.2019 17:45Вспомнилось старая паста«Т.к с понедельника старую программу VK удаляют, я оставлю эту запись, чтобы мои фото, переписки и т.п не разлетелись по интернету.
В ответ на новую политику «ВКонтакте» я настоящим объявляю, что все мои персональные данные, фотографии, рисунки, переписка и так далее являются объектами моего авторского права (согласно Бернской Конвенции). Для коммерческого использования всех вышеупомянутых объектов авторского права в каждом конкретном случае необходимо мое письменное разрешение.
«ВКонтакте» теперь является публичной компанией. Именно поэтому всем пользователям данной социальной сети рекомендуется разместить на своих страницах подобное «уведомление приватности», в противном случае (если уведомление не опубликовано на странице хотя бы однажды), вы автоматически разрешаете любое использование данных с вашей страницы, ваших фотографий и информации, опубликованной в сообщениях на стене вашей страницы.
Каждый, кто читает этот текст, может скопировать его на свою стену в «ВКонтакте». После этого вы будете находиться под защитой законов об авторском праве. Этот коммюнике оповещает «ВКонтакте» о том, что разглашение, копирование, распространение моей личной информации или любые другие противоправные действия по отношению к моему профилю в социальной сети строго запрещены.»Zibx
14.03.2019 21:11Это правила какой из стран и почему стартап который удумал обрабатывать публично доступные данные должен находиться в стране где это не законно? Скоро ещё обещают дешевый спутниковый интернет — надо успеть начать предоставлять услугу датацентров в нейтральных водах.
Кто в здравом уме будет размещать в общедоступном месте что-то приватное?Am0ralist
15.03.2019 14:30Чужая инфа может быть не приватной, общедоступной, но прав от этого у вас всё равно не появится.
Это правила какой из стран
Развитых. Смотреть причины по которым тот же гугл замазывает лица и номера машин на снимках улиц. Почему как минимум в некоторых странах ЕС запрещали отслеживание поведения пользователей на других сайтах фейсбуку и прочее.
Что б настигло просветление: наличие окон в вашем доме не даёт право окружающим дроном снимать через него видео о вашей жизни, хотя казалось бы это публично размещенная инфа.semen-pro Автор
16.03.2019 16:07Дроном нельзя, а вот бинокли никто не запретил. Потому что бинокль информацию не хранит. Это так, к размышлению…
Snusmumrick97
13.03.2019 09:37Можно поподробнее про
библиотеки распознавания лица в кадре
для ESP?semen-pro Автор
13.03.2019 09:44Есть github.com/espressif/esp-who
наглядноAnarions
13.03.2019 12:59Чего-то совсем не густо у бота с результатами, ноль совпадений на пару десятков ссылок.
simonov_o
13.03.2019 17:37+1Общался с разработчиками в их чате по этому поводу и вот что удалось выяснить. Первое — этот сервис лишь временные костыли, которые они предложили страждущей публике, пока доводят до ума свой полноценный сервис по распознаванию лиц. Второе — максимальная глубина парсинга для базы данных составляла 100 фото на профиль и парсились только открытые на данный момент аккаунты; в то время как база SearchFace начала формироваться давно и содержит ссылки на фотографии, которые бот не способен находить по обозначенным выше причинам. Бот не гарантирует выдачу результатов. Вот такие, вкратце, объяснения разработчиков. Примите это к сведению.
xFFFF
13.03.2019 15:54Маленькая база у бота…
У старых фотографий id был в url, в какой-то момент алгоритм работы изменили.semen-pro Автор
13.03.2019 17:41Про старые ссылки я писал
там всё элементарно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]
Vladusik2
14.03.2019 03:09Круто, никогда бы не подумал, что на еспишке можно камеру встроить и организовать распознавание лиц
AndreDeBonk
14.03.2019 22:53Вся суть бота от автора:
Кидаешь картинку, ничего не происходит
@
Чтобы узнать как пользоваться ботом — зайди в группу автора
@
Заходишь в группу — ссылка на пикабу
@
На пикабу узнаешь, что бот принимает только ссылки, а не сами изображения
@
Кидаешь боту ссылку на пример изображения из статьи:
screenshotscdn.firefoxusercontent.com/images/e7660662-f1e1-417e-a61c-182d5604e310.png
@
Не повезло…semen-pro Автор
15.03.2019 03:47@
Заходишь в группу бота, а там уже обсуждают твой коммент на хабре
цитатаИзвините, но давно я так не смеялся.
habr.com/ru/post/441744/comments/#comment_19886200
Особенно последний пункт «Кидаешь боту ссылку на пример изображения из статьи»
Блин, мужик умудрился пройти такой квест и в итоге нихрена не понять, как это работает. А ведь взрослый человек с хабрахабра.
beho1der
Продолжение интересует!