Приложения все породы собак

Содержание
  1. Породы собак
  2. Описание
  3. Особенности приложения
  4. Dog Scanner App
  5. Определить породы собак
  6. Легко и быстро
  7. Смешанная порода?
  8. Собаки поблизости нет?
  9. Гамификация Новый сайт
  10. Социальная помощь Новый сайт
  11. Премиум-характеристики
  12. Приложение Описание
  13. Dog Scanner
  14. Видишь собаку, но не знаешь ее породы?
  15. Есть смешанная порода?
  16. Все породы собак в приложении Dog Scanner!
  17. Собаки поблизости нет?
  18. Станьте частью нашего сообщества сканеров собак!
  19. Ловите собак всех пород и станьте экспертом!
  20. Дайте нам отзыв о приложении Dog Scanner!
  21. Получите ваше премиум-обновление!
  22. Найдите нас в социальных сетях!
  23. Просто попробуй!
  24. Отказ от ответственности:
  25. Определитель Породы Собак
  26. Определитель Породы Собак APK для Android можно скачать в APKCombo — Последняя версия — бесплатно
  27. Определитель Породы Собак APK
  28. Определяем породу собаки: полный цикл разработки, от нейросети на Питоне до приложения на Google Play
  29. Постановка задачи
  30. Среда разработки
  31. Создание и обучение нейросети
  32. Инициализация
  33. Загрузка данных
  34. Обработка изображений
  35. Создание нейросети
  36. Обучение нейросети
  37. Тестирование нейросети
  38. Экспорт нейросети в Java приложение
  39. Создание Android приложения использующего нейросети
  40. Файл Gradle
  41. Манифест
  42. Layout приложения.
  43. MainActivity
  44. Дополнительные замечания

Породы собак

Разработчик: Whipsnake Apps
Категории: Книги и справочники
Версия Android: 4.0+
Размер: 23.5 MB
Скачали: 1
Рейтинг:
Обновлено: 17.08.2020
Ограничения: Для всех

Описание

Породы собак – это удобное приложение, позволяющее узнать породу конкретной собаки, прочитать историю ее происхождения. Также здесь можно просмотреть описания остальных пород собак и просмотреть их фото. Для владельцев животных эта программа станет полезной, поможет узнать правила ухода и прочее.

Особенности приложения

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

Основные преимущества программы:

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

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

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

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

Породы собак на APKshki.com скачали 1 раз. Породы собак распространяется бесплатно в расширении apk.

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

Если обнаружился вирус: [email protected]

Если хотите разместить приложение или игру [email protected] .

Добавить описание: [email protected] с пометкой добавить описание.

Dog Scanner App

Определить породы собак

Вы можете использовать вашу камеру или загрузить свою собственную фотографию из галереи

Легко и быстро

В течение нескольких секунд приложение определяет конечный результат

Смешанная порода?

Без проблем! Мы скажем вам, какие породы были смешаны

Собаки поблизости нет?

Просто просканируй своего друга и узнай, на какую собаку он или она похож.

Гамификация Новый сайт

Как Pokémon Go: поймать каждую породу собак.

Социальная помощь Новый сайт

Поделитесь своими результатами с сообществом

Премиум-характеристики

Приложение Описание

Dog Scanner

Видишь собаку, но не знаешь ее породы?

Просто сделайте быстрый снимок или видеозапись собаки — с помощью приложения Dog Scanner вы сможете надежно идентифицировать породу собаки всего за несколько секунд! Наша встроенная камера с функцией Pinch To Zoom и Tap to Focus позволяет идентифицировать породу собак на прогулке по парку!

Разумеется, приложение Dog Scanner также поддерживает загрузку изображений из вашей галереи.

Есть смешанная порода?

Нет проблем, ваше приложение также распознает смешанные породы! Мы предоставляем Вам подробные данные и интересные факты о различных породах собак Вашей смешанной породы.

Все породы собак в приложении Dog Scanner!

Приложение Dog Scanner в настоящее время идентифицирует более 370 различных пород собак. Наша база данных включает в себя все породы, официально признанные Международной Кинологической Федерацией (FCI), и даже некоторые другие!

Кстати, наша обширная база данных с информацией и фотографиями всех пород собак (в том числе неофициальных) также доступна полностью без сканирования!

Собаки поблизости нет?

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

Может показаться немного странным, но это действительно работает: приложение Dog Scanner также распознает людей. Просто возьмите быстрый эгоизм и узнайте, что вы за собака!

