Поскольку лицо стало основным способом входа в iPhone, я решил бросить себе вызов и создать что-то подобное для Интернета. Это оказалось проще, чем ожидалось, и я хотел написать сообщение в блоге для всех, кто хотел бы попробовать это. Просьба заключалась в волшебном зеркале, которое могло бы «входить» в систему, когда вы входите в комнату. Теперь, когда большая часть технологии сделана, я хотел поделиться.

Общая информация

Платформа

AWS отлично подходит для всего этого благодаря своей платформе Rekognition. Из-за работы, которую я выполнял, я решил вместо этого перейти на Azure. К счастью, все основные облачные платформы имеют сопоставимые сервисы, поэтому Face API в Azure выполнил свою работу.

Распознавание лиц

Чтобы выполнить распознавание лиц, мне пришлось выяснить, как загрузить изображение в Azure и в каком порядке должны будут выполняться вызовы API. Есть два метода: загрузка через URL-адрес или потоковая передача файла. В этой статье мы будем загружать через URL-адрес, но внизу я упомяну, как это сделать, загрузив изображение напрямую.

Информация о разработке

Настройка для разработчиков

Чтобы следовать этому, вам понадобится

  1. Подписка Azure (бесплатный уровень выполняет свою работу)
  2. Настройка URL-адреса Cognitive Services

Все это можно настроить через лазурный портал.

Группа пользователей

Для начала, скажем, у меня есть два человека, которых я не хочу пускать в свой клуб: Риз Уизерспун и Тереза ​​Капуто — Медиум Лонг-Айленда.

Отказ от ответственности — я не знаю Риз Уизерспун или Терезу Капуто, но по какой-то причине мои друзья предложили мне продемонстрировать именно их. Это может быть буквально кто угодно. Если мое использование их является проблемой, я могу изменить этот проект буквально с кем-либо еще.

Для этого мне нужно создать группу людей. Это позволяет приложению различать, является ли лицо на изображении кем-либо из знакомых ему людей. Чтобы создать группу людей, вы нажимаете эту команду curl:

curl -v -X PUT “https://{YOUR_URL}.cognitive.azure.com/face/v1.0/persongroups/{personGroupId}" -H “Content-Type: application/json” -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” — data-ascii “{“name”: “{HUMAN_READIBLE_NAME}”, “recognitionModel”: “{recognition_01 or recognition_02}”}”

Здесь важно отметить следующее:

идентификатор_группы_человека

это то, как вы хотите, чтобы ваша группа personGroup называлась. Я назову его "средним"

модель распознавания

Это модель, которой должны следовать все люди в этой группе, один или два. Следует помнить, что 01 старше и используется по умолчанию для обнаружения API, в то время как 02 более эффективен, но вы должны помнить настройку в будущем. В этом посте мы будем использовать распознавание_02.

После этого нам нужно будет добавить людей в группу.

curl -v -X POST “https://{YOUR_URL}.cognitive.azure.com/face/v1.0/persongroups/{personGroupId || WasteOfTime}/persons” -H “Content-Type: application/json” -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” — data-ascii “{'name': '{PERSON-NAME}'}”

ВОЗВРАТ

{
  “personId”: “{Unique_Person_ID}”
}

Вы захотите сохранить этот Unique_Person_ID на потом, так как это позволит вам связать лицо с человеком, которого вы только что создали. За время работы я получил:

  • Риз: 88f1c958-ec44–4662-abbb-b6963fccbf38
  • Тереза: 1afe317f-c813–418d-9eb2–12b159bd361f

Кто это?

Теперь, когда у нас есть люди, нам нужно добавить к ним лица, чтобы приложение знало «Кто это».

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

curl -v -X POST “https://{endpoint}/face/v1.0/persongroups/{personGroupId || WasteOfTime}/persons/{PERSONIDHERE}/persistedFaces?detectionModel=detection_02” -H “Content-Type: application/json” -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” — data-ascii “{'url': '{URLHERE}'}”

Делая это, он связывает постоянный Face-ID с конкретным человеком, которого мы настроили.

**Примечание**. Изучая это, я предположил, что Face-ID здесь такие же, как /detect Face-ID. /detect приводит к Face-Id, который сохраняется только в течение 24 часов. Настраивая человека, он позволяет идентификатору лица действовать неопределенно долго (если только не УДАЛИТЬ)

Чу-Чу, пора тренироваться

Теперь, когда у нас есть все наши изображения, нам нужно обучить группу тому, как отличить моего бывшего от консультанта по вопросам брака. Для этого мы нажимаем /train и позволяем Azure делать всю тяжелую работу.

curl -v -X POST “https://{endpoint}/face/v1.0/persongroups/{personGroupId}/train" -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” --data-ascii ""

Тестирование

Итак, группа лиц теперь знает, как определить, являетесь ли вы Риз или Терезой, мы также можем это проверить! Я собираюсь проверить с фотографией Риз. Первым шагом будет создание временного FaceID для проверки изображения. Это включает в себя следующий вызов:

curl -v -X POST “https://{endpoint}/face/v1.0/detect?recognitionModel=recognition_02&detectionModel=detection_02" -H "Content-Type: application/json" -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” --data-ascii "{'url': '{PICURL}'}" 

Это вернет FaceID, с помощью которого мы можем определить, входит ли этот человек в нашу группу personGroup. При этом мы делаем вызов /identify следующим образом:

curl -v -X POST “https://{endpoint}/face/v1.0/identify" -H "Content-Type: application/json" -H “Ocp-Apim-Subscription-Key: {YOUR_SUB_KEY}” --data-ascii "{"personGroupId": "{PersonGroup}", "faceIds": ["{FaceID}"]}"

Конечный результат был

{
  "personId":"88f1c958-ec44-4662-abbb-b6963fccbf38",
  "confidence":0.94704
}

Позвольте мне просто проверить… . Да! Это сработало! В массовом масштабе это будет просто сравниваться с еще большим количеством лиц (обучение может занять больше времени). Но мораль этой истории в том, что начать работу с распознаванием лиц проще, чем когда-либо, облачные платформы берут на себя большую часть удара. Я бы хотел, чтобы сейчас Риз или Тереза ​​подошли к моему зданию клуба!

Октетный поток

Итак, все вышеперечисленное было с json, и это нормально, пока изображение размещено. Я хотел включить этот пример, чтобы показать, как будет выглядеть звонок без JSON/хостинга. Ключевым моментом здесь является то, что Content-Type — это поток октетов, а ваши данные не являются двоичным кодом ascii фактического изображения.

curl -v -X POST "https://{YOUR_URL}.cognitiveservices.azure.com/face/v1.0/{APINAME}" -H "Content-Type: application/octet-stream" -H "Ocp-Apim-Subscription-Key: {YOUR_API_KEY}" --data-binary @"{DIRECTORY_OF_IMG}"

Спасибо за чтение!