diff --git a/.gitignore b/.gitignore index b3a881711..44c1bab35 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ mediapipe/MediaPipe.tulsiproj/*.tulsiconf-user mediapipe/provisioning_profile.mobileprovision .configure.bazelrc .user.bazelrc +/mediapipe/examples/android/solutions/posetracking/libs/ +/mediapipe/examples/android/solutions/.idea/ +/mediapipe/examples/android/solutions/ diff --git a/mediapipe/examples/android/solutions/posetracking/build.gradle b/mediapipe/examples/android/solutions/posetracking/build.gradle new file mode 100644 index 000000000..833600189 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/build.gradle @@ -0,0 +1,57 @@ +plugins { + id 'com.android.application' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.google.mediapipe.apps.posetracking" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + // Copper Labs AAR Files + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) + + // App Dependencies + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.exifinterface:exifinterface:1.3.3' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + // Mediapipe dependencies + implementation 'com.google.protobuf:protobuf-javalite:3.19.1' + 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' + + // 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" + // We cannot use official solution as it is missing dependencies for pose tracking. +// implementation 'com.google.mediapipe:solution-core:latest.release' + +} diff --git a/mediapipe/examples/android/solutions/posetracking/build_aar.sh b/mediapipe/examples/android/solutions/posetracking/build_aar.sh new file mode 100644 index 000000000..2d739c394 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/build_aar.sh @@ -0,0 +1,32 @@ +POSE_TRACKING_OUTPUT_DIR=bazel-bin/mediapipe/java/com/google/mediapipe/solutions/posetracking +GRADLE_LIBS_DIR=mediapipe/examples/android/solutions/posetracking/libs +# +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 \ + //mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-api.aar \ + //mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-landmark.aar \ + //mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-detection.aar \ + //mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-graph.aar \ + //mediapipe/java/com/google/mediapipe/solutioncore:copperlabs-mediapipe + + +mkdir $GRADLE_LIBS_DIR +rm -f $GRADLE_LIBS_DIR/copperlabs-*.aar + +\cp $POSE_TRACKING_OUTPUT_DIR/copperlabs-pose-api.aar $GRADLE_LIBS_DIR +\cp $POSE_TRACKING_OUTPUT_DIR/copperlabs-pose-detection.aar $GRADLE_LIBS_DIR +\cp $POSE_TRACKING_OUTPUT_DIR/copperlabs-pose-graph.aar $GRADLE_LIBS_DIR +\cp $POSE_TRACKING_OUTPUT_DIR/copperlabs-pose-landmark.aar $GRADLE_LIBS_DIR +\cp bazel-bin/mediapipe/java/com/google/mediapipe/solutioncore/copperlabs-mediapipe.aar $GRADLE_LIBS_DIR + diff --git a/mediapipe/examples/android/solutions/posetracking/proguard-rules.pro b/mediapipe/examples/android/solutions/posetracking/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/mediapipe/examples/android/solutions/posetracking/src/main/AndroidManifest.xml b/mediapipe/examples/android/solutions/posetracking/src/main/AndroidManifest.xml new file mode 100644 index 000000000..3db9d8bd0 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mediapipe/examples/android/solutions/posetracking/src/main/BUILD b/mediapipe/examples/android/solutions/posetracking/src/main/BUILD new file mode 100644 index 000000000..c98a04939 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/src/main/BUILD @@ -0,0 +1,50 @@ +# Copyright 2021 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +licenses(["notice"]) + +package(default_visibility = ["//visibility:private"]) + +android_binary( + name = "posetracking", + srcs = glob(["**/*.java"]), + custom_package = "com.google.mediapipe.examples.posetracking", + manifest = "AndroidManifest.xml", + manifest_values = { + "applicationId": "com.google.mediapipe.examples.posetracking", + }, + multidex = "native", + resource_files = ["//mediapipe/examples/android/solutions:resource_files"], + deps = [ + "//mediapipe/framework/formats:detection_java_proto_lite", + "//mediapipe/framework/formats:landmark_java_proto_lite", + "//mediapipe/framework/formats:location_data_java_proto_lite", + "//mediapipe/java/com/google/mediapipe/solutioncore:camera_input", + "//mediapipe/java/com/google/mediapipe/solutioncore:mediapipe_jni_lib", + "//mediapipe/java/com/google/mediapipe/solutioncore:solution_rendering", + "//mediapipe/java/com/google/mediapipe/solutioncore:video_input", + "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-api", + "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-detection", + "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-graph", + "//mediapipe/java/com/google/mediapipe/solutions/posetracking:copperlabs-pose-landmark", + "//third_party:androidx_appcompat", + "//third_party:androidx_constraint_layout", + "//third_party:opencv", + "@maven//:androidx_activity_activity", + "@maven//:androidx_concurrent_concurrent_futures", + "@maven//:androidx_exifinterface_exifinterface", + "@maven//:androidx_fragment_fragment", + "@maven//:com_google_guava_guava", + ], +) diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/MainActivity.java b/mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/MainActivity.java similarity index 99% rename from mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/MainActivity.java rename to mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/MainActivity.java index 1612c9f21..5782ea869 100644 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/MainActivity.java +++ b/mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/MainActivity.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.mediapipe.apps.posetrackingsolutiongpu; +package com.google.mediapipe.examples.posetracking;; import android.content.Intent; import android.graphics.Bitmap; diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/PoseTrackingResultGlRenderer.java b/mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/PoseTrackingResultGlRenderer.java similarity index 99% rename from mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/PoseTrackingResultGlRenderer.java rename to mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/PoseTrackingResultGlRenderer.java index 9c8b7d57f..66832466b 100644 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/PoseTrackingResultGlRenderer.java +++ b/mediapipe/examples/android/solutions/posetracking/src/main/java/com/google/mediapipe/examples/posetracking/PoseTrackingResultGlRenderer.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.mediapipe.apps.posetrackingsolutiongpu; +package com.google.mediapipe.examples.posetracking;; import android.opengl.GLES20; diff --git a/mediapipe/examples/android/solutions/posetracking/src/main/res b/mediapipe/examples/android/solutions/posetracking/src/main/res new file mode 120000 index 000000000..fc8850136 --- /dev/null +++ b/mediapipe/examples/android/solutions/posetracking/src/main/res @@ -0,0 +1 @@ +../../../res \ No newline at end of file diff --git a/mediapipe/examples/android/solutions/settings.gradle b/mediapipe/examples/android/solutions/settings.gradle index c050ba4bf..5bcd8da13 100644 --- a/mediapipe/examples/android/solutions/settings.gradle +++ b/mediapipe/examples/android/solutions/settings.gradle @@ -1,4 +1,5 @@ rootProject.name = "mediapipe-solutions-examples" include ':facedetection' include ':facemesh' +include ':posetracking' include ':hands' diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/AndroidManifest.xml b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/AndroidManifest.xml deleted file mode 100644 index b61304f0d..000000000 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/BUILD b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/BUILD deleted file mode 100644 index 5c268744c..000000000 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/BUILD +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright 2019 The MediaPipe Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -licenses(["notice"]) - -# Basic library common across example apps. -android_library( - name = "basic_lib", - srcs = glob(["*.java"]), - manifest = "AndroidManifest.xml", - resource_files = glob(["res/**"]), - visibility = ["//visibility:public"], - deps = [ - "//mediapipe/framework/formats:landmark_java_proto_lite", - "//mediapipe/framework/formats:detection_java_proto_lite", - "//mediapipe/framework/formats:location_data_java_proto_lite", - "//mediapipe/java/com/google/mediapipe/components:android_camerax_helper", - "//mediapipe/java/com/google/mediapipe/components:android_components", - "//mediapipe/java/com/google/mediapipe/framework:android_framework", - "//mediapipe/java/com/google/mediapipe/glutil", - "//mediapipe/java/com/google/mediapipe/solutioncore:camera_input", - "//mediapipe/java/com/google/mediapipe/solutioncore:solution_rendering", - "//mediapipe/java/com/google/mediapipe/solutioncore:video_input", - # "//mediapipe/java/com/google/mediapipe/solutions/facedetection", - "//mediapipe/java/com/google/mediapipe/solutions/posetracking", - "//third_party:androidx_appcompat", - "//third_party:androidx_constraint_layout", - "//third_party:opencv", - "@maven//:androidx_activity_activity", - "@maven//:androidx_concurrent_concurrent_futures", - "@maven//:androidx_exifinterface_exifinterface", - "@maven//:androidx_fragment_fragment", - "@maven//:com_google_guava_guava", - ], -) - -# Manifest common across example apps. -exports_files( - srcs = ["AndroidManifest.xml"], -) - -# Native dependencies to perform edge detection in the Hello World example. -cc_binary( - name = "libmediapipe_jni.so", - linkshared = 1, - linkstatic = 1, - deps = [ - # "//mediapipe/graphs/edge_detection:mobile_calculators", - "//mediapipe/java/com/google/mediapipe/framework/jni:mediapipe_framework_jni", - #facedetection deps - # "//mediapipe/graphs/face_detection:face_detection_full_range_mobile_gpu_deps", - # "//mediapipe/graphs/face_detection:mobile_calculators", - #pose tracking deps - "//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps", - ], -) - -# Converts the .so cc_binary into a cc_library, to be consumed in an android_binary. -cc_library( - name = "mediapipe_jni_lib", - srcs = [":libmediapipe_jni.so"], - alwayslink = 1, -) - -# Hello World example app. -android_binary( - name = "PoseTrackingGpuSolution", - # assets = [ - # "//mediapipe/graphs/edge_detection:mobile_gpu.binarypb", - # ], - # assets_dir = "", - manifest = "AndroidManifest.xml", - manifest_values = { - "applicationId": "com.google.mediapipe.apps.posetrackingsolutiongpu", - "appName": "PoseTrackingGpuSolution", - "mainActivity": ".MainActivity", - # "cameraFacingFront": "False", - # "binaryGraphName": "mobile_gpu.binarypb", - # "inputVideoStreamName": "input_video", - # "outputVideoStreamName": "output_video", - # "flipFramesVertically": "True", - # "converterNumBuffers": "2", - }, - multidex = "native", - deps = [ - ":basic_lib", - ":mediapipe_jni_lib", - ], -) diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable-v24/ic_launcher_foreground.xml b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index c7bd21dbd..000000000 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable/ic_launcher_background.xml b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 01f0af0ad..000000000 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/layout/activity_main.xml b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/layout/activity_main.xml deleted file mode 100644 index 8c7278475..000000000 --- a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackingsolutiongpu/res/layout/activity_main.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - -