В этой статье я хочу рассказать об использовании сервиса Custom Vision для распознавания фотографий экомаркировок из мобильного приложения.
Служба CustomVision является частью облачных Cognitive Services на платформе Azure. Подробнее о том, какие технологии нам пришлось изучить, как работать с CustomVision, что это такое и чего позволяет достичь.
Задача по распознаванию экомаркировок появилась три года назад, когда мы с женой начали обсуждать мобильное приложение, которое ее организация (НПО в сфере экологии) хотела сделать для распространения информации об экомаркировке.
Что такое экомаркировка?
«комаркировка» — сертификат и соответствующий логотип, выдаваемые сертифицирующими организациями, проверяющими продукцию или услуги производителя-поставщика на соответствие определенным критериям, связанным с жизненным циклом продукции-услуги и ориентированными на ее экологичность.После сертификации производитель может размещать логотип экологической маркировки на своей продукции.
Экомаркировка также включает в себя маркировку пластика на основе его состава для упрощения сортировки и переработки и другие подобные знаки.
Например, вот знак:
Процесс выбора технологии распознавания
Две основные функции приложения заключались в поиске магазинов с экотоварами и распознавании экомаркировок.Если с поиском магазинов все относительно просто технологически, то с распознаванием не так уж и много.
Слово было модное, но как его сделать, было непонятно.
И я начал изучать вопрос.
Маркировочные логотипы стандартизированы и являются идеальными объектами для распознавания — наведите телефон на изображение на упаковке товара, сделайте фото, и приложение подскажет, что это за знак, что он означает и стоит ли ему доверять.
Я начал думать, как сделать распознавание и анализировать разные варианты - пробовал OpenCV с его алгоритмами распознавания (каскады Хаара, SWIFT, Сопоставление шаблонов и т.д.), но качество распознавания было не очень хорошим - не более 70% при обучении набор из нескольких десятков изображений.
Возможно, я где-то что-то не так понял и сделал что-то не так, но мы также попросили другого друга изучить эту тему, и он тоже сказал, что 70% на каскадах Хаара — это максимум на таком наборе данных.
Параллельно с этим все чаще стали появляться материалы о различных нейросетевых фреймворках и успешном использовании нейросетей для решения подобных задач.
Но везде я видел какие-то ужасающие размеры датасетов (сотни и тысячи изображений для каждого класса), незнакомые мне Python и TensorFlow, необходимость собственного бэкенда — всё это несколько пугало.
Как .
NET-разработчик, я смотрел Accord.NET, но не сразу нашел что-то подходящее.
В это время мы были заняты доработкой приложения и запуском его в производство, и я отложил процедуру признания.
Около года назад я наткнулся на статью, описывающую раннюю предварительную версию Custom Vision от Microsoft, облачного сервиса классификации изображений.
Протестировал на 3-х символах и мне понравилось - понятный портал, где можно без технических знаний обучить и протестировать классификатор, обучение набора из 100 изображений за 10-20 секунд, качество классификации выше 90% даже на 30 изображениях каждого символа - тогда что тебе нужно.
Я поделился своей находкой с женой, и мы начали делать менее функциональную международную версию приложения, которая не содержит информации о продуктах и магазинах, но умеет распознавать экомаркировки.
Перейдем к техническим деталям работающего приложения распознавания.
Пользовательское видение
CV является частью Cognitive Services в Azure. Теперь он готов к официальному выпуску, и счета за него будут взиматься из вашей подписки Azure, хотя он все еще указан в предварительной версии.Соответственно, как и любой другой продукт Azure, CognitiveServices предоставляются и управляются на портале Azure. CV предоставляет два API REST — один для обучения, другой для прогнозирования.
Более подробно взаимодействие с Prediction я опишу позже.
Помимо портала Azure и API, пользователи CV имеют доступ к порталу customvision.ai, где они могут очень легко и наглядно загружать изображения, маркировать их, а также просматривать изображения и результаты распознавания, обработанные через API. Вы можете начать использовать портал и API customvision.ai без какого-либо подключения к Azure — проект создается для тестовых целей даже без подписки Azure. Но если вы хотите в будущем превратить свой тестовый проект в производственный, то лучше сделать это сразу, иначе нам пришлось вручную копировать изображения из тестового проекта и перемаркировать их в продакшене.
Для того, чтобы создать проект в Azure, вам необходимо зарегистрироваться там и создать подписку.
Это относительно несложно, проблемы могут возникнуть только со вводом и проверкой данных с банковской карты – иногда такое случается.
После регистрации вам необходимо создать экземпляр ComputerVision через портал Azure.
После создания ресурсов в Azure они станут доступны в customvision.ai. На портале customvision.ai вы можете загружать изображения и отмечать их — тегов может быть несколько на одно изображение, но без выделения областей.
То есть изображение принадлежит нескольким классам, но на данном этапе разработки сервиса невозможно выделить в изображении конкретный фрагмент и отнести его к классу.
После разметки нужно начать обучение, нажав кнопку Обучить — обучение модели из 70 тегов и 3 тысяч изображений длится около 30 секунд. Результаты обучения сохраняются в сущности Iteration. Фактически управление версиями реализуется через Iteration. Каждую Итерацию можно использовать независимо - то есть можно создать Итерацию, протестировать результат и удалить его, если он не подходит, или изменить его на дефолтный и заменить текущую Итерацию по умолчанию, и тогда все распознавания от приложений будут приходить в модель из этой итерации.
Качество модели отображается в виде Precision и Recall (подробнее здесь ) как по всем классам сразу, так и по отдельности.
Вот как выглядит проект с уже загруженными и обученными изображениями.
На портале вы можете запустить распознавание изображений с диска или URL с помощью Быстрого теста и протестировать распознавание по одному изображению.
На вкладке «Прогнозы» можно увидеть результаты всех последних распознаваний — проценты принадлежности тегов отображаются прямо на картинке.
Возможность увидеть все результаты распознавания и добавить их в обучающую выборку всего за пару кликов мыши очень полезна — это может сделать любой человек, не имеющий каких-либо знаний в области искусственного интеллекта или программирования.
Использование API
Custom Vision Service имеет очень простой и интуитивно понятный REST API для обучения и распознавания.Наше приложение использует только API распознавания и я расскажу о его использовании.
URL-адрес для распознавания: https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your GUID проекта}/изображение Где южный центральный** – название региона Azure, в котором находится служба.
На данный момент услуга доступна только в южно-центральном регионе США.
Это не значит, что его можно использовать только там! Он просто живет там — вы можете использовать его из любого места, где есть Интернет. {GUID вашего проекта}** — идентификатор вашего проекта.
Его можно посмотреть на портале customvision.ai. Для распознавания необходимо отправить изображение POST. Вы также можете отправить общедоступный URL-адрес изображения, и сервис загрузит его самостоятельно.
Дополнительно в Заголовки необходимо добавить заголовок «Prediction-Key», которому необходимо передать один из Ключей доступа, которые будут выданы при регистрации — они доступны как на портале customvision.ai, так и на портале Azure. Результат содержит следующее поле:
Где Вероятность указывает вероятность того, что изображение принадлежит указанному тегу (классу)."Predictions":[ {"TagId":"35ac2ad0-e3ef-4e60-b81f-052a1057a1ca","Tag":"dog","Probability":0.102716163}, {"TagId":"28e1a872-3776-434c-8cf0-b612dd1a953c","Tag":"cat","Probability":0.02037274} ]
На С# это выглядит так var client = new HttpClient();
client.DefaultRequestHeaders.Add("Prediction-Key", "{Acess key}");
string url = " https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your project GUID}/image";
HttpResponseMessage response;
List<RecognitionResult> recognitions = new List<RecognitionResult>();
using (var content = new ByteArrayContent(imageBytes))
{
content.Headers.ContentType = new MediaTypeHeaderValue
("application/octet-stream");
response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
string strRes = await response.Content.ReadAsStringAsync();
dynamic res = (dynamic) JsonConvert.DeserializeObject(strRes);
foreach (var pr in res.predictions)
{
recognitions.Add(
new RecognitionResult()
{ Tag = pr.tagName, RecognPercent = pr.probability });
}
}
else
{
Debug.WriteLine(
"Non successful response. " + response.ToString());
}
}
Как видите, абсолютно ничего сложного нет. Вся магия происходит на стороне сервиса.
Приложение и некоторые выбранные параметры.
Приложение достаточно простое и состоит из списка экомаркировок, информации о том, что такое экомаркировки, как они делятся, и самого сканера.
Основная часть написана на Xamarin.Forms, но окно сканера работает с камерой и его пришлось делать в виде рендеров и реализовывать для каждой платформы отдельно.
Уровень, при котором приложение решает, что экомаркировка распознана точно, составляет > = 90%; почти все изображения распознаются, если они более-менее приемлемого качества и на снимке отсутствуют другие признаки.
Это число было получено эмпирическим путем — мы начали с 80, но поняли, что 90 снижает количество ложных срабатываний.
А их довольно много – многие маркировки схожи и содержат схожие элементы, а цветовая гамма смещена в сторону зеленого цвета.
Например, это не очень качественное изображение распознается правильно с точностью 91%.
B, в данном случае этот класс обучался на 45 изображениях.
Надеюсь, статья оказалась полезной и позволит заинтересованным читателям взглянуть на новые инструменты искусственного интеллекта и машинного обучения.
Теги: #Разработка мобильных приложений #Microsoft Azure #искусственный интеллект #c++ #.
NET #xamarin #Azure Custom Vision #Распознавание изображений
-
Wd Caviar Green — Удобный Накопитель
19 Oct, 24 -
Яблоня
19 Oct, 24 -
Мировая Блогосфера От Technorati
19 Oct, 24 -
Реактивное Программирование В Objective-C
19 Oct, 24 -
Как Сделать Код Java Проще И Понятнее
19 Oct, 24