Диплом: распознание текста с камеры. Часть 1: Выбор технологий

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

Когда настало время выбора темы проекта я натолкнулся на нейросети. Данная технология меня заинтересовала, и изначальной темой проекта было сравнение лиц. Но, увы, мой бедный мозг не вынес объёма информации и пришлось слегка снизить планку до обычного распознания текста, в данном случае шифра с изображения. Итоговой темой проекта стало приложение отслеживания посещений, с помощью камеры и считывания шифра или же ручного ввода в интерфейс.

И так, с темой разобрались, настало время решить, какими инструментами пользоваться. Далее приведён кусок моей пояснительной записки с небольшим исследованием технологий.

Применяемые технологии

Основной темой данного проекта является считывание шифра с помощью нейронной сети. Уже давно существуют готовые фреймворки для создания нейросетей и работы с ними:

  • Tensorflow;

  • Pytorch;

  • MXNet;

  • Microsoft Cognitive Toolkit;

  • Caffe;

  • Keras.

Фреймворк Tensorflow создан Google и написан на Python и C++. TensorFlow является одним из лучших открытых библиотек для численных вычислений. TensorFlow - хороший выбор для сложных проектов, таких как создание многослойных нейронных сетей. Он используется для распознавания голоса или картинок и приложений для работы с текстом, таких как Google Translate, например.

Преимущества:

  • большое количество руководств и документации;

  • предлагает мощные средства мониторинга процесса обучения моделей и визуализации Tensorboard;

  • поддерживается большим сообществом;

  • обеспечивает обслуживание моделей;

  • поддерживает распределенное обучение.

Недостатки:

  • имеет более высокий входной порог для начинающих, чем PyTorch или Keras;

  • чистый Tensorflow достаточно низкоуровневый и требует много шаблонного кода, и режим «определить и запустить» для Tensorflow значительно усложняет процесс дебага.

PyTorch является преемником Python для библиотеки Torch, написанной на Lua, и большим конкурентом TensorFlow. Он был разработан Facebook и использовался Twitter, Salesforce, Оксфордским Университетом и многими другими компаниями. PyTorch используется в основном, чтобы обучать модели быстро и эффективно, поэтому это выбор большого количества разработчиков.

Преимущества:

  • благодаря архитектуре фреймворка, процесс создания модели достаточно прост и прозрачен;

  • поддерживает популярные инструменты для дебага, такие как pdb, ipdb или дебаггер PyCharm;

  • поддерживает декларативный параллелизм данных;

  • имеет много предварительно обученных моделей и готовых модульных частей, которые легко комбинировать.

Недостатки:

  • недостаточная поддержка моделей;

  • недостает интерфейсов для мониторинга и визуализации, как TensorBoard однако он имеет внешнее подключение к Tensorboard.

Keras – это минималистичная библиотека, основанная на Python, которая может запускаться поверх TensoFlow, Theano или CNTK. Она была разработана инженером компании Google, Франсуа Шолле, в целях ускорения экспериментов. Keras поддерживает широкий спектр слоев нейронных сетей, таких как сверточные слои, рекуррентные или плотные. Этот фреймворк хороший выбор в задачах для перевода, распознавании изображений, речи и т.п.

Преимущества:

  • прототипирование действительно быстрое и простое;

  • достаточно маловесный для построения моделей глубокого обучения для множества слоев;

  • имеет полностью конфигурируемые модули;

  • имеет простой и интуитивно-понятный интерфейс, соответственно, хороший выбор для новичков;

  • имеет встроенную поддержку для обучения на нескольких GPU;

  • может быть настроен в качестве оценщиков для TensorFlow и обучен на кластерах GPU на платформе Google Cloud;

  • поддерживает GPU от NVIDIA, TPU от Google, GPU с Open-CL, такие как AMD.

Недостатки:

  • может оказаться слишком высокоуровневым и не всегда легко кастомизируется;

  • ограничен бэкэндами Tensorflow, CNTK и Theano.

Сейчас фреймворк CNTK называется Microsoft Cognitive Toolkit. Он представляет собой открытый фреймворк для глубокого обучения, созданный для работы с действительно большими датасетами с поддержкой Python, C++, C# и Java. CNTK обеспечивает эффективное обучение моделей для распознавания голоса, рукописного текста и картинок, также поддерживает CNN и RNN. Библиотека используется в Skype, Xbox и Cortana.

Преимущества:

  • показывает хорошую производительность и масштабируемость;

  • предоставляет множество хорошо оптимизированных компонентов;

  • предлагает поддержку Apache Spark;

  • эффективен при использовании ресурсов;

  • имеет простую интеграцию с Azure Cloud.

Один единственный недостаток данного фрейморка:

  • ограниченная поддержка сообществом.

Для задачи считывания и распознания шифра с изображения были выбраны Python и библиотека Keras, из-за своей простоты, легкости и так как не требовалось сложных структур нейронных сетей и сложных вычислений. За счет использования данного сочетания создание и обучение нейросети не занимает много времени и усилий.

Для создания интерфейсов на Python широко применяются следующие три библиотеки:

  • Tkinter;

  • PyQt;

  • Kivy.

Tkinter – кроссплатформенная библиотека для разработки графического интрефейса встроенный в стандартный набор библиотек Python. Это легкая и простая в изучении библиотека с рядом преимуществ:

  • распространнённость, влечет за собой широкую базу пользователей и хорошую документацию;

  • легкость в построении интерфейсов;

  • кросплатформенность;

  • включена в стандартный набор библиотек.

Недостатки:

  • является довольно старой библиотекой и не может соответствовать современным требованиям;

  • отсутствие возможности создания собственных элементов и, следовательно, сложных интерфейсов.

PyQt – большой и мощный фреймворк графических интерфейсов на основе библиотеки Qt для языка C++. PyQt разработан британской компанией Riverbank Computing.

Преимущества:

  • широкий набор инструментов для создания интерфейсов;

  • кроссплатформенность;

  • имеется графический редактор, позволяющий перевести построенный в нем интерфейс в код;

  • возможность работы с изображениями и видео;

  • поддержка механизма WebKit;

  • встроенный анализатор XML;

  • возможность создания собственных виджетов на основе имеющихся.

Недостатки:

  • ограничения лиценией GPL;

  • фреймворк может показаться новичкам сложным за счет своей большой функциональности.

Для данного проекта была выбрана библиотека PyQt, из-за своей функциональности, возможности работать с изображениями и создания собственных виджетов.

Для хранения данных в программировании используются несколько способов:

  • текстовые файлы;

  • JSON файлы;

  • базы данных.

Для удобства хранения большого объема разнообразной и структурированной информации был выбран вариант с использованием базы данных.

Python имеет несколько библиотек для работы с разными видами СУБД, например:

  • MySQL;

  • PostgreSQL;

  • SQLite.

MySQL — это самая популярная из всех крупных серверных БД. Обладает широким спектором возможностей по созданию реляционных баз данных разного масштаба.

Преимущества:

  • модульность;

  • MySQL поддерживает большую часть функционала SQL;

  • в MySQL встроено много функций безопасности;

  • MySQL может работать с действительно большими объёмами данных, и неплохо походит для масштабируемых приложений;

  • пренебрежение некоторыми стандартами позволяет MySQL работать производительнее.

Недостатки:

  • по определению, MySQL не может сделать всё, что угодно, и в ней присутствуют определённые ограничения функциональности;

  • некоторые операции реализованы менее надёжно, чем в других РСУБД;

  • хотя MySQL и является open-source продуктом, работа над ней сильно заторможена.

PostgreSQL — это самая продвинутая РСУБД, ориентирующаяся в первую очередь на полное соответствие стандартам и расширяемость. PostgreSQL пытается полностью соответствовать SQL-стандартам ANSI/ISO.

Преимущества:

  • полная SQL-совместимость;

  • активно поддерживается сообществом;

  • является не только реляционной, но и объектно-ориентированной СУБД.

Недостатки:

  • в простых операциях уступает в производительности аналогам.

SQLite — это библиотека, встраиваемая в приложение, которое её использует. Будучи файловой БД, она предоставляет отличный набор инструментов для более простой (в сравнении с серверными БД) обработки любых видов данных.

Преимущества:

  • является файловой СУБД, вся база данных хранится в одном файле, что облегчает перемещение.

Недостатки:

  • отсутствие разграничения доступа;

  • целостность, не позволяющая производить настройки СУБД.

Так как данный проект не нацелен на серверные технологии и не нуждается в сложных операция и огромных базах данных, была выбрана SQLite.

Пусть Keras и заявляет поддержку большинства GPU, но всё-таки не охватывает их все из-за требования к более-менее современным технологиям. Для работы с Keras требуется GPU с поддержкой требуемых технологий. Чтобы повысить порог вхождения технических средств была использована библиотека PlaidML, позволяющая использовать Keras на большем количестве вариантов GPU. Так же данный фреймворк позволяет игнорировать ограничение на строгое использование GPU, позволяя выбрать на чем проводить вычисления. У библиотеки не обнаружено аналогов.

Для считывания изображения с камеры в Python найдена лишь одна библиотека — OpenCV. Эта фреймворк машинного зрения с открытым исходным кодом. Библиотека позволяет работать с изображениями, видео и захватывать картинку с камер, подключенных к ПК. Так же имеются встроенные модули поиска объектов по принципу каскадов Хаара.

Tags:
Диплом, нейросеть, технологии

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.