Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包

Mediapipe官方文档

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文件已声明手势识别的计算单元

  • Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包_第1张图片

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)中

完成!!!

Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包_第2张图片
Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包_第3张图片
Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包_第4张图片
Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包_第5张图片

你可能感兴趣的:(Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包)