Как видит компьютер картинку

Обновлено: 04.07.2024

Подготовка изображений или Как Компьютер „видит“ числа (лирическое отступление)

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

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

Возьмем для примера фотографию аналогового счетчика:

Вряд ли мы захотим повесить этот техногенный натюрморт на стену в гостиной. Зато мы можем получить какую-нибудь полезную информацию. Допустим, нас интересуют три последние цифры на табло. Пусть наша программа найдет и выделит их черным цветом, а все остальное „закрасит“ белым. И первая наша программка не будет различать цвета – мы попросим ее всего лишь отличить более темные пиксели от более светлых. Поехали!

Техногенный натюрморт превратился в кошмар авангардиста. Что произошло? Программа приняла провалы между барабанами за символ. Да и вообще, мы видим на изображении кучу ненужной нам информации, которую мы хотели бы убрать. Причина банальна – в то время, как мы прекрасно различаем конкретные цвета, наша первая, „глупая“ программа сравнивает только яркость одной области с яркостью другой. И, с точки зрения искусственного интеллекта, тень на пластике такая же „темная“, как цифра рядом с ней. С этим результатом можно долго и нудно работать, но лучше упростить себе задачу с помощью смекалки. Интересующие нас три цифры справа на табло отличаются от окружения цветом. Так давайте создадим следующую, более умную программу, которая будет искать на изображении красный цвет. Немного теории. Компьютер, на самом деле, не знает ничего, кроме цифр. И цвета в компьютере тоже представлены определенными численными значениями. Тогда мы делаем примерно следующее:

Итак, отвечая на вопросы друзей: да, можно найти фигуру определенного цвета на изображении. И вполне вероятно, что в некоторых случаях это может быть лучшим решением какой-либо задачи для „умного дома“.


Если я попрошу вас посмотреть на картинку выше и перечислить некоторые объекты, которые вы видите в кадре, какие это будут объекты? Вы, вероятно, не задумываясь, написали бы длинный список объектов, которые видели. В него могут входить автомобили, различные красочные рекламные щиты, яркие магазины или столбики на дороге, высокие здания или растения в горшках вдоль дороги и многое другое.

Если я попрошу вас описать картину, которую вы видели, всего одним предложением, вы, вероятно, скажете: «Это Нью-Йорк, Таймс-сквер!», снова не задумываясь. Эти задачи были очень просты для вас, так как даже человек с уровнем интеллекта и понимания ниже среднего или шестилетний ребенок может сделать то же самое. Однако знаете ли вы, как вы это сделали?

«За кулисами» происходит очень сложный процесс. Человеческое зрение — это очень сложный сегмент органической технологии, который охватывает наши глаза и зрительную кору. Оно вовлекает мысленные модели объектов и наше абстрактное понимание концепций. Также учитывается и наш личный опыт, полученный в результате бесчисленных взаимодействий с окружающим миром. Сегодня мы видим, что цифровые устройства уже могут делать снимки с разрешением, превосходящим человеческое зрение. Компьютеры также могут с большой точностью обнаруживать объекты вместе с их цветом.

Что такое «компьютерное зрение»?

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

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

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

Как цифровое устройство интерпретирует изображение?

Компьютер видит изображение не так, как мы. В отличие от нас он интерпретирует всё изображение в терминах чисел. Для компьютера изображение — это лишь двумерная матрица чисел, где каждая запись представляет интенсивность света или цвета для заданного положения, или так называемых пикселей. Для изображения в оттенках серого числа в пикселях варьируются от 0 до 255 согласно интенсивности цвета.

Что мы видим в сравнении с тем, что считывает компьютер

Что мы видим в сравнении с тем, что считывает компьютер

Например, у нас есть изображение в оттенках серого написанной от руки цифры 8, которое представлено в виде матрицы 28*28 с 784 пикселями. На первом изображении показано то, как мы видим цифру 8, а на втором и третьем — то, как компьютер считывает изображение цифры 8 в терминах пикселей. Здесь 0 обозначает полностью чёрную часть, а промежуточные числа показывают оттенки между чёрным и белым в соответствии с изображением (обратите внимание на границу цифры). По мере продвижения к максимальному числу 255 мы смещаемся в сторону более белой части изображения. Вся матрица будет выровнена (преобразована в одномерный массив): все строки объединяются одна за другой, как показано на рисунке ниже:

Формирование одномерного массива пикселей

Формирование одномерного массива пикселей

Вторая строка прикрепляется к первой, а третья — ко второй, таким образом создаётся единый одномерный массив пикселей который подаётся скрытому слою свёрточной нейронной сети. Также можно сказать, что изображение — это просто массив пикселей.

Любой цвет можно представить в виде комбинации трёх цветов: КРАСНОГО, СИНЕГО и ЗЕЛЁНОГО. Если изображение цветное, то это RGB-изображение а не в оттенках серого. Мы можем его представить как три двумерные матрицы, сложенные друг на друга. Каждая из этих трёх матриц соответствует одному каналу цвета: Red (красный), Green (зелёный) и Blue (синий). Таким образом, у нас одна матрица — для красного цвета, другая — для зелёного и третья — для синего цвета, и они преобразуются в соответствующие одномерные массивы. Это означает, что конечное цветное изображение представляет собой комбинацию этих массивов, образующих единый трёхмерный массив, как показано ниже:

RGB-изображение

RGB-изображение

Каковы области применения компьютерного зрения?

1. Распознавание лиц

Это мощный инструмент обеспечения безопасности, используемый в наши дни, чтобы «видеть» тех, кто пытается получить доступ к ценным ресурсам. Пример: блокировка экрана мобильного устройства. Алгоритмы компьютерного зрения обнаруживают черты лица на изображениях и сравнивают их с базой данных профилей, в которых хранятся оцифрованные лица. Правоохранительные органы также используют технологию распознавания лиц для идентификации преступников в видеопотоках.

2. Автономный транспорт

Самоуправляемым автомобилям требуется информация о своём окружении, чтобы решить, как себя вести. Камеры снимают видео окружения автомобиля с разных углов. Это видео подаётся в программное обеспечение компьютерного зрения. Изображения обрабатываются в режиме реального времени для поиска границ дорог, дорожных знаков, а также для обнаружения других транспортных средств, объектов и пешеходов. Затем автономный автомобиль может двигаться по своему пути и, надеюсь, без аварий.

3. Поиск изображений и распознавание объектов

Теория компьютерного зрения используется для идентификации объектов на изображениях, поиска по каталогам изображений и извлечения информации из изображений.

4. Робототехника

Большинству роботизированных машин (часто на производстве) необходимо видеть своё окружение, чтобы выполнять свои задачи.

5. В области медицинских технологий

Алгоритмы компьютерного зрения позволяют обнаружить злокачественные родинки на коже. Это может быть полезно при использовании рентгеновских лучей и МРТ-сканирования. Это также может помочь точно диагностировать заболевания, своевременно выявлять болезни и интенсифицировать лечебные процессы.

Заключение

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

Go to the profile of Rachel Lea Ballantyne Draelos

Во всех этих приложениях компьютер должен «видеть» мир: он принимает числовое представление электромагнитного излучения (например, фотографию) и вычисляет, что означает это излучение.

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

Ссылки

На практике цветные изображения представлены тремя сетками чисел, сложенными друг с другом: одна сетка для красного, одна сетка для зеленого и одна сетка для синего. Элементы каждой сетки определяют интенсивность красного, зеленого или синего цвета для каждого пикселя, используя число от 0 до 255. Для получения дополнительной информации о том, как представлены цветные изображения, см. цветовую модель RGB.

В оставшейся части этого поста мы будем использовать упрощенный пример смайлика, показанный выше.

Выходные данные CNN

Выход CNN зависит от задачи. Вот некоторые примеры входов и выходов CNN для различных задач классификации:

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

Основная идея

В CNN различные «фильтры» (маленькие сетки чисел) скользят по всему изображению, осуществляя операцию свертки. Различные фильтры с разными числами будут обнаруживать различные аспекты изображения, например, горизонтальные или вертикальные края. В CNN используются много разных фильтров, чтобы идентифицировать разнообразные аспекты изображения.

Эта анимация показывает фильтр 2 x 2, скользящий по верхней части изображения смайлика:

Составляющие CNN

Подобно нейронной сети с прямой связью, CNN состоит из «слоев».

Один слой в CNN включает в себя три вида вычислений:

  • Свертка: это сердце CNN. Операция свертки использует только сложение и умножение. Сверточные фильтры сканируют изображение, выполняя операцию свертки.
    Активация: это нелинейная функция, применяемая к выходу сверточного фильтра. Добавление нелинейности позволяют CNN изучать более сложные отношения (кривые вместо линий) между входным изображением и выходным классом.
    Объединение в пул: это часто «максимальное объединение», которое просто выбирает наибольшее число из небольшого пакета чисел. Объединение в пул уменьшает размер изображения, тем самым уменьшая объем необходимых вычислений и делая CNN более эффективным.

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

