Ужосы OpenCV...

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

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

Re: Ужосы OpenCV...

Сообщение Лекс Айрин » 23.08.2017 17:37:45

Снег Север,ППКС.

Максимум, что стоит сделать это выкинуть окошко скачивания дополнений, да и то не везде. По большей степени потому что у человека может стоять ограничение трафика.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ужосы OpenCV...

Сообщение olegy123 » 23.08.2017 18:29:40

Лекс Айрин писал(а):olegy123, тебя путает совпадение названий. На самом деле, переменную path уже давно можно было похоронить... просто делать это всем лень -- это же думать надо... проще перекрасить пару окошек. Тем более, что в винде все регистрируется в реестре. Да и вообще, в самой процедуре поиска библиотек есть большой глюк -- нельзя, по умолчанию, искать в подпапках установленной программы. И, видимо, он остался еще с самого начала. Поэтому и приходится извращаться с задаваемыми пользователем путями.

Лекс, напиши в MS - что мол это святотатство использовать $Path как системную переменную.. Требуй чтобы выпилили в свойствах профиля.
Еще лучше если перестать в VC++ указывать пути к папкам include & library.
Далее научи грешников с linux уму разуму.

Добавлено спустя 8 минут 30 секунд:
Снег Север писал(а):Лекс Айрин, вы упорно путаете библиотеки и СОМ-объекты. Не знаю как в линуксах, но в винде это - совершенно разные сущности. Регистрируются СОМ-объекты (которые тоже библиотеки, но специфические), а обычные библиотеки нигде не регистрируются. Просто есть предопределенные правила их поиска при отсутствии полного пути в вызове - папка с вызывающей программой, папка windows, папка system. У меня бывает с полдесятка разных версий библиотек с одинаковыми названиями, но ни малейшей путаницы не происходит.

В линуксах там анархия, для COM нужен некий реестр, но его никто не может сделать, там systemd все еще идут баталии об нужности.

Добавлено спустя 6 минут 39 секунд:
Alex2013 писал(а): Дос пошол от CP/M :arrow: https://ru.wikipedia.org/wiki/CP/M (и кстати диски по алфавиту от туда же )
Вообще то DOS - это дисковая операционная система, где на дисках есть файлы - с ними нужно было работать через файловую систему.. До них были перфокарты, tap-ленты.
То о чем чешит Лекс - он этого сам не знает.

Добавлено спустя 4 минуты 29 секунд:
Снег Север писал(а):
Лекс Айрин писал(а):Конечно, проще закинуть ее в папку system, но это не всегда удобно и правильно.
Правильно - держать библиотеки в каталоге с экзешником. И не волноваться про любые иные их версии в других местах.

не всегда удобно.. .NET Framework за собой не имеет смысла тянуть вслед за программой в 3Mb.
некоторые либлы делаются не конечными программистами.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Ужосы OpenCV...

Сообщение Лекс Айрин » 23.08.2017 19:46:46

olegy123 писал(а):Лекс, напиши в MS - что мол это святотатство использовать $Path как системную переменную..


Ну почему, не стоит так к этому серьезно относиться.

olegy123 писал(а):В линуксах там анархия, для COM нужен некий реестр, но его никто не может сделать, там systemd все еще идут баталии об нужности.


Только почему-то в этой анархии людям проще и продуктивней работать ))) Знаешь как мне было странно ощущать, например, что после постоянного обновления операционки она не тормозит?

И, кстати, я тоже считаю, что СОМ-объекты не нужны. Все можно сделать проще и интереснее. Но вот только кто хочет, тот не может, а кто может не хочет. Пытаясь реализовать их полноценную поддержку люди уйдут в сторону.

olegy123 писал(а): .NET Framework за собой не имеет смысла тянуть вслед за программой в 3Mb.


Проблема в том, что если программа тянет за собой .Net, то неважно где он расположен и какого размера сама программа... я видел и 200-250 кб прогу, которая тянула его... Если честно, то я не вижу смысла такую прогу ставить вообще.

olegy123 писал(а):Вообще то DOS - это дисковая операционная система, где на дисках есть файлы - с ними нужно было работать через файловую систему.. До них были перфокарты, tap-ленты.


1) любая ось сейчас использует диски, так что акцент на этом,теряет смысл.
2) Стример (ленточный накопитель) использовали и после широкого распространения даже виндовс.... не удивлюсь, если и сейчас используют.

