Создайте простую систему поиска изображений в OpenCV и Flask
Недавно я начал играть с OpenCV, библиотекой Computer Vision с открытым исходным кодом для обработки изображений. К счастью, есть доступные привязки Python. Больше повезло, что такие ребята, как Адриан, оказали большую услугу, выпустив и книгу, и блог на аналогичную тему.
Так что же это такое? Ну, это просто, или я говорю, самая простая демонстрация использования OpenCV для загрузки изображения и поиска цвета, связанного с этим изображением, и демонстрации идей в веб-приложении на основе Flask. Это не современное приложение, и в настоящее время оно не работает так, как я намереваюсь, но эй, это только начало, а не конец. Я не мог найти лучшего оправдания, кроме как превратить мои базовые знания о пикселях в продукт (Google! Осторожно!!)
Я не буду вдаваться в подробности как OpenCV, так и Flask, и я расскажу, что на самом деле делает приложение.
Приложение состоит из двух частей: веб-приложения, которое используется для хранения изображений из Интернета и отображения обработанных изображений и их доминирующих цветов, и сценария командной строки, который запускается на загруженном изображении и извлекает цветовые коды. Веб-изображение выглядит следующим образом:
Вы ищете изображения по цветовому коду, и он возвращает результат, как показано ниже:
И вид одиночного изображения выглядит так:
Давайте обсудим основную часть системы, то есть сценарий командной строки, выполняющий основную работу.
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 по более сложным темам.
Как всегда, код доступен на Гитхаб.
Эта статья была первоначально опубликована здесь.