使用 JavaScript 加载 haarcascasdes 文件总是返回 false

问题描述 投票:0回答:1

我正在使用 opencv 做我的第一个 Web 应用程序,这个 OpenCV 人脸检测教程指导我加载

haarcascade_frontalface_default.xml
然后检测照片中的人脸,示例代码如下:

let faceCascade = new cv.CascadeClassifier();
faceCascade.load('haarcascade_frontalface_default.xml'); //<--return false

My haarcascades file structure

由于加载失败,我无法使用

detectMultiScale
功能,错误日志是:

Assertion failed (!empty()) in detectMultiScale, file /build/master-contrib_docs-lin64/opencv/modules/objdetect/src/cascadedetect.cpp, line 1698

我的 haarcascade 文件是否放置在错误的位置?还是

load()
中的参数错误?

javascript asp.net opencv
1个回答
0
投票

好的,所以您需要通过将文件读入 opencv 文件系统来使 cv 可以访问该文件。为此,您需要使用 XMLHttpRequest() 获取 URL,然后调用 cv.CascadeClassifier,如下所示:

const xml_model_url = 'https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml';
const xml_path = "haarcascade_frontalface_default.xml";
let faceCascade = null;

function createFileFromUrl(path, url, callback) {
// path: string to access loaded file trough cv
// url: path of the actual file on your FS
// callback: what to do when file is loaded

  let request = new XMLHttpRequest();
  request.open('GET', url, true);
  request.responseType = 'arraybuffer';
  request.onload = function(ev) {
      request = this;
      if (request.readyState === 4) {
          if (request.status === 200) {
              let data = new Uint8Array(request.response);
              cv.FS_createDataFile('/', path, data, true, false, false);
              callback();
          } else {
              console.error('Failed to load ' + url + ' status: ' + request.status);
          }
      }
  };
  request.send();
}
function createCascade() {
  faceCascade = new cv.CascadeClassifier(xml_path);
}
createFileFromUrl(xml_path, xml_model_url,createCascade);
© www.soinside.com 2019 - 2024. All rights reserved.