我有这个问题,当我尝试使用适用于Android的openCv库查找戴着眼镜的眼睛时,我的代码不起作用。
我的代码如下:

         try {
            InputStream is = this.getResources().openRawResource(R.raw.haarcascade_eye_tree_eyeglasses);
            File cascadeDir = this.getDir("cascade"+"occhiOcchiali", Context.MODE_PRIVATE);
            File cascadeFile = new File(cascadeDir, "haarcascade_eye_tree_eyeglasses.xml");
            FileOutputStream os = new FileOutputStream(cascadeFile);
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = is.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            is.close();
            os.close();
            mioClassificatoreOcchiOcchiali = new CascadeClassifier(cascadeFile.getAbsolutePath());
            Log.d("metodo1", cascadeFile.getAbsolutePath());
            if (mioClassificatoreOcchiOcchiali.empty()) {
                Log.d("metodo1", "Failed to load cascade classifier");
                mioClassificatoreOcchiOcchiali = null;
            } else
                Log.d("metodo1", "Loaded cascade classifier from " + cascadeFile.getAbsolutePath());

            cascadeFile.delete();
            cascadeDir.delete();

        } catch (IOException e) {
            e.printStackTrace();
            Log.d("metodo1" , "Failed to load cascade. Exception thrown: " + e);
        }

通过这种方式,我采用了分类器,并使用以下代码尝试戴眼镜找到眼睛:
LinkedList<org.opencv.core.Rect> occhi = new LinkedList<org.opencv.core.Rect>();
                    org.opencv.core.Size sOcchi = new org.opencv.core.Size(15, 15);
                    mioClassificatoreOcchiOcchiali.detectMultiScale(matOcchi, occhi,1.1, 2,0,sOcchi);

如果我离开眼镜,结果总是为0插入,结果总是为2。
任何人都可以帮助我吗?
提前致谢。

最佳答案

我没有玩过OpenCV的Android实现,但是我使用了普通版本。如果您的代码与Haar眼部级联效果很好,而与带眼镜的Haar级联效果不佳,那么我怀疑openCV打包的眼部+眼镜级联效果不是很好。尝试区分正面和侧面时,我遇到了同样的问题。

您可以选择train a new cascade(这是劳动密集型的),也可以四处寻找其他人训练过的for this case的级联。

07-24 09:52