MediaPipe ジェスチャー (手)

シリーズ記事ディレクトリ

1. Ubuntu に MediaPipe をインストールします。
2. Ubuntuで Android 用の MediaPipe をビルドします
。 3. Ubuntu で MediaPipe Android アーカイブ (AAR) をビルドします。



序文

最近はジェスチャ認識の需要があるので、各ジェスチャのノード座標を認識し、あとは単純にジェスチャを計算するMediaPipe の Hands を見ました。

この記事は、主に aar ライブラリをコンパイルする前の記事の補足です。これは、自分でコンパイルした hands aar ライブラリを公式に使用するためです。


1. 使用手順

1. MediaPipe のソースコードをクローンする

コマンドは次のとおりです。

git clone git@github.com:google/mediapipe.git
或者
git clone https://github.com/google/mediapipe.git

2. MediaPipe の手の例

Android Studio を開き、Android MediaPipe の例をインポートします。

パス: mediapipe/mediapipe/examples/android/solutions、solutions は Android プロジェクトです。ソリューションを Android studio にインポートします。

実行後の結果:
ここに画像の説明を挿入

次に行う必要があるのは、build.gradle 内の Google Maven ライブラリの aar を独自のパッケージ化された aar に置き換えることです。

hands モジュール内の以下の 2 つの Maven ライブラリの aar を、パッケージ化された独自の aar に置き換えることです。

// MediaPipe Hands Solution.
implementation 'com.google.mediapipe:solution-core:latest.release'
implementation 'com.google.mediapipe:hands:latest.release'

solution_core.aar をビルドする

bazel build -c opt --strip=ALWAYS \
    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
    --fat_apk_cpu=arm64-v8a,armeabi-v7a \
    --legacy_whole_archive=0 \
    --features=-legacy_whole_archive \
    --copt=-fvisibility=hidden \
    --copt=-ffunction-sections \
    --copt=-fdata-sections \
    --copt=-fstack-protector \
    --copt=-Oz \
    --copt=-fomit-frame-pointer \
    --copt=-DABSL_MIN_LOG_LEVEL=2 \
    --linkopt=-Wl,--gc-sections,--strip-all \
	--verbose_failures \
	//mediapipe/java/com/google/mediapipe/solutioncore:solution_core.aar

ビルドハンズ.aar

bazel build -c opt --strip=ALWAYS \
    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
    --fat_apk_cpu=arm64-v8a,armeabi-v7a \
    --legacy_whole_archive=0 \
    --features=-legacy_whole_archive \
    --copt=-fvisibility=hidden \
    --copt=-ffunction-sections \
    --copt=-fdata-sections \
    --copt=-fstack-protector \
    --copt=-Oz \
    --copt=-fomit-frame-pointer \
    --copt=-DABSL_MIN_LOG_LEVEL=2 \
    --linkopt=-Wl,--gc-sections,--strip-all \
	--verbose_failures \
	//mediapipe/java/com/google/mediapipe/solutions/hands:hands.aar	

ビルドに成功した aar を hands モジュールのライブラリにインポートします

以下に示すように、aar を libs にインポートし、Google の公式 Maven ライブラリをコメントアウトします。
ここに画像の説明を挿入

次に、hands モジュールの build.gradle に以下のコマンドを記述します。

// 加载libs中的jar和aar
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

// MediaPipe deps
implementation 'com.google.flogger:flogger:latest.release'
implementation 'com.google.flogger:flogger-system-backend:latest.release'
implementation 'com.google.code.findbugs:jsr305:latest.release'
implementation 'com.google.guava:guava:27.0.1-android'
implementation 'com.google.protobuf:protobuf-javalite:3.19.1'

// CameraX core library
def camerax_version = "1.0.0-beta10"
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
implementation "androidx.camera:camera-lifecycle:$camerax_version"

// AutoValue
def auto_value_version = "1.8.1"
implementation "com.google.auto.value:auto-value-annotations:$auto_value_version"
annotationProcessor "com.google.auto.value:auto-value:$auto_value_version"

この時点で、これで完了です。直接実行して、Maven ライブラリを独自の aar に置き換えます。将来、コードを変更すれば、aar を自分でコンパイルできます。Google は、すべてのニーズを満たす統一された aar を持っていないため、自分で aar をコンパイルすることも推奨しています。

注意:今回使用したバージョンはCameraX1.0.0-beta10」ですが、最新の「1.1.0-beta01」にバージョンアップすると、最新バージョンは現在のプロジェクトの最小互換minsdkを必要とするため、以下のエラーが発生します.

Execution failed for task ':hands:checkDebugAarMetadata'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
   > The minCompileSdk (31) specified in a
     dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
     is greater than this module's compileSdkVersion (android-30).
     Dependency: androidx.camera:camera-camera2:1.1.0-beta01.
     AAR metadata file: C:\Users\LX\.gradle\caches\transforms-3\00310ff015e50555669b323da52d8e97\transformed\camera-camera2-1.1.0-beta01\META-INF\com\android\build\gradle\aar-metadata.properties.

これは、CameraX の最新の最小コンパイル バージョン (android-31) が、現在の Hands モジュールの最大コンパイル バージョン (android-30) よりも大きいことを意味します。

build.gradle から、 targetSdkVersion と compileSdkVersion が 30 に等しいことがわかります
ここに画像の説明を挿入
。この問題を解決したくないので、 CameraX を更新しません (笑)。

如果你实在是强迫症就想更新,那参考如下解决方式。
1. compileSdkVersion と targetSdkVersion を 31 に変更します
2.変更後、android 12 は指定されたアクティビティの export 属性を表示する必要があることが通知されます

Manifest merger failed : Apps targeting Android 12 and higher are required to specify 
an explicit value for `android:exported` when the corresponding component has an intent 
filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

参考リンク:ログはGoogleの海外公式サイトへのリンクであり、科学的なアクセスがないとアクセスできないので、Androidの国内公式サイトへのリンクを参照してください

マニフェスト ファイルで、アクティビティ ノードは export 属性を明示的に指定します。
ここに画像の説明を挿入


二、参考

1. MediaPipe Hands 公式サイトのドキュメント
2. MediaPipe の GitHub アドレス


要約する

この記事では、MediaPipe Hands のデモを実行し、Google によってコンパイルされた Maven ライブラリを自分でコンパイルした aar に置き換えます。要件に変更があった場合は、自分でコードを変更して特別な aar を再生成できるためです。

おすすめ

転載: blog.csdn.net/u013855006/article/details/125280275