Mediapipe框架学习之一——Win10安装Mediapipe环境
Mediapipe框架学习之二——Android SDK and NDK 配置
Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包
Mediapipe框架学习之四——利用 Mediapipe aar 包,在AS中构建基于 Mediapipe 的手势识别App
附上工程文件: handtrackinggpu.zip
一、构建 mp_face_detection_aar.aar 包
1. 在 mediapipe/examples/android/src/java/com/google/mediapipe/apps 中,新建文件夹(aar_example)
2. 在新建文件夹(aar_example)中,新建 BUILD 文件(txt文本去掉后缀就对了)
如:mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/BUILD.
3. 修改 BUILD 文件内容为
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
name = "mp_face_detection_aar",
calculators = ["//mediapipe/graphs/face_detection:mobile_calculators"],
)
- name 为 aar 包的名字
- calculators 为将要构建的App所需的计算单元,Mediapipe 库已提供。
4. 运行下面命令构建 aar
- 先给予权限:
cd mediapipe
chmod -R 755 mediapipe/
- 再构建
bazel build -c opt --fat_apk_cpu=arm64-v8a,armeabi-v7a \
//mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mp_face_detection_aar
#应该打印:
# Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mp_face_detection_aar up-to-date:
# bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/mp_face_detection_aar.aar
5. 复制生成的 aar 包到指定路径(aar_example文件夹中)
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/mp_face_detection_aar.aar //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
6. 构建 facedetectiongpu:binary_graph 及相关文件
bazel build -c opt mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:binary_graph
- 复制生成的 facedetectiongpu.binarypb 文件到指定路径(aar_example文件夹中)
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu/facedetectiongpu.binarypb //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
- 复制生成的face_detection_front.tflite 的文件到指定路径(aar_example文件夹中)
cp mediapipe/models/face_detection_front.tflite //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
- 复制生成的 face_detection_front_labelmap.txt 的文件到指定路径(aar_example文件夹中)
cp mediapipe/models/face_detection_front_labelmap.txt //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
7. 下载 opencv-3.4.3-android-sdk.zip (路径随意)
- 解压文件:
- 将 opencv-3.4.3-android-sdk.zip\OpenCV-android-sdk\sdk\native\libs 路径下的 arm64-v8a、armeabi-v7a、x86、x86_64 文件夹提取到新建文件夹(jniLibs)中
二、新建 Android Studio 工程
1. 添加文件
- 将 mp_face_detection_aar.aar 复制到新建 Android Studio 工程 /app/libs 目录下
- 将
facedetectiongpu.binarypb、
face_detection_front.tflite、
face_detection_front_labelmap.txt
复制到新建 Android Studio 工程 /app/src/main/assets(新建文件夹) 目录下 - 将 jniLibs 文件夹复制到新建 Android Studio 工程 /app/src/main/ 目录下
2. 修改 app/build.gradle 文件的依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
// MediaPipe deps
implementation 'com.google.flogger:flogger:0.3.1'
implementation 'com.google.flogger:flogger-system-backend:0.3.1'
implementation 'com.google.code.findbugs:jsr305:3.0.2'
implementation 'com.google.guava:guava:27.0.1-android'
implementation 'com.google.guava:guava:27.0.1-android'
implementation 'com.google.protobuf:protobuf-lite:3.0.0'
// CameraX core library
def camerax_version = "1.0.0-alpha06"
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
}
至此全部依赖已添加完成。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@下面构建手势识别 handtrackinggpu_aar 依赖包并导入 mediapipe 例程中
1.在 mediapipe/examples/android/src/java/com/google/mediapipe/apps 目录下新建多级文件夹
handtrackinggpu_aar -> assets
------------------------------> libs
------------------------------> jniLibs
2. 在新建文件夹(handtrackinggpu_aar )中,新建 BUILD 文件(txt文本去掉后缀就对了)—路径可修改
如:mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar /BUILD.
3. 修改 BUILD 文件内容为
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
name = "mp_face_detection_aar",
calculators = ["//mediapipe/graphs/hand_tracking:mobile_calculators"],
)
- name : aar 包名字不要变(本来想修改为 mp_hand_tracking_aar 再构建的,但是出错了,错误:在 BUILD 文件中没有定义‘mp_hand_tracking_aar ’,暂时没解决。)
构建完成 mp_face_detection_aar.aar 包后再修改为自己想取的名字就好了。 - calculators :face_detection 修改为 hand_tracking,
如:
calculators = ["//mediapipe/graphs/face_detection:mobile_calculators"],
calculators = ["//mediapipe/graphs/hand_tracking:mobile_calculators"],
添加手势识别的计算单元,mediapipe/graphs/face_detection/BUILD文件已声明手势识别的计算单元
4. 运行下面命令构建 aar
- 先给予权限:(给了权限就略过)
cd mediapipe
chmod -R 755 mediapipe/
- 再构建
bazel build -c opt --fat_apk_cpu=arm64-v8a,armeabi-v7a //mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar:mp_face_detection_aar
5. 复制生成的 aar 包到指定路径(handtrackinggpu_aar/libs文件夹中)
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/mp_face_detection_aar.aar //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/libs
6. 构建 handtrackinggpu:binary_graph 及相关文件
bazel build -c opt mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:binary_graph
- 复制生成的 handtrackinggpu.binarypb 文件到指定路径(handtrackinggpu_aar/assets文件夹中)
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.binarypb //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/assets
- 复制生成的 hand_landmark.tflite 的文件到指定路径(handtrackinggpu_aar/assets文件夹中)
cp mediapipe/models/hand_landmark.tflite //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/assets
- 复制生成的 palm_detection.tflite 的文件到指定路径(handtrackinggpu_aar/assets文件夹中)
cp mediapipe/models/palm_detection.tflite //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/assets
- 复制生成的 palm_detection_labelmap.txt 的文件到指定路径(handtrackinggpu_aar/assets文件夹中)
cp mediapipe/models/palm_detection_labelmap.txt //home/bot/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar/assets
7. 添加OpenCV相关文件
将 arm64-v8a、armeabi-v7a、x86、x86_64 文件夹复制到新建文件夹(jniLibs)中
完成!!!