From 2c01e8495579cca55a90b887af7bbd56c79f3373 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Sat, 5 Nov 2022 14:13:40 +0500 Subject: [PATCH] static framework build now working correctly --- .bazelrc | 6 ++ .../UserInterfaceState.xcuserstate | Bin 49053 -> 90809 bytes .../PoseTrackingLindera/Info.plist | 4 +- mediapipe/framework/deps/registration.h | 2 +- mediapipe/framework/subgraph.h | 2 +- .../tool/simple_subgraph_template.cc | 6 +- .../objc/solutions/posetracking_gpu/BUILD | 80 +++++++++++++++++- .../solutions/posetracking_gpu/Info.plist | 27 ++++++ .../posetracking_gpu/MPPoseTracking.h | 3 + .../posetracking_gpu/PoseTracking.mm | 20 +++-- .../modulemap/module.modulemap | 5 ++ .../posetracking_gpu/patch_ios_framework.sh | 40 +++++++++ .../registry/calculator_registry.cpp | 68 +++++++++++++++ .../registry/calculator_registry.h | 13 +++ .../lindera/LinderaDetection.podspec | 2 +- 15 files changed, 260 insertions(+), 18 deletions(-) create mode 100644 mediapipe/objc/solutions/posetracking_gpu/Info.plist create mode 100644 mediapipe/objc/solutions/posetracking_gpu/MPPoseTracking.h create mode 100644 mediapipe/objc/solutions/posetracking_gpu/modulemap/module.modulemap create mode 100644 mediapipe/objc/solutions/posetracking_gpu/patch_ios_framework.sh create mode 100644 mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.cpp create mode 100644 mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.h diff --git a/.bazelrc b/.bazelrc index c2d8236b8..22fe5a191 100644 --- a/.bazelrc +++ b/.bazelrc @@ -69,6 +69,12 @@ build:android_arm64 --cpu=arm64-v8a build:android_arm64 --fat_apk_cpu=arm64-v8a # iOS configs. + +build:ios --apple_bitcode=embedded +build:ios --copt=-fembed-bitcode +build:ios --cxxopt=-std=c++17 # enables c++ 17 + + build:ios --apple_platform_type=ios build:ios --copt=-fno-aligned-allocation 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 7d5593a7f467a3d11965d286cd317802820e2f77..c3034361703b92dbc12678547015a09d873214da 100644 GIT binary patch literal 90809 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 literal 49053 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 Qb^E{UKmY&o|8LCuKTS3c1ONa4 diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/Info.plist b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/Info.plist index 426e53640..50a35699c 100644 --- a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/Info.plist +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/Info.plist @@ -2,10 +2,10 @@ + NSCameraUsageDescription + Processing Camera Feed UIApplicationSceneManifest - NSCameraUsageDescription - This app uses the camera to demonstrate live video processing. CFBundleDevelopmentRegion en CFBundleExecutable diff --git a/mediapipe/framework/deps/registration.h b/mediapipe/framework/deps/registration.h index b39a1e293..03d1d123e 100644 --- a/mediapipe/framework/deps/registration.h +++ b/mediapipe/framework/deps/registration.h @@ -383,7 +383,7 @@ class GlobalFactoryRegistry { #define REGISTER_FACTORY_FUNCTION_QUALIFIED(RegistryType, var_name, name, ...) \ static auto* REGISTRY_STATIC_VAR(var_name, __LINE__) = \ - new mediapipe::RegistrationToken( \ + new ::mediapipe::RegistrationToken( \ RegistryType::Register(#name, __VA_ARGS__)) } // namespace mediapipe diff --git a/mediapipe/framework/subgraph.h b/mediapipe/framework/subgraph.h index b3e7d958b..332a85eaf 100644 --- a/mediapipe/framework/subgraph.h +++ b/mediapipe/framework/subgraph.h @@ -130,7 +130,7 @@ class Subgraph { using SubgraphRegistry = GlobalFactoryRegistry>; #define REGISTER_MEDIAPIPE_GRAPH(name) \ - REGISTER_FACTORY_FUNCTION_QUALIFIED(mediapipe::SubgraphRegistry, \ + REGISTER_FACTORY_FUNCTION_QUALIFIED(::mediapipe::SubgraphRegistry, \ subgraph_registration, name, \ absl::make_unique) diff --git a/mediapipe/framework/tool/simple_subgraph_template.cc b/mediapipe/framework/tool/simple_subgraph_template.cc index 57cd36cd3..0f2e70f34 100644 --- a/mediapipe/framework/tool/simple_subgraph_template.cc +++ b/mediapipe/framework/tool/simple_subgraph_template.cc @@ -25,11 +25,11 @@ static const char binary_graph[] = #include "{{SUBGRAPH_INC_FILE_PATH}}" ; // NOLINT(whitespace/semicolon) -class {{SUBGRAPH_CLASS_NAME}} : public Subgraph { +class {{SUBGRAPH_CLASS_NAME}} : public ::mediapipe::Subgraph { public: - absl::StatusOr GetConfig( + absl::StatusOr<::mediapipe::CalculatorGraphConfig> GetConfig( const SubgraphOptions& /*options*/) { - CalculatorGraphConfig config; + ::mediapipe::CalculatorGraphConfig config; // Note: this is a binary protobuf serialization, and may include NUL // bytes. The trailing NUL added to the string literal should be excluded. if (config.ParseFromArray(binary_graph, sizeof(binary_graph) - 1)) { diff --git a/mediapipe/objc/solutions/posetracking_gpu/BUILD b/mediapipe/objc/solutions/posetracking_gpu/BUILD index 4533d7cf8..43708389b 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/BUILD +++ b/mediapipe/objc/solutions/posetracking_gpu/BUILD @@ -1,4 +1,16 @@ -load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework", "ios_static_framework", "ios_unit_test") +load( + "@build_bazel_rules_apple//apple:ios.bzl", + "ios_application", + "ios_dynamic_framework", + "ios_framework", + "ios_static_framework", + "ios_unit_test", +) +load( + "//mediapipe/examples/ios:bundle_id.bzl", + "BUNDLE_ID_PREFIX", + "example_provisioning", +) MPP_HEADERS = [ "PoseTracking.h", @@ -49,6 +61,7 @@ ios_static_framework( # "--no-whole-archive", # "-all_load", # "-Wl", + "-force_load", ], minimum_os_version = "12.0", visibility = ["//visibility:public"], @@ -57,10 +70,52 @@ ios_static_framework( "//mediapipe/calculators/core:flow_limiter_calculator", # "//third_party:opencv", - # "@ios_opencv//:OpencvFramework", + "@ios_opencv//:OpencvFramework", ], ) +ios_framework( + name = "MPPoseTrackingDynamic", + hdrs = MPP_HEADERS + MP_GEN_IOS_HEADERS + ["MPPoseTracking.h"], + bundle_id = BUNDLE_ID_PREFIX + ".MPPPoseTracking", + bundle_name = "MPPoseTracking", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + linkopts = [ + # "--no-whole-archive", + # "-all_load", + # "-Wl", + # "-force_load", + ], + minimum_os_version = "10.0", + resources = ["modulemap/module.modulemap"], + visibility = ["//visibility:public"], + deps = [ + "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", + # "//mediapipe/calculators/core:flow_limiter_calculator", + + # "//third_party:opencv", + "@ios_opencv//:OpencvFramework", + ], +) + +genrule( + name = "PatchedMPPosetrackingDynamic", + srcs = [":MPPoseTrackingDynamic"], + outs = [ + "MPPoseTracking.framework", + "MPPoseTracking.framework.dSYM", + ], + cmd = """ + bash $(location patch_ios_framework.sh) "$(SRCS)" "$(OUTS)" + """, + output_to_bindir = 1, + tools = ["patch_ios_framework.sh"], +) + # Custom Bazel Rule that patches headers of framework to flatten header imports genrule( name = "MPPoseTrackingHeaderPatched", @@ -97,27 +152,44 @@ objc_library( linkopts = [ # "--no-whole-archive", # "-all_load", + # "-force_load", # "-Wl", ], module_name = "MPPoseTracking", - sdk_frameworks = ["Accelerate"], + sdk_frameworks = [ + "Accelerate", + "AVFoundation", + "CoreGraphics", + "CoreMedia", + "UIKit", + ], visibility = ["//visibility:public"], deps = [ "//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": [], "//conditions:default": [ "//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps", "//mediapipe/framework/formats:landmark_cc_proto", + "calculator_registry", ], }), alwayslink = True, ) +cc_library( + name = "calculator_registry", + srcs = [ + "registry/calculator_registry.cpp", + "registry/calculator_registry.h", + ], + deps = ["//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps"], + alwayslink = True, +) + exports_files( MPP_HEADERS, visibility = ["//visibility:public"], diff --git a/mediapipe/objc/solutions/posetracking_gpu/Info.plist b/mediapipe/objc/solutions/posetracking_gpu/Info.plist new file mode 100644 index 000000000..0866eed17 --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/Info.plist @@ -0,0 +1,27 @@ + + + + + NSCameraUsageDescription + This app uses the camera to demonstrate live video processing. + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + + + diff --git a/mediapipe/objc/solutions/posetracking_gpu/MPPoseTracking.h b/mediapipe/objc/solutions/posetracking_gpu/MPPoseTracking.h new file mode 100644 index 000000000..f2fa3334a --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/MPPoseTracking.h @@ -0,0 +1,3 @@ +#import "PoseTracking.h" +#import "PoseTrackingOptions.h" +#import "PoseTrackingResults.h" \ No newline at end of file diff --git a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm index 1be6f722c..43ef37afb 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm +++ b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm @@ -3,14 +3,21 @@ #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" -#include "mediapipe/modules/pose_landmark/pose_landmark_gpu_linked.h" +#include "registry/calculator_registry.h" + +//#include "mediapipe/calculators/core/flow_limiter_calculator.h" +//#include "mediapipe/calculators/core/constant_side_packet_calculator.h" +//#include "mediapipe/modules/pose_landmark/pose_landmark_gpu_linked.h" +//#include "mediapipe/graphs/pose_tracking/subgraphs/pose_renderer_gpu_linked.h" +//#include "mediapipe/modules/pose_detection/pose_detection_gpu_linked.h" void registerCalculators(){ - typeid(::mediapipe::FlowLimiterCalculator); - typeid(::mediapipe::ConstantSidePacketCalculator); - typeid(::mediapipe::PoseLandmarkGpu); +// typeid(::mediapipe::FlowLimiterCalculator); +// typeid(::mediapipe::ConstantSidePacketCalculator); +// typeid(::mediapipe::PoseLandmarkGpu); +// typeid(::mediapipe::PoseRendererGpu); +// typeid(::mediapipe::PoseDetectionGpu); + } @@ -139,6 +146,7 @@ static const char* kLandmarksOutputStream = "pose_landmarks"; - (instancetype) initWithPoseTrackingOptions: (PoseTrackingOptions*) poseTrackingOptions{ registerCalculators(); + MPPCalculator(); self.renderer = [[MPPLayerRenderer alloc] init]; self.renderer.frameScaleMode = MPPFrameScaleModeFillAndCrop; diff --git a/mediapipe/objc/solutions/posetracking_gpu/modulemap/module.modulemap b/mediapipe/objc/solutions/posetracking_gpu/modulemap/module.modulemap new file mode 100644 index 000000000..276eba983 --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/modulemap/module.modulemap @@ -0,0 +1,5 @@ +framework module MPPoseTracking { + umbrella header "MPPoseTracking.h" + export * + module * { export * } +} \ No newline at end of file diff --git a/mediapipe/objc/solutions/posetracking_gpu/patch_ios_framework.sh b/mediapipe/objc/solutions/posetracking_gpu/patch_ios_framework.sh new file mode 100644 index 000000000..5374d617b --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/patch_ios_framework.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Copyright (c) 2022 Baracoda. All rights reserved +# +# Copying this file via any medium without the prior written consent of Baracoda is strictly +# prohibited +# +# Proprietary and confidential + +set -eu +set -o pipefail + +for outputPath in $2 +do + fileName=$(basename "$outputPath" .framework) + outputPath=$(dirname $outputPath) + + for inputPath in $1 + do + if [[ $inputPath == *"$fileName"*.zip ]]; then + fullPath=$(dirname "$inputPath") + + frameworkPath="$fullPath"/"$fileName".framework + + rm -rf "$fullPath"/"$fileName".framework + unzip "$inputPath" -d "$fullPath" + + if [ -d "$frameworkPath".dSYM ]; then + cp -R "$frameworkPath".dSYM "$outputPath"/"$fileName".framework.dSYM + fi + + if [ -f "$frameworkPath"/module.modulemap ]; then + mkdir "$frameworkPath"/Modules + mv "$frameworkPath"/module.modulemap "$frameworkPath"/Modules + fi + + cp -R "$frameworkPath" "$outputPath"/"$fileName".framework + fi + done; +done; \ No newline at end of file diff --git a/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.cpp b/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.cpp new file mode 100644 index 000000000..328d5e676 --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.cpp @@ -0,0 +1,68 @@ +// +// Created by Mautisim Munir on 05/11/2022. +// + +#include "calculator_registry.h" +#include "mediapipe/calculators/core/flow_limiter_calculator.h" +#include "mediapipe/calculators/core/constant_side_packet_calculator.h" + +// We need namespaces for subgraphs because of the static variables inside the files +namespace PLG { + +#include "mediapipe/modules/pose_landmark/pose_landmark_gpu_linked.h" + +} + +namespace PDROI{ +#include "mediapipe/modules/pose_landmark/pose_detection_to_roi_linked.h" + +} + +namespace PRG { + +#include "mediapipe/graphs/pose_tracking/subgraphs/pose_renderer_gpu_linked.h" + +} +namespace PDG { +#include "mediapipe/modules/pose_detection/pose_detection_gpu_linked.h" +} + +namespace PLROIG{ +#include "mediapipe/modules/pose_landmark/pose_landmark_by_roi_gpu_linked.h" + +} +namespace PLF{ +#include "mediapipe/modules/pose_landmark/pose_landmark_filtering_linked.h" +} +namespace PLTOROI{ +#include "mediapipe/modules/pose_landmark/pose_landmarks_to_roi_linked.h" +} +namespace PSF{ +#include "mediapipe/modules/pose_landmark/pose_segmentation_filtering_linked.h" +} +namespace PLML{ +#include "mediapipe/modules/pose_landmark/pose_landmark_model_loader_linked.h" +} +namespace PLSIP{ +#include "mediapipe/modules/pose_landmark/pose_landmarks_and_segmentation_inverse_projection_linked.h" +} +namespace TPLS{ +#include "mediapipe/modules/pose_landmark/tensors_to_pose_landmarks_and_segmentation_linked.h" +} + +MPPCalculator::MPPCalculator() { + typeid(TPLS::mediapipe::TensorsToPoseLandmarksAndSegmentation); + typeid(::mediapipe::FlowLimiterCalculator); + typeid(::mediapipe::ConstantSidePacketCalculator); + typeid(PLG::mediapipe::PoseLandmarkGpu); + typeid(PRG::mediapipe::PoseRendererGpu); + typeid(PDG::mediapipe::PoseDetectionGpu); + typeid(PDROI::mediapipe::PoseDetectionToRoi); + typeid(PLROIG::mediapipe::PoseLandmarkByRoiGpu); + typeid(PLF::mediapipe::PoseLandmarkFiltering); + typeid(PLTOROI::mediapipe::PoseLandmarksToRoi); + typeid(PSF::mediapipe::PoseSegmentationFiltering); + typeid(PLML::mediapipe::PoseLandmarkModelLoader); + typeid(PLSIP::mediapipe::PoseLandmarksAndSegmentationInverseProjection); + +} diff --git a/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.h b/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.h new file mode 100644 index 000000000..c139e75da --- /dev/null +++ b/mediapipe/objc/solutions/posetracking_gpu/registry/calculator_registry.h @@ -0,0 +1,13 @@ +// +// Created by Mautisim Munir on 05/11/2022. +// + +#ifndef MEDIAPIPE_CALCULATOR_REGISTRY_H +#define MEDIAPIPE_CALCULATOR_REGISTRY_H + +class MPPCalculator{ +public: + MPPCalculator(); +}; + +#endif //MEDIAPIPE_CALCULATOR_REGISTRY_H diff --git a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec index 0ebf50daf..d7389d204 100644 --- a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec +++ b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec @@ -128,7 +128,7 @@ Pod::Spec.new do |spec| # spec.requires_arc = true # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } -# spec.dependency "OpenCV", "~> 3.4" + spec.dependency "OpenCV", "3.2" spec.static_framework = true spec.ios.vendored_frameworks = 'frameworks/*.framework'