From 1cc40d4631cc61301b3be5595dab8ac9e01a11d6 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Tue, 25 Oct 2022 13:13:11 +0500 Subject: [PATCH 1/8] added cocoapod support --- mediapipe/swift/solutions/lindera/BUILD | 39 ++++- .../lindera/LinderaDetection.podspec | 141 ++++++++++++++++++ 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 mediapipe/swift/solutions/lindera/LinderaDetection.podspec diff --git a/mediapipe/swift/solutions/lindera/BUILD b/mediapipe/swift/solutions/lindera/BUILD index 42c4f0851..01c01a50b 100644 --- a/mediapipe/swift/solutions/lindera/BUILD +++ b/mediapipe/swift/solutions/lindera/BUILD @@ -1,8 +1,45 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") +load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework", "ios_static_framework", "ios_unit_test") + +genrule( + name = "podgen", + srcs = [ + "lindera-framework", + "LinderaDetection.podspec", + ], + outs = ["LinderaDetection.zip"], + cmd = """ + mkdir mediapipe/swift/solutions/lindera/frameworks + unzip $(location lindera-framework) -d mediapipe/swift/solutions/lindera/frameworks + cd mediapipe/swift/solutions/lindera/ + + zip -r LinderaDetection.zip frameworks LinderaDetection.podspec + cd ../../../../ + cp mediapipe/swift/solutions/lindera/LinderaDetection.zip $@ + """, +) + +# bazel build //mediapipe/swift/solutions/lindera:lindera-framework -c opt --config=ios_fat --cxxopt=--std=c++17 --copt=-fembed-bitcode --linkopt="-s" +ios_static_framework( + name = "lindera-framework", + # hdrs = EDGE_ENGINE_HDRS, + bundle_name = "LinderaDetection", + minimum_os_version = "12.0", + visibility = ["//visibility:public"], + deps = [ + ":lindera", + # "//third_party:opencv", + # "@ios_opencv//:OpencvFramework", + ], +) swift_library( name = "lindera", - srcs = ["Lindera.swift","Asensei3D.swift","utils.swift"], + srcs = [ + "Asensei3D.swift", + "Lindera.swift", + "utils.swift", + ], linkopts = [ "-lc++", "-std=c++17", diff --git a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec new file mode 100644 index 000000000..50f6c415a --- /dev/null +++ b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec @@ -0,0 +1,141 @@ +# +# Be sure to run `pod spec lint EdgeEngine.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +Pod::Spec.new do |spec| + + # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # These will help people to find your library, and whilst it + # can feel like a chore to fill in it's definitely to your advantage. The + # summary should be tweet-length, and the description more in depth. + # + + spec.name = "LinderaDetection" + spec.version = "0.0.1" + spec.summary = "LinderaDetection is a simple yet powerful interface to run AI Health Solutions" + + # This description is used to generate tags and improve search results. + # * Think: What does it do? Why did you write it? What is the focus? + # * Try to keep it short, snappy and to the point. + # * Write the description between the DESC delimiters below. + # * Finally, don't worry about the indent, CocoaPods strips it! + spec.description = "LinderaDetection is a simple yet powerful interface to run AI Health Solutions" + + spec.homepage = "https://github.com/udamaster/mediapipe" + # spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" + + + # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Licensing your code is important. See https://choosealicense.com for more info. + # CocoaPods will detect a license file if there is a named LICENSE* + # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. + # + + spec.license = "MIT (example)" + spec.license = { :type => "MIT"} + + + # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the authors of the library, with email addresses. Email addresses + # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also + # accepts just a name if you'd rather not provide an email address. + # + # Specify a social_media_url where others can refer to, for example a twitter + # profile URL. + # + + spec.author = "Copper Labs" + + + # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If this Pod runs only on iOS or OS X, then specify the platform and + # the deployment target. You can optionally include the target after the platform. + # + + # spec.platform = :ios + spec.platform = :ios, "12.0" + + # When using multiple platforms + # spec.ios.deployment_target = "5.0" + # spec.osx.deployment_target = "10.7" + # spec.watchos.deployment_target = "2.0" + # spec.tvos.deployment_target = "9.0" + + + # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the location from where the source should be retrieved. + # Supports git, hg, bzr, svn and HTTP. + # + + spec.source = { :http => 'https://edge-engine-store.s3.amazonaws.com/libs/ios/EdgeEngine/pod/EdgeEngine.zip' } + + # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # CocoaPods is smart about how it includes source code. For source files + # giving a folder will include any swift, h, m, mm, c & cpp files. + # For header files it will include any header in the folder. + # Not including the public_header_files will make all headers public. + # + + # spec.source_files = "" + # spec.exclude_files = "Classes/Exclude" + + # spec.public_header_files = "" + + + # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # A list of resources included with the Pod. These are copied into the + # target bundle with a build phase script. Anything else will be cleaned. + # You can preserve files from being cleaned, please don't preserve + # non-essential files like tests, examples and documentation. + # + + # spec.resource = "icon.png" + # spec.resources = "Resources/*.png" + + # spec.preserve_paths = "FilesToSave", "MoreFilesToSave" + + + # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Link your library with frameworks, or libraries. Libraries do not include + # the lib prefix of their name. + # + + # spec.framework = "SomeFramework" + # spec.frameworks = "SomeFramework", "AnotherFramework" + + # spec.library = "iconv" + # spec.libraries = "iconv", "xml2" + + + # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If your library depends on compiler flags you can set them in the xcconfig hash + # where they will only apply to your library. If you depend on other Podspecs + # you can include multiple dependencies to ensure it works. + + # spec.requires_arc = true + + # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } +# spec.dependency "OpenCV", "~> 3.4" + spec.static_framework = true + + spec.ios.vendored_frameworks = 'frameworks/*.framework' + # spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lc++' } + # spec.user_target_xcconfig = {'OTHER_LDFLAGS' => '-lc++' } + spec.libraries = 'stdc++' + # ――― Temporary Architecture fixes + spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } + spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } +end From 42a36dafc30119c3ec3591cc8b832e2ddd2721ab Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Fri, 28 Oct 2022 10:33:50 +0500 Subject: [PATCH 2/8] swift - objc framework fix wip --- .aswb/.bazelproject | 25 ++ .../examples/ios/posetracking-lindera/Podfile | 11 + .../project.pbxproj | 412 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 12412 bytes .../xcschemes/xcschememanagement.plist | 14 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 21717 bytes .../PoseTrackingLindera/ViewController.swift | 1 + .../objc/solutions/posetracking_gpu/BUILD | 27 +- mediapipe/swift/solutions/lindera/BUILD | 32 +- 13 files changed, 535 insertions(+), 20 deletions(-) create mode 100644 .aswb/.bazelproject create mode 100644 mediapipe/examples/ios/posetracking-lindera/Podfile create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/xcuserdata/tj.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/contents.xcworkspacedata create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/.aswb/.bazelproject b/.aswb/.bazelproject new file mode 100644 index 000000000..6b0f88386 --- /dev/null +++ b/.aswb/.bazelproject @@ -0,0 +1,25 @@ +directories: + # Add the directories you want added as source here + # By default, we've added your entire workspace ('.') + . + +# Automatically includes all relevant targets under the 'directories' above +derive_targets_from_directories: true + +targets: + # If source code isn't resolving, add additional targets that compile it here + +additional_languages: + # Uncomment any additional languages you want supported + # c + # dart + # kotlin + # python + + +# Please uncomment an android-SDK platform. Available SDKs are: +# android_sdk_platform: android-28 +# android_sdk_platform: android-29 +android_sdk_platform: android-30 +# android_sdk_platform: android-31 +# android_sdk_platform: android-32 \ No newline at end of file diff --git a/mediapipe/examples/ios/posetracking-lindera/Podfile b/mediapipe/examples/ios/posetracking-lindera/Podfile new file mode 100644 index 000000000..d680af3a4 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/Podfile @@ -0,0 +1,11 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'PoseTrackingLindera' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + pod 'LinderaDetection', :path => 'LinderaDetection' + + # Pods for PoseTrackingLindera + +end diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj new file mode 100644 index 000000000..1a1ec87a5 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj @@ -0,0 +1,412 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 32ADBDDB2907D1E200F78CE0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ADBDDA2907D1E200F78CE0 /* AppDelegate.swift */; }; + 32ADBDDF2907D1E200F78CE0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ADBDDE2907D1E200F78CE0 /* ViewController.swift */; }; + 32ADBDE22907D1E200F78CE0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE02907D1E200F78CE0 /* Main.storyboard */; }; + 32ADBDE42907D1E400F78CE0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE32907D1E400F78CE0 /* Assets.xcassets */; }; + 32ADBDE72907D1E400F78CE0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE52907D1E400F78CE0 /* LaunchScreen.storyboard */; }; + CD88DF4A36BE18935B7A330A /* Pods_PoseTrackingLindera.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PoseTrackingLindera.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32ADBDD72907D1E200F78CE0 /* PoseTrackingLindera.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PoseTrackingLindera.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 32ADBDDA2907D1E200F78CE0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 32ADBDDE2907D1E200F78CE0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 32ADBDE12907D1E200F78CE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 32ADBDE32907D1E400F78CE0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 32ADBDE62907D1E400F78CE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 32ADBDE82907D1E400F78CE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.release.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.release.xcconfig"; sourceTree = ""; }; + B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.debug.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 32ADBDD42907D1E200F78CE0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CD88DF4A36BE18935B7A330A /* Pods_PoseTrackingLindera.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0F62EBD53927AA932B6FF415 /* Pods */ = { + isa = PBXGroup; + children = ( + B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */, + 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 32ADBDCE2907D1E200F78CE0 = { + isa = PBXGroup; + children = ( + 32ADBDD92907D1E200F78CE0 /* PoseTrackingLindera */, + 32ADBDD82907D1E200F78CE0 /* Products */, + 0F62EBD53927AA932B6FF415 /* Pods */, + 469B1C87F8976E33605A3219 /* Frameworks */, + ); + sourceTree = ""; + }; + 32ADBDD82907D1E200F78CE0 /* Products */ = { + isa = PBXGroup; + children = ( + 32ADBDD72907D1E200F78CE0 /* PoseTrackingLindera.app */, + ); + name = Products; + sourceTree = ""; + }; + 32ADBDD92907D1E200F78CE0 /* PoseTrackingLindera */ = { + isa = PBXGroup; + children = ( + 32ADBDDA2907D1E200F78CE0 /* AppDelegate.swift */, + 32ADBDDE2907D1E200F78CE0 /* ViewController.swift */, + 32ADBDE02907D1E200F78CE0 /* Main.storyboard */, + 32ADBDE32907D1E400F78CE0 /* Assets.xcassets */, + 32ADBDE52907D1E400F78CE0 /* LaunchScreen.storyboard */, + 32ADBDE82907D1E400F78CE0 /* Info.plist */, + ); + path = PoseTrackingLindera; + sourceTree = ""; + }; + 469B1C87F8976E33605A3219 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 32ADBDD62907D1E200F78CE0 /* PoseTrackingLindera */ = { + isa = PBXNativeTarget; + buildConfigurationList = 32ADBDEB2907D1E400F78CE0 /* Build configuration list for PBXNativeTarget "PoseTrackingLindera" */; + buildPhases = ( + 7A250759BFCF20A4441CE950 /* [CP] Check Pods Manifest.lock */, + 32ADBDD32907D1E200F78CE0 /* Sources */, + 32ADBDD42907D1E200F78CE0 /* Frameworks */, + 32ADBDD52907D1E200F78CE0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PoseTrackingLindera; + productName = PoseTrackingLindera; + productReference = 32ADBDD72907D1E200F78CE0 /* PoseTrackingLindera.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 32ADBDCF2907D1E200F78CE0 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1330; + LastUpgradeCheck = 1330; + TargetAttributes = { + 32ADBDD62907D1E200F78CE0 = { + CreatedOnToolsVersion = 13.3.1; + }; + }; + }; + buildConfigurationList = 32ADBDD22907D1E200F78CE0 /* Build configuration list for PBXProject "PoseTrackingLindera" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 32ADBDCE2907D1E200F78CE0; + productRefGroup = 32ADBDD82907D1E200F78CE0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 32ADBDD62907D1E200F78CE0 /* PoseTrackingLindera */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 32ADBDD52907D1E200F78CE0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32ADBDE72907D1E400F78CE0 /* LaunchScreen.storyboard in Resources */, + 32ADBDE42907D1E400F78CE0 /* Assets.xcassets in Resources */, + 32ADBDE22907D1E200F78CE0 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 7A250759BFCF20A4441CE950 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PoseTrackingLindera-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 32ADBDD32907D1E200F78CE0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32ADBDDF2907D1E200F78CE0 /* ViewController.swift in Sources */, + 32ADBDDB2907D1E200F78CE0 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 32ADBDE02907D1E200F78CE0 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 32ADBDE12907D1E200F78CE0 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 32ADBDE52907D1E400F78CE0 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 32ADBDE62907D1E400F78CE0 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 32ADBDE92907D1E400F78CE0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 32ADBDEA2907D1E400F78CE0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 32ADBDEC2907D1E400F78CE0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = JML2TT8X5V; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PoseTrackingLindera/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = ai.example.PoseTrackingLindera; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 32ADBDED2907D1E400F78CE0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = JML2TT8X5V; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PoseTrackingLindera/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = ai.example.PoseTrackingLindera; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 32ADBDD22907D1E200F78CE0 /* Build configuration list for PBXProject "PoseTrackingLindera" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 32ADBDE92907D1E400F78CE0 /* Debug */, + 32ADBDEA2907D1E400F78CE0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 32ADBDEB2907D1E400F78CE0 /* Build configuration list for PBXNativeTarget "PoseTrackingLindera" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 32ADBDEC2907D1E400F78CE0 /* Debug */, + 32ADBDED2907D1E400F78CE0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 32ADBDCF2907D1E200F78CE0 /* Project object */; +} diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.xcworkspace/xcuserdata/tj.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..a0760071d3b6a43a54eb923921960c85e4373a1a GIT binary patch literal 12412 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 literal 0 HcmV?d00001 diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/xcuserdata/tj.xcuserdatad/xcschemes/xcschememanagement.plist b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/xcuserdata/tj.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..e77c5a9fa --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/xcuserdata/tj.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + PoseTrackingLindera.xcscheme_^#shared#^_ + + orderHint + 2 + + + + diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/contents.xcworkspacedata b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1417ce4b0 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + 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 new file mode 100644 index 0000000000000000000000000000000000000000..56b0c88355726f7a30e3bc7946f2f410ae65971a GIT binary patch literal 21717 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 G@qYn_=R!>Y literal 0 HcmV?d00001 diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift index 13ec1ee48..f6af9e009 100644 --- a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera/ViewController.swift @@ -5,6 +5,7 @@ // Created by Mautisim Munir on 17/10/2022. // import UIKit +import MPPoseTracking import LinderaDetection diff --git a/mediapipe/objc/solutions/posetracking_gpu/BUILD b/mediapipe/objc/solutions/posetracking_gpu/BUILD index d25e498d6..b701a83a1 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/BUILD +++ b/mediapipe/objc/solutions/posetracking_gpu/BUILD @@ -1,24 +1,40 @@ +load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework", "ios_static_framework", "ios_unit_test") + +ios_static_framework( + name = "MPPoseTracking", + # hdrs = EDGE_ENGINE_HDRS, + bundle_name = "MPPoseTracking", + minimum_os_version = "12.0", + visibility = ["//visibility:public"], + deps = [ + ":posetracking_gpu_solution", + # "//third_party:opencv", + # "@ios_opencv//:OpencvFramework", + ], +) + objc_library( name = "posetracking_gpu_solution", srcs = glob([ "*.h", "*.mm", ]), - module_name = "MPPoseTracking", hdrs = [ "PoseTracking.h", "PoseTrackingOptions.h", - "PoseTrackingResults.h" + "PoseTrackingResults.h", ], copts = [ "-Wno-shorten-64-to-32", ], - data = [ + data = [ "//mediapipe/graphs/pose_tracking:pose_tracking_gpu.binarypb", "//mediapipe/modules/pose_detection:pose_detection.tflite", - "//mediapipe/modules/pose_landmark:pose_landmark_heavy.tflite", "//mediapipe/modules/pose_landmark:pose_landmark_full.tflite", - "//mediapipe/modules/pose_landmark:pose_landmark_lite.tflite", ] , + "//mediapipe/modules/pose_landmark:pose_landmark_heavy.tflite", + "//mediapipe/modules/pose_landmark:pose_landmark_lite.tflite", + ], + module_name = "MPPoseTracking", sdk_frameworks = ["Accelerate"], visibility = ["//visibility:public"], deps = [ @@ -33,4 +49,5 @@ objc_library( "//mediapipe/framework/formats:landmark_cc_proto", ], }), + alwayslink = True, ) diff --git a/mediapipe/swift/solutions/lindera/BUILD b/mediapipe/swift/solutions/lindera/BUILD index 01c01a50b..0a945f0f5 100644 --- a/mediapipe/swift/solutions/lindera/BUILD +++ b/mediapipe/swift/solutions/lindera/BUILD @@ -1,6 +1,20 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application", "ios_framework", "ios_static_framework", "ios_unit_test") +POSETRACKING_DEPS = [ + "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", + "//mediapipe/objc:mediapipe_framework_ios", + "//mediapipe/objc:mediapipe_input_sources_ios", + "//mediapipe/objc:mediapipe_layer_renderer", +] + select({ + "//mediapipe:ios_i386": [], + "//mediapipe:ios_x86_64": [], + "//conditions:default": [ + "//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps", + "//mediapipe/framework/formats:landmark_cc_proto", + ], +}) + genrule( name = "podgen", srcs = [ @@ -22,7 +36,7 @@ genrule( # bazel build //mediapipe/swift/solutions/lindera:lindera-framework -c opt --config=ios_fat --cxxopt=--std=c++17 --copt=-fembed-bitcode --linkopt="-s" ios_static_framework( name = "lindera-framework", - # hdrs = EDGE_ENGINE_HDRS, + # avoid_deps = POSETRACKING_DEPS, bundle_name = "LinderaDetection", minimum_os_version = "12.0", visibility = ["//visibility:public"], @@ -30,7 +44,7 @@ ios_static_framework( ":lindera", # "//third_party:opencv", # "@ios_opencv//:OpencvFramework", - ], + ] + POSETRACKING_DEPS, ) swift_library( @@ -47,17 +61,5 @@ swift_library( ], module_name = "LinderaDetection", visibility = ["//visibility:public"], - deps = [ - "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", - "//mediapipe/objc:mediapipe_framework_ios", - "//mediapipe/objc:mediapipe_input_sources_ios", - "//mediapipe/objc:mediapipe_layer_renderer", - ] + select({ - "//mediapipe:ios_i386": [], - "//mediapipe:ios_x86_64": [], - "//conditions:default": [ - "//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps", - "//mediapipe/framework/formats:landmark_cc_proto", - ], - }), + deps = POSETRACKING_DEPS, ) From 8c95126a672e11a7617a655055e6ea9445bc06c6 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Tue, 1 Nov 2022 22:00:19 +0500 Subject: [PATCH 3/8] core calculator error fixes --- WORKSPACE | 4 +- mediapipe/calculators/core/BUILD | 4 +- ...r.cc => constant_side_packet_calculator.h} | 0 ...alculator.cc => flow_limiter_calculator.h} | 0 .../UserInterfaceState.xcuserstate | Bin 21717 -> 49053 bytes .../PoseTrackingLindera/ViewController.swift | 2 +- mediapipe/framework/calculator_registry.h | 5 +- mediapipe/objc/BUILD | 11 +++ .../objc/solutions/posetracking_gpu/BUILD | 85 ++++++++++++++++-- .../solutions/posetracking_gpu/PoseTracking.h | 1 + .../posetracking_gpu/PoseTracking.mm | 9 +- mediapipe/swift/solutions/lindera/BUILD | 8 +- .../lindera/LinderaDetection.podspec | 4 +- 13 files changed, 113 insertions(+), 20 deletions(-) rename mediapipe/calculators/core/{constant_side_packet_calculator.cc => constant_side_packet_calculator.h} (100%) rename mediapipe/calculators/core/{flow_limiter_calculator.cc => flow_limiter_calculator.h} (100%) 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 56b0c88355726f7a30e3bc7946f2f410ae65971a..7d5593a7f467a3d11965d286cd317802820e2f77 100644 GIT binary patch literal 49053 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 Qb^E{UKmY&o|8LCuKTS3c1ONa4 delta 12336 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 + 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" From 81557e0590aeb063dc0b2938348062b3846aca76 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Wed, 2 Nov 2022 00:48:20 +0500 Subject: [PATCH 4/8] mediapipe sub-graph registration --- mediapipe/framework/tool/mediapipe_graph.bzl | 6 +++--- .../objc/solutions/posetracking_gpu/PoseTracking.mm | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/mediapipe/framework/tool/mediapipe_graph.bzl b/mediapipe/framework/tool/mediapipe_graph.bzl index 45d98b1eb..b357e9e85 100644 --- a/mediapipe/framework/tool/mediapipe_graph.bzl +++ b/mediapipe/framework/tool/mediapipe_graph.bzl @@ -134,7 +134,7 @@ def mediapipe_simple_subgraph( expand_template( name = name + "_linked_cc", template = clean_dep("//mediapipe/framework/tool:simple_subgraph_template.cc"), - out = name + "_linked.cc", + out = name + "_linked.h", substitutions = { "{{SUBGRAPH_CLASS_NAME}}": register_as, "{{SUBGRAPH_INC_FILE_PATH}}": native.package_name() + "/" + graph_base_name + ".inc", @@ -145,7 +145,7 @@ def mediapipe_simple_subgraph( native.cc_library( name = name, srcs = [ - name + "_linked.cc", + name + "_linked.h", graph_base_name + ".inc", ], deps = [ @@ -161,7 +161,7 @@ def mediapipe_simple_subgraph( cc_library_with_tflite( name = name, srcs = [ - name + "_linked.cc", + name + "_linked.h", graph_base_name + ".inc", ], tflite_deps = tflite_deps, diff --git a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm index 4d668c452..1be6f722c 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm +++ b/mediapipe/objc/solutions/posetracking_gpu/PoseTracking.mm @@ -5,8 +5,14 @@ #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" +void registerCalculators(){ + typeid(::mediapipe::FlowLimiterCalculator); + typeid(::mediapipe::ConstantSidePacketCalculator); + typeid(::mediapipe::PoseLandmarkGpu); +} static const char* kVideoQueueLabel = "com.google.mediapipe.example.videoQueue"; static const char* kLandmarksOutputStream = "pose_landmarks"; @@ -131,9 +137,8 @@ static const char* kLandmarksOutputStream = "pose_landmarks"; } - (instancetype) initWithPoseTrackingOptions: (PoseTrackingOptions*) poseTrackingOptions{ - typeid(::mediapipe::FlowLimiterCalculator); - typeid(::mediapipe::ConstantSidePacketCalculator); + registerCalculators(); self.renderer = [[MPPLayerRenderer alloc] init]; self.renderer.frameScaleMode = MPPFrameScaleModeFillAndCrop; From 2c01e8495579cca55a90b887af7bbd56c79f3373 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Sat, 5 Nov 2022 14:13:40 +0500 Subject: [PATCH 5/8] 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' From d29e3c01a9d2e8299ea240cfa79b4dba795566b9 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Sat, 5 Nov 2022 22:28:00 +0500 Subject: [PATCH 6/8] working cocoa pod with framework --- WORKSPACE | 4 +- .../examples/ios/posetracking-lindera/Podfile | 4 +- .../UserInterfaceState.xcuserstate | Bin 90809 -> 140528 bytes .../objc/solutions/posetracking_gpu/BUILD | 39 +++- mediapipe/swift/solutions/lindera/BUILD | 3 + .../swift/solutions/lindera/Lindera.swift | 182 +++++++++--------- .../lindera/LinderaDetection.podspec | 43 +++-- mediapipe/swift/solutions/lindera/README.md | 13 ++ third_party/opencv_ios.BUILD | 6 + 9 files changed, 178 insertions(+), 116 deletions(-) create mode 100644 mediapipe/swift/solutions/lindera/README.md diff --git a/WORKSPACE b/WORKSPACE index a131001a1..19d988f0a 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/examples/ios/posetracking-lindera/Podfile b/mediapipe/examples/ios/posetracking-lindera/Podfile index d680af3a4..d2309ed77 100644 --- a/mediapipe/examples/ios/posetracking-lindera/Podfile +++ b/mediapipe/examples/ios/posetracking-lindera/Podfile @@ -1,10 +1,12 @@ # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' +source 'https://github.com/copper-labs/CocoaSpecs.git' target 'PoseTrackingLindera' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! - pod 'LinderaDetection', :path => 'LinderaDetection' + + pod 'LinderaDetection' #, :path => 'LinderaDetection' # Pods for PoseTrackingLindera 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 c3034361703b92dbc12678547015a09d873214da..30d055d46da8cc56274d1d7f23b7c9d79cdc0714 100644 GIT binary patch literal 140528 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 diff --git a/mediapipe/objc/solutions/posetracking_gpu/BUILD b/mediapipe/objc/solutions/posetracking_gpu/BUILD index 43708389b..251c59767 100644 --- a/mediapipe/objc/solutions/posetracking_gpu/BUILD +++ b/mediapipe/objc/solutions/posetracking_gpu/BUILD @@ -6,6 +6,10 @@ load( "ios_static_framework", "ios_unit_test", ) +load( + "@build_bazel_rules_apple//apple:apple.bzl", + "apple_static_xcframework", +) load( "//mediapipe/examples/ios:bundle_id.bzl", "BUNDLE_ID_PREFIX", @@ -67,10 +71,22 @@ ios_static_framework( visibility = ["//visibility:public"], deps = [ "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", - "//mediapipe/calculators/core:flow_limiter_calculator", # "//third_party:opencv", - "@ios_opencv//:OpencvFramework", + # "@ios_opencv//:OpencvFramework", + ], +) + +apple_static_xcframework( + name = "MPPoseTrackingXC", + bundle_name = "MPPoseTracking", + minimum_os_versions = {"ios": "12.0"}, + public_hdrs = MPP_HEADERS + MP_GEN_IOS_HEADERS, + deps = [ + "//mediapipe/objc/solutions/posetracking_gpu:posetracking_gpu_solution", + + # "//third_party:opencv", + # "@ios_opencv//:OpencvFramework", ], ) @@ -133,10 +149,15 @@ genrule( objc_library( name = "posetracking_gpu_solution", - srcs = glob([ - "*.h", - "*.mm", - ]), + srcs = [ + "PoseTrackingOptions.mm", + "PoseTrackingResults.mm", + "PoseTracking.mm", + ] + select({ + "//mediapipe:ios_i386": [], + "//mediapipe:ios_x86_64": [], + "//conditions:default": [], + }), hdrs = MPP_HEADERS + MP_GEN_IOS_HEADERS, copts = [ "-Wno-shorten-64-to-32", @@ -168,13 +189,13 @@ objc_library( "//mediapipe/objc:mediapipe_framework_ios", "//mediapipe/objc:mediapipe_input_sources_ios", "//mediapipe/objc:mediapipe_layer_renderer", + "//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps", + "//mediapipe/framework/formats:landmark_cc_proto", + "calculator_registry", ] + 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, diff --git a/mediapipe/swift/solutions/lindera/BUILD b/mediapipe/swift/solutions/lindera/BUILD index 9185b3750..962d19f29 100644 --- a/mediapipe/swift/solutions/lindera/BUILD +++ b/mediapipe/swift/solutions/lindera/BUILD @@ -20,10 +20,13 @@ genrule( srcs = [ "//mediapipe/objc/solutions/posetracking_gpu:MPPoseTrackingHeaderPatched", "LinderaDetection.podspec", + "@ios_opencv//:OpencvFrameworkContents", ] + glob(["*.swift"]), outs = ["LinderaDetection.zip"], cmd = """ + mkdir mediapipe/swift/solutions/lindera/frameworks + cp -r external/ios_opencv/opencv2.framework mediapipe/swift/solutions/lindera/frameworks unzip $(location //mediapipe/objc/solutions/posetracking_gpu:MPPoseTrackingHeaderPatched) -d mediapipe/swift/solutions/lindera/frameworks cd mediapipe/swift/solutions/lindera/ diff --git a/mediapipe/swift/solutions/lindera/Lindera.swift b/mediapipe/swift/solutions/lindera/Lindera.swift index 2943c2416..3a380c923 100644 --- a/mediapipe/swift/solutions/lindera/Lindera.swift +++ b/mediapipe/swift/solutions/lindera/Lindera.swift @@ -1,31 +1,32 @@ // This is the copperlabs posetracking api built in objective c -import MPPoseTracking import UIKit +#if arch(arm64) +import MPPoseTracking /// A helper class to run the Pose Tracking API /// TFLite models are also loaded when you initialize this class public final class Lindera{ - - + + //MARK: - Public Class API - - + + // A delegate to handle results public weak var delegate: LinderaDelegate? - + /// This function sets up your callback function to happen whenver there is an fps update public func setFpsDelegate(fpsDelegate: @escaping (_ fps:Double)->Void){ fpsHelper.onFpsUpdate = fpsDelegate; } - + // Get the camera UI View that may contain landmarks drawing public var cameraView: UIView { return self.linderaExerciseSession } - - + + // Show Landmarks - works instantaneously! public func showLandmarks(value:Bool){ self.poseTracking.showLandmarks(value) @@ -38,50 +39,50 @@ public final class Lindera{ public func getModelComplexity() -> Int { return Int(self.poseTracking.poseTrackingOptions.modelComplexity); } - + // Set the model complexity and restart detection to load new models public func setModelComplexityNow(complexity:Int){ let poseTrackingOptions = poseTracking.poseTrackingOptions - + poseTrackingOptions?.modelComplexity = Int32(complexity) - + poseTracking = PoseTracking(poseTrackingOptions: poseTrackingOptions) startPoseTracking() startCamera() - + } - + public required init(){ - + startPoseTracking() } - - + + public func startCamera(_ completion: ((Result) -> Void)? = nil) { // set our rendering layer frame according to cameraView boundry self.poseTracking.renderer.layer.frame = cameraView.layer.bounds // attach render CALayer on cameraView to render output to self.cameraView.layer.addSublayer(self.poseTracking.renderer.layer) - + self.cameraSource.requestCameraAccess( - completionHandler: {(granted:Bool)->Void in - if (granted){ - self.poseTracking.videoQueue.async(execute:{ [weak self] in - - self?.cameraSource.start() - - } ) - completion?(.success(Void())) - }else{ - - completion?(.failure(preconditionFailure("Camera Access Not Granted"))) - - } - }) - - - - + completionHandler: {(granted:Bool)->Void in + if (granted){ + self.poseTracking.videoQueue.async(execute:{ [weak self] in + + self?.cameraSource.start() + + } ) + completion?(.success(Void())) + }else{ + + completion?(.failure(preconditionFailure("Camera Access Not Granted"))) + + } + }) + + + + } /// Choose front or back camera. Must restart camera after use if already started public func selectCamera(_ position: AVCaptureDevice.Position, _ completion: ((Result) -> Void)? = nil) { @@ -89,23 +90,23 @@ public final class Lindera{ self?.cameraSource.cameraPosition = position completion?(.success(Void())) } - + } - - + + // MARK: - Private Class Functions - + // Set your custom view heree private lazy var linderaExerciseSession: UIView = { - + // this will be the main camera view; Change it to custom view class to get desired results let liveView = UIView() - + return liveView - + }() - - + + private func startPoseTracking(){ // set camera preferences self.cameraSource.sessionPreset = AVCaptureSession.Preset.high.rawValue @@ -116,43 +117,43 @@ public final class Lindera{ } // call LinderaDelegate on pose tracking results self.poseTracking.poseTrackingResultsListener = {[weak self] results in - - + + guard let self = self, let results = results else { return } - + self.delegate?.lindera(self, didDetect: .init(pose: Asensei3DPose.init(results), timestamp: CMTimeGetSeconds(self.poseTracking.timeStamp))) } self.poseTracking.graphOutputStreamListener = {[weak self] in self?.fpsHelper.logTime() } - + self.poseTracking.startGraph() // attach camera's output with poseTracking object and its videoQueue self.cameraSource.setDelegate(self.poseTracking, queue: self.poseTracking.videoQueue) } - - + + func stopCamera(){ if (self.cameraSource.isRunning){ self.poseTracking.videoQueue.async { [weak self] in self?.cameraSource.stop() } - + } } - + /// switches camera from front to back and vice versa func switchCamera(_ completion: ((Result) -> Void)? = nil) { self.poseTracking.videoQueue.async { [weak self] in if let self = self { - + self.stopCamera() self.startCamera(completion) - + switch(self.cameraSource.cameraPosition){ - + case .unspecified: completion?(.failure(preconditionFailure("Unkown Camera Position"))) case .back: @@ -161,34 +162,34 @@ public final class Lindera{ self.selectCamera(AVCaptureDevice.Position.back,completion) @unknown default: completion?(.failure(preconditionFailure("Unkown Camera Position"))) - + } - - + + } - + } } - - + + // MARK: - Private Class Objects // initalize the PoseTracking api and load models var poseTracking:PoseTracking = PoseTracking(poseTrackingOptions: PoseTrackingOptions(showLandmarks: true,modelComplexity: 1)) - + // Needed to get fps of model let fpsHelper = FPSHelper(smoothingFactor: 0.95) - + // attach Mediapipe camera helper to our class let cameraSource = MPPCameraInputSource() - - - + + + } public protocol LinderaDelegate: AnyObject { - + func lindera(_ lindera: Lindera, didDetect event: Asensei3DPose.Event) } @@ -199,61 +200,61 @@ func landmarkToBodyJointDetails(landmark: PoseLandmark) -> Asensei3DPose.BodyJoi } // MARK: - Helpers extension Asensei3DPose { - + init(_ pose: PoseTrackingResults) { - + self.nose = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_NOSE]) - + self.leftEyeInner = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_EYE_INNER]) self.leftEye = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_EYE]) self.leftEyeOuter = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_EYE_OUTER]) - + self.rightEyeInner = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_EYE_OUTER]) self.rightEye = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_EYE]) self.rightEyeOuter = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_EYE_OUTER]) - + self.leftEar = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_EAR]) self.rightEar = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_EAR]) - + self.mouthLeft = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_MOUTH_LEFT]) self.mouthRight = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_MOUTH_RIGHT]) - + self.leftShoulder = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_SHOULDER]) self.rightShoulder = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_SHOULDER]) - + self.leftElbow = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_ELBOW]) self.rightElbow = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_ELBOW]) - + self.leftWrist = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_WRIST]) self.rightWrist = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_WRIST]) - + self.leftPinky = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_PINKY]) self.rightPinky = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_PINKY]) - + self.leftIndex = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_INDEX]) self.rightIndex = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_INDEX]) - + self.leftThumb = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_THUMB]) self.rightThumb = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_THUMB]) - + self.leftHip = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_HIP]) self.rightHip = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_HIP]) - + self.leftKnee = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_KNEE]) self.rightKnee = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_KNEE]) - + self.rightAnkle = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_ANKLE]) self.leftAnkle = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_ANKLE]) - - + + self.rightHeel = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_HEEL]) self.leftHeel = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_HEEL]) - + self.rightFoot = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_RIGHT_FOOT]) self.leftFoot = landmarkToBodyJointDetails(landmark: pose.landmarks[POSE_LEFT_FOOT]) - - - + + + } } @@ -265,3 +266,6 @@ extension Asensei3DPose { // self.z = vector.y // } //} +#else +final public class Lindera{} +#endif diff --git a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec index d7389d204..d0f2961de 100644 --- a/mediapipe/swift/solutions/lindera/LinderaDetection.podspec +++ b/mediapipe/swift/solutions/lindera/LinderaDetection.podspec @@ -16,15 +16,15 @@ Pod::Spec.new do |spec| # spec.name = "LinderaDetection" - spec.version = "0.0.1" - spec.summary = "LinderaDetection is a simple yet powerful interface to run AI Health Solutions" + spec.version = "0.0.2" + spec.summary = "LinderaDetection is a simple yet powerful interface to run AI Fitness Solutions" # This description is used to generate tags and improve search results. # * Think: What does it do? Why did you write it? What is the focus? # * Try to keep it short, snappy and to the point. # * Write the description between the DESC delimiters below. # * Finally, don't worry about the indent, CocoaPods strips it! - spec.description = "LinderaDetection is a simple yet powerful interface to run AI Health Solutions" + spec.description = "LinderaDetection is a simple yet powerful interface to run AI Fitness Solutions. It is powered by Mediapipe." spec.homepage = "https://github.com/udamaster/mediapipe" # spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" @@ -37,8 +37,11 @@ Pod::Spec.new do |spec| # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. # - spec.license = "MIT (example)" - spec.license = { :type => "MIT"} + spec.license = { :type => 'MIT', :text => <<-LICENSE + Copyright 2012 + Permission is granted to... + LICENSE + } # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # @@ -59,7 +62,7 @@ Pod::Spec.new do |spec| # If this Pod runs only on iOS or OS X, then specify the platform and # the deployment target. You can optionally include the target after the platform. # - + spec.swift_versions = ["4.0"] # spec.platform = :ios spec.platform = :ios, "12.0" @@ -74,9 +77,12 @@ Pod::Spec.new do |spec| # # Specify the location from where the source should be retrieved. # Supports git, hg, bzr, svn and HTTP. - # + + spec.source = { :http => 'https://github.com/copper-labs/iOSFramework/releases/download/0.1.0/LinderaDetection.zip' } - spec.source = { :http => 'https://edge-engine-store.s3.amazonaws.com/libs/ios/EdgeEngine/pod/EdgeEngine.zip' } + # for quickly testing locally + # spec.source = { :http => 'http://127.0.0.1:8000/LinderaDetection.zip' } + # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # # @@ -128,14 +134,21 @@ Pod::Spec.new do |spec| # spec.requires_arc = true # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } - spec.dependency "OpenCV", "3.2" + # spec.dependency "OpenCV", "3.2" spec.static_framework = true - + # spec.preserve_paths = "frameworks/**/*" spec.ios.vendored_frameworks = 'frameworks/*.framework' - # spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lc++' } - # spec.user_target_xcconfig = {'OTHER_LDFLAGS' => '-lc++' } + spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' , + 'OTHER_LDFLAGS' => '$(inherited) -force_load $(PODS_ROOT)/LinderaDetection/frameworks/MPPoseTracking.framework/MPPoseTracking' } + spec.user_target_xcconfig = { + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' , + 'OTHER_LDFLAGS' => '$(inherited) -force_load $(PODS_ROOT)/LinderaDetection/frameworks/MPPoseTracking.framework/MPPoseTracking' } spec.libraries = 'stdc++' - # ――― Temporary Architecture fixes - spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } - spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } + + + # spec.xcconfig = { + # 'FRAMEWORK_SEARCH_PATH[sdk=iphoneos*]' => '$(inherited) "$(PODS_ROOT)/frameworks"', + # 'OTHERCFLAGS[sdk=iphoneos*]' => '$(inherited) -iframework "$(PODS_ROOT)/frameworks"', + # 'OTHER_LDFLAGS[sdk=iphoneos*]' => '$(inherited) -framework frameworks' + # } end diff --git a/mediapipe/swift/solutions/lindera/README.md b/mediapipe/swift/solutions/lindera/README.md new file mode 100644 index 000000000..7cfe9b747 --- /dev/null +++ b/mediapipe/swift/solutions/lindera/README.md @@ -0,0 +1,13 @@ +## CocoaPods + +### Building Pod zipfile +```shell +bazel build -c opt --config=ios_fat --cxxopt=--std=c++17 --copt=-fembed-bitcode //mediapipe/swift/solutions/lindera:podgen +``` + +### Pushing Pods + +here clspecs is the name of pod specs repository +```shell +pod repo push clspecs LinderaDetection.podspec --skip-import-validation +``` diff --git a/third_party/opencv_ios.BUILD b/third_party/opencv_ios.BUILD index c9f112075..6a20a2f45 100644 --- a/third_party/opencv_ios.BUILD +++ b/third_party/opencv_ios.BUILD @@ -10,6 +10,12 @@ load( "apple_static_framework_import", ) +filegroup( + name = "OpencvFrameworkContents", + srcs = glob(["opencv2.framework/**"]), + visibility = ["//visibility:public"], +) + apple_static_framework_import( name = "OpencvFramework", framework_imports = glob(["opencv2.framework/**"]), From 8d8cda67aa145ebbbab9610e98a4ae6bf5fa594b Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Mon, 7 Nov 2022 20:20:52 +0500 Subject: [PATCH 7/8] pod project --- .../project.pbxproj | 91 ++++++++++++++----- 1 file changed, 68 insertions(+), 23 deletions(-) diff --git a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj index 1a1ec87a5..51652e86d 100644 --- a/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj +++ b/mediapipe/examples/ios/posetracking-lindera/PoseTrackingLindera.xcodeproj/project.pbxproj @@ -7,16 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 1C59D14FDC8E0245032992F2 /* Pods_PoseTrackingLindera.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B06906B638FEBA7FF2874FB /* Pods_PoseTrackingLindera.framework */; }; 32ADBDDB2907D1E200F78CE0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ADBDDA2907D1E200F78CE0 /* AppDelegate.swift */; }; 32ADBDDF2907D1E200F78CE0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ADBDDE2907D1E200F78CE0 /* ViewController.swift */; }; 32ADBDE22907D1E200F78CE0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE02907D1E200F78CE0 /* Main.storyboard */; }; 32ADBDE42907D1E400F78CE0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE32907D1E400F78CE0 /* Assets.xcassets */; }; 32ADBDE72907D1E400F78CE0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32ADBDE52907D1E400F78CE0 /* LaunchScreen.storyboard */; }; - CD88DF4A36BE18935B7A330A /* Pods_PoseTrackingLindera.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PoseTrackingLindera.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 32ADBDD72907D1E200F78CE0 /* PoseTrackingLindera.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PoseTrackingLindera.app; sourceTree = BUILT_PRODUCTS_DIR; }; 32ADBDDA2907D1E200F78CE0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 32ADBDDE2907D1E200F78CE0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -24,8 +23,10 @@ 32ADBDE32907D1E400F78CE0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 32ADBDE62907D1E400F78CE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 32ADBDE82907D1E400F78CE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.release.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.release.xcconfig"; sourceTree = ""; }; - B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.debug.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.debug.xcconfig"; sourceTree = ""; }; + 32DE689E2916386C00CF67DE /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; + 9B06906B638FEBA7FF2874FB /* Pods_PoseTrackingLindera.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PoseTrackingLindera.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0145F51AF9833F7B3332A77 /* Pods-PoseTrackingLindera.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.debug.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.debug.xcconfig"; sourceTree = ""; }; + E651467537CC922E8D432264 /* Pods-PoseTrackingLindera.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PoseTrackingLindera.release.xcconfig"; path = "Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -33,30 +34,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CD88DF4A36BE18935B7A330A /* Pods_PoseTrackingLindera.framework in Frameworks */, + 1C59D14FDC8E0245032992F2 /* Pods_PoseTrackingLindera.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0F62EBD53927AA932B6FF415 /* Pods */ = { - isa = PBXGroup; - children = ( - B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */, - 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 32ADBDCE2907D1E200F78CE0 = { isa = PBXGroup; children = ( 32ADBDD92907D1E200F78CE0 /* PoseTrackingLindera */, 32ADBDD82907D1E200F78CE0 /* Products */, - 0F62EBD53927AA932B6FF415 /* Pods */, - 469B1C87F8976E33605A3219 /* Frameworks */, + 669AA0EB532C755115F04FF2 /* Pods */, + 88E6C68AD588A768E9656194 /* Frameworks */, ); sourceTree = ""; }; @@ -81,10 +72,20 @@ path = PoseTrackingLindera; sourceTree = ""; }; - 469B1C87F8976E33605A3219 /* Frameworks */ = { + 669AA0EB532C755115F04FF2 /* Pods */ = { isa = PBXGroup; children = ( - 01B5C7B03C498564584C8E52 /* Pods_PoseTrackingLindera.framework */, + D0145F51AF9833F7B3332A77 /* Pods-PoseTrackingLindera.debug.xcconfig */, + E651467537CC922E8D432264 /* Pods-PoseTrackingLindera.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 88E6C68AD588A768E9656194 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 32DE689E2916386C00CF67DE /* AssetsLibrary.framework */, + 9B06906B638FEBA7FF2874FB /* Pods_PoseTrackingLindera.framework */, ); name = Frameworks; sourceTree = ""; @@ -96,10 +97,11 @@ isa = PBXNativeTarget; buildConfigurationList = 32ADBDEB2907D1E400F78CE0 /* Build configuration list for PBXNativeTarget "PoseTrackingLindera" */; buildPhases = ( - 7A250759BFCF20A4441CE950 /* [CP] Check Pods Manifest.lock */, + 7F961E62B43D9BC2161D6057 /* [CP] Check Pods Manifest.lock */, 32ADBDD32907D1E200F78CE0 /* Sources */, 32ADBDD42907D1E200F78CE0 /* Frameworks */, 32ADBDD52907D1E200F78CE0 /* Resources */, + F2C34C6162DE10BC2A8141AC /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -157,7 +159,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 7A250759BFCF20A4441CE950 /* [CP] Check Pods Manifest.lock */ = { + 7F961E62B43D9BC2161D6057 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -179,6 +181,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F2C34C6162DE10BC2A8141AC /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PoseTrackingLindera/Pods-PoseTrackingLindera-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -329,13 +348,19 @@ }; 32ADBDEC2907D1E400F78CE0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2D47F33B48B51CB73CC23E7 /* Pods-PoseTrackingLindera.debug.xcconfig */; + baseConfigurationReference = D0145F51AF9833F7B3332A77 /* Pods-PoseTrackingLindera.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = JML2TT8X5V; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + "FRAMEWORK_SEARCH_PATHS[arch=*]" = ( + "$(inherited)", + "\"${PODS_CONFIGURATION_BUILD_DIR}/LinderaDetection\"", + "\"${PODS_ROOT}/../LinderaDetection/frameworks\"", + ); GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PoseTrackingLindera/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -348,6 +373,16 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"stdc++\"", + "-framework", + "\"LinderaDetection\"", + "-framework", + "\"MPPoseTracking\"", + "-Wl", + ); PRODUCT_BUNDLE_IDENTIFIER = ai.example.PoseTrackingLindera; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -358,7 +393,7 @@ }; 32ADBDED2907D1E400F78CE0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7617FFFD466EF435102F56E4 /* Pods-PoseTrackingLindera.release.xcconfig */; + baseConfigurationReference = E651467537CC922E8D432264 /* Pods-PoseTrackingLindera.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -377,6 +412,16 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"stdc++\"", + "-framework", + "\"LinderaDetection\"", + "-framework", + "\"MPPoseTracking\"", + "-Wl", + ); PRODUCT_BUNDLE_IDENTIFIER = ai.example.PoseTrackingLindera; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; From e4955a390c82b867e158da6e91f09a6943d5f5a9 Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Mon, 7 Nov 2022 20:21:19 +0500 Subject: [PATCH 8/8] updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4be57c71d..a58a436de 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,4 @@ lint/tmp/ # App Specific cases app/release/output.json .idea/codeStyles/ +Pods/