Технология распознавания образов все активнее входит в наш обиход. Компании и учреждения используют ее для решения самых разных задач: от обеспечения безопасности до исследования удовлетворенности клиентов. Инвестиции в продукты, в основе которых — данная функция, обещают вырасти до 39 миллиардов долларов к 2021 году. Вот лишь несколько примеров, как распознавание образов используется в разных сферах:
Здравоохранение. Болезнь никого не красит. Но есть заболевания, при которых изменения внешности особенно заметны. Сравнивая внешний вид пациента с изображениями из базы данных, врачи точнее ставят диагноз и даже определяют силу боли, которую испытывает пациент. Приложения типа AiCure фиксируют, принял ли пациент лекарства. А Orcam MyEye — настоящее спасение для слабовидящих: приложение сообщает пользователю обо всем, что «видит».
Приложение с распознаванием образов для контроля принятия лекарств. Источник: www.ncbi.nlm.nih.gov
Туризм. Увидели интересное фото в инстаграме и хотите пообедать в том же кафе? Как вам идея загрузить фото в приложение, которое приведет в нужное место? На оснований фотогорафий из инстаграмма сервис Jetpac City Guides еще и рейтинги лучших мест для туристов создает.
Транспорт. Умение распознавать образы — функция, без которой беспилотник и пару метров без аварии не проедет. Но если в вашем парке обычные автомобили, распознавание лиц тоже пригодится — например, чтобы предотвратить несанкционированное использование транспорта или невнимательное поведение водителя за рулем.
Коммерция. Здесь функция распознавания образов используется активнее всего. Онлайн-магазины eBay и Boohoo помогают пользователям найти «именно тот» товар даже если покупатель не может вспомнить, как называется вещь. А такие приложения, как Lookwish и NICE, позволяют еще и «примерить» нужную вещь.
Думаете, все это только для очень крупных и богатых компаний? Действительно, внедрить машинное обучение (на котором зиждется распознавание образов) с нуля может оказаться хлопотным занятием. К счастью, существуют библиотеки, которые предоставляют возможность использовать уже готовые модели при разработке ваших продуктов. Одна из них — Firebase ML Kit. И дальше мы расскажем вам, как использовать ее при создании своего приложения.
Что такое Firebase ML Kit и как это работает
ML Kit — это SDK, предоставляющая возможность использовать уже готовые решения machine learning от Google для iOS и Android в простом виде. Независимо от того, есть ли у вас опыт использования machine learning, вы можете реализовывать нужные вам функции в нескольких строках кода. Если же вы являетесь опытным разработчиком в сфере машинного обучения, то вы можете загрузить собственные модели TensorFlow.
ML Kit может работать как в режиме онлайн (при этом вы получаете ,свободный доступ к гораздо более солидной базе данных, но с ограничением по запросам: бесплатно лишь первая тысяча), так и оффлайн. Такие функции, как распознавание текста, штрих-кодов и образов, доступны как онлайн, так и оффлайн. Распознавание ориентиров (известные дома, реки, улицы и т.д.) доступно только в режиме онлайн, а распознавание лиц — только оффлайн на устройстве.
Как интегрировать функцию распознавания образов в приложение
В качестве примера, начнем с распознавания текста оффлайн:
> private fun runTextSearchOnDevice(bitmap: Bitmap){ val image = FirebaseVisionImage.fromBitmap(bitmap) val textDetector = FirebaseVision.getInstance().onDeviceTextRecognizer textDetector.processImage(image).addOnSuccessListener{ processTextSearchFromDevice(it)}.addOnFailureListener{ Toast.makeText(this, it.toString(), Toast.LENGTH_SHORT).show()}}>
В методе `processTextSearchFromDevice` мы обрабатываем данные, предоставленные нам Firebase. Каждой функции соответствуют разные типы моделей, которые можно рассмотреть в документации. В нашей ситуации мы получили массив объектов, содержащих координаты текста в объекте `Rect` и, конечно, сам текст, который был распознан Firebase. Для использования онлайн код практически такой же:
> val options = FirebaseVisionCloudTextRecognizerOptions.Builder() .setLanguageHints(resources.getStringArray(R.array.textRecognitionLanguages).toList()) .build() val textDetector = FirebaseVision.getInstance().getCloudTextRecognizer(options)>
В настройках мы теперь можем добавлять языки, которые теоретически будут распознаваться Firebase. Результатом будет тот же массив объектов. Если вы планируете распознавать документ, для удобства можно использовать `getCloudDocumentTextRecognizer`.
Для распознавания лиц подход практически такой же:
> val image = FirebaseVisionImage.fromBitmap(bitmap) val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(getFaceDetectorOptions()) faceDetector.detectInImage(image).addOnSuccessListener{...}>
В настройках мы можем задать, нужно ли распознавать ‘landmarks’ (глаза, нос, уши и т.д.), тип (для нас важны скорость или точность распознавания), классификацию по категориям, например, отбор только тех фотографий, на которых глаза открыты или на которых человек улыбается. Вот пример настроек:
> FirebaseVisionFaceDetectorOptions.Builder() .setModeType(FirebaseVisionFaceDetectorOptions.ACCURATE_MODE) .setLandmarkType(FirebaseVisionFaceDetectorOptions.NO_LANDMARKS) .setClassificationType(FirebaseVisionFaceDetectorOptions.NO_CLASSIFICATIONS) .build()>
В результате Firebase выдаст нам массив объектов с координатами сгруппированных лиц а также, если мы дали разрешение, то и массив ‘landmarks’ с координатами.
Напоследок рассмотрим, как распознавать образы на фото. В общих чертах все, как и в предыдущих случаях. Вот так, например, это выглядит оффлайн:
> val labelDetector = FirebaseVision.getInstance().visionLabelDetector labelDetector.detectInImage(image).addOnSuccessListener{...}>
А вот так онлайн:
> val options = FirebaseVisionCloudDetectorOptions.Builder() .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL) .setMaxResults(15) .build() val labelDetector = FirebaseVision.getInstance().getVisionCloudLabelDetector(options) labelDetector.detectInImage(image).addOnSuccessListener{...}>
В настройках можно указать максимальное количество результатов и какую модель использовать (стабильную либо последнюю доступную). В результате получаем массив объектов с названием (что, по мнению Firebase, изображено на фото) и точность в диапазоне от 0,01 до 1,0.
Как видите, ничего сложного, и для большинства случаев достаточно бесплатного (локального) ML Kit.
Подведем итог
Использование машинного обучения, в частности, функции распознавания образов, не обязательно подразумевает что-то из ряда вон выходящее. Например, в вашем приложении это может быть просто проверка добавленного пользователем фото в процессе регистрации. Вам нужно убедиться, что пользователь не добавил, например, фото своего кота, а клиенту хочется побыстрее начать пользоваться сервисом и не ждать одобрения модератора.
Для внедрения функции распознавания образов в приложение не обязательно инвестировать большие средства. Вы можете полностью или частично воспользоваться готовыми решениями, одно из которых — Firebase ML Kit. Надеемся, изложенный нами алгоритм действий позволит сделать это, не прилагая чрезмерных усилий. Если же вы хотите быть полностью уверенными в результате — обращайтесь к нам. Мы с радостью поможем вам в разработке веб-сервисов и мобильных приложений.