|
|
|
@ -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<RecognitionObjectBean> 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");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|