[英]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);
}
}
其中mFaceDetector
為mFaceDetector = new FaceDetectorOpenCV();
,是一個構造函數,它加載系統庫和面部層疊並按上述方法初始化DetectionBasedTracker。
問題是您沒有使用面部檢測器(CascadeClassifier)類,而是基於該檢測器的面部跟蹤器(DetectionBasedTracker)。
我沒有在官方文檔中找到此類,也沒有調查代碼,因此我無法確切告訴您它是如何工作的,但是根據此頁面 ,它具有參數minDetectionPeriod,這可能是導致該錯誤的原因。您正在觀察的行為。
我想除非過濾器至少檢測到minDetectionPeriod次,否則它不會返回軌道,以便過濾零星的錯誤檢測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.