diff --git a/model_zoo/official/lite/object_detection/app/src/main/java/com/mindspore/hiobject/objectdetect/CameraFragment.java b/model_zoo/official/lite/object_detection/app/src/main/java/com/mindspore/hiobject/objectdetect/CameraFragment.java index 2ff5563329..7c950d2704 100644 --- a/model_zoo/official/lite/object_detection/app/src/main/java/com/mindspore/hiobject/objectdetect/CameraFragment.java +++ b/model_zoo/official/lite/object_detection/app/src/main/java/com/mindspore/hiobject/objectdetect/CameraFragment.java @@ -38,12 +38,9 @@ import android.view.Surface; import android.view.TextureView; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import android.widget.Toast; -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; - import com.mindspore.hiobject.R; import com.mindspore.hiobject.help.RecognitionObjectBean; import com.mindspore.hiobject.help.TrackingMobile; @@ -57,11 +54,17 @@ import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; + import static com.mindspore.hiobject.help.RecognitionObjectBean.getRecognitionList; public class CameraFragment extends Fragment { + private long lasttime = System.currentTimeMillis(); + /** * Conversion from screen rotation to JPEG orientation. */ @@ -157,6 +160,11 @@ public class CameraFragment extends Fragment { */ private ObjectRectView mObjectRectView; + /** + * An {@link TextView} for display infer time. + */ + private TextView mTvInferInfo; + /** * A {@link CameraCaptureSession } for ic_launcher preview. */ @@ -215,6 +223,16 @@ public class CameraFragment extends Fragment { */ private Handler mBackgroundHandler, mPreBackgroundHandler; + /** + * A {@link Handler} for running tasks in the ui thread. + */ + private Handler mUiHandler; + + /** + * A {@link Long} UI Thread ID. + */ + private Long mUiThreadId; + /** * An {@link ImageReader} that handles still image capture. */ @@ -404,6 +422,8 @@ public class CameraFragment extends Fragment { public void onViewCreated(final View view, Bundle savedInstanceState) { mTextureView = view.findViewById(R.id.texture); mObjectRectView = view.findViewById(R.id.objRectView); + mTvInferInfo = view.findViewById(R.id.tv_infer_info); + mUiThreadId = Thread.currentThread().getId(); } @Override @@ -612,7 +632,9 @@ public class CameraFragment extends Fragment { mPreBackgroundThread = new HandlerThread("AlgoBackground"); mPreBackgroundThread.start(); mPreBackgroundHandler = new Handler(mPreBackgroundThread.getLooper()); - mPreBackgroundHandler.postDelayed(periodicClassify, 500); + mPreBackgroundHandler.postDelayed(periodicClassify, 5); + + mUiHandler = new Handler(); } @@ -620,15 +642,12 @@ public class CameraFragment extends Fragment { private Runnable periodicClassify = new Runnable() { public void run() { - synchronized (CameraFragment.this) { - Bitmap bitmap = mTextureView.getBitmap(); - if (bitmap != null) { - drawBitmapToRect(bitmap); - } - //重复请求 - if (mPreBackgroundHandler != null && !isPreBackgroundThreadPause) { - mPreBackgroundHandler.postDelayed(periodicClassify, 500); - } + Bitmap bitmap = mTextureView.getBitmap(); + if (bitmap != null) { + drawBitmapToRect(bitmap); + } else { + Log.d(TAG, "bitmap is null"); + mPreBackgroundHandler.postDelayed(periodicClassify, 5); } } }; @@ -704,22 +723,61 @@ public class CameraFragment extends Fragment { private List recognitionObjectBeanList; + public boolean isPreFinished = true; + public void drawBitmapToRect(Bitmap bitmap) { + if (!isPreFinished) { + return; + } + isPreFinished = false; + + long stepDelayTime = (System.currentTimeMillis() - lasttime); + Log.d(TAG, "Step Delay time>>>" + stepDelayTime); + if (recognitionObjectBeanList != null) { recognitionObjectBeanList.clear(); } + Log.d(TAG, "bitmap_w:" + bitmap.getWidth() + " bitmap_h:" + bitmap.getHeight()); long startTime = System.currentTimeMillis(); String result = mTrackingMobile.MindSpore_runnet(bitmap); long endTime = System.currentTimeMillis(); - Log.d(TAG, "MindSpore_runnet:time>>>" + (endTime - startTime)); + long inferTime = (endTime - startTime); + Log.d(TAG, "MindSpore_runnet:time>>>" + inferTime); Log.d(TAG, "MindSpore_runnet:result>>>" + result); + isPreFinished = true; + lasttime = System.currentTimeMillis(); + mPreBackgroundHandler.post(periodicClassify); if (TextUtils.isEmpty(result)) { mObjectRectView.clearCanvas(); - return; + } else { + long startTimeMills = System.currentTimeMillis(); + recognitionObjectBeanList = getRecognitionList(result); + long endTimeMills = System.currentTimeMillis(); + Log.d(TAG, "getRecognitionList use time>>>" + (endTimeMills - startTimeMills)); + long startDraw = System.currentTimeMillis(); + mObjectRectView.setInfo(recognitionObjectBeanList); + setInferInfo(inferTime, stepDelayTime); + long endDraw = System.currentTimeMillis(); + Log.d(TAG, "Draw time>>>" + (endDraw - startDraw)); + } + } + + private void runOnUiThread(Runnable runnable) { + if (Thread.currentThread().getId() != mUiThreadId) { + mUiHandler.post(runnable); + } else { + runnable.run(); } - recognitionObjectBeanList = getRecognitionList(result); - mObjectRectView.setInfo(recognitionObjectBeanList); + } + + private void setInferInfo(final long inferTime, final long stepDelayTime) { + runOnUiThread(new Runnable() { + @Override + public void run() { + mTvInferInfo.setText("pre and infer time:" + inferTime + "ms Step_Delay_time:" + stepDelayTime+"ms"); + } + }); } diff --git a/model_zoo/official/lite/object_detection/app/src/main/res/layout/fragment_camera.xml b/model_zoo/official/lite/object_detection/app/src/main/res/layout/fragment_camera.xml index c524fa1c51..b4e4b90900 100644 --- a/model_zoo/official/lite/object_detection/app/src/main/res/layout/fragment_camera.xml +++ b/model_zoo/official/lite/object_detection/app/src/main/res/layout/fragment_camera.xml @@ -15,4 +15,14 @@ android:layout_height="match_parent" /> + + \ No newline at end of file