【问题标题】:How to optimize dlib landmark detection?如何优化 dlib 地标检测?
【发布时间】:2017-09-21 14:04:32
【问题描述】:

如何优化 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;
}

我的代码有什么问题?

【问题讨论】:

    标签: java android opencv libgdx dlib


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 2016-07-18
      • 2016-07-09
      • 2021-03-22
      • 2016-12-25
      • 2018-06-22
      • 2017-02-09
      • 2017-08-29
      • 2012-05-08
      相关资源
      最近更新 更多