ЗЫ: к сожалению, что-то революционное и более-менее удобное вряд ли сделают в ближайшие лет 5-10 (а скорее всего лет 15-20). Все проекты приближающиеся к оси пятого поколения планомерно закрываются до выхода стабильной версии, хотя промежуточные результаты хорошие. Практика показала, что на Майкрософт надеяться точно нет смысла (как минимум один проект с ее участием или под ее патронажем всегда есть). Так что ждем графическую оболочку над никсами. Я бы и сам написал, только мне, как программисту, еще учиться и учиться. И, кстати, не вижу никакого смысла акцентироваться в полностью запущенной оси на файловую систему. Проще ее скрыть и оставить для пользователя только монтируемые временно устройства и пользовательскую папку (да и в ней проще раскидать документы по типам). Конечно, остается проблема подборок разнородных файлов, но и тут есть варианты решения.
Но не думаю, что кто-то возьмется. Слишком глобальный проект. Если только Гугл.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ужосы OpenCV...

Сообщение Снег Север » 24.08.2017 08:26:22

olegy123 писал(а):не всегда удобно.. .NET Framework за собой не имеет смысла тянуть вслед за программой в 3Mb.
Такие специфичные вещи, как рантаймы, которые идут только от единственного производителя (можно еще Java вспомнить) - это исключения, которые только подтверждают правило. И там, как раз, никаких конфликтов версий не бывает.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: Ужосы OpenCV...

Сообщение olegy123 » 24.08.2017 13:54:26

Лекс Айрин писал(а):
olegy123 писал(а):Лекс, напиши в MS - что мол это святотатство использовать $Path как системную переменную..


Ну почему, не стоит так к этому серьезно относиться.

Чё то не понимаю.. то категорически не нужно, то не надо серьезно относится.. Лекс, у тебя менструальные циклы?



Лекс Айрин писал(а):1) любая ось сейчас использует диски, так что акцент на этом,теряет смысл.
Файловая система, где доступ к данным, в том числе и к dll, осуществляется через путь.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Ужосы OpenCV...

Сообщение Лекс Айрин » 24.08.2017 14:27:02

А что тут понимать... раз уж это сделано так, то приходится пользоваться. Но, по хорошему, это костыль.

olegy123 писал(а):Файловая система, где доступ к данным, в том числе и к dll, осуществляется через путь.


Можно придумать и другую организацию данных, более плоскую. При том, что для ОС (но не пользователя), файловая система может частично остаться прежней. Для примера, можно создать файловую систему на основе семантического графа. Тогда путей, как таковых, не будет. А доступ будет осуществляться на основе контекстно-зависимых запросов.
Тогда тот же поиск dll будет осуществляться запросом типа "найти все dll относящиеся к...". Конечно, накладные расходы увеличатся из-за самого наличия контекстной семантической сети, но работать станет удобнее. И поиск нужной библиотеки станет быстрым. Хотя, в такого рода системе нет смысла искать -- все должно настраиваться во время установки/обновления программы.
На самом деле, путь это лишь отображение команд перехода по определенным файлам (каталогам) на строковую переменную. С этим связаны и проблемы типа устаревших ссылок, рухнувших файловых разделов и прочего безобразия.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ужосы OpenCV...

Сообщение Alex2013 » 26.08.2017 12:06:00

А по теме написать лень ? Интересная ведь тема ... найдя подобные в живом виде я даже ничего не зная тут-же лезу копать "гугловой лопатой садовый интернет "... просто знаю что лишними мои находки не будут !

Так что объявляю розыск!
Разыскиваются проекты с ОpenCV на паскале .
Также неплохо бы вообще нормальною инфу по ОpenCV найти ( А не как на хабрхабре и окрестностях "Ура мы запустили два примера и изменили в них две сточки ... "магия" ОpenCV в действии! ")
Мной найдены

http://gidesa.altervista.org/camshiftdemo.php Это самый лучший проект потому как для FPC и с примерами хотя кривой "мама не горюй" ...
https://sourceforge.net/projects/opencv-delphi/
https://code.google.com/archive/p/opencvdelphi/
https://code.google.com/archive/p/opencv-for-delphi/
https://github.com/Laex/Delphi-OpenCV

ЗЫ
"Колхоз дело добровольное"... :D
Последний раз редактировалось Alex2013 26.08.2017 12:41:31, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение olegy123 » 26.08.2017 12:10:45

Есть книжки, в том числе и на русском OpenCV.

Добавлено спустя 6 минут 13 секунд:
Alex2013 писал(а):Разыскиваются проекты с ОpenCV на паскале .

объем маленький, предметная область не совсем необходима всем, и пишут на разных языках от c до perl-а.. на fpc - скорее будешь первопроходцем.
Еще проблема в том, что ОpenCV 1.x/ОpenCV 2.x/ОpenCV 3.x не одно и тоже..

Не так печально, названия команд и операции с данными будут одинаковыми что на питоне, что на перле, даже на хаскеле - нужно ориентироваться в данной тематике.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Ужосы OpenCV...

Сообщение Alex2013 » 26.08.2017 12:17:15

olegy123 писал(а):Есть книжки, в том числе и на русском OpenCV.

Искал то что нашел пока не вдохновило ... стиль : методички для студентов или компиляция из студенческих же рефератов ... :(

olegy123 писал(а): а fpc - скорее будешь первопроходцем.

Уже не буду ... там какой-то грек по суетился ... :idea:
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение olegy123 » 26.08.2017 12:25:21

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

проще разобраться как получить нужные данные, какие манипуляции нужно сделать сначала "на бумаге".
OpenCV - это всего лишь набор инструментов. нужно изучить команды.
тогда будет понятно, как решили аналогичные задачи на других языках программирования - команды везде одинаковые..

Добавлено спустя 1 минуту 26 секунд:
Alex2013 писал(а):Уже не буду ... там какой-то грек по суетился ...

грек перевел .h в pas.
Он же не решил вопрос по кубику-рубика?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Ужосы OpenCV...

Сообщение Alex2013 » 26.08.2017 12:27:47

Думаю еще параллельно для ХайАсма набор элементов на "монстрячить" ...
Бо напрашивается ! Демки и пробные программы клепать для исследования возможностей самое то !

Добавлено спустя 5 минут 9 секунд:
olegy123 писал(а):у тебя задача очень специфическая, так что не жди прямых ответов, даже на форумах.

проще разобраться как получить нужные данные, какие манипуляции нужно сделать сначала "на бумаге".
OpenCV - это всего лишь набор инструментов. нужно изучить команды.
тогда будет понятно, как решили аналогичные задачи на других языках программирования - команды везде одинаковые..


Ага пытался я с С++ передрать распознавание шахтной доски ... все вроде верно но ничего не работает ... :roll:
Добавлено спустя 1 минуту 26 секунд:
Alex2013 писал(а):Уже не буду ... там какой-то грек по суетился ...

грек перевел .h в pas.


... так даже примеры похоже конвертированы с Си но после некоторой возни все-же что-то работает... иногда ... :lol:

Добавлено спустя 6 часов 30 минут 34 секунды:
Попробовал переделать FrameRecon demo в Лазарус .
Демо-версия FrameRecon - это программа Delphi 6, которая отслеживает в реальном времени черный квадрат в изображении веб-камеры.
Программа находит кадр, используя контуры, либо на основе Canny, либо пороговой функции. В дереве различных контуров он ищет четыре угловых, выбирая только один внутренний четырехугольный контур. Для них вычисляется простое правило выравнивания для поиска искомого квадратного кадра. Затем он вычисляет перспективное преобразование (перевод и вращение), вытягивает полученный вычисляемый кадр в зеленый цвет и искажает изображение, поскольку кадр был только перед объективом без перевода или вращения.

Опять же от сюда http://gidesa.altervista.org/camshiftdemo.php ...
Установка OpenCV 1.0 https://sourceforge.net/projects/opencv ... v-win/1.0/ решает проблемы с DLL и AX
Проект успешно конвертируется Лазарусом OpenCV.pas нужно вернуть в "до конверсионное" состояние а то он и так под fpc + лазарус заточен ..
+ пара мелких правок (0 на nil заменить запятую вернуть ) и... ура ! запускается !

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

Может кто глянет "свежим взглядом" ? :idea:
(Возможно там просто ерунда какая-то которую я просто не заметил )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 07.09.2017 13:45:05

"Запекла бродьба " с империей ужоса продолжается !

Добрался до обнаружения линий и контуров "вообще-то даже работает" как-то ...
(Извиняюсь за "грязный экспериментальный код" он тут просто как пояснение )
Код: Выделить всё
type
TCvPointArray = array [0 .. 100] of CvPoint;
pCvPointArray = ^TCvPointArray;

Var B:TBitmap; //Основной рабочий  Bitmap
  cs: CvSize; S:String;

  src: pIplImage = Nil;
  dst: pIplImage = Nil;
  contours: pCvSeq = nil;
  storage: pCvMemStorage;
  i: Integer;
  lines: pCvSeq;
  line: pCvPointArray;
  cvCP:cvPoint;
  const   frame: PIplImage=nil ;
          BO:TBitmap=nil;
....
Begin
....

// Подключение Опен ЦВ

Cs.width:=b.Width;
Cs.height:=b.Height;
if Frame = nil then Frame:= cvCreateImage( cs, 8, 3 );
Move(b.RawImage.Data^,Frame.ImageData^, Frame.ImageSize);
...
// хранилище памяти для хранения найденных линий
storage := cvCreateMemStorage(0);
lines := nil;
i := 0;
dst := cvCreateImage(cvGetSize(Frame), 8, 1)
SRC := cvCreateImage(cvGetSize(Frame), 8, 1);

cvCvtColor(Frame,SRC,CV_BGR2GRAY);// "Серое небо потухшие птицы ...   " :)
cvCp.x:=0;cvCp.y:=0;

//cvThreshold(SRC, DST, 128, 255, CV_THRESH_BINARY_INV); // Тут что-то не то ...//CvCopy( DST,SRC,0);

// нахождение контуров
cvFindContours(SRC, storage, @contours, SizeOf(CvContour), CV_RETR_LIST,
                                     CV_CHAIN_APPROX_SIMPLE, cvCP);
// прорисовка контуров
cvDrawContours(Frame, contours, CV_RGB(100, 200, 0),
                    CV_RGB(200, 100, 0),1,1 , CV_AA
                    , cvCP);


// нахождение линий
lines := cvHoughLines2(SRC, storage, CV_HOUGH_PROBABILISTIC
, 1,PI / 180, 50, 50,10 );

// нарисуем найденные линии
for i := 0 to lines^.total - 1 do
begin
  line := PCvPointArray  (  cvGetSeqElem(lines, i));
  cvLine(Frame, line^[0], line^[1], CV_RGB(255, 0, 0)//, 1, CV_AA, 0 );
end; 

cvReleaseMemStorage(storage);
cvReleaseImage(src);
cvReleaseImage(dst);

IplImage2Bitmap(frame,b);
....



Но "гора родила мышь"...
Короче ну никак не удается приблизится к распознаванию меток !
Упор в сегментирование изображения .... Впечатление что контурные фильтры этой задаче только мешают .
(Скорее нужен очень умный пороговый фильтр, а его пока задействовать не выходит )
Линии и круги вроде распознать можно ... но даже что-то похожее квадрат распознать проблема .

И как только у многих экспериментаторов так ловко все выходит ?
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 22.01.2018 20:19:23

Народ вручайте! (разумеется , если не влолм )

Нашел я вот такую демку :arrow: !AR_001.zip :idea: на тему Дополненной реальности в OpenCV для Дельфи ...
И довел до состояния "компилируется в Лазарусе" :arrow: запускается :arrow: но НЕ РАБОТАЕТ !

(Включает камеру открывает окно просмотра и.... влетает с исключением! ) :roll:
Пробовал и так и эдак результат тот-же ... Чувствую что там какая-то ерунда но найти и исправить пока не могу .

Вопрос: В ЧЕМ ТАМ ДЕЛО ?
Зы
(По архиву: нужные DLL и данные в папке BIn, в папке ConverterBackup исходник до конверсии и правки, текущая версия проекта в корне архива
свежесобранный EXE искать в создаваемой при с компиляции папке lib )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 07.02.2018 01:56:21

Кстати, вот упрощенная процедура выдранная из выше приведенного теста .
(Между прочим работает.. 8) )

Код: Выделить всё
  Procedure OpenCV_ARTest(Var src: pIplImage);
  function CvSize(const width, height: Integer): TCvSize;
begin
  Result.width  := width;
  Result.height := height;
end;
function CvTermCriteria(_type: Integer; max_iter: Integer; epsilon: Double): TCvTermCriteria;
  begin
    Result.type_  := _type;
    Result.maxIter := max_iter;
    Result.epsilon  := epsilon;
  end;
  type
    TCvPointArray = array [0 .. 100] of CvPoint;
    pCvPointArray = ^TCvPointArray;

    pCvPoint2D32f = ^TCvPoint2D32f;

(*    TCvPoint2D32f = record
      x: Single;
      y: Single;
  {$IFDEF DELPHIXE2_UP}
      class operator Subtract(a, b: TCvPoint2D32f): TCvPoint2D32f; // Subtraction of type TCvPoint2D32f
      function Norm: Single;
      function cvPoint: TCvPoint;
  {$ENDIF}
    end;

}*)
Type   Tcorners=Array[0..1] of  pCvPoint2D32f;

  const
  // Print pattern "chessboard 6x5.jpg"
//  trailer_filename =  'trailer.avi';
pic_filename = 'pic.jpg';

Var
  capture: pCvCapture = nil;
  image: pIplImage = nil;
  frame: pIplImage = nil;
  neg_img, cpy_img: pIplImage;
  key: Integer = 0;
  fcount: Integer = 0;
  option: Integer = 0;
  vid: pCvCapture = nil;
  pic: pIplImage;
  b_width: Integer = 5;
  b_height: Integer = 4;
  b_squares: Integer = 20;
  b_size: TCvSize;

  warp_matrix: pCvMat=Nil;
  corners:pCvPoint2D32f  {^ Tcorners} =Nil;
  corner_count: Integer;

  gray: pIplImage;
  found: Integer;

  p: array [0 .. 3] of TCvPoint2D32f;
  q: array [0 .. 3] of TCvPoint2D32f;

  blank: pIplImage;
  pp: array [0 .. 3] of CvPoint;

begin
image:=src;
pic := cvLoadImage(pic_filename);
//cvFlip(pic, pic, 1);

b_size.width := b_width;
b_size.height :=b_height;
if warp_matrix=Nil then
warp_matrix := cvCreateMat(3, 3, CV_32FC1);
if  corners=Nil then
corners := AllocMem(b_squares * SizeOf(TCvPoint2D32f));

