Всем привет! Сегодня я хочу поделиться тем, что я построил за выходные для новогоднего хакатона New Hack! Это был удивительный опыт и интересный способ начать новый год.

Мой проект

Это веб-приложение, которое может идентифицировать оригинальный 151 вид покемонов, используя пользовательскую модель классификации изображений. Сначала пользователь предоставит изображение, это может быть 2D-изображение или изображение с камеры. Затем нажмите «Запустить анализ Pokédex». Модель вернет свой прогноз, а затем приложение получит данные этого предсказанного покемона. Данные отображаются на странице отчета об анализе Pokédex, и приложение зачитывает вслух имя, тип и описание покемона.

Мотивация

В Интернете «Покедекс» — это просто веб-сайт, на котором пользователи могут искать и просматривать данные о любых покемонах. Но в моем детстве покедексом называли классное электронное устройство, которое может распознавать покемонов, на которых оно указывает, и возвращать информацию об этих покемонах голосом робота. Итак, мотивация этого проекта заключалась в том, чтобы воплотить мою детскую мечту в реальность.

Как я это построил

1. Сбор изображений

Во-первых, мне пришлось создать пользовательскую модель классификации изображений, которая знает каждый 151 вид. Поэтому я взялся за дело и начал собирать изображения покемонов.

Я собрал различные типы изображений, а не только простые 2D-изображения, подобные этому:

Модель должна распознать, что это Пикачу.

Но и те, что из фильмов, игр, открыток, товаров и т.д.

Модель также должна распознать, что это Пикачу.

В общей сложности у меня было более 10 000 изображений покемонов для 151 вида, которые будет изучать модель. 10 216, если быть точным.

2. Видение AutoML

Затем я использовал Google Cloud AutoML Vision API, чтобы присвоить каждому изображению соответствующее имя покемона.

После этого я начал обучать модель. Из-за ограничений по времени для этого 48-часового хакатона я смог тренироваться только дважды, но оба раза достиг одинаковой точности, вероятно, потому, что я все еще использую одни и те же данные для обучения.

3. Экспорт модели

Когда модель меня удовлетворила, я экспортировал ее в виде пакета Tensorflow.js для использования в браузере в качестве веб-приложения.

4. Приложение

Создание приложения — самая простая часть этого проекта. Я и моя команда используем TailwindCSS для стилизации, Chart.js для отображения интерактивных диаграмм и аксиомы для получения данных из PokéAPI.

Чтобы наше приложение могло говорить, мы используем Cloud Text-to-Speech API и та-да! Родилось первое изображение, классифицирующее Pokédex!

Результаты

Из-за нехватки времени у некоторых видов покемонов было больше тренировочных данных, чем у других. В то время как приложение обычно возвращает правильные результаты, в нем есть и забавные.

Основные моменты теста — Сложность: Легко

Во-первых, я протестировал 2D-изображения покемонов, приложение возвращает и отображает правильного покемона с точностью почти 99%. Поэтому я решил использовать изображения с камеры, чтобы проверить, насколько на самом деле точна модель.

Основные моменты теста — Сложность: средняя

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

Изображения слева направо: модель правильно идентифицирует Slowpoke, Vaporeon и Snorlax.

Основные моменты теста — Сложность: Высокая

Под разными углами и со многими предметами на заднем плане модель показывает, что она все еще может распознавать некоторых покемонов, но не всех.

Изображения слева направо: модель неправильно идентифицирует вид сбоку Абры как Алаказам, но правильно идентифицирует вид сбоку Флареона как Флареона.

Даже для покемонов разных цветов модель по-прежнему показала довольно хорошую точность.

На снимке выше модель правильно идентифицирует Vulpix, хотя его исходный цвет — оранжевый, а не белый.

Следующие шаги

1. Сохраните все аудиофайлы

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

Потенциальное решение этой проблемы — заранее загрузить аудиофайлы всех 151 вида покемонов и просто воспроизводить звук, когда отображаются данные этого покемона.

2. Результат «Не покемоны»

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

Слева направо Марио классифицируется как Крабби, а Койя классифицируется как Сквиртл, хотя они не покемоны.

Следующим шагом для этого приложения является исправление этой проблемы, позволяющее модели возвращать «Не покемон», если уровень достоверности ее наилучшего предположения ниже определенного порога. Таким образом, он не будет классифицировать случайные вещи как покемонов.

3. Идентификация нескольких покемонов на 1 изображении

Итак, что произойдет, если изображение, подобное приведенному ниже, будет предоставлено пользователем?

Модель вернет наиболее очевидного покемона на изображении. В данном случае Бульбазавр, потому что он посередине.

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

4. Мобильная версия с живой камерой

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

Это действительно заставит любой телефон почувствовать себя настоящим покедексом!

Вывод

В конечном счете, все дело в том, чтобы получать удовольствие, изучая что-то новое. Мы очень рады, что этот проект, который начался только благодаря нашей детской мечте, принес нам поразительное 3-е место на хакатоне.

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

Ссылки