Если в конце есть полностью соединенные слои, CNN также обучится, какие значения использовать в полностью соединенных слоях.

Сверточный фильтр

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

Обратите внимание, что на практике числа, выбранные для случайной инициализации, будут меньше, и они не все будут целыми числами (например, случайно инициализированные значения фильтра могут быть -0,045, 0,234, -1,10 и т. д.).

Сверточная операция

Вот как работает свертка. Давайте возьмем крошечный фрагмент изображения смайлика и применим к нему свертку, используя фильтр 2 x 2 со значениями (1, 2, 3 и -1):

Для примера рассмотрим:

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

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

Вот выход свертки для красной области и фильтра, который мы выбрали:

Функция активации

Как только мы закончим выполнение свертки, мы применяем «нелинейность». Это нелинейная функция, которое позволяет CNN изучать более сложные шаблоны в целом. Одной из популярных функций активации является ReLU, или «выпрямленная линейная единица». Звучит причудливо, но на самом деле просто: вы заменяете каждое отрицательное значение на ноль.

Объединение в пул

Здесь мы выполним «максимальное объединение», где мы выбираем наибольшее значение в каждом окне объединения.

Также возможно выполнить другие виды объединения в пул, такие как усреднение пула, где вместо максимума мы взяли бы среднее значение всех значений в окне пула. Объединение в пул полезно, потому что оно уменьшает размер представления, тем самым уменьшая объем вычислений, требуемый в целом.

В одном сверточном слое содержится много фильтров

В приведенном выше примере мы применили свертку, нелинейность и объединение, чтобы перейти от квадрата 4 x 4 пикселей к представлению 2 x 2, сосредоточив внимание только на одном фильтре. Однако в действительности один сверточный слой использует много разных фильтров, все одного размера, но с разными значениями.

Допустим, в нашем первом сверточном слое мы применяем 32 разных фильтра, каждый из которых имеет размер 2 x 2. Тогда общий выходной размер для всего слоя составляет 2 x 2 x 32. Каждый фильтр обнаруживает различные аспекты изображения, потому что каждый фильтр содержит разные значения.

В CNN есть много слоев

Основная идея CNN с несколькими слоями состоит в том, что фильтры в нижних слоях (ближе к входному изображению) будут изучать простые характеристики, например, где находятся края, а фильтры в верхних слоях (более абстрактные) будут изучать сложные характеристики, например, как человеческие лица выглядят на фотографиях или как выглядит пневмония на рентгенограмме.

Визуализация сверточных фильтров

Существуют разные способы визуализации того, что видит CNN, с помощью разных фильтров. На рисунке 1 этой статьи показано, как выглядят фильтры первого уровня сети CNN под названием AlexNet при взгляде на изображение кота. Эта статья и эта статья приводят дополнительные фильтры визуализации. Видео «Deep Visualization Toolbox» от Jason Yosinski, безусловно, стоит посмотреть, чтобы лучше понять, как CNN объединяют простые функции (например, края) из нижних уровней для обнаружения сложных объектов (таких как лица или книги) с фильтрами верхних уровней.

Выводы

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

Представленное изображение

  • У Моны Лизы были брови и ресницы, но они, вероятно, были удалены случайно, когда реставратор чистил глаза Моны Лизы. считается более ранней версией Mona Lisa Леонардо да Винчи, изображающей ту же картину. Это более широкая картина, чем знаменитая Мона Лиза, и включает колонны по обе стороны от изображения.
  • Мона Лиза в настоящее время имеет желтовато-коричневый оттенок. Тем не менее, различные исследования показывают, что раньше Мона Лиза имела гораздо более яркие цвета с ярко-красными и синими оттенками. У нее также, вероятно, есть шуба на коленях.

Дополнительные ссылки:

За последние несколько лет я составила список особо полезных ресурсов, связанных с CNN. Вот они!

Задумывались ли Вы когда-нибудь, как компьютер находит нужные для обработки объекты из видеопотока? На первый взгляд, это выглядит задачей из разряда «высокого» программирования с применением огромного количества формул из математического анализа, дискретной математики и т.д., требует огромного количества знаний, чтобы написать хотя бы маленькую программу наподобие «Hello, world» в мире распознавания образов на видео. А если бы Вам сказали, что на самом деле сейчас осуществить вход в мир компьютерного зрения гораздо проще и после прочтения этой статьи Вы сможете написать свою программу, которая научит Ваш компьютер видеть и детектировать лица? Также в конце статьи Вас ждет бонус, который может повысить безопасность Вашего ПК с помощью компьютерного зрения.

Для того, чтобы Ваш компьютер начал понимать, что Вы ему показываете что-либо похожее на лицо, нам понадобится:

  • Компьютер;
  • Web-камера;
  • Python 3;
  • Ваш любимый редактор кода (PyCharm, Jupyter и т.д.).

Итак, после того, как Вы собрали всё необходимое по списку выше, мы можем приступить к непосредственному написанию нашей программы для распознавания лиц.

Для начала, качаем необходимые библиотеки Python с помощью команды в Командной строке:


Коротко о том, зачем они нам нужны:

OpenCV. Эта библиотека – основа почти каждого современного проекта по компьютерному зрению. В ней хранятся сотни алгоритмов компьютерного зрения и обработки изображений. Изначально написана на C/C++, но в дальнейшем была переписана и на Python ввиду большой востребованности ее на данном языке.

Numpy. Будет помогать с внутренними вычислениями библиотеки OpenCV.

После окончания установки нужных нам библиотек открываем наш любимый редактор кода и начинаем писать нашу программу:

  1. Присоединяем библиотеку компьютерного зрения OpenCV

Сохраняем наш файл, запускаем из командной строки с помощью python имя_нашего_файла.py. Теперь наша программа умеет принимать видеопоток с Web-камеры! А это значит, что мы уже на полпути к тому, чтобы компьютер мог распознавать лица.

4. Давайте сделаем так, чтобы наш компьютер также мог записывать видео в файл:

Указываем кодек для сохранения видео, указываем имя для сохраняемого файла, fps и размеры. Для нашей задачи мы берем кодек XVID.

После того как мы научились брать видео с Web-камеры и сохранять его в файл, то можно приступить к самому интересному – распознаванию лиц в видеопотоке. Для нахождения лица на кадрах мы будем использовать так называемые Признаки Хаара. Суть их в том, что если брать прямоугольные области на изображении, то по разности интенсивностей между пикселями смежных прямоугольников можно выделить особенности, присущие лицам.

Например, на изображениях с лицами область вокруг глаз темнее, чем около щек. Поэтому, одним из Признаков Хаара для лиц можно назвать 2 смежных прямоугольника у щек и глаз.

Существует большое количество других, более быстрых и точных методов детекции объектов на изображении, но для понимания общих принципов нам пока будет достаточно знать лишь Признаки Хаара.

Разработчики OpenCV уже провели работы по определению Признаков Хаара и предоставили всем желающим результаты для возможностей обработки видеопотока.

Приступим к написанию детектора лиц с нашей Web-камеры:

6. Первым делом, получим наши Признаки Хаара и определим параметры для захвата видеопотока. Файл с Признаками лежит по пути, где устанавливаются библиотеки Python. По умолчанию, они находятся в папке,

где X – Ваша подверсия Python 3.

7. Далее, в цикле будем поочередно считывать кадры с Web-камеры и передавать его нашему детектору лиц:

8. Теперь объединим всё в одно целое и получим программу, которая захватывает видео с Web-камеры, распознает на нем лица и сохраняет результат в файл:

Все! Вы написали программу, которая является первым шагом в понимании того, как видит компьютер. Дальше можно улучшать распознавание лиц, например, чтобы компьютер узнавал определенных людей на видео с помощью обучения нейронных сетей. Также можно написать детектор, настроенный на распознавание более сложных объектов (например, отслеживание дорожного трафика) с возможностью их анализа. А также решать другие, не менее интересные задачи компьютерного зрения.

Применим программу на практике – будем отслеживать входы под учетной записью.

  1. Зайдем в Планировщик заданий (можно найти через стандартный Поиск Windows);
  2. Создадим Простую задачу, дадим ей название и краткое описание;

3. Нажимаем Далее и попадаем в пункт Триггер. Здесь выбираем событие, при котором будет происходить запуск нашего задания. Выбираем «При входе в Windows»;

4. Далее в действии указываем «Запустить программу»;

5. В Действии указываем путь до python.exe, а в Параметрах – путь до нашей программы:


Готово! В результате, при входе в систему будет записываться лицо вошедшего под учетной записью, а видео будет сохранено. Таким образом, можно отслеживать, кто работал за компьютером в Ваше отсутствие, с сохранением записи доказательств.

Читайте также: