получение ошибки «Код фатального сигнала 7 (SIGBUS) 1, адрес ошибки» при использовании cv :: CascadeClassifier :: deteMultiScale для программы обнаружения лиц - PullRequest
0 голосов
/ 01 февраля 2019

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

A / libc: фатальный сигнал 7 (SIGBUS), код 1, адрес ошибки 0x в tid

Ошибка

при использовании функции cv::CascadeClassifier::detectMultiScale в моем собственном классе Android.

Я знаю, что эта ошибка связана с выравниванием данных.Однако я понятия не имею, какая именно переменная вызывает ее.

Причина, по которой я подозреваю cv::CascadeClassifier::detectMultiScale, заключается в том, что, когда я закомментирую ее, я не получаю сообщение об ошибке.

Я искал в сети и попытался отключить OpenCL, объявить std::vector<cv::Rect>* faces = nullptr; глобальной переменной или вместо создания функции просто написал прямо в цикле захвата камеры.

Я попытался cv::resize(gray, gray) илинастройка параметров для функций detectMultiScale, но не повезло.

Одна вещь, которую я заметил, что если я передам пустой объект cv :: Mat в DetectiveMultiScale, он не выдаст мне ошибку (конечно, он ничего не сделаетвероятно, функция вернется, если image пусто)

Вот мой код:

cv::CascadeClassifier face_cascade;
void *frameRetriever(void *p) {
    ...
    const std::string face_cascade_name = "</path/to/haarcascade_frontalface_alt.xml>";


  if( !face_cascade.load(face_cascade_name) ){
      LOGE("====> face_cascade not loaded");
  } else {
      LOGI("====> face_cascade loaded");
  }
  while (isCameraOpen) {
    ...
    detect_face(capturedMat);
    ...
    }
    ...

}

void detect_face(cv::Mat& src){
    cv::Mat gray;
    std::vector<cv::Rect>* faces;
    cv::cvtColor(src, gray, cv::COLOR_RGBA2GRAY);
    cv::equalizeHist(gray,gray);
    //gray.depth() is 0
    face_cascade.detectMultiScale(src, faces, 1.1, 2, 0, cv::Size(src.cols/10,src.rows/10));
    //commented out the loop that draws rectangle since the app crashes at face_cascade.detectMultiScale

    gray.release();
}

Нет другого массажа ошибок, который я мог бы найти, кроме

A / libc: фатальный сигнал 7 (SIGBUS), код 1, адрес ошибки 0x в tid

Если я изменю 6-й параметр detectMultiScale на значение по умолчанию или что-то вроде cv::Size(30, 30), ябудет еще одна Fatal signal 7 ошибка.

Кто-нибудь естьесть идеи, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...