MediaPipe框架解析(三):android edge_detection详解
在上一章MediaPipe框架解析(二):mediapipe helloworld中我们已经顺利构建并运行了android上的helloworld项目,本章我们将会继续详解该helloworld项目。
面对一个新项目,我一般分三步走
- 先把项目跑起来
- 分析项目的产物
- 分析项目源码
helloworld产物分析
上一章我们生成了helloworld.apk在bazal-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic下,在将helloworld.apk重命名为helloworld.zip后解压到当前路径下,会得到如下结构
我比较关心的有如下文件,但目前还不清楚具体用途:
- assets/mobile_gpu.binarypb
- lib/arm64-v8a/libmediapipe_jni.so
- lib/arm64-v8a/libopencv_java4.so
后续应该会从帧数据的流向并结合这几个关键文件的用途来做源码分析。
源码分析
相机打开
先根据AndroidManifest.xml找到入口MainActivity,在MainActivity的onResume中可以看到应该是使用了CameraXPreviewHelper来打开和预览相机,相机数据通过SurfaceTexture输出。SurfaceTexture经过ExternalTextureConverter的renderNext方法后就将OES纹理转为了Texture2D的问题,并将该代表相机帧的AppTextureFrame返回到了com.google.mediapipe.components.FrameProcessor.onNewFrame方法中,并在onNewFrame方法中对相机帧做了边缘处理等操作。
边缘处理
// 先占个坑位,今天太晚了,明天接着看