簡體   English   中英

OpenCV人臉檢測在同一圖像上不一致

[英]OpenCV face detection working inconsistently on same image

我正在嘗試使用Android上的OpenCV在位圖中檢測面部。 如果我運行檢測功能30次,則前n次未發現人臉,其中n在7-15左右。 檢測器開始在第8-16次檢測中找到人臉,並在此之后持續工作。 這使用相同的圖像,沒有做任何更改(故意)。

到底是怎么回事? 我缺少某種初始化步驟嗎? 為什么這不一致?

碼:

public ArrayList<Rect> detectFaces(Bitmap input) {
    //Necessary for making the native detector happy
    MatOfRect output = new MatOfRect();

    //Convert our bitmap to a Mat so the detector can use it
    Mat inputMat = new Mat(input.getWidth(), input.getHeight(), CvType.CV_8UC1);
    bitmapToMat(input, inputMat);
    Imgproc.cvtColor(inputMat, inputMat, Imgproc.COLOR_RGB2GRAY);

    //Actually do the detection
    mNativeDetector.detect(inputMat, output);
    List<org.opencv.core.Rect> faceList = output.toList();

    //Convert OpenCV Rects to Android Rects.
    ArrayList<Rect> rectList = new ArrayList<Rect>();
    for (org.opencv.core.Rect face : faceList){
        rectList.add(OpenCvConversions.openCVToAndroidRect(face));
    }
    return rectList;

檢測器初始化為mNativeDetector = new DetectionBasedTracker(mCascadeFile.getAbsolutePath(), 0); 其中,mCascadeFile是一個文件對象,其中包含正面哈爾級聯文件。

致電:

public void testFaces() throws IOException{
        Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.face);
        int detectedFaces = 0;
        for (int i=0; i<30; i++){
            ArrayList<Rect> faces = mFaceDetector.detectFaces(bitmap);
            detectedFaces += faces.size();
            System.out.println("Detected faces: " + detectedFaces);
    }
}

其中mFaceDetectormFaceDetector = new FaceDetectorOpenCV(); ,是一個構造函數,它加載系統庫和面部層疊並按上述方法初始化DetectionBasedTracker。

問題是您沒有使用面部檢測器(CascadeClassifier)類,而是基於該檢測器的面部跟蹤器(DetectionBasedTracker)。

我沒有在官方文檔中找到此類,也沒有調查代碼,因此我無法確切告訴您它是如何工作的,但是根據此頁面 ,它具有參數minDetectionPeriod,這可能是導致該錯誤的原因。您正在觀察的行為。

我想除非過濾器至少檢測到minDetectionPeriod次,否則它不會返回軌道,以便過濾零星的錯誤檢測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM