Создайте простую систему поиска изображений в OpenCV и Flask

Недавно я начал играть с OpenCV, библиотекой Computer Vision с открытым исходным кодом для обработки изображений. К счастью, есть доступные привязки Python. Больше повезло, что такие ребята, как Адриан, оказали большую услугу, выпустив и книгу, и блог на аналогичную тему.

Так что же это такое? Ну, это просто, или я говорю, самая простая демонстрация использования OpenCV для загрузки изображения и поиска цвета, связанного с этим изображением, и демонстрации идей в веб-приложении на основе Flask. Это не современное приложение, и в настоящее время оно не работает так, как я намереваюсь, но эй, это только начало, а не конец. Я не мог найти лучшего оправдания, кроме как превратить мои базовые знания о пикселях в продукт (Google! Осторожно!!)

Я не буду вдаваться в подробности как OpenCV, так и Flask, и я расскажу, что на самом деле делает приложение.

Приложение состоит из двух частей: веб-приложения, которое используется для хранения изображений из Интернета и отображения обработанных изображений и их доминирующих цветов, и сценария командной строки, который запускается на загруженном изображении и извлекает цветовые коды. Веб-изображение выглядит следующим образом:
Снимок экрана-2019-09-08-at-2.01.41-PM.png

Вы ищете изображения по цветовому коду, и он возвращает результат, как показано ниже:
Снимок экрана-2019-09-08-at-2.06.04-PM.png

И вид одиночного изображения выглядит так:
Снимок экрана-2019-09-08-at-2.44.46-PM.png

Давайте обсудим основную часть системы, то есть сценарий командной строки, выполняющий основную работу.

def process_image(image_name):
    color_count = {}
    print('Processing the image {}'.format(image_name))
    path="website/static/uploaded_images/" + image_name

    image = cv2.imread(path)

    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            (b, g, r) = image[i, j]
            h_value = rgb2hex(r, g, b)

            if h_value in color_count:
                color_count[h_value] += 1
            else:
                color_count[h_value] = 1
    return color_count

После импорта компьютерного зрения мы считываем изображение с диска, вызывая cv2.imread(). Данные доступны в виде массива numpy, поэтому для поиска таких деталей, как ширина, высота и канал, используется метод формы. Кстати, OpenCV хранит данные изображения в формате BGR вместо цветового пространства RGB. Как только данные получены в формате BGR, мы используем собственный метод rgb2hex для преобразования цвета RGB в HEX. Затем функция возвращает список словарей, состоящий из цветового кода в шестнадцатеричном формате и его частоты, которые мы будем использовать для определения процентного содержания цвета в изображении. Я также сделал демо который можно увидеть ниже.

Вывод

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

Надеюсь, в ближайшие недели я продолжу обсуждение OpenCV по более сложным темам.
Как всегда, код доступен на Гитхаб.

Эта статья была первоначально опубликована здесь.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *