Ужосы OpenCV...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Ужосы OpenCV...

Сообщение Alex2013 » 21.09.2018 20:08:45

На этой неделе пытался разобраться с Детектором лиц ...
Код для дельфи брал тут
https://sourceforge.net/p/delphi-opencv ... 0969c0aaf3
Конвертировал в лазарус, поправил библиотеки,собрал пример но пока не работает ...
Показывает один кадр при старте а дальше окно просто виснет ...
(Думаю дело в том что вместо таймера юзается Idle + мьютекс при старте зачем-то мучат... )

Есть код прямо на лазарусе но там но он для простого примера переусложнен и компонентов для сборки хочет .
Код тут https://forum.lazarus.freepascal.org/in ... ic=31851.0
точнее тут https://github.com/six1/Laz_OpenCV_2

Вообщем кто-то эти примеры в Лазарусе собирал :?: :roll:
(Готовый бинарник с Laz_OpenCV_2 не шатко не валко работает но интересует именно возможность собрать / модифицировать )

Добавлено спустя 16 часов 43 минуты 41 секунду:

"Оптимизм наше все!" :D

Собрал рабочую версию с дополнительным ускорением за счет изменения разрешения рабочего битмапа...(То что было в заложено в примере было не доделано и вообще не работало...)

Прикол моего способа в том, что я масштабирую кадр/картинку средствами канваса.

:arrow: FaceDetect.7z :idea:

Главный интерес этого примера в том что там есть возможность использовать множество разных "каскадов" для распознавания чего угодно, а не только лиц.
Зы
В который раз удивляюсь "странной" работе с данными Битмапа в LCL вон в OpenCV нет никаких блокировок и все прекрасно работает . Так КАКОГО извините черта нужна вся эта возня с блокировками? :roll:
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 28.09.2018 14:27:30

Новая версия детектора мордашек ..
Обнаружил прискверную багофичу OpenCV как оказалось есть проблемы с русскими путями и именами файлов .
Попытки изменить кодировку путей ничего не дали... Пришлось делать фикс своими силами .
(Ага,в духе одного анимешного персонажа, который изрек очень характерную фразу
"Ничего ни понимаю - но я же программист, значит сделаю ! " :mrgreen: )

:arrow: FaceDetect002.7z

В дополнение "поднял" еще какой-то пример ObjectTrack Что делает непонятно, но как-то работает ...

:arrow: Morphological001.7z
Последний раз редактировалось Alex2013 25.04.2019 21:35:21, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Снег Север » 29.09.2018 08:13:49

Я раз и навсегда избавился от всех проблем с перекодировкой в путях применив системную функцию трансляции длинных имен в короткие. Но это под виндой, разумеется.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Ужосы OpenCV...

Сообщение Alex2013 » 29.09.2018 11:52:37

Снег Север писал(а):Я раз и навсегда избавился от всех проблем с перекодировкой в путях применив системную функцию трансляции длинных имен в короткие. Но это под виндой, разумеется.

И где эту функцию найти ? (Хотя есть сомнения в том что этот огрызок Дос будет поддерживается еще достаточно долго... но на текущий момент поможет . )

Кстати никто не знает где найти побольше готовых "каскадов-Хаара" :?: Или как обучать свои ? (Интересует распознавание ладони а то без предварительного поиска методы которые я использовал ТУТ даже с более новыми версиями OpenCV работают на редкость не надежно - просто не могут оделить фон от объекта :roll: )
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Снег Север » 29.09.2018 13:17:58

Alex2013 писал(а):И где эту функцию найти ?
MSDN родимый, функция GetShortPathNameW, существует со времен WindowsXP. А насчет поддержки, то с конспирологией не ко мне.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Ужосы OpenCV...

Сообщение Alex2013 » 30.09.2018 01:09:08

Снег Север писал(а):И где эту функцию найти ?
MSDN родимый, функция GetShortPathNameW, существует со времен WindowsXP. А насчет поддержки, то с конспирологией не ко мне.

Спасибо! Мог-бы и сам догадаться... но я почему-то думал, что ее нужно искать в дебрях LCL... :roll:
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 17.05.2019 17:38:06

По следам недавнего трепа насчет сравнения двух картинок решил я сделать "идеологически верный" детектор движения с применением OpenCV( и возможностью ловить несколько движущихся объектов в отдельные фреймы )... (Пример для дельфи был но после перевода в Лазарус оказалось что он изрядно недоработан, так что сделал немного усовершенствованную версию обедняющею все близкие фреймы и исключающую их наложение в виде "квадратно кучевых облаков " ...)

:arrow: MotionDetect02.7z
:arrow: MotionDetect02bin.7z

Зы

Разумеется в ближайшее время собираюсь добавить OpenCV MotionDetect в свой основной тематический проект "цифровая оптика" но думаю что возможно кому-нибудь может понадобится именно такой небольшой и отдельный от "монструозной программы" пример .
Зы Зы
Усовершенствование алгоритма чисто внешнее.
Код: Выделить всё
// Проверка наложения  и близости двух CvRect
// L - лополнительное растояние от края облостей...
Function CR(r1,r2 :TCvRect;L:Integer):boolean;
var RR1,RR2,RR3:TRect;
begin
RR1:=Classes.Bounds(r1.x-l,r1.y-l,r1.width+l,r1.height+l);
RR2:=Classes.Bounds(r2.x-l,r2.y-l,r2.width+l,r2.height+l);

Result:=(RR1.Left < RR2.Right) and (RR2.Left < RR1.Right)
and (RR1.Top < RR2.Bottom) and (RR2.Top < RR1.Bottom);

// или Result:=RR1.IntersectsWith(rr2);//c версии Лазарус 1.8

end;
// Простое слияние двух CvRect в один
Function SumRecT(r1,r2 :TCvRect): TCvRect;
begin
With result do begin
X:=Min(r1.x,r2.x);width:=Max(r1.width,r2.width);
Y:=Min(r1.Y,r2.Y); height:=Max(r1.height,r2.height);
end
end;

Код: Выделить всё
...
// Перемещаю в более привычный контейнер  CL:TList;
      cc:=contours;
      while (cc <> nil) do
      begin
        new(pr);
        Pr ^:= cvBoundingRect(cc, 0);
        cl.Add(pr);
        CC:=cc.h_next;
      end;

// Складываю близкие области ...

if Cl.Count>0 then begin
   L1:for  i:=0 to Cl.Count-1 do
    for  j:=0 to Cl.Count-1 do
      if (I<>J) and  Cr(TCvRect(cl[i]^),TCvRect(cl[j]^),20) then
       begin

         TCvRect(cl[i]^):=SumRecT(TCvRect(cl[i]^),TCvRect(cl[j]^));

         Dispose( cl[j] );  cl.Delete(j);
        goto l1; // Некрасиво? Зато наглядно!
       end;

   // Вывод результатов.
   for I:=0 to cl.Count-1 do begin
       rect:=TCvRect(cl[i]^);
        cvRectangle(frame, cvPoint(rect.x, rect.y),
        cvPoint(rect.x + rect.width, rect.y + rect.height), cvScalar(255, 0, 255, 0),
        2, 8, 0);
      end;
   // Очистка списка .
   for I:=0 to cl.Count-1 do Dispose( cl[I] ); cl.Clear;
end;
...

Все работает... но как-то мне этот код не нравится, может у кого-нибудь , есть идеи или наработки получше? :idea: :roll:
Последний раз редактировалось Alex2013 27.10.2020 04:48:44, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение sts » 17.05.2019 21:18:52

Alex2013 писал(а):"идеологически верный"


для этого надо взять камеру с железным кодированием в h.264\h.265 в потоке которых будет вся необходимая информация о регионах движения.
sts
постоялец
 
Сообщения: 406
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Ужосы OpenCV...

