No Image

Как вывести изображение с камеры на монитор

СОДЕРЖАНИЕ
2 831 просмотров
16 декабря 2019

Выводим изображение с камеры на монитор/телевизор

Мы общаемся со многими клиентами, которые ищут решение для отображения качественного видео на мониторе (или телевизоре) с одной или нескольких видеокамер. Некоторые из этих клиентов не заинтересованы в записи видео на видеорегистратор. Они просто хотят, чтобы изображение на мониторе просматривалось в реальном времени. Другие используют видеорегистратор, но они хотят, чтобы один или несколько мониторов, постоянно отображали в режиме реального времени с определенных камер. Мы работали над многими из этих проектов с заказчиками систем видеонаблюдения для бизнеса и дома и сегодня расскажем про 4 наиболее распространенных решения по выводу изображения с видеокамеры на монитор или телевизор.

Вот 4 решения для рассмотрения:

  • Камера видеонаблюдения с монитором — если вы ищете систему, которая включает в себя камеру безопасности и монитор, это то, что вам нужно.
  • Конвертер BNC в HDMI — если вы хотите использовать свой собственный монитор или телевизор, эти системы поставляются с камерой HD и конвертером HDMI, чтобы вы могли видеть изображение с камеры в режиме реального времени на любом телевизоре.
  • Видеомультиплексор — Хотите отображать более одной камеры на экране? Видеомультиплексоры теперь работают с HD-камерами 1080p и выпускаются в 4-х, 9-ти и 16-ти канальных моделях. Выход HDMI делает их совместимыми практически с любым телевизором.
  • Видеорегистратор с выходом под монитор — Они имеют выход, который не зависит от основного дисплея DVR.

Эти решения подробно объясняются ниже.

Камера слежения с монитором

Это, безусловно, самое простое решение, поскольку оно использует наименьшее количество деталей. Это камера и монитор, которые изначально совместимы с разъемом коаксиального кабеля BNC / видеоформатом камеры.

Вот как это работает:

  1. Система включает в себя готовый кабель, который обеспечивает как видео, так и питание. Коаксиальная часть кабеля имеет предварительно присоединенные разъемы BNC.
  2. Один конец коаксиального кабеля подключается к выходу BNC камеры. Кабель питания подключается к видеовходу камеры.
  3. Система также включает монитор BNC , совместимый с HD через коаксиальные камеры (AHD, HD-TVI, HD-CVI). Другой конец коаксиального видеокабеля подключается к видеовходу BNC на мониторе. Кабель питания на этом конце подключается к отдельному источнику питания для камеры, а затем к стандартной электрической розетке.

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

Конвертер BNC в HDMI

Если вы хотите использовать стандартный телевизор высокой четкости с входом HDMI для отображения в реальном времени вашей камеры, преобразователь BNC в HDMI HDCV-3-T может быть лучшим выбором для Вас. Одним из преимуществ этого решения является то, что вы можете использовать любой телевизор или монитор с входом HDMI.

HDCV-3-T можно использовать для подключения практически любой камеры безопасности HD BNC к любому монитору HDMI TV.

Вот как это работает:

  1. Коаксиальный кабель RG59 с разъемами BNC используется для подключения камеры безопасности к входу преобразователя.
  2. Кабель HDMI используется для подключения выхода HDMI преобразователя к входу HDMI телевизора.
  3. Эта система может использоваться со всеми типами камер, включая наружные, купольные, с/без ИК-подсветки.

Видеомультиплексор

Если вы хотите смотреть видео в реальном времени с более чем одной камеры на одном телевизоре/мониторе, эти мультиплексоры видеонаблюдения являются лучшим решением. Они доступны в 4, 9 и 16 канальных моделях.

Вот как это работает:

  1. 4 камеры видеонаблюдения подключены к 4-канальному мультиплексору с использованием кабеля RG59.
  2. Видеовыход HDMI мультиплексора подключен к входу HDMI телевизора.
  3. Пользователи могут управлять выводом на дисплей с помощью беспроводного пульта дистанционного управления или кнопок на мультиплексоре.
  4. Пользователи могут переключаться между несколькими камерами и полноэкранным изображением одной камеры.

Система безопасности DVR с выходом для монитора

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

Видеорегистраторы имеют выходы под монитор HDMI и VGA, которые можно настраивать независимо. Это позволяет настраивать изображение с камеры на одном мониторе и просматривать элементы на другом.

Эти видеорегистраторы выпускаются в 4-канальных, 8-канальных и 16-канальных моделях. Выходной сигнал может быть сконфигурирован для отображения одной камеры или любой комбинации нескольких камер. Представление может даже быть настроено для поворота на разные виды.

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

Есть вопросы? Нужно индивидуальное решение?

Многие клиенты, с которыми мы работаем, предпочитают работать один на один по телефону или по электронной почте с профессиональным разработчиком систем видеонаблюдения. У нас есть целая команда в Территории Безопасности, которая предоставляет бесплатные консультационные услуги. Мы проектируем системы видеонаблюдения для бизнеса, правительства и дома уже более 10 лет. Свяжитесь с нами! И Мы поможем реализовать проект по монтажу системы видеонаблюдения любой сложности.

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

Самое простое, что приходит на ум в такой ситуации – это использование удлинителей HDMI по кабелю UTP. Однако, стоимость таких устройств высока, когда речь идет о расстояниях больше 50 м. Также нужно помнить о щепетильном обращении с такими устройствами – в случае неправильной последовательности включения-выключения узлов схемы с использованием HDMI удлинителей, возможен их выход из строя или некорректное отображение на мониторе. К тому же не стоит забывать о необходимости использования качественного кабеля UTP 6 cat. Да и управление камерами также хотелось бы иметь, например, увеличить картинку, а при таком решении у Вас будет только изображение.

Рассмотрим случай, когда используются IP камеры и сетевой видеорегистратор (NVR). Решения в такой ситуации просты, что обусловлено IP технологиями – подключите в сеть компьютер с клиентской программой (например, iVMS-4500 для устройств Hikvision) или используйте для вывода изображения веб браузер. Если не хотите использовать компьютер, то можно установить дополнительный видеорегистратор, в который также нужно добавить существующие IP камеры. Получается схема, когда оба регистратора работают одновременно с одними и теми же IP камерами, как показано на рисунке:

Ну а если используются HD-TVI или аналоговые камеры и видеорегистратор (DVR) Hikvision или HiWatch, тогда что? — спросите Вы. Использовать дополнительный регистратор и к нему также подводить коаксиальный кабель от каждой видеокамеры? Совсем нет. Для вывода изображения на большом расстоянии на дополнительном регистраторе мы можем использовать цифровые видеоканалы с первого регистратора.

Далее подробно опишем, как это сделать. В качестве примера первого регистратора используется HiWatch DS-H104G, к которому подключены три HD-TVI камеры. Дополнительным регистратором будет HiWatch DS-H108G. Оба регистратора подключены в одну IP сеть. Регистратор HiWatch DS-H104G имеет ip адрес 192.168.1.33.

1. Заходим в настройки дополнительного регистратора HiWatch DS-H108G через веб браузер Internet Explorer и переходим в раздел Система->Управление камерами. Переключаем три канала в режим IP (снимаем галочки) и сохраняем:

Далее, регистратор перегрузится;

2. Переходим в раздел Система->Управление камерами и выбираем вкладку «IP камера» и нажимаем на кнопку «Добавить».

3. В появившемся окне указываем данные основного регистратор HiWatch DS-H104G – ip адрес 192.168.1.33, пароль и нажимаем на кнопку OK:

4. В следующем окне устанавливаем галочки на цифровых каналах, которые должны быть добавлены в дополнительный регистратор. В нашем случае используются три HD-TVI камеры, которые подключены к 1-3 каналам на основном регистраторе HiWatch DS-H104G:

5. Камеры добавлены в дополнительный регистратор:

В чем преимущества использования дополнительного видеорегистратора для решения описанной задачи?

  • Стоимость. Дополнительный регистратор будет дешевле удлинителя HDM (на расстоянии более 50 м);
  • Управление камерами. В случае использования удлинителя у Вас будет только изображение, а с помощью видеорегистратора Вы сможете вывести камеры на весь экран, увеличить изображение;
  • Простота. Нет необходимости прокладывать дополнительный коаксиальный кабель от каждой камеры HD-TVI. Вы используете IP функции видеорегистраторов Hikvision и HiWatch.