Станьте частью нашего сообщества сканеров собак!

Поделитесь своими результатами и сравните их с результатами сообщества! Загрузите фотографии своей любимой собаки в наш социальный корм и поделитесь ими с другими любителями собак! Взгляните на профили и фотографии других пользователей, прокомментируйте сообщения нашего сообщества собак и отфильтровывайте их по дате или популярности!

Кроме того, Вы можете легко поделиться своими сообщениями с друзьями, просто отправив фотографию прямо из приложения Dog Scanner.

Ловите собак всех пород и станьте экспертом!

Ловите собак всех пород, как в Pokémon Go. Отсканируйте хотя бы одну собаку каждой породы, справьтесь с задачами, получите виртуальные лакомства и станьте настоящим экспертом в области собаководства!

Соревнуйтесь со своими друзьями или пользователями из сообщества и поднимитесь на вершину нашего рейтинга!

Дайте нам отзыв о приложении Dog Scanner!

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

Предложите или проголосуйте за (неофициальные) породы собак, которые вы хотите, чтобы мы добавили в приложение в будущем!

Получите ваше премиум-обновление!

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

Найдите нас в социальных сетях!

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

Просто попробуй!

Скачайте приложение Dog Scanner бесплатно. Найдите его в Google Play для устройств на базе Android или в Apple App Store, если вы используете iPhone или iPad! Несмотря на небольшой размер приложения, вы получите все возможности и сможете в любое время определить породу собаки или получить доступ к нашей обширной базе данных!

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

Прежде чем рассматривать возможность получения дорогостоящего ДНК-теста, приложение Dog Scanner поможет Вам ответить на все эти вопросы! Просто отсканируйте собаку с помощью приложения, и порода собаки будет автоматически определена в течение нескольких секунд!

Отказ от ответственности:

Это приложение не может превратить ваш смартфон в сумасшедший космический корабль, способный извлечь кровь вашей собаки с помощью волшебного лазера. Приложение дает образованные прогнозы, основанные на том, что он видит. В среднем, эти предсказания достаточно точны. Однако, очевидно, что результат может быть только так хорошо, как изображение / видео, которое вы предоставляете приложению. Более того, невозможно правильно определить каждую отдельную собаку. Люди склонны считать это личным, если их собственная любимая собака не предсказано правильно, хотя. Если вы дадите приложению шанс в первую очередь, вы увидите, что его общая производительность довольно прилично. Вместо того, чтобы платить кучу денег за тест ДНК, вы получаете это приложение бесплатно. Наслаждайтесь!

Определитель Породы Собак

Определитель Породы Собак APK для Android можно скачать в APKCombo — Последняя версия — бесплатно

Определитель Породы Собак APK

Определяет породу собаки на картинке из галереи или камеры

Версия 1.1.0.6 (38)
Обновлено 01 июл 2020 г. (9 месяцев назад)
Разработчик Nikas
Категория Приложения, Фотография
ID ru.electronikas.dogsexpert
Количество установок 100 000+

Что делает это приложение?
Определяет породу собаки по фотографии используя камеру вашего устройства или галерею изображений. А так же может узнать по фотографии человека на какую из собак он больше всего похож. И просто для развлечения, приложение может предположить, какой собакой вы или ваши друзья могли бы быть.

Как это работает?
Фотография подается на вход экспертной системы на базе нейросети и на ее выходе формируется гипотеза о том, какая порода собаки изображена на данной фотографии. Свойства нейросетей таковы, что даже фотография на которой нет собаки будет ассоциироваться в разной степени со знакомыми системе породами собак.

Какова точность распознавания?
Система обучена распознавать 48 породы собак по 40 тысячам фотографиям. В последней версии приложения точность распознавания пород собак составила 84% на 40 тысячах фотографий.

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

Цель на будущее.
Будет добавлена возможность дополнять обучающее множество фотографий Вашими примерами и таким образом постоянно расширять количество пород собак и точность классификации.

Цель проекта создать экспертную систему, способную распознавать по фотографиям все известные породы собак.

Определяем породу собаки: полный цикл разработки, от нейросети на Питоне до приложения на Google Play

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

Однако, все еще есть многочисленные детали, делающие задачу не столько неразрешимой, сколько… нудной, я бы сказал. Отнимающей слишком много времени, особенно если вы — новичок, которому нужно руководство, step-by-step, проект, выполненный прямо на ваших глазах, и выполненный от начала и до конца. Без обычных в таких случаях «пропустим эту очевидную часть» отговорок.

