Java OpenCV 3.0.0 FaceDetect样本失败
我正在尝试运行OpenCV,我正在使用以下命令 我将显示以下错误行:Java OpenCV 3.0.0 FaceDetect样本失败,java,opencv,Java,Opencv,我正在尝试运行OpenCV,我正在使用以下命令 我将显示以下错误行: OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file ..\..\..\..\opencv\modules\objdetect\src\cascadedetect.cpp, line 1580 Exception in thread "main" CvException [org.opencv.co
OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file ..\..\..\..\opencv\modules\objdetect\src\cascadedetect.cpp, line 1580
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: ..\..\..\..\opencv\modules\objdetect\src\cascadedetect.cpp:1580: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
]
at org.opencv.objdetect.CascadeClassifier.detectMultiScale_1(Native Method)
at org.opencv.objdetect.CascadeClassifier.detectMultiScale(CascadeClassifier.java:176)
at org.maxbit.opencv.samples.DetectFaceDemo.run(SampleB.java:29)
at org.maxbit.opencv.samples.SampleB.main(SampleB.java:51)
任何人都能告诉我这个错误是什么意思,或者如何调试它吗?发生这种情况通常有两个原因
lbpcascade_frontalface.xml
不存在于指定路径cascadedclassifier
是静默的。开发者有责任调用empty()
方法并检查分类器是否正确加载
CascadeClassifier cascade = new CascadeClassifier( CASCADE_CLASSIFIER_PATH );
if ( cascade.empty() ) {
//handler error here
}
您得到的异常来自OpenCV本机代码断言。我在Windows框上运行时遇到了相同的错误。此示例在linux上运行,但在Windows上不运行 问题出在xml文件和图像的
getResource()
之后的.getPath()
调用中
问题是URL.getPath()
和URL.getFile()
都返回格式为“/c:/…”的绝对路径
在此基础上的OpenCV例程必须是“c:/…”(无前导“/”)。这似乎是版本3.0.0早期的一个bug
我希望这会有所帮助,OpenCV for Java似乎是一个很棒的工具。。。但是,当这些例子不起作用时,这有点令人沮丧。我也遇到了这个问题。问题在于.getPath()返回格式的绝对路径 例如:“/C:/Users/projects/FaceDetection/bin/com/face/detection/haarcascade\u frontalface\u alt.xml” 所以像这样修改代码
CascadeClassifier faceDecetor = new CascadeClassifier(FaceDetection.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
最新的openCV有一个问题,当路径中有空格时,它不起作用,请执行以下操作:
String s =CameraPanel.class.getResource("lbpcascade_frontalface.xml").getPath().substring(1);
String[] split = s.split("%20");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < split.length-1; i++) {
stringBuilder.append(split[i]+" ");
}
stringBuilder.append(split[split.length-1]);
faceDetector = new CascadeClassifier(stringBuilder.toString());
String s=CameraPanel.class.getResource(“lbpcascade_frontalface.xml”).getPath().substring(1);
字符串[]split=s.split(“%20”);
StringBuilder StringBuilder=新的StringBuilder();
对于(int i=0;i
我遇到了同样的问题:在windows上,OpenCV会阻塞路径中的前缀“\”和任何空格,正如Imad和Aung所指出的那样。我的解决方案比Imad的略短:
更改此项:
CascadeClassifier faceDecetor = new CascadeClassifier(
getClass().class.getResource("haarcascade_frontalface_alt.xml").getPath());
为此:
CascadeClassifier faceDecetor = new CascadeClassifier(
getClass().class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1).replaceAll("%20", " "));
对我来说,最简单的解决方案是:
private void checkboxSelection(String classifierPath) {
// load the classifier(s)
faceCascade.load(classifierPath);
// Did it work?
if (faceCascade.empty()) {
// Try the full path
String resource = getClass().getResource(classifierPath).getPath();
// Discard leading / if present.
if ( resource.startsWith("/")) {
resource = resource.substring(1);
}
faceCascade.load(resource);
}
// now the video capture can start
cameraButton.setDisable(false);
}
我正在使用openCv 3.4.1
我认为初始化器中有一个bug。
为了消除这个错误,我必须再次调用“load”。希望这个解决方案能有所帮助
cascadeClassifier = new CascadeClassifier(mCascadeFile.getAbsolutePath());
cascadeClassifier.load(mCascadeFile.getAbsolutePath());
我在Mac(OSX)Java上遇到了问题
然而路径应该以“/”
开头,因此我添加了“/”
现在一切正常:)我也面临同样的问题。这只是因为您为“haarcascade_frontalface_alt2.xml”提供的路径可能不正确或不正确。只需从文件资源管理器复制完整路径并粘贴即可。这个解决方案对我有效
face_cascade = cv2.CascadeClassifier('C:/Users/xyz/FaceDetect/faceId/OpenCV-Python-Series-master/src/cascades/data/haarcascade_frontalface_alt2.xml')
谢谢,这样更好,我没有拼写到xml:S的路径,但现在我有一个问题,它在这一行失败:@maxbit89对不起。我没办法。带更多细节的单独问题可能会有所帮助。下面是一个新问题希望这有帮助:S如果您使用的是opecv 3.0.0,这应该是答案。这应该是使用opecv 3时的答案
face = new CascadeClassifier("/" +
CameraFrame.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
face_cascade = cv2.CascadeClassifier('C:/Users/xyz/FaceDetect/faceId/OpenCV-Python-Series-master/src/cascades/data/haarcascade_frontalface_alt2.xml')