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文件已聲明手勢識別的計算單元

  • 在這里插入圖片描述

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

完成!!!

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM