From f06c35871825bfbe5158ff6ba03172cfabe3ad33 Mon Sep 17 00:00:00 2001 From: mmkuznecov <43701555+mmkuznecov@users.noreply.github.com> Date: Sun, 30 Dec 2018 19:53:12 +0300 Subject: [PATCH] A new article about face recognition This is a part of my COEX internship project where I implemented a face recognition feature that works with CLEVER. --- docs/ru/face_recognition.md | 107 ++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/ru/face_recognition.md diff --git a/docs/ru/face_recognition.md b/docs/ru/face_recognition.md new file mode 100644 index 00000000..21ab96b6 --- /dev/null +++ b/docs/ru/face_recognition.md @@ -0,0 +1,107 @@ +# Система распознавания лиц + +## Введение + +В последнее время системы распознавания лиц используются все шире, область применения этой технологии поистине огромна: от обычных селфи-дронов до дронов-полицейских. Ее интеграция в различные устройства проводится повсеместно. Сам процесс распознавания реально завораживает, и это сподвигло меня сделать проект связанный именно с этим. Целью моего стажерского проекта является создание простой open source-ной системы распознавания лиц с квадрокоптера Клевер. Данная программа берет изображения с камеры квадрокоптера, а его обработка происходит уже на компьютере. Поэтому все оставшиеся инструкции выполняются на ПК. + +## Разработка + +Первой задачей было найти алгоритм самого распознавания. В качестве пути решения проблемы было выбрано использовать [готовое API для Python](https://github.com/ageitgey/face_recognition). Данное API сочетает в себе ряд преимуществ: скорость и точность распознавания, а также простота использования. + +## Установка + +Для начала нужно установить все необходимые библиотеки: + +``` +pip install face_recognition +pip install opencv-python +``` +Затем скачать сам скрипт из репозитория: + +``` +git clone https://github.com/mmkuznecov/face_recognition_from_clever.git +``` +## Объяснение кода +Подключаем библиотеки: + +```python +import face_recognition +import cv2 +import os +import urllib.request +import numpy as np +``` +***Данный кусок кода предназначен для Python 3. В Python 2.7 подключаем urllib2 вместо urllib:*** + +```python +import urllib2 +``` + +Создаем список кодировок изображений и список имен: + +```python +faces_images=[] +for i in os.listdir('faces/'): + faces_images.append(face_recognition.load_image_file('faces/'+i)) +known_face_encodings=[] +for i in faces_images: + known_face_encodings.append(face_recognition.face_encodings(i)[0]) +known_face_names=[]url +for i in os.listdir('faces/'): + i=i.split('.')[0] + known_face_names.append(i) +``` +***Дополнение: все изображения хранятся в папке faces в формате name.jpg*** + + + + + +Инициализируем некоторые переменные: + +```python +face_locations = [] +face_encodings = [] +face_names = [] +process_this_frame = True +``` +Берем изображение с сервера и преобразуем его в cv2 формат: + +```python +req = urllib.request.urlopen('http://192.168.11.1:8080/snapshot?topic=/main_camera/image_raw') +arr = np.asarray(bytearray(req.read()), dtype=np.uint8) +frame = cv2.imdecode(arr, -1) +``` + +***Для Python 2.7:*** + +```python +req = urllib2.urlopen('http://192.168.11.1:8080/snapshot?topic=/main_camera/image_raw') +arr = np.asarray(bytearray(req.read()), dtype=np.uint8) +frame = cv2.imdecode(arr, -1) +``` + +Объяснение дальнейшего кода можно найти на github’е используемого API в комментариях к [следующему скрипту](https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py) + +## Использование + +Достаточно подключиться к "Клеверу" через Wi-Fi и проверить, корректно ли работает видеострим с камеры. + +Затем просто запускаем скрипт: + +``` +python recog.py +``` +И на выходе: + + + + +## Возможные трудности + +При запуске скрипта может выскочить следующая ошибка: +```python + known_face_encodings.append(face_recognition.face_encodings(i)[0]) +IndexError: list index out of range +``` +В этом случае постарайтесь переделать изображения в папке faces, возможно из-за плохого качества программа не распознает лиц на изображениях.