Я пытаюсь добавить простую функцию распознавания лиц в приложение камеры.Я пытался следовать примерам (в основном официальному), но я получаю
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
ошибка.
Кто-нибудь естьесть идеи, почему это происходит?