佛系代码,能跑就好
上来先发一下软件的样子功能。注意!nnapi只能在安卓8.1及以上开启,我没有写检测,但是在测试的时候请注意手机安卓版本。
App链接:pan.baidu.com/s/1xmESfnc7r2SgSpYom2-X4Q
提取码:45hw
说明下使用的版本,本app使用java编写。
def camerax_version = "1.0.0-alpha10"
implementation "androidx.camera:camera-camera2:${camerax_version}"
// If you want to use the CameraX View class
implementation "androidx.camera:camera-view:1.0.0-alpha08"
// If you want to use the CameraX Extensions library
implementation "androidx.camera:camera-extensions:1.0.0-alpha08"
// If you want to use the CameraX Lifecycle library
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation('org.tensorflow:tensorflow-lite:0.0.0-nightly') { changing = true }
implementation('org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly') { changing = true }
implementation('org.tensorflow:tensorflow-lite-support:0.0.0-nightly') { changing = true }
下面我就只放相机主要部分的代码啦
ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(context);
CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
cameraProviderFuture.addListener(new Runnable() {
@Override
public void run() {
try {
ProcessCameraProvider processCameraProvider= (ProcessCameraProvider) cameraProviderFuture.get();
preview = new Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setTargetRotation(Mpreview.getDisplay().getRotation())
.build();
preview.setSurfaceProvider(Mpreview.getPreviewSurfaceProvider());
imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setTargetRotation(Mpreview.getDisplay().getRotation())
.build();
imageAnalyzer = new ImageAnalysis.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setTargetRotation(Mpreview.getDisplay().getRotation())
.build();
ExecutorService cameraExecutor = Executors.newSingleThreadExecutor();
imageAnalyzer.setAnalyzer(cameraExecutor, new ImageAnalysis.Analyzer() {
@SuppressLint("UnsafeExperimentalUsageError")
@Override
public void analyze(@NonNull ImageProxy image) {
Log.d("分析","start");
classification(image);//调用图像分类的函数
image.close();
}
});
processCameraProvider.unbindAll();
processCameraProvider.bindToLifecycle((LifecycleOwner) context,cameraSelector,preview,imageCapture,imageAnalyzer);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, ContextCompat.getMainExecutor(context));
学过tensorflow lite的同学一定了解过那个图像识别的demo,想必那复杂的结构第一次看,你们也看晕了吧,至少我晕了(@_@; )。这里就吹一下cameraX,使用上cameraX之后整个流程就瞬间清爽了很多。
整个项目会上传到csdn,喜欢的同学可以自己下载看看啦。
https://download.csdn.net/download/weixin_44544354/12280656
佛系代码,能跑就好emmmm要是代码写的不漂亮欢迎指正(* ̄3 ̄)╭