Jump to content
Compvision.ru

2expres

Пользователи
  • Content count

    102
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by 2expres

  1. Возьми сборку зераное https://ffmpeg.zeranoe.com/builds/ качаешь 2 архива shared и dev перед этим выбрав 32 или 64 бит. В архиве dev хранятся библиотеки (.lib) и include. Архив shared содержит необходимые .dll которые необходимо будет переписать в папку с вашей будущей программой - это для Windows.
  2. Я использовал dxva2. Работает и с потоком и с файлами h264. Ты сам собирал ffmpeg или брал готовую сборку?
  3. Пытался разобраться с методами, искал коэффициент, который отвечает за меру похожести. Например, при 0 коэффициенте должно быть абсолютное совпадение, при 1 очень приблизительное совпадение. Такого коэффициента в формулах нет. Проверил практически, создал картинку из 2-х цветов. Затем осветлил и затемнил, получив еще 2 картинки. Результаты: Method 0 Perfect, Base-Half, Base-Test(1), Base-Test(2) : 1 / 0.974776 / -0.000545 / -0.000545 Method 1 Perfect, Base-Half, Base-Test(1), Base-Test(2) : 0 / 0.221103 / 1.3576 / 1.3576 Method 2 Perfect, Base-Half, Base-Test(1), Base-Test(2) : 1.3576 / 1.3576 / 0 / 0 Method 3 Perfect, Base-Half, Base-Test(1), Base-Test(2) : 0 / 0.0956222 / 1 / 1 Т.е. гистограммы картинок абсолютно не похожи, но картинки то похожи по цвету! Я сделал вывод, что сравнение на подобие картинок с помощью гистограмм в OpenCV не работает, можно сравнивать, только абсолютно одинаковые картинки. Буду проверять свою следующую методику: Полученную гистограмму, буду размывать по методу Гаусса. Это и будет коэффициентом на подобие, малая размывка гистограммы - проверка на одинаковость, сильная размывка гистограммы - проверка на подобие. Затем применяю любой метод расстояний, даже Евклидово расстояние. Если при сравнении цвета находятся в соседних корзинах, то размывка перебросит часть значений по соседним корзинам и гистограммы начнут совпадать. Может я не вижу подводных камней?
  4. Нужный, спасибо за развернутый ответ. Заинтересовала работа с гистограммами цветов. На практике столкнулся с трудностями, даже правильное определение цвета авто не такое простое дело. Честно, запутался в интегралах, расстояниях Кульбака-Лейблера и Бхатачарья. Интересует сравнение двух гистограмм на подобие. Беру примитивный пример: картинка из двух цвета. Из первой картинки делаю вторую, меняя контрастность (можно яркость). Их гистограммы приведены на рисунке. Если при сравнении применить Евклидово расстояние, то получаю, что картинки сильно отличаются. А мне нужно получить расстояние, близкое к 0. Выше перечисленные методы дадут результат, близкий к 0 и как?
  5. Фильтры Калмана также исходят из этого предположения. Для авто это может и подходит, для людей нет. Пример: спортсмен под номером 2 догоняет номер 1 и два объекта некоторое время находятся вместе, затем один обгоняет другого. Фильтр Калмана даст однозначный результат, что это номер 2. А это не всегда так, номер 1 мог ускорится. Другой пример у меня в видео по теме. Сцена на которой артисты или танцоры. Их траектории движений абсолютно не предсказуемы. Нужны признаки объекта по которым их можно различать.
  6. Тема старая, но интересная. Сейчас продолжаю тему "Трекинг человека". На всех видео выше камера закреплена, поэтому можно применить детектор движения, в котором кадры сравниваются с предварительно вычисленным задним фоном - BackGround. Фон адаптируется сравнением с кадром, если интенсивность кадра больше фона, то к фону добавляем константу, меньше - отнимаем. Чем больше константа, тем быстрее обновляется фон. Я выбрал 0,5 и при 25 кадрах в секунду у меня фон полностью обновляется через 10-20 сек (зависит от контрастности кадров).Если изображение 3-канальное (R,G,B), то и BackGround также должен иметь 3 канала. Каждый поступающий кадр вычитаю с фоном, возвожу в квадрат и суммирую по 3 составляющим. Суммарную разницу сравниваю с константой-порогом, больше порога - объект, меньше - фон. Получаю бинарное черно-белое изображение, которое сегментирую. При сегментации использую третью константу-минимальное количество точек в сегменте, которая зависит от поставленной задачи. Хотя для слежения за пешеходами можно дополнительно применять и размеры сегмента, причем высота должна быть больше, чем ширина. Выполняю привязку полученных сегментов к объектам. Для этого сравниваю таблицу объектов с таблицей сегментов и по минимальному расстоянию делаю назначения. Все просто, если объекты разделены и не пересекаются. Сложности начинаются, когда объекты сходятся в один объект, а затем расходятся, при этом путается нумерация объектов. Получается, что нужно предварительно вычислить какие-то признаки объектов, по которым я их мог бы различать. Как это можно сделать, желательно примитивным способом и с высоким быстродействием?
  7. Добрый день! Необходимо отслеживать перемещения людей (идеально головы человека), при постоянно изменяющемся освещении. Цвет может быть красным, зеленым, синим, дневное освещение и может постоянно меняться. Можно ли стандартными методами и какими решить данную задачу?
  8. Многое стало понятно, введу максимальную скорость перемещения объекта, что позволит отсекать глюки. Возникли новые технические трудности: информация с потоков может поступать не по-порядку. Вначале информация о настоящем кадре, а затем о предыдущем. Необходимо еще реализовать буфер для выравнивания последовательности поступающих кадров.
  9. Рад Вас видеть! Хорошая идея зная какие ветки люстры включены подставлять нужный фон, заранее сформированный. Проблема в том что мы выполняем часть работы: даем команду какую ветку включать в соответствии с перемещаемыми людьми. Другие ребята делают еще какие то эффекты (меняют цвета, освещенность) и у меня нет информации о фоне. Спасибо Nuzhny за Ваши ответы! Можно для меня разжевать? Мне действительно не понятно. Венгерский алгоритм - это задача о оптимизации. После обработки кадра из 3 МБайт(Full HD) информации я получаю массив не более 256 байт (1 объект 16 байт), поэтому могу позволить сделать не оптимально. Хочу понять суть. Получается я должен сравнить 2 соседних кадра. Предположим на 1-кадре 4 сегмента, а на 2 кадре тоже 4 сегмента. Я должен назначить назначить привязку сегментов к объектам. На первом кадре назначаю номер сегмента равным номеру объекта. На втором кадре допустим для простоты (выбор метрики сейчас не важен можно площадь пересечения или как предлагают по ссылке искать коэффициенты https://cyberleninka.ru/article/v/algoritm-trekinga-obektov-v-realnom-vremeni-s-obrabotkoy-oshibok) ищу минимальное расстояние между центрами сегментов и объектов. Далее присваиваю сегменту номер ближайшего объекта. С этим понятно. Понятно, если появился или исчез объект на краях кадра. А что делать, если появился или исчез сегмент в центре кадра? Как определить это глюк, или 2 человека рядом дошли до середины сцены и разделились? Или наоборот зашли с разных концов сцены и объединились?
  10. Выполнил включение освещение сцены чисто по детектору движения, без трекинга. Камера работает в ИК-диапазоне. Для управления освещением использовал midi-протокол (библиотека rtmidi), виртуальный драйвер midi, который управляет освещением сцены (стандартная программа QLC+). На видео Вы можете видеть квадрат на полу, который имитирует размеры люстры. Вот что получилось: Обрабатываются все 25 кадров в секунду. Хотелось бы реализовать трекинг. Но приведенная ссылка является научной статьей, у которой еще 50 ссылок на другие статьи. Мне необходимо усреднять 5 соседних кадров для устранения дерганий и пропадания объекта. Как правильно это сделать?
  11. Это видео облегченные условия. Здесь прекрасно работает мой детектор движения. Но значительно быстрее, обрабатывает 25 кадров с загрузкой 15%. Но с резким изменением освещенности он не работает.
  12. Интенсивность, к сожалению будет тоже разной (интенсивность подсветки разная). На мой взгляд нужно сравнивать 2 соседних кадра и каким то образом не сравнивать кадры с большими изменениями. Но как будет работать при большом количестве людей? kmeans - тормознутый алгоритм, а нужен реал-тайм. Могу сбросить на почту. Напишите в личку.
  13. А можно ли вашу программу запустить на этом видео? Если работает - могу дать Вам контакты заказчика.
  14. Я не знаю, как построить детектор движения с обычной камерой в условиях резкого изменения освещения. Я сам пришел к выводу, что нужна камера в ИК-диапазоне, но нужно несколько дней доставка/установка/запись видео. Но остается теоретический вопрос, можно ли построить детектор движения с обычной камерой в таких условиях?
  15. Потолок этого помещения состоит из множества разноцветных люстр и прожекторов. Когда человек перемещается необходимо управлять освещением и подсвечивать человека. Трудность состоит в том, что для детектора движения невозможно создать background из-за постоянно изменяющегося освещения. Для любого объекта, который перемещается в кадре, нужно вычислять координаты и управлять освещением. Людей может быть много, они могут уходить и приходить.
  16. Для создания потока h.264 внутри камеры работает кодер на основе детектора движения, который отлавливает изменения между кадрами. Декодер восстанавливает кадры. Как можно получить информацию с декодера об изменениях в кадре?
  17. 1. Это студенческая задача? 2. Это одно изображение или есть множество таких изображений? 3. Если есть множество таких изображений, то эту задачу решается применением нейронных сетей, т.к. быстродействие здесь не требуется.
  18. Я согласен интересный метод, для провода или ветки без листьев. Качание ветки с листьями дает большую плотность и таким методом не возможно отличить от движущегося объекта, в котором тоже не все отличается от фона (например, стекла автомобилей могут не отличатся от асфальта, который был получен на фоне). Я выбрал максимальный битрейд 15 000 кбит/сек и 25 кадров в секунду для FULL HD, так как хочу получить максимальное качество. Реально в диспетчере задач вижу загрузку ~1000 кбит/сек. Я использую DXVA2. Еще могу d3d11. Разницы между ними не увидел. Чем они отличаются? Так как я работаю на ассемблере, то декодер выполнил в виде загружаемой *.dll. Декодер меняться не будет, он на все случаи жизни. Я запускаю 6 потоков: декодер, управляющий поток и 4 потока обработки кадров, т.к. в Intel Atom Z8350 имеет 4 ядра. Декодер заполняет одну из 4 областей памяти и передает сообщение (setenent) управляющему потоку. Управляющий поток дает разрешение на обработку в один из 4 обработчиков. По окончании обработки обработчик передает сообщение в управляющий поток.
  19. Вы оказались правы получается много векторов и смысла их использовать для детектора движения нет, потому что это получается не быстро. Следуя заветам Смородова резко сократил объем информации, проредив кадр в 4 раза по высоте и 4 раза по ширине. Причем, прореживаю по ширине методом суммирования пикселей, чтобы иметь максимальную информацию о кадре (на быстродействии это не сказывается). Из последовательности сокращенных в 16 раз кадров формирую фон. Фон формируется за ~ 25 сек (600 кадров). Каждый кадр сравнивается с фоном, производится корректировка фона и получаю изображение разницы с фоном. Разница сегментируется. Если в сегменте меньше 1000 пикселей (исходное 16 000 пикселей), то такой сегмент отбрасывается. Для больших сегментов получаем прямоугольники, которые рисую на картинке. В этих прямоугольниках в дальнейшем буду искать автомобильные номера, что резко сократит объем обрабатываемой информации. Так как у меня примитивный детектор движения, получаю ложные срабатывания когда ветер качает ветки деревьев. Можно ли простыми методами от этого избавится? Изображение с FFmpeg я получаю (почему то?) в формате NV12. Преобразовывать в RGB это все время. Поэтому я использую для детектора движения интенсивность (оттенки серого) и таблицу цветов, для быстрого вывода на экран использую только интенсивность. Для определения номеров цветность не нужна. Итого: Intel Atom Z8350 загрузка процессора около 15%! Камера Full HD иногда дает глюки, на видео видно (1 мин 16 сек). Я думал что это из-за моих преобразований на FFmpeg. Подключив VLC этих глюков там как бы не больше. С чем это может быть связано?
  20. Основная проблема у Вас - неравномерное освещение. Вам нужно использовать бестеневую лампу, чтобы на изображении не было бликов. Далее нужно бинаризировать изображение с помощью адаптивного порога (я использовал 17х17 -8). После удаления мелких сегментов можно по вертикальным линиям определить масштаб (сколько пикселей в одном мм) изображения. Зная масштаб можно определить размеры измеряемой детали. Результат после бинаризации.:
  21. Nuzhny спасибо!!! Для получения motion vectors нужно использовать av_frame_get_side_data. Работает ли фильтр, если кадры декодированы аппаратно с dxva2? Я подключил dxva2 для декодирования h.264 (Загрузка процессора близка к 0). Но копирование из памяти dxva2 в память процессора av_hwframe_transfer_data занимает много процессорного времени (до 70% INTEL ATOM Z8350 на Full HD). Занимает ли этот фильтр много времени? Для меня основной смысл в применения motion vectors - это высокое быстродействие детектора движения. Я хочу применить его для обнаружения движущегося автомобиля в кадре. P.S. Можно из dxva2 переписывать не весь кадр, а часть кадра?
  22. Мне для аппаратного декодирования нужен qsv (Intel Quick Sync Video). Но на сайте ffmpeg читаю: Ensure the target machine has a supported CPU. Current versions only support gen8/gen9 graphics on expensive CPUs ("Xeon"/"Core i" branding). The same graphics cores on cheaper CPUs ("Pentium"/"Celeron"/"Atom" branding) are explicitly disabled, presumably for commercial reasons. Т.е. для Pentium и процессоров ниже отключена аппаратная поддержка по коммерческим причинам. cv::CAP_MSMF - не работает с rtsp потоком (Хотя Microsoft Media Foundation вроде ж должна поддерживать). Что применить???
  23. У меня процессор Intel Pentium n3710 с графическим ядром INTEL HD GRAPHICS. Если верить данной таблице https://www.wikizero.com/en/Intel_Graphics_Technology, то данное графическое ядро позволяет декодировать 2k 30 кадров в секунду. Открываю файл 1080p, кодек h264 с принудительно заданным backend ffmpeg: cv::VideoCapture cam( "2.mp4", cv::CAP_FFMPEG); Загрузка процессора от 25 до 60%. Открываю данный файл, используя Microsoft Media Foundation: cv::VideoCapture cam( "2.mp4", cv::CAP_MSMF); Загрузка процессора от 10 до 25%. Почему так происходит?! Насколько я читал ffmpeg использует аппаратное декодирование.
  24. Я понимаю, что сейчас в моде применение нейронных сетей и обучение. Но любой метод имеет свои плюсы и недостатки. Так же и мой подход (сегментация+контурный анализ) имеет свои плюсы и минусы. Мне требуются качественные кадры не хуже чем в папке Короля. Но я на этой папке тестировал https://www.openalpr.com/cloud-api.html Это современная программа на нейронных сетях. Очень классно определяет едва видимые номера (высота символов до 6 пикселей). Но на папке Короля, она хватило сил проверить только по букве А (~634 фото) она правильно определила 87%. Со средним временем определения 600 мс на их сервере. Создалось впечатление, что она может видеть едва различимые номера и пропустить явный номер. Применение своего метода вижу в 3-х вариантах: 1) Дополнение к "серьезной" программе для улучшения показателей. 2) Распознавание номера внутри камеры (Смарт-камера), например, на Intel Atom Z8350. 3) Недорогое решение для парковок, моек, стоянок с камерой за 50 баксов и сервером за 80 баксов https://ru.aliexpress.com/item/Z83II-Mini-PC-Windows-10-Intel-Atom-X5-Z8350-Quad-Core-2-4G-5-8G-WiFi/32843080625.html?spm=a2g0v.search0302.3.10.3dc52b62XmAJcN&ws_ab_test=searchweb0_0,searchweb201602_0_10084_10083_10887_10307_321_453_322_454_10902_10618_536_10065_317_537_10068_319_10059_10103_10884_10696,searchweb201603_0,ppcSwitch_0&algo_pvid=fb3d334a-aa48-40f5-a05c-df0e49103814&algo_expid=fb3d334a-aa48-40f5-a05c-df0e49103814-1
×