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

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

Методология

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

Ниже приведена блок-схема, объясняющая все этапы нашего подхода:

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

Шаг 2. После предварительной обработки, загрузки и масштабирования изображений мы использовали три алгоритма обнаружения краев — Собеля, Робертса и Лапласа, чтобы извлечь края из каждого изображения в наборе данных.

Фильтр Sobel применяет матрицу 3x3 к каждому пикселю изображения. Он используется для определения градиента изображения первого порядка в этой точке пикселя (как по величине, так и по направлению). Градиент изображения представляет собой степень изменения интенсивности в этом месте.

ФильтрРоберта, как и оператор Собеля, представляет собой производный фильтр первого порядка, в котором используются горизонтальные и вертикальные фильтры для идентификации границ (с точки зрения амплитуды и направления). Таким образом, он привлекает внимание к областям высоких пространственных частот, связанным с краями.

Лапласиан, в отличие от Собеля и Робертса, использует производную второго порядка от изображения, которая определяет местоположение края (пересечение нуля), только величину, а не его направление.

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

· Четкие изображения имеют острые края; следовательно, они будут иметь высокое среднее и максимальное значение по сравнению с размытыми изображениями.

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

Поскольку у нас есть 3 краевых фильтра и 3 признака (среднее, максимум и дисперсия), соответствующие каждому фильтру, всего у нас есть 9 признаков на изображение.

Шаг 4: После извлечения вышеуказанных функций мы обучили SVM этим функциям и соответствующим меткам (1 для размытия и 0 для четкости) для всех изображений в наборе данных.

После проверки результаты были вполне приличными, но для дальнейшего повышения производительности модели мы провели настройку гиперпараметров для таких параметров, как параметр регуляризации («C» для SVM) и гамма («γ» для функции ядра). Для нашего варианта использования после тонкой настройки наиболее подходящими параметрами были C = 1 и γ = 0,1 с ядром RBF. Значение этих параметров может варьироваться в зависимости от варианта использования/данных, над которыми вы работаете.

Результаты

Мы использовали набор данных из 1000 фотографий, 500 из которых были четкими и 500 размытыми, чтобы протестировать наш алгоритм классификации размытия. Модель работает очень хорошо, ее точность составляет 93,80%. Это указывает на то, что примерно 94 из 100 фотографий были предсказаны нашей моделью правильно. Более того, точность нашей модели 94,88 % гарантировала правильность большинства ожидаемых классификаций размытия и четкости. Наша модель доказала свою способность распознавать значительное количество четких и размытых изображений с коэффициентом запоминания 92,60 %. Общий балл F1 составил 93,73%.

Обнаружение размытия на основе нейронной сети

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

Для различных размеров пакетов при обнаружении размытия в таблице 2 показано время, затраченное двумя моделями, ResNet 50 и SVM, на предсказание того, будет ли изображение размытым или нет. По сравнению с ResNet50, SVM постоянно отображает более низкие задержки для всех размеров пакетов. Например, даже при размере пакета 2000 SVM занимает значительно меньше времени по сравнению с ResNet 50. Очевидно, что наша модель является отличным вариантом для эффективных и мгновенных приложений обнаружения размытия.

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

Заключение

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

Авторы

Таня Гупта — младший специалист по данным @ Ecom Express Limited
Уман Нияз — специалист по данным @ Ecom Express Limited