В этой статье мы рассмотрим задачу создания определителя пород собак (Dog Breed Identifier): создадим и обучим нейросеть, а затем портируем ее на Java для Android и опубликуем на Google Play.

Если вы хотите посмотреть на готовый результат, вот он: NeuroDog App на Google Play.

Веб сайт с моей робототехникой (в процессе): robotics.snowcron.com.
Веб сайт с самой программой, включая руководство: NeuroDog User Guide.

А вот скриншот программы:

Постановка задачи

Мы будем использовать Keras: гугловскую библиотеку для работы с нейросетями. Это библиотека высокого уровня, что означает — ею проще пользоваться, по сравнению с известными мне альтернативами. Если что — в сети есть много учебников по Керас, высокого качества.

Мы будем использовать CNN — Convolutional Neural Networks. CNN (и более продвинутые конфигурации, основанные на них) являются de-facto стандартом в распознавании изображений. В то же время, обучить такую сеть не всегда просто: надо правильно подобрать структуру сети, параметры обучения (все эти learning rate, momentum, L1 and L2 и т.п.). Задача требует значительных вычислительных ресурсов, и поэтому, решить ее, просто перебрав ВСЕ параметры не получится.

Это одна из нескольких причин, по которым в большинстве случаев используют так называемый «transfer knowlege», вместо так называемого «vanilla» подхода. Transfer Knowlege использует нейросеть, обученную кем-то до нас (например, Гуглом) и обычно — для похожей, но все-таки другой задачи. Мы берем от нее начальные слои, заменяем конечные слои на свой собственный классификатор — и это работает, причем, работает прекрасно.

Поначалу подобный результат может вызвать удивление: как же так, мы взяли гугловскую сеть, обученную отличать кошек от стульев, и она нам распознает породы собак? Чтобы понять, как это происходит, нужно представлять себе основные принципы работы Deep Neural Networks, включая те, что используются для распознавания образов.

Мы «скормили» сети картинку (массив чисел, то есть) в качестве ввода. Первый слой анализирует изображение на предмет простых паттернов, вроде «горизонтальная линия», «дуга» и т.п. Следующий слой получает на вход эти паттерны, и выдает паттерны второго порядка, вроде «мех», «угол глаза»… В конечном счете, мы получаем некий паззл, из которого можно реконструировать собаку: шерсть, два глаза и человеческая рука в зубах.

Все вышеописанное было сделано с помощью предобученных слоев, полученных нами (например, от Гугла). Далее мы добавляем свои слои, и обучаем их из этих паттернов извлекать информацию о породе. Звучит логично.

Подводя итог, в этой статье мы создадим как «vanilla» CNN, так и несколько «transfer learning» вариантов сетей разных типов. Что касается «vanilla»: создать-то я ее создам, а вот настраивать, подбирая параметры, не планирую, поскольку «pre-trained» сети обучать и конфигурировать гораздо проще.

Поскольку мы планируем научить нашу нейросеть разпознавать породы собак, мы должны «показать» ей образцы различных пород. К счастью, есть набор фотографий вот здесь созданный для подобной задачи (оригинал здесь).

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

Затем мы опубликуем все это на Google Play. Естественно, Google будет сопротивляться, так что в ход пойдут дополнительные трюки. Например, размер нашего приложения (из-за громоздкой нейросети) будет больше, чем допустимый размер Android APK, принимаемый Google Play: нам придется использовать bundles. Кроме того, Google не будет показывать наше приложение в результатах поиска, это можно фиксить, прописывая поисковые тэги в приложении, либо просто подождать… неделю или две.

В результате мы получим полностью работоспособное «коммерческое» (в кавычках, так как выкладывается бесплатно) приложение для андроида и с использованием нейросетей.

Среда разработки

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

Во-первых, установка и конфигурирование большого количества инструментов и библиотек требует времени, и потом, когда выйдут новые версии, вам придется тратить время снова. Во-вторых, нейросети требуют больших вычислительных мощностей для обучения. Вы можете ускорить (в 10 и более раз) этот процесс, если используете GPU… на момент написания данной статьи, топовые GPU, наиболее подходящие для этой работы, стоили 2000 — 7000 долларов. И да, их тоже надо конфигурировать.

