- Поупрожняться с python, kafka, docker-swarm
- Использовать домашние мощности (несколько ноутбуков, raspberry pi, jetson nano) для обработки фотографий
- Собрать базу лиц известных и визуализировать с помощью digiKam и утилит для импорта
- Собрать метаданные из изображений
- docker-compose
- docker (engine version 18.09 +)
- настроенный локальный docker registry (или docker hub)
- примонтировать одинаковую папку где хранятся изображения
- на raspberry pi необходимо увеличить файл подкачки до 1gb минимум (в моих экспериментах используется raspberry pi 3)
Для распознавания лиц использую готовую библиотеку face_recognition
git clone git@github.com:ageitgey/face_recognition.git
cd face_reginition
docker build -t tan4ek.nas.local:5000/face_recognition:amd64 .
docker push tan4ek.nas.local:5000/face_recognition:amd64
Для raspberry pi необходимо собрать на основе Dockerfile с тэгом armhf
. Саму сборку осуществлять на малинке, длительность около 2-х часов
Поправить config.ini.
Важно поправить ip docker swarm master (в моем случае 192.168.100.201
) на свой. Указать путь до примонтированной папки с изображениями (RootPathForScanning
параметр).
Параметр CroppedFacesPath
путь куда будут сохранятся распознанные лица в виде изображения отдельных лиц.
Проверить docker-compose.yml, поправить пути до примонтированной папки с изображениями
Сборка:
docker build -f Dockerfile.file_scaner -t tan4ek.nas.local:5000/image-recognition_master:latest .
docker push tan4ek.nas.local:5000/image-recognition_master:latest
docker build -f Dockerfile -t tan4ek.nas.local:5000/image-recognition_worker:amd64 .
docker push tan4ek.nas.local:5000/image-recognition_worker:amd64
docker build -f Dockerfile -t tan4ek.nas.local:5000/image-recognition_face_worker:amd64 .
docker push tan4ek.nas.local:5000/image-recognition_face_worker:amd64
Для развертывания docker swarm
необходимо иметь мастер x64
архитектуры. Mongo версии 3+ уже не поддерживают arm
сборку. Так же kafka
требует много ресурсов для старка. На данном этапе это ограничение.
Для старта
docker stack deploy --compose-file docker-compose.yml image_recognition
Для остановки
docker stack rm image_recognition
image-recognition_master
сканируем папкуRootPathForScanning
на изображения.- Есть файла нет в базе (
ImageDb
параметр монго бд), то сохраняем в базу и кладем вkafka
topic - Из топика
kafka
worker
(image-recognition_worker
) забирает задачу - Ищет лицо, вырезает, сохраняет в
CroppedFacesPath
, кладет в другойtopic
сообщение - Из топика сервис
image-recognition_master
сообщение о распознаных лицах и сохраняет в базуImageDb
На данный момент используется проект face_recognition и по умолчанию используется CPU для распознования лиц.
На i7 фото 12Мб, 6000x3376 ~ 10c На raspberry pi 3 12Mb 6000x3376 ~ 215c (большой разброс от нагрева)