Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Today
  2. Yesterday
  3. Каскад Хаара

    Лучше 80х80. Далее идёт детекция через cv::CascadeClassifier::detectMultiScale, где можно подобрать правильный коэффициент скейла. Тренироваться может долго, но тут никуда не деться. В плане альтернатив из коробки есть ещё SVM+HOG, но это будет уже медленнее Хаара.
  4. Каскад Хаара

    Размер объекта относительно статичен +- 20 пикселей. Больше на сколько? 30х30, 40х40, 80х80. Насколько я понял, чем больше размер объекта, тем дольше ждать результат. Думал. Стандартными средствами OpenCV я детектирую с точностью 90%, но это не всегда устраивает пользователей. Хотелось уйти в сторону DL, но ПК слабые, не тянут. Какие еще альтернативы?
  5. Last week
  6. Каскад Хаара

    Если размер объекта у тебя никогда не будет меньше 100 пикселей, то можно ставить минимальный размер и больше, чем 20х20, тут проблем у меня не было. P.S. В OpenCV 4 тренировка каскадов уже depricated, а opencv_createsamples удалена из сборки. Фактически есть, но закомментирована и, если включить, не собирается из-за чистки старого API. Так что надо подумать, насколько необходимо использовать каскады Хаара в будущем.
  7. Каскад Хаара

    Перечитал много разных публикаций, но не нашел ответа на вопрос высоты/ширины (-w 20 -h 20). Значит ситуация следующая: картинки размеров 400 на 300, сам объект имеет размер 100 на 130. Во всех примерах размер объекта минимален. Что-то из серии 20 на 20 или 30 на 10. Собственно, вопрос. Я должен уменьшать свои картинки, чтобы объект принял нужные размеры? Или как? В одной публикации видел, что объекты еще больше чем у меня (300 на 300), а значения высоты и ширины в параметрах обучения ставят 20 на 20. Или это абстрактные значения в параметрах? Где читать или, может, кто подскажет по своему опыту? Заранее спасибо! opencv_createsamples.exe -info E:\BAZAS\Sova\Good.dat -vec samples.vec -w 20 -h 20
  8. Да, есть там Vibe в библиотеке. Очень быстрый. При этом качество детектирования, как мне показалось, примерно такое же, как у почти всех остальных алгоритмов, работающих с большим накоплением. Но производительность очень высокая. Все алгоритмы попробовал. Особенно понравился MultiCue. Лучше других справляется с "распаданием" объектов. Скорость работы при этом выше среднего.
  9. Да, косяков там достаточно, это старый мой код, которому уже больше 10 лет: люди "распадаются" на части и т.д. Но она на тот момент предназначалась для детекции движения и определения оставленных предметов и с этим справлялась. Сумка становится сиреневой - это как раз момент, когда вышел заданный таймаут (там он установлен секунд в 15 для наглядности) и объект считается фоном. Даже если сумку унесут, рамка какое-то время будет на этом месте, чтобы сотрудник безопасности обратил на это внимание.
  10. Отличное видео! Сейчас в основном пытаюсь бороться с проблемой, как на прикрепленном участке. Человека глазами хорошо видно, а детектор выполняет это не надежно. На тот момент, когда сумка стала сереневой, в алгоритме она уже считается фоном? А в общем, спасибо, экспериментирую с bgslibrary. Есть там очень неплохие варианты.
  11. 1. Цвет учитывается в большинстве методов. Есть только нюанс: почти везде работа ведётся с цветными изображениями так, как будто они состоят из равноправных цветовых каналов. Например, для MOG2 из opencv_video нет разницы, подашь ему RGB, BGR или HSV. Хоть там и есть возможность детектирования теней (detectShadowGMM), но оно совсем не будет работать, если подать неправильную картинку. А некоторые методы изначально ориентированы на то же детектирование теней, что очень востребовано, если надо считать автомобили или людей, а не просто их детектировать. Про текстуры и контуры я не в курсе, не слышал. 2. Длительное присутствие или детекция оставленных объектов, как мне кажется, требует самостоятельной модификации метода и принципиально не может быть реализовано силами алгоритма вычитания фона. Если он может адаптироваться к изменению фона, то рано или поздно адаптируется к любому изменению. Если не может адаптироваться, то со временем накопится такое количество ложных пикселей заднего плана, что всё станет белым. Когда я занимался этой проблемой, то сделал что-то типа самопального MOG, у которого не было возможности самостоятельной адаптации. После вычитания фона отрабатывал трекер объектов и их распознавание. Если объект был маленький (а надо было детектировать только большие) и неподвижный, то включалась адаптация внутри этого объекта. Если объект был большой и неподвижный, то адаптация не включалась. Также она не включалась, если объект был распознан, как пешеход или автомобиль. Далее был интервал в несколько минут, в течение которого неподвижный объект считался оставленным. Объект неподвижен, скажем, минуту - адаптируем фон под него и выдаём оператору, что обнаружен оставленный предмет. Если долго был неподвижен автомобиль, то просто адаптируем фон под него. Если же распознавание не использовалось, то просто адаптируем фон для всех объектов после истечения некоторого интервала. Вот как это примерно выглядело для видео с PETS 2006: сумка из зелёной сначала становится красной, а потом сиреневой. 3-4. Это тоже делалось вручную, но с внешними наворотами. Для всех систем видеонаблюдения полезно иметь алгоритм саботажа или порчи камеры: засветка, расфокусировка, закрытие объектива и т.п. То есть такой детектор работает независимо от детектора движения и в случае обнаружения неполадок отдаёт команду детектору движения, по которой он переинициализируется. Кажется, что силами алгоритма вычитания фона это тоже не так просто сделать. Одно время появился закрытый и запатентованый алгоритм vibe, который был и очень быстрым и точным. Через некоторое время патент кончился и его автор бельгийский профессор открыл исходники. Кажется, они уже есть в bgslibrary. Можно начать с него.
  12. Спасибо за ответ, почитаю. Хочется, чтобы: Учитывался цвет, а не только яркость. Может быть даже, чтобы учитывались контуры и характерные точки, а не только цвет и яркость. Фактура фона и объектов на глаз сильно отличается. При этом, если смотреть только на яркость, то отличие Fg/Bg может быть слабым. Была защита от длительного присутствия объекта. У меня фиксированная установка камеры, фиксированный бекграунд, на котором появляются объекты (их и надо обнаруживать). Объекты могут появиться и задержаться на длительное время. Оконный буфер усреднения фона через какое-то время приводит к восприятию этих объектов, как Bg. Надо, чтобы эти долго неподвижные объекты продолжали детектироваться, как Fg. Была адаптация к изменению освещения, в том числе резкому (выключили половину света). Была защита от краткосрочного изменения яркости (фото вспышка). Я уже пытался сравнивать.. это оказалось не просто сделать. Навскидку, как мне показалось, все алгоритмы работают примерно одинаково. Наверное есть отличия в деталях, вот про них и хотелось прочесть, а не пытаться дойти анализом результатов.
  13. Да, здесь есть реализация и статья-обзор нескольких десятков методов вычитания фона. Там намного больше всего, чем есть в OpenCV и лучше структурированы. И не надо забывать про базовый videoio - там тоже кое-что есть проверенное временем. А чего хочется от вычитания фона? Может, просто написать тестовое окружение и посмотреть на результаты, выдаваемые каждым алгоритмом?
  14. Earlier
  15. Коллеги, поделитесь информацией плиз, если имеется. Встречалась ли кому статья, или может быть тема на форуме, с исследованием отличий OpenCV-методов сегментации фона (Background-Foreground Segmentation Methods)? Или может быть кто-то сам исследовал и сохранил результаты? Готовых методов сегментации в opencv несколько (https://docs.opencv.org/4.1.0/d2/d55/group__bgsegm.html). Но не понятно, в каком случае какой метод предпочтительнее. Так же не получается найти понятного, но не громоздкого описания каждого из реализованных методов. Ссылки на публикации с описанием методов как-то не очень помогают - про каждый написано, что он самый лучший и быстрый, при этом краткого описания сути метода нет. Не хочется изобретать велосипед и городить свой метод, не разобравшись до конца в существующих.
  16. Да, должно работать. Утверждать ничего не буду, но обычно копируется весь кадр. Посмотри, как это делается в ffmpeg: функция dxva2_transfer_data. Там лочится поверхность, что означает копирование всего содержимого из видео в системную память (указатель в LockedRect содержится). А потом уже из системной памяти копируется куда надо. Трудно сказать, что будет происходить на Атоме, почему там такая высокая загрузка на этой операции. Когда лочится поверхность, находящаяся в видеопамяти дискретной видеокарты, то память копируется с помощью DMA, минуя процессор. То есть мы получаем задержку, но процессор остаётся свободен. Тут же дискретной видеокарты нет и память просто копируется из системной в системную? Я не знаю.
  17. 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 переписывать не весь кадр, а часть кадра?
  18. Можно написать декодер ручками на fmpeg и подключить фильтр для получения motion vectors: пример. Только кажется, что игра не стоит свеч: есть работы по детектору движения и трекингу на основе этих векторов, мы сами в АМД пробовали их использовать. Но их качество очень плохое для применения именно в этих целях. И очевидно почему: цельку кодека является не поиск истинного движения или изменений в кадре, а минимизация сжимаемой информации. То есть ему выгодней найти ложные вектора движения блоков, если они в результате дадут меньше передаваемой информации.
  19. Распознавание неба

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

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

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

    Надо искать небо исключительно на одном этом фото? Или задача стоит более обшно? А облака относятся к небу? Небо может быть розовым-закатным, пасмурным, вечерним, со звёздами? Оно будет на каждом изображении гарантировано? Или могут быть изображения без неба? Странный подход, когда отбрасывается вся цветовая информация, казалось бы, небо голубое и это можно использовать. Я бы начал разработку с классики: создания и разметки наиболее поного датасета. Тогда проблема станет видна во всей своей красе.
  23. Всем привет. Передо мной стоит задача распознать небо на фото. Использую 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; }
  24. Детектирование глаз

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

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

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

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

    А в Raspberry можно же воткнуть тот же Intel compute stick и для запуска на нём сеток?
  1. Load more activity
×