Предисловие

Введение

Данная статья не является исследованием, это, скорее, отчет о проделанной работе, в котором я постарался показать основную идею и наиболее интересные и сложные на мой взгляд места. По сложности этот проект следует за «поморгать светодиодом», но имеет огромный потенциал к расширению. В проекте намеренно не используются готовые IP-ядра и стандартные интерфейсы, так как проект изначально планировался как рукописный. Также это поможет немного выиграть по ресурсам и быстродействию. Надеюсь, эта статья будет интересна читателям, а желание увидеть себя на экране через «самодельную камеру» сподвигнет к изучению FPGA.

Проблемы и способы их решения

Для того чтобы понимать, что нас ждет, взглянем на железо и оценим, с какими проблемами нам предстоит столкнуться. Камера OV7670. Камера способна выдавать изображение разрешением 640х480 точек с частотой 30 кадров в секунду в формате RGB565. Для работы камеры необходимо подавать на нее клок частотой 24 МГц. Камера передает пользователю данные по 8 битной шине, а также стробы синхронизации VSYNC и HSYNC. Временные диаграммы работы камеры представлены на рисунке 1.


Рис.1

Информация о цвете передается за 2 такта побайтно. Упаковка данных в байты представлена на рисунке 2.


Рис.2

VGA монитор. VGA это аналоговый сигнал, поэтому подавать цифровые данные на его вход не получится. Но на борту DE-1 имеются 4-х разрядные ЦАП, их мы и задействуем для преобразования цифрового сигнала в аналоговый. VGA с разрешением 640х480 имеет частоту обновления 60 кадров в секунду. Необходимо выставлять данные на ЦАП с частотой 25.175 МГц, а также формировать стробы синхронизации VSYNC и HSYNC. Тайминги для VGA можно посмотреть здесь.

Становится ясно, что частота поступления данных с камеры и частота вывода данных на монитор отличаются, что исключает возможность прямого подключения. Выход из этой ситуации — использование кадрового буфера. Выделим в памяти две равные области: в одну будет записываться текущий кадр с камеры, а из второй извлекаться предыдущий, после окончания записываемого кадра буферы меняются местами. Для хранения одного кадра требуется 640*480*16 = 4.915*10^6 бит, что гораздо больше имеющейся на борту Cyclone II памяти on-chip. Поэтому будем использовать для хранения кадров память SDRAM, расположенную отдельным чипом на плате DE-1. Это позволит нам организовать фрейм буфер для решения технической задачи и даст возможность потренироваться в написании контроллера SDRAM.

Следующая проблема вытекает из решения предыдущей. При использовании памяти SDRAM в нашем проекте необходимо учитывать два важных момента: во-первых, работает память на высокой для нашего дизайна частоте 120 МГц и перед нами появляется новая проблема — передача данных из клокового домена камеры в клоковый домен SDRAM; во-вторых, для достижения максимального быстродействия писать в SDRAM следует целыми транзакциями, которые называются burst. Для решения этих проблем наилучшим способом подходит FIFO, организованное в on-chip памяти FPGA. Основная идея такова: камера на низкой частоте заполняет FIFO, после чего контроллер SDRAM считывает данные на высокой частоте и сразу одной транзакцией записывает их в память.

Вывод данных на монитор организован то такому же принципу. Данные из SDRAM записываются в FIFO, а затем извлекаются на частоте 25 МГц для подачи на ЦАП. После опустошения FIFO операция повторяется.

Самой мелкой проблемой является то, что настройки камеры «из коробки» нас не устраивают, и необходимо их изменить. Самый важный момент, камера выдает данные в формате YUV422, и необходимо поменять его на RGB444. Для обращения к внутренним регистрам OV7670 необходимо будет описать модуль передатчика I2C.

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

  • cam_wrp – модуль принимает данные с камеры и записывает их во входное FIFO;
  • hvsync – модуль вырабатывает стробы для VGA, принимает данные из SDRAM, записывает их во входное FIFO и по стробу подает на ЦАП;
  • sdram_cntr – контроллер SDRAM;
  • FSM_global – автомат управления;
  • camera_configure – модуль конфигурации и управления камерой.

На рисунке 3 приведена функциональная схема дизайна.


Рис.3

Рассмотрим подробнее каждый из модулей.

Модуль cam_wrp

Один из самых простых модулей. Его задача в момент действия строба hsync камеры принимать последовательно по два байта, формировать из них одно двухбайтовое слово и записывать его в FIFO. По сигналу от SDRAM контроллера передать ему все содержимое FIFO.

Для «упаковки» 2-х последовательных байт в одно слово используем сигнал wr_fifo, который инвертируем по клоку (делим частоту на 2). Когда этот сигнал в логической 1, записываем данные в младший байт, когда в логическом 0 — в старший. Также используем wr_fifo, как сигнал записи в FIFO. Кроме шины данных из FIFO выведена шина, на которую выставляется число записанных в него данных. Эта шина подключена к автомату управления. На рисунке 4 представлена временная диаграмма «упаковки» байт в двухбайтовые слова.


Рис.4

Модуль FSM_global

Модуль имеет весьма пафосное название, на деле это несложный автомат всего на 4 состояния, но выполняет он очень важную функцию. Отслеживая сигнал готовности sd_ready SDRAM контроллера, наполненность входного и выходного FIFO, автомат выдает в команды SDRAM контроллеру забрать данные из входного или записать в выходное FIFO. Чтение и запись происходят несколько раньше, чем FIFO полностью заполнится или опустошится. Необходима правильно выбрать уровень заполненности FIFO, чтобы операции с FIFO на высокой частоте не закончились раньше, чем на низкой, — это гарантированно приведет к ошибкам. В части, посвященной SDRAM контроллеру, я приведу рисунок, иллюстрирующий эту особенность.

Модуль SDRAM_contr

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


Рис.5

Подумаем, что мы сможем из него исключить.

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

Во-вторых, так как мы всегда будем записывать и считывать данные вектором длиной 640, можно отказаться от возможности работы с отдельными числами, будем писать только burst.

В-третьих, не надо думать над адресом, мы просто будем инкрементировать его после каждого burst и обнулять в конце каждого кадра. Получившийся граф переходов представлен на рисунке 6.


Рис.6

Стартует контроллер в состоянии idle. Перед началом нормальной работы необходимо провести инициализацию микросхемы памяти (состояние автомата s0_MRS), после чего выставляется флаг mode_flag, контроллер переходит в состояние ожидания, и мы можем записывать и считывать данные. Для этого из модуля fsm_global поступает команда начала чтения или записи, открываем необходимый столбец в выбранном банке (состояние s0_ACT), и далее должно происходить чтение или запись (состояния s0_WRIT, s0_READ). К сожалению, обойтись одним burst не выйдет, глубина столбца в нашем чипе памяти всего 256 16-ти битных слов, а нам необходимо записывать вектор длиной 640. Придется писать за 3 burst, два по 256 и одни на 128. Видно, что половина третьей строки остается пустой, то есть мы нерационально используем ресурсы, но так как недостатка в них у нас нет, я решил не усложнять автомат и смириться с этим.

Что касается адресов, для них выделены разные регистры для чтения и записи, которые инкрементируются перед каждым bust. Таким образом, для записи вектора длиной 640 мы проходим 640*4=1440 адресов. Стробом вертикальной синхронизации камеры или VGA адреса обнуляются для записи и чтения соответственно.

Мы используем двойную буферизацию: в один буфер пишем из другого читаем. Для упрощения один буфер я разместил в банке 0, а второй в банке 1 чипа SDRAM. Банки для чтения и записи меняются местами после окончания приема кадра с камеры. На рисунке 7 представлены временные диаграммы записи одного вектора. Видно, что запись разбита на 3 части: после каждой адрес инкрементируется, вся передача происходит под стробом cur_wr. Для чтения диаграмма аналогична.


Рис.7

