Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Today
  2. Коллеги, поделитесь информацией плиз, если имеется. Встречалась ли кому статься, или может быть тема на форуме, с исследованием отличий OpenCV-методов сегментации фона (Background-Foreground Segmentation Methods)? Или может быть кто-то сам исследовал и сохранил результаты? Готовых методов сегментации в opencv несколько (https://docs.opencv.org/4.1.0/d2/d55/group__bgsegm.html). Но не понятно, в каком случае какой метод предпочтительнее. Так же не получается найти понятного, но не громоздкого описания каждого из реализованных методов. Ссылки на публикации с описанием методов как-то не очень помогают - про каждый написано, что он самый лучший и быстрый, при этом краткое описания сути метода нет. Не хочется изобретать велосипед и городить свой метод, не разобравшись до конца в существующих.
  3. Last week
  4. Earlier
  5. Да, должно работать. Утверждать ничего не буду, но обычно копируется весь кадр. Посмотри, как это делается в ffmpeg: функция dxva2_transfer_data. Там лочится поверхность, что означает копирование всего содержимого из видео в системную память (указатель в LockedRect содержится). А потом уже из системной памяти копируется куда надо. Трудно сказать, что будет происходить на Атоме, почему там такая высокая загрузка на этой операции. Когда лочится поверхность, находящаяся в видеопамяти дискретной видеокарты, то память копируется с помощью DMA, минуя процессор. То есть мы получаем задержку, но процессор остаётся свободен. Тут же дискретной видеокарты нет и память просто копируется из системной в системную? Я не знаю.
  6. 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 переписывать не весь кадр, а часть кадра?
  7. Можно написать декодер ручками на fmpeg и подключить фильтр для получения motion vectors: пример. Только кажется, что игра не стоит свеч: есть работы по детектору движения и трекингу на основе этих векторов, мы сами в АМД пробовали их использовать. Но их качество очень плохое для применения именно в этих целях. И очевидно почему: цельку кодека является не поиск истинного движения или изменений в кадре, а минимизация сжимаемой информации. То есть ему выгодней найти ложные вектора движения блоков, если они в результате дадут меньше передаваемой информации.
  8. Распознавание неба

    Я соглашусь с mult1plexer, сейчас нейросети дадут результат быстрый и устойчивый. Можно начать с U-net, для бинарной сегментации небо-не небо зайдёт хорошо и будет работать быстро. К тому же ему не нужен огромный датасет. Если же хочется классического компьютерного зрения, то всё будет сложнее. Но это точно не уход в серый с градиентами. Я бы всё равно собрал небольшой датасет, обучил бы на нём очень быстрый decision tree из OpenCV, а дальше watershed. Decision tree можно обучать как просто на цвете пикселя, так и градиент туда добавить, если хочется.
  9. Распознавание неба

    На любом фото. Изначально стоит задача искать только полностью голубое небо без облаков. Если облака и могут быть на фото то совсем мало. Изображения без неба конечно могут быть надо это учитывать. Я двигался в сторону нахождения линии где кончаются объекты и начинается небо, но там оказалось слишком сложно и я все еще не могу в этом разобраться. Если найти эту линию то тогда сразу понятно что все что выше её это небо. Спасибо за ответ.
  10. Распознавание неба

    Ищете ответ на вопрос в направлении семантической сегментации. Эта задача уже решена http://mi.eng.cam.ac.uk/projects/segnet/#demo https://github.com/alexgkendall/caffe-segnet
  11. Распознавание неба

    Надо искать небо исключительно на одном этом фото? Или задача стоит более обшно? А облака относятся к небу? Небо может быть розовым-закатным, пасмурным, вечерним, со звёздами? Оно будет на каждом изображении гарантировано? Или могут быть изображения без неба? Странный подход, когда отбрасывается вся цветовая информация, казалось бы, небо голубое и это можно использовать. Я бы начал разработку с классики: создания и разметки наиболее поного датасета. Тогда проблема станет видна во всей своей красе.
  12. Всем привет. Передо мной стоит задача распознать небо на фото. Использую Visual Studio и OpenCV. Из результата хорошо видно что область неба более темная, но что делать дальше? Результатом может быть просто выведение части изображения с небом в отдельный файл. Возможно я спрашиваю что то совсем простое так как новичок в opencv. И за это прошу прощения. Заранее спасибо. int main(int argc, char** argv) { Mat src, src_gray; Mat grad; int scale = 1; int delta = 0; int ddepth = CV_64F; //int c; /// Load an image src = imread("1.jpg");; GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT); /// Convert it to gray cvtColor(src, src_gray, CV_BGR2GRAY); /// Generate grad_x and grad_y Mat gradient_image; Mat grad_x, grad_y; Mat abs_grad_x, abs_grad_y; /// Gradient X //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT ); Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_REPLICATE); convertScaleAbs(grad_x, abs_grad_x); /// Gradient Y //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT ); Sobel(src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_REPLICATE); convertScaleAbs(grad_y, abs_grad_y); pow(abs_grad_x, 2, abs_grad_x); pow(abs_grad_y, 2, abs_grad_y); add(abs_grad_x, abs_grad_y, grad); gradient_image = grad; double ret, thresh = threshold(src_gray, src_gray,50, 255, THRESH_BINARY); imshow("gray", ret); imshow("sobel", src_gray); //imshow("sobel", grad); //imwrite("image01_res2.jpg", grad); //imshow("cobel1", abs_grad_y); //imshow("cobel2", abs_grad_x); imshow("orig", src); waitKey(0); return 0; }
  13. Детектирование глаз

    Эти данные нам прислали для обработки, есть видео где ик включено, но не хватает освещения, часть лица темная. Зрачок не совсем виден, во многих ситуация, например при критических углах.
  14. Детектирование глаз

    я думаю хорошо получилось. Только я бы посоветовал применить ИК, делать анализ закрытия глаза именно по зрачку, а не в момент смыкания век. например как на одном из кадров. Глаз открыт, но детекция закрытости.. + у Вас картинка очень хорошая, в реальности такое наверное не часто будет. Если еще поставить анализ на ГПУ, то вообще будет отлично. Mali-T860MP4 - очень хороший чип
  15. Детектирование глаз

    старая реализация, работа двух камер одновременно, чип rk3399. 1.mp4
  16. Детектирование глаз

    Могу только биометрию показать на расберри. Это серверная реализация нашего модуля https://face.neurocam.com/#/ Это излишне, проще тогда комп. поставить.
  17. Для создания потока h.264 внутри камеры работает кодер на основе детектора движения, который отлавливает изменения между кадрами. Декодер восстанавливает кадры. Как можно получить информацию с декодера об изменениях в кадре?
  18. Детектирование глаз

    А в Raspberry можно же воткнуть тот же Intel compute stick и для запуска на нём сеток?
  19. Детектирование глаз

    нет я просто хотел сравнить со своим без оптимизаций и тд
  20. Детектирование глаз

    Показал, то, что было. Остальное нет смысла показывать, так как там запись с устройства которое поставляется заказчику. Да и толку нет в этом видео., видео можно смонтировать или еще как то....
  21. Детектирование глаз

    самого интересного не увидел детекция глаз открыты\закрыты и ландмарк оптимизированный или он только для скорости?
  22. Детектирование глаз

    На расберри (старое), но тут оценить сложно скорость. Отображение идет через веб браузер, обновление станицы раз в сек.
  23. Я просто сомневаюсь в том что нет другого способа оценить шум кроме как опытным путём т.е. после обучения. Мыже можем по выборки случайной последовательности определить статистическую значимость? Можем. Способ наверняка есть а значит не совсем "везде свои рецепты"
  24. О, тут всё зависит от задачи, для каждой свои рецепты. Шум может быть самый разный: если человек стоит на фоне лестницы, то HOG его не задетектит, потому что градиенты на границе будут ужасными. Такой сэмпл в обучающей выборке тоже будет типа выбросом, который сместит разделяющую гиперплоскость в совсем не ту сторону. Линейный SVM используется потому что быстрый. Тут есть два подхода: либо тщательно подобрать features vector (или сделать для него преобразование типа PCA, PLS....) и использовать линейный SVM или использовать SVM с RBF. Для той же детекции пешеходов используют HOG с линейным SVM, потому что скорость критична.
  25. Насколько я понимаю у нас шум ограничен снизу некоторой величиной может быть вследствии допустимой погрешности статистически значимой выборки. Может просто данных побольше ? Я сам давно окончил ВУЗ. Извините если где туплю. Надо повторить всё это. А PCA не самый хорошийалоритм для того исселедования что приведено в статье. SLPP и LPP показают лучшие результаты чем оригинал при детекции глаз и не только. А Умножение матриц должно хорошо распараллеливаться. P.S А RBF ядро уже стало как я понимаю стандартом для SVM. Линейная зависимость только в академических целях используется.
  26. Тут фишка немного в другом. Я уже говорил, что SVM чувствителен к шуму, особенно линейный. Несколько выбросов могут очень сильно сдвинуть разделяющую гиперплоскость в сторону. Как это можно решить? 1. Можно использовать нелинейный SVM (с RBF ядром, например). Он попытается адаптироваться не только к линейно неразделимым данным, но ещё и к выбросам тоже. Минус нелинейного SVM - он очень медленный. 2. Или же устранить выбросы. Например как? Например, перейти в другое пространство, где этих выбросов практически не будет. Самый простой способ - это PCA (метод главных компонент). Обычно берут многомерный вектор, делают PCA, а после берут оттуда только те компоненты, сумма значений которых составляет 95% от всех данных. То есть откидывают 5% самых малозначащих данных, которые чаще всего являются шумами. Часто получается, что эти 95% важных данных содержат в себе 10-20% компонент. Эта штука фактически представляет собой способность к обобщению и отлично работает с линейно разделимыми данными и устраняет исключительно шумы. Что представляет собой PCA в плане изображений - это силуэт, основные черты. То есть своё изображение по нему ты восстановить не сможешь, но будет точно понятно, что это изображение, например, является силуэтом человека. Ты мог видеть такие статьи ге есть усреднённое лицо человека европейской расы или среднее лицо женщины - это всё PCA. Есть и нелинейные преобразования, позводялющие уменьшить размерность данных и при этом улучшить работу классификатора, например PLS (partial least squares). Вот отличная статья по этому поводу: "Vehicle Detection using Partial Least Squares" Они добавляют к HOG кучу других фич типа симметрии, делают огрочный features vector, а потом его сильно сокращают с помощью PLS и подают его на линейный SVM. Посмотри на рисунок 5 в статье, как данные стали намного лучше линейно разделяться. Что получаем по производительности. 1. На этапе обучения нам надо: 1.1. "Обучить" - построить преобразование в новое пространство с помощью PCA или PLS: из картинок извлечь feature vector'а размера N, слепить их в один большой и вычислить параметры нового многомерного пространства размера N. Выделить значимое подпространство размера M < N. Сохранить. 1.2. Обучить уже классификатор (SVM) на новых feature vector'ах размера M: вычисляем по картинке HOG, применяем к нему PCA, берём M первых значений результирующего вектора. Обучаем на этих данных SVM и сохраняем. 2. Этап распознавания: 2.1. Загружаем PCA и SVM. 2.2. Берём изображение, считаем HOG, применяем PCA, берём M первых значений результирующего вектора, подаём в SVM. Профит! У нас получается, что SVM обучается быстрее и работает тоже, но добавляется умножение на матрицу NxN. В каждом конкретном случае можем получить как ускорение, так и замедление процесса.
  27. Потомучто теряется часть информации. Вот взять к примеру дескриптор HOG с картинки 32х32. Размерность вектора будет огого, а чтобы увидеть его хотябы в 3D надо сильно сильно сплющить. И ещё вопрос получиться ли глазами классифицировать такую лепёшку.
  28. Почему удивительно? SVM чувствителен к шуму, тот же PCA или PLS отлично помогают с этим бороться.
  1. Load more activity
×