Время прочтения: 2 мин.

Использование банковских карт становится повседневным процессом взаимодействия между людьми. Но, к сожалению, третьим лицам может стать известна информация о персональных данных клиентов. Поэтому для того, чтобы клиенты были уверены в том, что их средства и персональные данные защищены, банки применяют различные технологии на основе возможностей искусственного интеллекта. С появлением технологий компьютерного зрения (computer vision) стало реально использование детекции лиц по видео и фотоматериалам.

Поиск клиентов проводился на основе видеозаписей с камер видеонаблюдения, а затем осуществлялось сравнение полученных стоп-кадров с фотографиями пользователей из популярной на российском рынке социальной сети «В контакте». В качестве языка программирования был использован python, так как на нем написано множество библиотек для машинного обучения. Для взаимодействия с API Вконтакте была использована библиотека vk-api и специально разработанный скрипт на Python с применением библиотеки BeautifulSoup и Selenium.

status = vk.users.get(user_ids=id_user)
if status==False: ## через VK_API получение url
	try:
		response = vk.photos.get(owner_id=id_user, count=5, album_id='profile')
		for i in range(response['items']):
			photo_url = str(response['items'][i]['sizes'][len(response['items'][i]['sizes'])-1]['url'])
			url_list.append(photo_url)
	except:
		pass
elif status==True: ## идет парсинг самого сайта и получение url аватарки
	driver.get(r'https://vk.com/id%s'%id_user)   
	soup = BS(driver.page_source, 'lxml')
	url = soup.find('img',{'class':'page_avatar_img'})
	url_list.append(str(url)[str(url).find('src')+5:str(url).find(' width')-1].replace(':', '&'))
else:
	continue

Основным алгоритмом глубокого обучения для обнаружения лиц стал MTCNN. Многозадачная сверточная нейронная сеть (MTCNN) более устойчива к изменениям света, угла и выражения лица в естественной среде. Данный алгоритм наиболее эффективен при анализе изображений, так как использует небольшую предварительную обработку по сравнению с другими алгоритмами для классификации изображений.

# определение сетки для embedding
device = 'cuda' if torch.cuda.is_available() else 'cpu' 
print(f'Running on device "{device}"')

mtcnn = MTCNN(
    image_size=160, margin=0, min_face_size=20,
    thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True,
    device=device
)
resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)

Применение алгоритма позволило сохранять данные в базу в виде числового вектора.

# embedding 
response = urllib.request.urlopen(j)
x = Image.open(response)
aligned = []
x_aligned = mtcnn(x)
if x_aligned is not None:
	aligned.append(x_aligned)
aligned = torch.stack(aligned).to(device)
embeddings.append(resnet(aligned).detach().cpu())

Совместно с вектором в базе размещались id пользователя, информация о городе, ссылка на профиль.

Чтобы провести сравнительный анализ полученной информации с камер и созданной базой стоп-кадров с фотографиями пользователей, использовался метод подсчета расстояния L2 между векторами. Данный критерий интерпретирует результаты так: чем больше значение L2, тем больше сходство между людьми. Созданный инструмент для поиска информации по клиентам банка имеет очень важное значение для всей банковской индустрии. Последующая работа с результатами возможна уже с использованием внутренних банковских систем. Данная разработка сможет помочь решить проблемы связанные с определением личности клиентов, осуществить проверку подлинности документов и других задач, связанных с обеспечением сохранности денежных средств на счетах клиентов банка.