Jump to content
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 все работает без исключений...

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by Smorodov

Share this post


Link to post
Share on other sites
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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

 

lbpcascade_frontalface.xml

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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 не в основном потоке программы у меня крутится, а в отдельном потоке запускается...

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×