java - 如何优化 dlib 地标检测?

标签 java android opencv libgdx dlib

如何优化 dlib 地标检测? 位图 160x120 处理时间为 7 秒。 我想要 50 或 100 毫秒。 我的代码:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();

    ArrayList<android.graphics.Point> points = new ArrayList();
    try {
        long startTime = System.currentTimeMillis();
        points = LandmarkDetection.getLandmark(matToBitmap(mRgba), this, landmarkPath);
        long endTime = System.currentTimeMillis();
        Log.i(TAG +"Time cost: ", String.valueOf((endTime - startTime) / 1000f) + " sec");
        //drawPoint(points);
        Log.i(TAG, "size = " + String.valueOf(points.size()));
    }catch (Exception e) {
        Log.i(TAG, "bitmap error! " + e.getMessage());
    }
    return mRgba;
}

private Bitmap matToBitmap(@NonNull Mat mat) {
    Bitmap bmp;
    try {
        Mat resized = new Mat();
        Imgproc.resize(mat, resized, new Size(160, 120));
        bmp = Bitmap.createBitmap(resized.cols(), resized.rows(), Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(resized, bmp);
    }catch(Exception e) {
        Log.e(TAG + ":matToBitmap", e.getMessage());
        return null;
    }
    return bmp;
}

和 LandmarkDetection 类(这个方法一直占用时间):

public static ArrayList<Point> getLandmark(@NonNull Bitmap bmp, Context context, String landmarkPath) {
    mFaceDet = new FaceDet(landmarkPath);
    Log.i(AndroidLauncher.TAG, String.valueOf(new File(context.getExternalCacheDir() + "/shape_predictor_68_face_landmarks.dat").exists()));
    Log.i(AndroidLauncher.TAG, "Ширина: " + String.valueOf(bmp.getWidth()) + "\nВысота: " + String.valueOf(bmp.getHeight()));
    results = mFaceDet.detect(bmp);
    if (results != null) {
        for (final VisionDetRet ret : results) {
            landmarks = ret.getFaceLandmarks();
        }
    }
    return landmarks;
}

我的代码有什么问题?

最佳答案

很多东西可以优化你的代码:

  1. 不要为每个人脸检测构建 face_detector 和 shape_predictor。这可能需要几秒钟。您可以为所有线程使用一个 shape_predictor,但 face_detector 应该是每个线程一个
  2. mFaceDet 代码不清楚。可能是你在那里调整图像大小或做其他操作
  3. http://dlib.net/faq.html#Whyisdlibslow

关于java - 如何优化 dlib 地标检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43595738/

相关文章:

java - 在 borderlayout 中使用 JPanel 错误打包 JFrame

java - 关于 ServerSocket,需要澄清

java - Eclipse 缺少属性

python-3.x - 为什么sorted(contour)[0]与sorted(contour)[:1]不同

multithreading - 多线程人脸检测停止工作

java - 如何更改特定 JButton 的颜色

java - 如何在java中打乱二维数组

android - 当设备方向改变时 onCreate 方法不断被调用

Android:按钮在不同分辨率屏幕中的位置

eclipse - 为什么 OpenCV 中与 CvSeq 相关的一切都如此困惑?