//cvFlip(image, image, 1);

    cpy_img := cvCreateImage(cvGetSize(image), 8, 3);
    neg_img := cvCreateImage(cvGetSize(image), 8, 3);

    gray := cvCreateImage(cvGetSize(image), image^.depth, 1);
   found := cvFindChessboardCorners (image, b_size, PCvPoint2D32f(corners), @corner_count,
   CV_CALIB_CB_ADAPTIVE_THRESH or       CV_CALIB_CB_FILTER_QUADS);

    cvCvtColor(image, gray, CV_BGR2GRAY);

    // This function identifies the pattern from the gray image, saves the valid group of corners
    cvFindCornerSubPix(gray,  PCvPoint2D32f(corners), corner_count, cvSize(11, 11), cvSize(-1, -1),
    cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER , 30, 0.1));

if (corner_count = b_squares) then
begin
     blank := cvCreateImage(cvGetSize(pic), 8, 3);
   //  CvCopy(image,blank,nil);
    cvZero(blank);
    cvNot(blank, blank);

     // Set of source points to calculate Perspective matrix
     q[0].x := pic^.width * 0;
     q[0].y := pic^.height * 0;
     q[1].x := pic^.width;
     q[1].y := pic^.height * 0;

     q[2].x := pic^.width;
     q[2].y := pic^.height;
     q[3].x := pic^.width * 0;
     q[3].y := pic^.height;

     // Set of destination points to calculate Perspective matrix
     p[0].x := corners[0].x;
     p[0].y := corners[0].y;
     p[1].x := corners[4].x;
     p[1].y := corners[4].y;

     p[2].x := corners[19].x;
     p[2].y := corners[19].y;
     p[3].x := corners[15].x;
     p[3].y := corners[15].y;

     // Calculate Perspective matrix
     cvGetPerspectiveTransform(@q, @p, warp_matrix);

     // Boolean juggle to obtain 2D-Augmentation
     cvZero(neg_img);
     cvZero(cpy_img);

     cvWarpPerspective(pic, neg_img, warp_matrix,
     //CV_INER_LINEAR + CV_WARP_FILL_OUTLIERS
     9, cvScalarAll(0));

     cvWarpPerspective(blank, cpy_img, warp_matrix,
     //CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS
     9, cvScalarAll(0));
    cvNot(cpy_img, cpy_img);
     cvAnd(cpy_img, image, cpy_img, nil);
     cvOr(image, neg_img, image, nil);
     cvFlip(gray, gray);
    cvReleaseImage(blank);
   end ;



//---------------------------------
    cvReleaseImage(cpy_img);
    cvReleaseImage(neg_img);
    cvReleaseImage(gray);
//------------------------

end;

Но интересно почему прозрачность появляется ?
Вроде неоткуда !

cvNot(cpy_img, cpy_img);
cvAnd(cpy_img, image, cpy_img, nil);
cvOr(image, neg_img, image, nil);

Или это cvOr так хитро работает ?
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Ужосы OpenCV...

Сообщение Alex2013 » 14.02.2018 07:55:32

Глюк победил ...
Все три команды заменил одной (Копирование + маска)
CvCopy(neg_img,image,cpy_img);
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru