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)中
完成!!!