diff --git a/WORKSPACE b/WORKSPACE index d7a833877..a131001a1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -528,11 +528,11 @@ load("@build_bazel_rules_android//android:rules.bzl", "android_ndk_repository", android_sdk_repository( name = "androidsdk", build_tools_version = "30.0.3", -# path = "/Users/tj/Library/Android/sdk", # Path to Android SDK, optional if $ANDROID_HOME is set + path = "/Users/tj/Library/Android/sdk", # Path to Android SDK, optional if $ANDROID_HOME is set ) android_ndk_repository( name = "androidndk", # Required. Name *must* be "androidndk". api_level = 21, -# path = "/Users/tj/Library/Android/sdk/ndk/21.4.7075529", # Optional. Can be omitted if `ANDROID_NDK_HOME` environment variable is set. + path = "/Users/tj/Library/Android/sdk/ndk/21.4.7075529", # Optional. Can be omitted if `ANDROID_NDK_HOME` environment variable is set. ) diff --git a/mediapipe/calculators/core/BUILD b/mediapipe/calculators/core/BUILD index b28a3573a..47a74998a 100644 --- a/mediapipe/calculators/core/BUILD +++ b/mediapipe/calculators/core/BUILD @@ -728,7 +728,7 @@ cc_library( cc_library( name = "flow_limiter_calculator", - srcs = ["flow_limiter_calculator.cc"], + srcs = ["flow_limiter_calculator.h"], visibility = ["//visibility:public"], deps = [ ":flow_limiter_calculator_cc_proto", @@ -1217,7 +1217,7 @@ cc_test( cc_library( name = "constant_side_packet_calculator", - srcs = ["constant_side_packet_calculator.cc"], + srcs = ["constant_side_packet_calculator.h"], visibility = ["//visibility:public"], deps = [ ":constant_side_packet_calculator_cc_proto", diff --git a/mediapipe/calculators/core/constant_side_packet_calculator.cc b/mediapipe/calculators/core/constant_side_packet_calculator.h similarity index 100% rename from mediapipe/calculators/core/constant_side_packet_calculator.cc rename to mediapipe/calculators/core/constant_side_packet_calculator.h diff --git a/mediapipe/calculators/core/flow_limiter_calculator.cc b/mediapipe/calculators/core/flow_limiter_calculator.h similarity index 100% rename from mediapipe/calculators/core/flow_limiter_calculator.cc rename to mediapipe/calculators/core/flow_limiter_calculator.h diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate index 56b0c8835..7d5593a7f 100644 Binary files a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate and b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift index f6af9e009..b9b449643 100644 --- a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift @@ -5,8 +5,8 @@ // Created by Mautisim Munir on 17/10/2022. // import UIKit -import MPPoseTracking import LinderaDetection +//import LinderaDetection class ViewController: UIViewController { diff --git a/mediapipe/framework/calculator_registry.h b/mediapipe/framework/calculator_registry.h index dafc95aaf..5447aa759 100644 --- a/mediapipe/framework/calculator_registry.h +++ b/mediapipe/framework/calculator_registry.h @@ -23,6 +23,9 @@ #define REGISTER_CALCULATOR(name) \ REGISTER_FACTORY_FUNCTION_QUALIFIED( \ mediapipe::CalculatorBaseRegistry, calculator_registration, name, \ - absl::make_unique>) + absl::make_unique>); \ + void register_##name(){typeid(name);}; #endif // MEDIAPIPE_FRAMEWORK_CALCULATOR_REGISTRY_H_ + + diff --git a/mediapipe/objc/BUILD b/mediapipe/objc/BUILD index 48c9b181a..f2df3b7e3 100644 --- a/mediapipe/objc/BUILD +++ b/mediapipe/objc/BUILD @@ -286,3 +286,14 @@ exports_files( "//mediapipe:__subpackages__", ], ) + +exports_files( + [ + "MPPCameraInputSource.h", + "MPPLayerRenderer.h", + "MPPPlayerInputSource.h", + "MPPInputSource.h", + "MPPGLViewRenderer.h", + ], + visibility = ["//visibility:public"], +) diff --git a/mediapipe/objc/solutions/posetracking_gpu/BUILD b/mediapipe/objc/solutions/posetracking_gpu/BUILD index b701a83a1..4533d7cf8 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/BUILD +++ b/mediapipe/objc/solutions/posetracking_gpu/BUILD @@ -1,31 +1,91 @@ load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework", "ios_static_framework", "ios_unit_test") +MPP_HEADERS = [ + "PoseTracking.h", + "PoseTrackingOptions.h", + "PoseTrackingResults.h", +] + +MP_IOS_HEADERS_NAMES = [ + "MPPCameraInputSource.h", + "MPPLayerRenderer.h", + "MPPPlayerInputSource.h", + "MPPInputSource.h", + "MPPGLViewRenderer.h", +] + +MP_IOS_HEADERS = ["//mediapipe/objc:" + header for header in MP_IOS_HEADERS_NAMES] + +#[genrule( +# name = "gen_" + header_name, +# srcs = [header_rule], +# outs = [header_name], +# cmd = """ +# OUTPUT_DIR=mediapipe/objc/solutions/posetracking_gpu +# mkdir -p $$OUTPUT_DIR +# OUTPUT_PATH=$$OUTPUT_DIR/{} +# cp $(location {}) $$OUTPUT_PATH +# sed -i -e "s#mediapipe/objc/##g" $$OUTPUT_PATH +# cp $$OUTPUT_PATH $@ +# """.format(header_name, header_rule), +# local = False, +#) for (header_name, header_rule) in zip(MP_IOS_HEADERS_NAMES, MP_IOS_HEADERS)] +# +#MP_GEN_IOS_HEADERS = ["gen_" + header for header in MP_IOS_HEADERS_NAMES] +# +#filegroup( +# name = "gen_mp_ios_headers", +# srcs = MP_GEN_IOS_HEADERS, +#) + +#-c opt --config=ios_fat --cxxopt=--std=c++17 --copt=-fembed-bitcode --linkopt="-s" +MP_GEN_IOS_HEADERS = MP_IOS_HEADERS + ios_static_framework( name = "MPPoseTracking", - # hdrs = EDGE_ENGINE_HDRS, + hdrs = MPP_HEADERS + MP_GEN_IOS_HEADERS, bundle_name = "MPPoseTracking", + linkopts = [ + # "--no-whole-archive", + # "-all_load", + # "-Wl", + ], minimum_os_version = "12.0", visibility = ["//visibility:public"], deps = [ - ":posetracking_gpu_solution", + "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", + "//mediapipe/calculators/core:flow_limiter_calculator", + # "//third_party:opencv", # "@ios_opencv//:OpencvFramework", ], ) +# Custom Bazel Rule that patches headers of framework to flatten header imports +genrule( + name = "MPPoseTrackingHeaderPatched", + srcs = [":MPPoseTracking"], + outs = ["MPPoseTrackingHeaderPatched.zip"], + cmd = """ + unzip $(location MPPoseTracking) + sed -i -e "s#mediapipe/objc/##g" $$(find MPPoseTracking.framework -name "*.h") + rm -f MPPoseTracking.framework/Headers/*.h-e + zip -r MPPoseTrackingHeaderPatched.zip MPPoseTracking.framework + cp MPPoseTrackingHeaderPatched.zip $@ + """, + visibility = ["//visibility:public"], +) + objc_library( name = "posetracking_gpu_solution", srcs = glob([ "*.h", "*.mm", ]), - hdrs = [ - "PoseTracking.h", - "PoseTrackingOptions.h", - "PoseTrackingResults.h", - ], + hdrs = MPP_HEADERS + MP_GEN_IOS_HEADERS, copts = [ "-Wno-shorten-64-to-32", + # "-all_load", ], data = [ "//mediapipe/graphs/pose_tracking:pose_tracking_gpu.binarypb", @@ -34,6 +94,11 @@ objc_library( "//mediapipe/modules/pose_landmark:pose_landmark_heavy.tflite", "//mediapipe/modules/pose_landmark:pose_landmark_lite.tflite", ], + linkopts = [ + # "--no-whole-archive", + # "-all_load", + # "-Wl", + ], module_name = "MPPoseTracking", sdk_frameworks = ["Accelerate"], visibility = ["//visibility:public"], @@ -41,6 +106,7 @@ objc_library( "//mediapipe/objc:mediapipe_framework_ios", "//mediapipe/objc:mediapipe_input_sources_ios", "//mediapipe/objc:mediapipe_layer_renderer", + "//mediapipe/calculators/core:flow_limiter_calculator", ] + select({ "//mediapipe:ios_i386": [], "//mediapipe:ios_x86_64": [], @@ -51,3 +117,8 @@ objc_library( }), alwayslink = True, ) + +exports_files( + MPP_HEADERS, + visibility = ["//visibility:public"], +) diff --git a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.h b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.h index 65f1b392c..40c9aa7d7 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.h +++ b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.h @@ -10,6 +10,7 @@ #import "mediapipe/objc/MPPPlayerInputSource.h" #import "PoseTrackingOptions.h" #import "PoseTrackingResults.h" + @interface PoseTracking : NSObject // The MediaPipe graph currently in use. Initialized in viewDidLoad, started in diff --git a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm index 4ea760cd6..4d668c452 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm +++ b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm @@ -3,6 +3,10 @@ #import "mediapipe/objc/MPPGraph.h" #import "mediapipe/objc/MPPTimestampConverter.h" #include "mediapipe/framework/packet.h" +#include "mediapipe/calculators/core/flow_limiter_calculator.h" +#include "mediapipe/calculators/core/constant_side_packet_calculator.h" + + static const char* kVideoQueueLabel = "com.google.mediapipe.example.videoQueue"; static const char* kLandmarksOutputStream = "pose_landmarks"; @@ -37,7 +41,7 @@ static const char* kLandmarksOutputStream = "pose_landmarks"; -(id) initWithMediapipeGraph: (MPPGraph*) graph graphOutputStream: (const char*) graphOutputStream renderer: (MPPLayerRenderer*) renderer { - + self.mediapipeGraph = graph; self.graphOutputStream =graphOutputStream; self.renderer = renderer; @@ -127,6 +131,9 @@ static const char* kLandmarksOutputStream = "pose_landmarks"; } - (instancetype) initWithPoseTrackingOptions: (PoseTrackingOptions*) poseTrackingOptions{ + typeid(::mediapipe::FlowLimiterCalculator); + typeid(::mediapipe::ConstantSidePacketCalculator); + self.renderer = [[MPPLayerRenderer alloc] init]; self.renderer.frameScaleMode = MPPFrameScaleModeFillAndCrop; diff --git a/mediapipe/swift/solutions/lindera/BUILD b/mediapipe/swift/solutions/lindera/BUILD index 0a945f0f5..9185b3750 100644 --- a/mediapipe/swift/solutions/lindera/BUILD +++ b/mediapipe/swift/solutions/lindera/BUILD @@ -18,16 +18,16 @@ POSETRACKING_DEPS = [ genrule( name = "podgen", srcs = [ - "lindera-framework", + "//mediapipe/objc/solutions/posetracking_gpu:MPPoseTrackingHeaderPatched", "LinderaDetection.podspec", - ], + ] + glob(["*.swift"]), outs = ["LinderaDetection.zip"], cmd = """ mkdir mediapipe/swift/solutions/lindera/frameworks - unzip $(location lindera-framework) -d mediapipe/swift/solutions/lindera/frameworks + unzip $(location //mediapipe/objc/solutions/posetracking_gpu:MPPoseTrackingHeaderPatched) -d mediapipe/swift/solutions/lindera/frameworks cd mediapipe/swift/solutions/lindera/ - zip -r LinderaDetection.zip frameworks LinderaDetection.podspec + zip -r LinderaDetection.zip frameworks LinderaDetection.podspec *.swift cd ../../../../ cp mediapipe/swift/solutions/lindera/LinderaDetection.zip $@ """, diff --git a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec index 50f6c415a..0ebf50daf 100644 --- a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec +++ b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec @@ -86,7 +86,7 @@ Pod::Spec.new do |spec| # Not including the public_header_files will make all headers public. # - # spec.source_files = "" + spec.source_files = "*.swift" # spec.exclude_files = "Classes/Exclude" # spec.public_header_files = "" @@ -101,7 +101,7 @@ Pod::Spec.new do |spec| # # spec.resource = "icon.png" - # spec.resources = "Resources/*.png" + spec.resources = ["frameworks/*/*.tflite","frameworks/*/*.binarypb"] # spec.preserve_paths = "FilesToSave", "MoreFilesToSave"