Перейти к содержимому
Compvision.ru
al072

Ошибка в opencv_core2410.dll после сборки проекта под VS 2019

Recommended Posts

Доброго времени суток! Есть большой проект с распознаванием лиц который разрабатывался в Windows 7 + Visual Studio 2010, появилась задача мигрировать проект для дальнейшей разработки на Windows 10 + Visual Studio 2019. Миграция проекта прошла успешно, все основные функции и модули проекта работают, но есть одна проблема при попытке чтения CascadeClassifier из xml файла возникает ошибка: Вызвано исключение по адресу 0x79C8A5A9 (opencv_core2410.dll) в sdkDemo.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000001.

Вот код при выполнении которого происходит исключение:

void CsdkDemoDlg::initDetectors(CascadeClassifier &faceCascade)
{
 
    // Load the Face Detection cascade classifier xml file.
    try {  
 
        faceCascade.load("C:\\lbpcascade_frontalface.xml"); <<<<<<<-------Вот здесь вылетает ИСКЛЮЧЕНИЕ
 
    } catch (cv::Exception &e) {}
}

Библиотеки и инклуды все подключены как положено, проект компилируется и запускается без ошибок., при миграции проекта код программы не менялся, используется библиотека Open CV 2.4.1, при сборке на VS 2010 все работает без исключений...

Помогите плиз найти проблему, готов предоставлять всю необходимую дополнительную информацию. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я бы собрал программу и OpenCV в Debug версии и глазами посмотрел, в чём ошибка. Или вставил логи в релизную версию OpenCV.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А рабочая папка правильно установлена ? Если бросить каскад в папку с ехешником и запустить отдельно. Тоже падает ?

Изменено пользователем Smorodov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Smorodov сказал:

А рабочая папка правильно установлена ? Если бросить каскад в папку с ехешником и запустить отдельно. Тоже падает ?

Пробовал всяко разно и к переменной в коде путь к xml привязывать и абсолютный путь в формате "C:\\" задавал, падает сволочь., самое интересное что при сборке в VS 2010 все работает идеально..

 

21 час назад, Nuzhny сказал:

Я бы собрал программу и OpenCV в Debug версии и глазами посмотрел, в чём ошибка. Или вставил логи в релизную версию OpenCV.

Собрал в Debug версии, пошел дебаггером гулять.. странно но в debag режиме я совсем в другом месте получаю debug Assertion

5ea06cffacb81_.PNG.a5b4563c9eaf025333f899038e2250a4.PNG

после того как нажимаю кнопку повтор дальше вызов завершается на функции detectLargestObject в самом низу функции после строчки Return an Invalid rect , то есть крайнее условие If не выполняется, выполняется ветка else.

void detectLargestObject(const Mat &img, CascadeClassifier &cascade, Rect &largestObject, int scaledWidth)
{
    // Only search for just 1 object (the biggest in the image).
    int flags = CASCADE_FIND_BIGGEST_OBJECT;// | CASCADE_DO_ROUGH_SEARCH;
    // Smallest object size.
    Size minFeatureSize = Size(20, 20);
    // How detailed should the search be. Must be larger than 1.0.
    float searchScaleFactor = 1.1f;
    // How much the detections should be filtered out. This should depend on how bad false detections are to your system.
    // minNeighbors=2 means lots of good+bad detections, and minNeighbors=6 means only good detections are given but some are missed.
    int minNeighbors = 4;

    // Perform Object or Face Detection, looking for just 1 object (the biggest in the image).
    vector<Rect> objects;
    detectObjectsCustom(img, cascade, objects, scaledWidth, flags, minFeatureSize, searchScaleFactor, minNeighbors);
    if (objects.size() > 0) {
        // Return the only detected object.
        largestObject = (Rect)objects.at(0);
    }
    else {
        // Return an invalid rect.
        largestObject = Rect(-1,-1,-1,-1);
    }
}

дальше вот что вижу в студии:

5ea06f7641313_.thumb.png.266184917810938e71570cfb9aed8f19.png

Если в Degug Assertion окне нажимаю другую кнопку продолжить, получаю следующее сообщение в студии:

5ea0703d45924_2.thumb.png.ea37839668a2193c373a5b7969ba7794.png

Господа как дальше быть то? подскажите плиз куда смотреть что копать еще можно 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если бряку поставить перед местом ошибки и вручную протопать и посмотреть вокруг ?

На всякий случай прицепил каскады от моей версии, сейчас сам попробую загрузить у себя. 

 

UPD: прогнал у себя на коде:

   std::string cfname = "lbpcascade_frontalface.xml";
    cv::CascadeClassifier faceCascade;
    faceCascade.load(cfname);

Все без ошибок. Студия 2019, виндовс 10, opencv 4.2 .

 

lbpcascade_frontalface.xml

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Согласен, надо ставить breakpoint до падения, чтобы убедиться, что хотя бы каскад загружен и вообще почему падает.

Не исключено, что в той версии OpenCV  были ошибки или UB, а тут новый компилятор и они стрельнули.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
23 часа назад, Smorodov сказал:

А если бряку поставить перед местом ошибки и вручную протопать и посмотреть вокруг ?

На всякий случай прицепил каскады от моей версии, сейчас сам попробую загрузить у себя. 

 

UPD: прогнал у себя на коде:

   std::string cfname = "lbpcascade_frontalface.xml";
    cv::CascadeClassifier faceCascade;
    faceCascade.load(cfname);

Все без ошибок. Студия 2019, виндовс 10, opencv 4.2 .

 

lbpcascade_frontalface.xml

Спасибо за каскады, к сожалению не помогло! BP поставил везде где только можно было в радиусе этой ошибки, но без успешно... 

Не знаю на сколько глупость щас скажу, но может эта ошибка во время debug появляется по причине того что функция  detectLargestObject не в основном потоке программы у меня крутится, а в отдельном потоке запускается...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А попробуйте сделать минимальную программку из 3 строчек и посмотрите :)  Так влияние окружения исключите. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем большое спасибо за советы и помощь! Проблема решена. Пересобрал opencv c помощью CMake и VS2019 и все заработало... 

Бл столько времени убил, нужно было сразу с этого начинать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×