Иван Федоров

NeuroPOD - сервис для обработки фото на документы

Описание проекта

Вступление

Машинное обучение и нейронные сети все шире используются в повседневной жизни. Существует множество областей и задач, где нейронные сети нашли широкое применение, одной из таких является обработка изображений. В рамках данного конкурса было предложено разработать продукт, основанный на нейронных сетях. В качестве примера образцовых проектов были выдвинуты решения, умеющие работать с контентом, его генерацией и обработкой (например, составление рецепта по фотографии блюда). 
Для меня наиболее интересной областью применения нейронных сетей оказалась компьютерное зрение и обработка изображений. Я провел исследование уже существующих проектов и нашел множество примеров использования нейронных сетей в задачах обработки фотографий. К примеру, всеми известная PRISMA. Я решил сделать продукт, который мог бы быть полезен широкой аудитории. 

Почему именно фото для документов? 

  1. 1. Это реально нужно. При оформлении загран паспорта, визы, военного билета и прочих документов нужно приложить фотографию, соответсвующую определенным требованиям.
  2. 2. Проект можно коммерциализировать в дальнейшем (например, платная доп. обработка фото, платное фото на отпределенные типы документов)
  3. 3. Существует много решений, позволяющих решить эту задачу в режиме онлайн, но ни в одном из них не используется нейронная сеть. 
  4. 4. Это интересно :)  

Реализация: 

Сервис реализован в виде сайта и телеграм-бота. Язык программирования - python (версия 2.7).
Датасет для обучения модели: COCO
Модель: Tiramisu
Требуемые библиотеки: Flask, Keras, Tensorflow, Pillow, H5py, Telebot 
Для запуска проекта на локальной машине требуется:

  1. 1. Выгрузить исходный код с github (git clone, git clone lfs)
  2. 2. Войти в папку webapp
  3. 3. Выполнить:
    FLASK_DEBUG=0 FLASK_APP=app.py flask run

Приложение будет доступно по адресу:
http://127.0.0.1:5000

WARNING:
На сервере, который я арендовал для проекта заблокировано api для telegram и приходится использовать прокси-серверы.
В случае разрыва соединения бот перезапускается автоматически, но это может занять время.
Если Вам в ответ не пришло фото, то либо следует подождать пока бот на стороне сервера переподключится через новый прокси, либо написать мне (в случае если 1 вариант не прошел).

WARNING2:

Сайт может периодически падать из-за большой нагрузки. Если сайт не доступен, то пишите в комментарии, я перезапущу сервер. 

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

Рекомендуемые параметры для загружаемого фото:

  1. 1. Вертикальная ориентация
  2. 2. Один человек на фото
  3. 3. Фон не должен сливаться с одеждой/кожей человека
  4. 4. Лицо не должно быть засвечено

Дальнейшие планы по развитию проекта:

  1. 1. Расширить список документов, для которых будет доступен сервис (к примеру, военный билет/визы в другие страны)
  2. 2. Добавить опции обработки фото (возможность выбора нужно размера, возможность получить черно-белые фото, возможность добавления уголков)
  3. 3. Учовершенствование модели обучение (выравнивание лица по размеру фото, сглаживание границ)
     

Ссылки: 

 

Состав команды:

  • Иван Федоров, Разработчик

Комментарии

Антон Печеркин

Привет, а не подскажешь где можно посмотреть саму архитектуру? на гите не нашел

Иван Федоров

Привет, дык ведь tiramisu.
Ссылка на статью есть в описании проекта, а так она с открытым исходным кодом, в свой репозиторий уже не стал ее заливать. Вот ссылка:
https://github.com/0bserver07/One-Hundred-Layers-Tiramisu
Только там датасет другой изначально был (CamVid и там только фото с видеорегистраторов автомобилей), я использовал COCO.

Иван Бондаренко

Хорошая идея сделать бот в Телеграме. Это очень удобно. Проверил несколько фотографий - обычную в анфас, с несколькими людьми, диагональную. Не всегда правильно обрезает фон, к сожалению. Кроме того, настоящую фотографию на паспорт тоже обрезало (но не сильно). Было бы круто научить сеть не только лучше справляться с этой задачей, но и определять, подойдет ли загруженное фото для документов вообще (то есть, например, анализировать эмоции, положение головы и т.п.).

Ну и боюсь, что где-нибудь в паспортном столе у сотрудников могут возникнуть вопросы, если я принесу им такое вот фото :-)

Иван Федоров

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

Ivan Panin

А сеть только обрезает фон? Такое чувство, что она уменьшает исходное разрешение, или нет?

Иван Федоров

Ну она уменьшает размер фото до 3.5 на 4.5 и используется цветовая модель RGB, поэтому на некоторых фото качество может быть хуже исходного, на данном этапе пока не акцентировал на этом внимание, в дальнейшем уже буду учитывать.

Pavel Mochalov

О, вот это крутой проект! Сколько раз возникала необходимость в такой штуке. Давно пора было что-то такое сделать.

Иван Федоров

Спасибо:) Буду двигать это дело дальше)

Иван Федоров

На всякий случай обращаю внимание, что в самом видео ссылка на сайт указана неправильная, с heroku все перенесли на наш vds.
Правильная ссылка вот:
http://neuropod.ru:5000/
Порт 5000 должен быть указан обязательно.