Так что мы пойдем другим путем. Дело в том, что Google позволяет бедным ёжикам вроде нас использовать GPUs из своего кластера — бесплатно, для вычислений, связанных с нейросетями, он также предоставляет полностью сконфигурированное окружение, все вместе, это называется Google Colab. Сервис дает вам доступ к Jupiter Notebook с питоном, Keras и огромным количеством прочих библиотек, уже настроенных. Все, что вам нужно сделать, это получить Google account (получите Gmail account, и это даст доступ ко всему остальному).

В настоящий момент, Colab можно наяте здесь, но зная Гугл, это может измениться в любой момент. Просто погуглите «Google Colab».

Очевидная проблема с использованием Colab заключается в том, что это WEB сервис. Как нам получить доступ к НАШИМ данным? Сохранить нейросеть после обучения, например, загрузить данные, специфичные для нашей задачи и так далее?

Существует несколько (на момент написания данной статьи — три) разных способа, мы используем тот, который я полагаю наиболее удобным — мы используем Google Drive.

Google Drive это облачное хранилище данных, которое работает примерно как обычный жесткий диск, и оно может быть mapped на Google Colab (см. код ниже). После этого, вы можете работать с ним, как работали бы с файлами на локальном диске. То есть, например, чтобы получить доступ к фотографиям собак для обучения нашей нейросети, нам нужно загрузить их на Google Drive, вот и все.

Создание и обучение нейросети

Ниже я привожу код на Python, блок за блоком (из Jupiter Notebook). Вы можете копировать этот код в свой Jupiter Notebook и запустить его, тоже блок за блоком, так как блоки могут исполняться независимо (разумеется, переменные, определенные в раннем блоке могут потребоваться в позднем, но это очевидная зависимость).

Инициализация

Прежде всего, давайте подмонтируем Google Drive. Всего две строчки. Этот код должен быть выполнен за сессию Colab лишь однажды (скажем, раз за 6 часов работы). Если вы вызовете его вторично, пока сессия еще «жива», он будет пропущен, так как диск уже подмонтирован.

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

Вполне стандартная include секция; вполне возможно, что некоторые из включаемых файлов не нужны, ну… простите. Также, поскольку я собираюсь тестировать разные нейросети, вам придется comment / uncomment некоторые из включаемых модулей для конкретных типов нейросетей: например, для того, чтобы использовать InceptionV3 NN, раскомментируйте включение InceptionV3, и закомментируйте, например, ResNet50. Или нет: все, что от этого изменится, это размер используемой памяти, и то не очень сильно.

На Google Drive, мы создаём папку для наших файлов. Вторая строка выводит ее содержимое:

Как выдите, фотографии собачек (скопированные из Stanford dataset (см. выше) на Google Drive), сначала сохранены в папке all_images. Позже, мы скопируем их в директории train, valid и test. Мы будем сохранять обученные модели в фолдере models. Что касается файла labels.csv, это часть датасета с фотографиями, он содержит таблицу соответствий имен картинок и пород собак.

Есть множество тестов, которые можно прогнать, чтобы понять, что именно мы получили во временное пользование от Гугла. Например:

Как видим, GPU действительно подключен, а если нет, надо в настройках Jupiter Notebook найти и включить эту опцию.

Далее нам нужно декларировать некоторые константы, как то размер картинок и т.п. Мы будем использовать картинки размером 256×256 пикселов, это достаточно большое изображение, чтобы не потерять детали, и достаточно маленькое, чтобы все поместилось в памяти. Заметим, однако, что некоторые типы нейросетей, которые мы будем использовать, ожидают изображения размером 224×224 пиксела. В таких случаях, мы комментируем 256 и раскомментируем 224.

Тот же подход (comment one — uncomment) будет применен к именам моделей, которые мы сохраняем, просто потому, что мы не хотим перезаписывать файлы, которые еще могут пригодиться.

Загрузка данных

Прежде всего, давайте загрузим labels.csv файл и разобьем его на training и validation части. Заметьте, что пока еще нет части testing, поскольку я собираюсь «сжульничать», чтобы получить больше данных для обучения.

Далее, копируем файлы с картинками в training/validation/testing фолдеры, в соответствии с именами файлов. Следующая функция копирует файлы, имена которых мы передаем, в указанный фолдер.

Как видите, мы только копируем один файл на каждую породу собак как test. Также при копировании, мы создаем подпапки, по одной на каждую породу. Соответственно, фотографии копируются в подпапки по породам.

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

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

Получаем список пород собак:

Обработка изображений

Мы собираемся использовать фичу библиотеки Keras, носящую название ImageDataGenerators. ImageDataGenerator может обрабатывать изображение, масштабировать, поворачивать, и так далее. Он также может принимать processing функцию, которая может обрабатывать изображения дополнительно.

Обратите внимание на следующий код:

Мы можем произвести нормализацию (подконку данных под диапазон 0-1 вместо исходных 0-255) в самом ImageDataGenerator. Зачем же тогда нам нужен preprocessor? В качестве примера, рассмотрим (закомментированный, я его не использую) вызов blur: это та самая custom image manipulation, которая может быть произвольной. Что угодно, от контрастирования до HDR.

Мы будем использовать два разных ImageDataGenerators, один для обучения, и второй для validation. Разница в том, что для обучения нам нужны повороты и масштабирование, чтобы увеличить «разнообразие» данных, а вот для валидации — не нужны, по крайней мере, не в этой задаче.

Создание нейросети

Как уже упоминалось, мы собираемся создать несколько типов нейросетей. Каждый раз мы будем вызывать другую функцию для создания, включать другие файлы и иногда определять другой размер изображения. Так что, для переключения между разными типами нейросетей, мы должны comment/uncomment соответствующий код.

Прежде всего, создадим «vanilla» CNN. Он работает плохо, поскольку я решил не тратить время на его доводку, но по крайней мере, он предоставляет основу, которую можно развивать, есл иесть желание (обычно, это плохая идея, поскольку предобученные сети дают лучший результат).

Когда мы создаем сети, используя transfer learning, процедура меняется:

Создание сетей других типов следует тому же шаблону:

Внимание: победитель! Эта NN показала лучший результат:

Разные типы нейросетей могут быть использованы для разных задач. Так, в дополнение к требованиям точности предсказания, размер может иметь значение (mobile NN в 5 раз меньше, чем Inception) и скорость (если нам нужна обработка видео потока в реальном времени, то точностью придется пожертвовать).

Обучение нейросети

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

То, как мы создаем и удаляем нейросети, достаточно просто и прямолинейно. Сначала удаляем. При вызове delete (только), следует иметь в виду, что у Jupiter Notebook есть функция «run selection» выделите только то, что хотите использовать, и запускайте.

Затем мы создаем нейросеть, если ее файл не существовал, или вызываем load, если он есть: разумеется, мы не можем вызвать «delete» и затем ожидать, что NN существует, так что, чтобы использовать сохраненную нейросеть, не вызывайтеdelete.

Другими словами, мы можем создать новую NN, либо использовать существующую, в зависимости от ситуации и от того, с чем мы в данный момент экспериментируем. Простой сценарий: мы обучили нейросеть, затем уехали в отпуск. Вернулись, а Google прибил сессию, так что нам надо загрузить, сохраненную ранее: закомментируйте «delete» и раскомментируйте «load».

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

Наконец, учим нейросеть на training наборе:

Графики для accuracy и loss для лучшей из конфигураций выглядят следующим образом:


Как видите, нейросеть учится, и весьма неплохо.

Тестирование нейросети

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

Экспорт нейросети в Java приложение

Прежде всего, нам нужно организовать загрузку нейросети с диска. Причина понятна: экспорт происходит в другом блоке кода, так что скорее всего, мы будем запускать экспорт отдельно — когда нейросеть будет доведена до оптимального состояния. То есть, непосредственно перед экспортом, в тот же прогон программы, мы сеть обучать не будем. Если вы будете использовать приведенный здесь код, то разницы нет, оптимальную сеть подобрали до вас. А вот если вы будете учить что-то свое, то тренировать все заново перед сохранением — пустая трата времени, если до этого вы все сохранили.

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

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

Далее, нам нужно получить имена входного (input) и выходного (output) слоев сети (либо так, либо в функции создания мы должны явным образом «назвать» слои, чего мы не сделали).

Мы будем использовать имена входного и выходного слоев позже, когда будем импортировать нейросеть в Java приложение.

В сети бродит еще один код для получения этих данных:

Но мне он не нравится и я его не рекомендую.

Следующий код экспортируем Keras Neural Network в pb формат, тот, что мы будем захватывать из Android.

Вызов этих функций для экспорта нейросети:

Последняя строка печатает структуру полученной нейросети.

Создание Android приложения использующего нейросети

Экспорт нейросетей в Android хорошо формализован и не должен вызывать затруднений. Есть, как всегда, несколько способов, мы используем наиболее (на момент написания статьи) популярный.

Прежде всего, используем Android Studio чтобы создать новый проект. Мы будем «срезать углы», поскольку наша задача — не учебник по андроиду. Так что приложение будет содержать лишь одну activity.

Как видите, мы добавили фолдер «assets» и скопировали в него нашу нейросеть (ту, что до этого экспортировали).

Файл Gradle

В этом файле надо сделать несколько изменений. Прежде всего, нам нужно импортировать библиотеку tensorflow-android. Она используется для того, чтобы работать с Tensorflow (и, соответственно, Keras) из Java:

Еще один неочевидный камень преткновения: versionCode и versionName. Когда приложение будет меняться, вам нужно будет выкладывать новые версии в Google Play. Без изменения версий в gdadle (например, 1 -> 2 -> 3. ) вы не сможете этого сделать, Гугл будет выдавать ошибку «эта версия уже есть».

Манифест

Прежде всего, наше приложение будет «тяжелым» — 100 Mb Neural Network легко поместится в память современных сотовых телефонов, но открывать отдельный instance для каждой фотографии «расшаренной» из Facebook определенно является плохой идеей.

Так что мы запрещаем создавать более одного instance нашего приложения:

Добавив android:launchMode=«singleTask» к MainActivity, мы говорим Android, что надо открывать (активировать) существующую копию приложения, вместо того, чтобы создавать еще одну instance.

Затем нам нужно включить наше приложение в список, который система показывает, когда кто-то «расшаривает» картинку:

Наконец, нам нужно запросить фичи и разрешения, которые будет использовать наше приложение:

Если вы знакомы с программированием под Android, эта часть не должна вызвать вопросов.

Layout приложения.

Мы создадим два layouts, один для портретной, и второй для альбомной ориентации. Так выглядит Portrait layout.

Что мы впдим: большое поле (view) чтобы показывать картинку, надоедливый список рекламы (показывается, когда нажата кнопка с «косточкой»), кнопка «Help», кнопки для загрузки картинки из File/Gallery и захвата с камеры, и наконец (изначально скрытая) кнопка «Process» для обработки картинки.

Активность сама по себе содержит всю логику показа и скрытия, а также enabling/disabling кнопок, в зависимости от состояния приложения.

MainActivity

Это activity наследует (extends) стандартное Android Activity:

Рассмотрим код, ответственный за работу нейросети.

Прежде всего, нейросеть принимает Bitmap. Изначально, это большой Bitmap (произвольного размера) от камеры или из файла (m_bitmap), потом мы трансформируем его, приводя к стандарту 256×256 пикселей (m_bitmapForNn). Мы также храним размер битмапа (256) в константе:

Мы должны сообщить нейросети имена входного и выходного слоев; мы получили их ранее (см. листинг), но имейте в виду, что в вашем случае они могут отличаться:

Затем мы декларируем переменную для хранения объекта TensofFlow. Также, мы храним путь к файлу нейросети (который лежит в assets):

Породы собак храним в списке, чтобы потом показать пользователю их, а не индексы массива:

Изначально, мы загрузили Bitmap. Однако, нейросеть ожидает массив RGB значений, а ее выход — это массив вероятностей того, что данная порода — это то, что показано на картинке. Соответственно, нам нужно добавить еще два массива (заметьте, что 120 это число пород собак, присутствующих в наших обучающих данных):

Загружаем tensorflow inference library:

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

In onCreate() of the MainActivity, we need to add the onClickListener for the «Process» button:

Здесь processImage() просто вызывает поток, который мы описали выше:

Дополнительные замечания

Мы не планируем обсуждать детали UI-программирования под Андроид, поскольку это совершенно точно не относится к задаче портирования нейросетей. Однако, одну вещь все же упомянем.

Когда мы предотвратили создание дополнительных instances нашего приложения, мы также заодно сломали нормальный порядок создания и удаления активности (flow of control): если вы «расшарите» картинку из Facebook, а затем расшарите еще одну, то приложение не перезапустится. Это значит, что «традиционный» способ ловли переданных данных в onCreate будет недостаточен, поскольку onCreate не будет вызван.

Вот как можно решить эту проблему:

1. В onCreate в MainActivity, вызываем функцию onSharedIntent:

Также добавляем обработчик для onNewIntent:

Вот сама функция onSharedIntent:

Теперь мы обрабатываем переданные данные в onCreate (если приложения не было в памяти) либо в onNewIntent (если оно было запущено ранее).

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

Читайте также:  Рулетка для собаки мелких пород
Оцените статью