Сообщение Alex2013 » 18.05.2019 00:36:42

sts писал(а):
Alex2013 писал(а):"идеологически верный"


для этого надо взять камеру с железным кодированием в h.264\h.265 в потоке которых будет вся необходимая информация о регионах движения.

Ну чего нет того нет ... Хотя в принципе даже обычный MP4 (или MJPG) тоже работает по сходному принципу вопрос в смысле возни с парсингом видео формата. (Все равно нужно делать практически те же самые действия разве что без предварительной фильтрации )
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Pavia » 21.05.2019 17:57:58

Alex2013
Нормальный код. Я даже у вас позаимствую фильтр ректов. А видеокомпрессоры работают по другим принципам. И там много ложных срабатываний, так как они ищут лучшее сжатие, а не наличие движения.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Ужосы OpenCV...

Сообщение Alex2013 » 21.05.2019 18:32:22

Pavia писал(а):Alex2013
Нормальный код. Я даже у вас позаимствую фильтр ректов. А видеокомпрессоры работают по другим принципам. И там много ложных срабатываний, так как они ищут лучшее сжатие, а не наличие движения.

Рад что этот код хоть в чем-то полезен ... :idea:
(Но у меня от него стойкое ощущение "переливания из пустого в порожнее".)

Насчет сжатия я возится с MJPG там вроде реально записывается фон + изменения в отдельных фреймах (со своими сжатием) в прочем многое зависит от реализации кодека но принцип именно такой.
Другое дело что сам алгоритм используемый для отлеживания динамики при сжатии не менее затратный чем "решение задачи в лоб" .
Последний раз редактировалось Alex2013 29.12.2019 03:46:32, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 26.08.2019 15:32:26

"Карта глубин"
ИзображениеИзображение
Вариант 1.
Строится (Ч/б картинка это она )...
Но вместо поворота что-то с цветами вытворяет...
Вариант 2.
Загружаю готовую карту (правый кадр липовый но его как-бы не уже и не надо ).
ИзображениеИзображение
Тоже самое...
Загружаю стерео фтоку некой Полины ("глаз узкий нос плюский" но сама как водится русская)... :wink:
ИзображениеИзображение

И тут "подопытного хомячка" (программу в смысле ) разорвало .... Это вообще как ? :shock:

Добавлено спустя 1 час 16 минут 36 секунд:
Сам "стерео-бред" тут :
:arrow: StereoBred.7z :idea:
ЗЫ
Папке "1" есть интересный пример "test.exe" кторый показывает "как все должно быть" ( но поскольку DLL из OpenCV не используются то скорее всего, на сам деле, это просто "грамотная поделка " , которая читает "настоящую матрицу" из файла disparity.png(это кстати текстовый файл ) и делает поворот "по своему разумению" ).
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Cheb » 27.08.2019 10:57:02

И тут "подопытного хомячка" (программу в смысле ) разорвало

Как-как... Нелинейные искривления исправь, да центры откалибруй, да края несовпадающие из анализа выкинь.
А так - конечно разорвёт. Рыбий глаз же.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Ужосы OpenCV...

Сообщение Alex2013 » 27.08.2019 16:10:18

Честно говоря я ничего от попытки загрузить "постороннюю стереопару " не ожидал ... (Понятно что из за компенсации искажения линз "все не так" ) Но вот что почему все это безобразие (даже то что уже вроде как нормально обработано) поворачивать отказывается ?
Должно быть так !
Изображение
Последний раз редактировалось Alex2013 03.05.2020 00:33:18, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 11.01.2020 17:44:51

ИзображениеИзображение

Сам пример (исходник бинарник DLL ) :arrow: cv_ExtractSURF.7z

В общем погонял в Лазарусе знаменитый алгоритм SURF . Вроде работает . Но я если честно так и не понял может ли быть от него хоть какой-то толк .
Alex2013
долгожитель
 
Сообщения: 2924
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

Рейтинг@Mail.ru