QuickPose provides developer-oriented cutting edge ML features of MediaPipe and BlazePose, with easy integration and production ready code. Dramatically improving the speed of implementation of MediaPipe and BlazePose's pose estimation and skeleton tracking features into mobile applications.
- Register an SDK Key
- How it works
- Features
- Meta Features
- Supported Platforms
- Requirements
- Installing the SDK
- Getting Started
- Troubleshooting
Get your free SDK key on https://dev.quickpose.ai, usage limits may apply. SDK Keys are linked to your bundle ID, please check Key before distributing to the App Store.
QuickPose process a video frame and makes it easy for developers to perform complex AI features to the image, such as overlaying markings to the output image to highlight the user's pose.
+----------+ +-------------+ +-----------------+ | | | | | Overlay Image | | Camera |--------->| QuickPose |--------->| + | | | | | | Results | +----------+ +-------------+ +-----------------+| Feature | Example | Supported |
|---|---|---|
| Stacked Feature Styling | ![]() Bike Side View Video by Tariq Ali | v0.4 |
| Conditional Styling | ![]() | v0.4 |
Fitness - Guidance Body Position Named Leg or Arm not visible | ![]() | v0.8 |
| iOS Device | Silicon Mac (M1, M2, etc) | iOS Simulator x86_64 | iOS Simulator arm64 |
|---|---|---|---|
| âś… Runs | âś… Runs | âš™ Compiles | âš™ Known Issue |
- iOS 14.0+
- Xcode 10.0+
Step 1: Click on Xcode project file
Step 2: Click on Swift Packages and click on the plus to add a package
Step 3: Enter the following repository url https://github.com/quickpose/quickpose-ios-sdk.git and click next
Step 4: Choose all modules and click add package.
| Module | Description |
|---|---|
| QuickPoseCore | Core SDK (required) |
| QuickPoseMP | Mediapipe Library (required) |
| QuickPoseCamera | Utility Class for Integration (optional, recommended) |
| QuickPoseSwiftUI | Utility Classes for SwiftUI Integration (optional, recommended) |
See code examples below or download our Sample Apps.
Step 1: Download/Clone Repo
Step 2: Open Basic Demo
Step 3: Choose Build Target "My Mac (Designed For iPad/iPhone)"
Step 4: Run
Step 5: Explore the features and returned results
quickPose.start(features: [.overlay(.upperBody)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { overlayImage = image } })Step 1: Download/Clone Repo
Step 2: Open Basic Demo
Step 3: Choose Build Target as your physical device
Step 5: You will need to change the bundleid and register with apple if you haven't already.
Step 5: Run
Step 6: Explore the features and returned results
quickPose.start(features: [.overlay(.upperBody)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { overlayImage = image } })For reference docs see https://quickpose.github.io/quickpose-ios-sdk
import SwiftUI import QuickPoseCore import QuickPoseSwiftUI .... struct QuickPoseBasicView: View { private var quickPose = QuickPose(sdkKey: "YOUR SDK KEY HERE") // register for your free key at https://dev.quickpose.ai @State private var overlayImage: UIImage? var body: some View { GeometryReader { geometry in ZStack(alignment: .top) { QuickPoseCameraView(useFrontCamera: true, delegate: quickPose) QuickPoseOverlayView(overlayImage: $overlayImage) } .frame(width: geometry.size.width) .edgesIgnoringSafeArea(.all) .onAppear { quickPose.start(features: [.overlay(.userLeftArm)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { overlayImage = image } }) }.onDisappear { quickPose.stop() } } } }import SwiftUI import QuickPoseCore import QuickPoseSwiftUI ... struct QuickPoseBasicView: View { private var quickPose = QuickPose(sdkKey: "YOUR SDK KEY HERE") // register for your free key at https://dev.quickpose.ai @State private var overlayImage: UIImage? var body: some View { GeometryReader { geometry in ZStack(alignment: .top) { if ProcessInfo.processInfo.isiOSAppOnMac, let url = Bundle.main.url(forResource: "happy-dance", withExtension: "mov") { QuickPoseSimulatedCameraView(useFrontCamera: true, delegate: quickPose, video: url) } else { QuickPoseCameraView(useFrontCamera: true, delegate: quickPose) } QuickPoseOverlayView(overlayImage: $overlayImage) } .frame(width: geometry.size.width) .edgesIgnoringSafeArea(.all) .onAppear { quickPose.start(features: [.overlay(.upperBody)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { overlayImage = image } }) }.onDisappear { quickPose.stop() } } } import QuickPoseCore import QuickPoseCamera ... class ViewController: UIViewController { var camera: QuickPoseCamera? var quickPose = QuickPose(sdkKey: "YOUR SDK KEY HERE") // register for your free key at https://dev.quickpose.ai @IBOutlet var cameraView: UIView! @IBOutlet var overlayView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // setup camera camera = QuickPoseCamera(useFrontCamera: true) try? camera?.start(delegate: quickPose) let customPreviewLayer = AVCaptureVideoPreviewLayer(session: camera!.session!) customPreviewLayer.videoGravity = .resizeAspectFill customPreviewLayer.frame.size = view.frame.size cameraView.layer.addSublayer(customPreviewLayer) // setup overlay overlayView.contentMode = .scaleAspectFill // keep overlays in same scale as camera output overlayView.frame.size = view.frame.size } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) quickPose.start(features: [.overlay(.userLeftArm)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { DispatchQueue.main.async { self.overlayView.image = image } } }) } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) camera?.stop() quickPose.stop() } }import QuickPoseCore import QuickPoseCamera ... class ViewController: UIViewController { var camera: QuickPoseCamera? var simulatedCamera: QuickPoseSimulatedCamera? var quickPose = QuickPose(sdkKey: "YOUR SDK KEY HERE") // register for your free key at https://dev.quickpose.ai @IBOutlet var cameraView: UIView! @IBOutlet var overlayView: UIImageView! override func viewDidLoad() { super.viewDidLoad() if ProcessInfo.processInfo.isiOSAppOnMac, let url = Bundle.main.url(forResource: "happy-dance", withExtension: "mov") { simulatedCamera = QuickPoseSimulatedCamera(useFrontCamera: true, asset: AVAsset(url: url)) // setup simulated camera try? simulatedCamera?.start(delegate: quickPose) let customPreviewLayer = AVPlayerLayer(player: simulatedCamera?.player) customPreviewLayer.videoGravity = .resizeAspectFill customPreviewLayer.frame.size = view.frame.size cameraView.layer.addSublayer(customPreviewLayer) } else { camera = QuickPoseCamera(useFrontCamera: true) // setup camera try? camera?.start(delegate: quickPose) let customPreviewLayer = AVCaptureVideoPreviewLayer(session: camera!.session!) customPreviewLayer.videoGravity = .resizeAspectFill customPreviewLayer.frame.size = view.frame.size cameraView.layer.addSublayer(customPreviewLayer) } // setup overlay overlayView.contentMode = .scaleAspectFill // keep overlays in same scale as camera output overlayView.frame.size = view.frame.size } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) quickPose.start(features: [.overlay(.upperBody)], onFrame: { status, image, features, guidance, landmarks in if case .success(_) = status { DispatchQueue.main.async { self.overlayView.image = image } } }) } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) camera?.stop() simulatedCamera?.stop() quickPose.stop() } }Xcode reports error no such module QuickPoseCore or no such module QuickPoseSwiftUI
This happens when the linker cannot find the provided XCFrameworks. These needs to be added to your build Target.






























