2
如何優化dlib界標檢測? 位圖160x120被處理7秒。 我想要50或100ms。 我的代碼:如何優化dlib界標檢測?
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;
}
這有什麼錯我的代碼?