Android 移动视觉人脸检测器除onCreate外,其他功能速度较慢

Android 移动视觉人脸检测器除onCreate外,其他功能速度较慢,android,performance,bitmap,face-detection,vision-api,Android,Performance,Bitmap,Face Detection,Vision Api,我在移动视觉方面遇到了一个问题,人脸检测器非常慢,这是我在一个不是onCreate的函数中运行代码的时候。检测在14秒后完成。但是当我第一次在onCreate中运行detect代码时,它会在一秒钟内加载。我试过这个。我看过这篇文章,但答案是关于位图的,这不是问题所在。下面给出了有关这些场景的更多信息 在场景1中,我在单击按钮后启动检测。但是当我第一次运行探测器时,有14或15秒的延迟。第二次运行探测器时,它会在1秒内运行。内存和CPU似乎正常。 代码如下: private ImageButton

我在移动视觉方面遇到了一个问题,人脸检测器非常慢,这是我在一个不是onCreate的函数中运行代码的时候。检测在14秒后完成。但是当我第一次在onCreate中运行detect代码时,它会在一秒钟内加载。我试过这个。我看过这篇文章,但答案是关于位图的,这不是问题所在。下面给出了有关这些场景的更多信息

在场景1中,我在单击按钮后启动检测。但是当我第一次运行探测器时,有14或15秒的延迟。第二次运行探测器时,它会在1秒内运行。内存和CPU似乎正常。 代码如下:

private ImageButton mTakePictureButton;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTakePictureButton = (ImageButton) findViewById(R.id.take_picture_button);
    mTakePictureButton.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.take_picture_button:
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.camera_example);
            SparseArray<Face> faces = getFaceArrayFromBitmap(bmp);//<----
            break;
    }
}
private SparseArray<Face> getFaceArrayFromBitmap(Bitmap bmp){
    FaceDetector detector = new FaceDetector.Builder(this)
            .setTrackingEnabled(false)
            .setMode(FaceDetector.FAST_MODE)
            .setClassificationType(FaceDetector.NO_CLASSIFICATIONS)
            .setLandmarkType(FaceDetector.NO_LANDMARKS)
            .build();
    // Create a frame from the bitmap and run face detection on the frame.
    Frame frame = new Frame.Builder().setBitmap(bmp).build();
    SparseArray<Face> faceArray = detector.detect(frame);// <--- First time takes 14/15 seconds
    detector.release();
    return faceArray;
}
private ImageButton mtakpicturebutton;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MTAKiePictureButton=(ImageButton)findViewById(R.id.take_picture_按钮);
mTakePictureButton.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.拍照按钮:
位图bmp=BitmapFactory.decodeResource(getResources(),R.drawable.camera_示例);

SparseArray faces=getFaceArrayFromBitmap(bmp);//是否facedetector第一次加载了一些LIB并进行了一些其他设置(例如启动服务)?@Sandstar在第一次运行检测器时确实如此。但我已经运行了多次检测器。因此,在这种情况下,它没有意义,因为在onCreate中,它在1秒内运行。当我在另一个函数中运行它时,它有14秒的延迟。
private ImageButton mTakePictureButton;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTakePictureButton = (ImageButton) findViewById(R.id.take_picture_button);
    mTakePictureButton.setOnClickListener(this);

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.camera_example);
    SparseArray<Face> faces = getFaceArrayFromBitmap(bmp);// <-----
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.take_picture_button:

            break;
    }
}
private SparseArray<Face> getFaceArrayFromBitmap(Bitmap bmp){
    FaceDetector detector = new FaceDetector.Builder(this)
            .setTrackingEnabled(false)
            .setMode(FaceDetector.FAST_MODE)
            .setClassificationType(FaceDetector.NO_CLASSIFICATIONS)
            .setLandmarkType(FaceDetector.NO_LANDMARKS)
            .build();
    // Create a frame from the bitmap and run face detection on the frame.
    Frame frame = new Frame.Builder().setBitmap(bmp).build();
    SparseArray<Face> faceArray = detector.detect(frame);// <-- Now it takes only 1 second the first time
    detector.release();
    return faceArray;
}