На рисунке 8 показано, как происходит запись в SDRAM данных с камеры в сравнении со временем заполнения FIFO. Обратите внимание, что мы начинаем писать в SDRAM, не дожидаясь окончательного заполнения FIFO.


Рис.8

Модуль hvsync

Это один из двух модулей в этом проекте, написанных не мной. Однажды я уже реализовывал похожий модуль, повторяться мне было неинтересно, поэтому я использовал отличный модуль, написанный авторами сайта marsohod.org. В этом модуле нет ничего лишнего, он параметризован и легко может быть настроен для любого разрешения экрана. Я практически не изменял его, добавил только FIFO, подключенное к SDRAM контроллеру, и сигналы обвязки для него. С FIFO выведена шина, на которую выставляется количество записанных в него данных, эта шина подключена к автомату управления по аналогии с входным FIFO. Выход FIFO подключен к wire, которые идут на ЦАП.

Модуль camera_configure

Изначально позволив себе вольность домашнего проекта и невнимательно прочитав документацию, я хотел запустить камеру с настройками «по умолчанию», но оказалось, что без настройки OV7670 передает информацию в формате не RGB565, а в YUV422. Переписывать ничего не хотелось, и я решил, что надо делать все по уму и нормально проинициализировать камеру. Так как камера управляется по I2C, в голову пришла идея использовать NIOS. NIOS с коркой I2C с opencore завести с полпинка не удалось, но я случайно наткнулся на Verilogовский модуль инициализации именно для OV7670. Он так легко встроился в код, что не пришлось практически ничего менять, изменил только одну строку: вместо RGB565 активировал режим RGB444, так-как на плате стоят именно 4 разрядные ЦАП. На рисунке 9 представлена временная диаграмма программного сброса камеры записью числа 0х80 по адресу 0х12.


Рис.9

Демонстрация результата

После того, как все модули написаны, соединяем их вместе в топ-модуле, собираем в Quartus, и можно тестировать. Видео демонстрирует полученный результат.

Мной было выбрано не очень удачное время для съемки — закат и очень яркое солнце, — камера неадекватно реагирует на слишком яркие солнечные блики. Видно, что движущиеся объекты отображаются корректно, дерганий и шлейфов нет. Именно этого я и добивался, используя FPGA, которая позволяет обрабатывать все 30 (а возможности камеры больше) fps малой кровью. Если говорить о четкости изображения, то могу сказать, что текст с листа А4 читается без сложностей, к сожалению, фото с монитора получаются хуже, чем в реальности. На рисунке 10 показан фрагмент листа А4 с документацией на камеру.

"

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

Проблема с чрезмерной зеленожелтостью белого листа, мне кажется, связана с проблемой с балансом белого: съемка производилась в помещении с освещением, далеким от естественного. Также на ситуацию с цветностью могут влиять настройки камеры. Я практически не экспериментировал сними, использовал как magic number.

Заключение

Поставленная задача — вывод изображения с камеры OV7670 на VGA монитор в реальном времени, — решена. Если сравнить результат, полученный в данном проекте с результатом, полученным другими разработчиками, использующими микроконтроллеры или Arduino, видно, что они уступают в скорости отображения движущихся объектов. По трудоёмкости данный проект не превосходит аналогичные, выполненные с использованием микроконтроллера. Человек, обладающий начальными знаниями в разработке дизайна FPGA, может реализовать его за несколько дней. Проект имеет большой потенциал к расширению, возможна фильтрация полученного изображения, распознавание предметов и прочее. Дизайн на чипе Cyclone II занимает следующие ресурсы: LE – 745(4%), memory bits – 32768 (14%), PLL – 1 (25%), Embedded Multiplier — 0(0%), — таким образом, разработчикам остается еще достаточно ресурсов для реализации своих идей.

Послесловие

Что дальше? В дальнейшем я планирую расширять проект, добавив обработку изображения в реальном времени с использованием матричных фильтров.

Выражаю благодарность ishevchuk за советы по содержанию и оформлению статьи и моей девушке за проверку орфографии.

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

" alt=«image»/>

При втором включении камера была неправильно проинициализированна, что привело к неожиданному селфи.

"

Комментировать
2 831 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев