Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tasks #67

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[![Ultralytics Actions](https://github.com/ultralytics/yolo-ios-app/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/yolo-ios-app/actions/workflows/format.yml) <a href="https://discord.com/invite/ultralytics"><img alt="Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a> <a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a> <a href="https://reddit.com/r/ultralytics"><img alt="Ultralytics Reddit" src="https://img.shields.io/reddit/subreddit-subscribers/ultralytics?style=flat&logo=reddit&logoColor=white&label=Reddit&color=blue"></a>

Welcome to the [Ultralytics YOLO iOS App](https://apps.apple.com/us/app/idetection/id1452689527) GitHub repository! πŸ“– Leveraging Ultralytics' advanced [YOLOv8 object detection models](https://github.com/ultralytics/ultralytics), this app transforms your iOS device into an intelligent detection tool. Explore our guide to get started with the Ultralytics YOLO iOS App and discover the world in a new and exciting way.
Welcome to the [Ultralytics YOLO iOS App](https://apps.apple.com/us/app/idetection/id1452689527) GitHub repository! πŸ“– Leveraging Ultralytics' advanced [YOLO11 object detection models](https://github.com/ultralytics/ultralytics), this app transforms your iOS device into an intelligent detection tool. Explore our guide to get started with the Ultralytics YOLO iOS App and discover the world in a new and exciting way.

<div align="center">
<a href="https://apps.apple.com/us/app/idetection/id1452689527" target="_blank"><img width="90%" src="https://github.com/ultralytics/ultralytics/assets/26833433/fd3c8a92-fec0-4253-b4ac-ee94f5ced3fb" alt="Ultralytics YOLO iOS App previews"></a>
Expand Down Expand Up @@ -60,17 +60,17 @@ Ensure you have the following before you start:

In Xcode, go to the project's target settings and choose your Apple Developer account under the "Signing & Capabilities" tab.

3. **Add YOLOv8 Models to the Project:**
3. **Add YOLO11 Models to the Project:**

Export CoreML INT8 models using the `ultralytics` Python package (with `pip install ultralytics`), or download them from our [GitHub release assets](https://github.com/ultralytics/yolo-ios-app/releases). You should have 5 YOLOv8 models in total. Place these in the `YOLO/Models` directory as seen in the Xcode screenshot below.
Export CoreML INT8 models using the `ultralytics` Python package (with `pip install ultralytics`), or download them from our [GitHub release assets](https://github.com/ultralytics/yolo-ios-app/releases). You should have 5 YOLO11 models in total. Place these in the `YOLO/Models` directory as seen in the Xcode screenshot below.

```python
from ultralytics import YOLO

# Loop through all YOLOv8 model sizes
# Loop through all YOLO11 model sizes
for size in ("n", "s", "m", "l", "x"):
# Load a YOLOv8 PyTorch model
model = YOLO(f"yolov8{size}.pt")
# Load a YOLO11 PyTorch model
model = YOLO(f"yolo11{size}.pt")

# Export the PyTorch model to CoreML INT8 format with NMS layers
model.export(format="coreml", int8=True, nms=True, imgsz=[640, 384])
Expand All @@ -89,7 +89,7 @@ Ensure you have the following before you start:
The Ultralytics YOLO iOS App is designed to be intuitive:

- **Real-Time Detection:** Launch the app and aim your camera at objects to detect them instantly.
- **Multiple AI Models:** Select from a range of Ultralytics YOLOv8 models, from YOLOv8n 'nano' to YOLOv8x 'x-large'.
- **Multiple AI Models:** Select from a range of Ultralytics YOLO11 models, from YOLO11n 'nano' to YOLO11x 'x-large'.

## πŸ’‘ Contribute

Expand Down
81 changes: 57 additions & 24 deletions YOLO.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,25 @@
636EFCAF21E62DD300DE43BC /* VideoCapture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636EFCA221E62DD300DE43BC /* VideoCapture.swift */; };
636EFCB321E62DD300DE43BC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636EFCA721E62DD300DE43BC /* AppDelegate.swift */; };
636EFCB921E62E3900DE43BC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 636EFCB821E62E3900DE43BC /* Assets.xcassets */; };
6381D2182B7817C200ABA4E8 /* yolov8l.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 6381D2132B7817C200ABA4E8 /* yolov8l.mlpackage */; };
6381D2192B7817C200ABA4E8 /* yolov8x.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 6381D2142B7817C200ABA4E8 /* yolov8x.mlpackage */; };
6381D21A2B7817C200ABA4E8 /* yolov8s.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 6381D2152B7817C200ABA4E8 /* yolov8s.mlpackage */; };
6381D21B2B7817C200ABA4E8 /* yolov8m.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 6381D2162B7817C200ABA4E8 /* yolov8m.mlpackage */; };
6381D21C2B7817C200ABA4E8 /* yolov8n.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 6381D2172B7817C200ABA4E8 /* yolov8n.mlpackage */; };
63CF371F2514455300E2DEA1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6323C44D22186177008AE681 /* LaunchScreen.storyboard */; };
63CF37202514455300E2DEA1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6323C44F22186177008AE681 /* Main.storyboard */; };
63CF37212514455300E2DEA1 /* ultralytics_yolo_logotype.png in Resources */ = {isa = PBXBuildFile; fileRef = 6323C45122186177008AE681 /* ultralytics_yolo_logotype.png */; };
733FEE4F2CF2D77600C0D4E9 /* yolo11s.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE4D2CF2D77600C0D4E9 /* yolo11s.mlpackage */; };
733FEE502CF2D77600C0D4E9 /* yolo11m.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE4B2CF2D77600C0D4E9 /* yolo11m.mlpackage */; };
733FEE512CF2D77600C0D4E9 /* yolo11n.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE4C2CF2D77600C0D4E9 /* yolo11n.mlpackage */; };
733FEE522CF2D77600C0D4E9 /* yolo11x.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE4E2CF2D77600C0D4E9 /* yolo11x.mlpackage */; };
733FEE532CF2D77600C0D4E9 /* yolo11l.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE4A2CF2D77600C0D4E9 /* yolo11l.mlpackage */; };
733FEE552CF2DB6500C0D4E9 /* Classify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE542CF2DB6500C0D4E9 /* Classify.swift */; };
733FEE572CF357A900C0D4E9 /* yolo11n-cls.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE562CF357A900C0D4E9 /* yolo11n-cls.mlpackage */; };
733FEE592CF3589A00C0D4E9 /* Detect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE582CF3589A00C0D4E9 /* Detect.swift */; };
733FEE5B2CF4BFA400C0D4E9 /* Segment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE5A2CF4BFA400C0D4E9 /* Segment.swift */; };
733FEE5D2CF5108C00C0D4E9 /* CoreML.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE5C2CF5108C00C0D4E9 /* CoreML.swift */; };
733FEE5F2CF579EE00C0D4E9 /* yolo11n-seg.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE5E2CF579EE00C0D4E9 /* yolo11n-seg.mlpackage */; };
733FEE632CF57A2200C0D4E9 /* yolo11n-pose.mlpackage in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE612CF57A2200C0D4E9 /* yolo11n-pose.mlpackage */; };
733FEE652CF6D65A00C0D4E9 /* Pose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733FEE642CF6D65A00C0D4E9 /* Pose.swift */; };
8EDAA33950796844333D60A7 /* BoundingBoxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EDAA633C1F2B50286D16008 /* BoundingBoxView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
6323C44D22186177008AE681 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
6323C44F22186177008AE681 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
Expand All @@ -34,12 +43,20 @@
636EFCA221E62DD300DE43BC /* VideoCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoCapture.swift; sourceTree = "<group>"; };
636EFCA721E62DD300DE43BC /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
636EFCB821E62E3900DE43BC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
6381D2132B7817C200ABA4E8 /* yolov8l.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolov8l.mlpackage; sourceTree = "<group>"; };
6381D2142B7817C200ABA4E8 /* yolov8x.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolov8x.mlpackage; sourceTree = "<group>"; };
6381D2152B7817C200ABA4E8 /* yolov8s.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolov8s.mlpackage; sourceTree = "<group>"; };
6381D2162B7817C200ABA4E8 /* yolov8m.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolov8m.mlpackage; sourceTree = "<group>"; };
6381D2172B7817C200ABA4E8 /* yolov8n.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolov8n.mlpackage; sourceTree = "<group>"; };
63B8B0A821E62A890026FBC3 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; };
733FEE4A2CF2D77600C0D4E9 /* yolo11l.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolo11l.mlpackage; sourceTree = "<group>"; };
733FEE4B2CF2D77600C0D4E9 /* yolo11m.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolo11m.mlpackage; sourceTree = "<group>"; };
733FEE4C2CF2D77600C0D4E9 /* yolo11n.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolo11n.mlpackage; sourceTree = "<group>"; };
733FEE4D2CF2D77600C0D4E9 /* yolo11s.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolo11s.mlpackage; sourceTree = "<group>"; };
733FEE4E2CF2D77600C0D4E9 /* yolo11x.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = yolo11x.mlpackage; sourceTree = "<group>"; };
733FEE542CF2DB6500C0D4E9 /* Classify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Classify.swift; sourceTree = "<group>"; };
733FEE562CF357A900C0D4E9 /* yolo11n-cls.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = "yolo11n-cls.mlpackage"; sourceTree = "<group>"; };
733FEE582CF3589A00C0D4E9 /* Detect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Detect.swift; sourceTree = "<group>"; };
733FEE5A2CF4BFA400C0D4E9 /* Segment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Segment.swift; sourceTree = "<group>"; };
733FEE5C2CF5108C00C0D4E9 /* CoreML.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreML.swift; sourceTree = "<group>"; };
733FEE5E2CF579EE00C0D4E9 /* yolo11n-seg.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = "yolo11n-seg.mlpackage"; sourceTree = "<group>"; };
733FEE612CF57A2200C0D4E9 /* yolo11n-pose.mlpackage */ = {isa = PBXFileReference; lastKnownFileType = folder.mlpackage; path = "yolo11n-pose.mlpackage"; sourceTree = "<group>"; };
733FEE642CF6D65A00C0D4E9 /* Pose.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pose.swift; sourceTree = "<group>"; };
7BCB411721C3096100BFC4D0 /* YOLO.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = YOLO.app; sourceTree = BUILT_PRODUCTS_DIR; };
8EDAA633C1F2B50286D16008 /* BoundingBoxView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoundingBoxView.swift; sourceTree = "<group>"; };
8EDAAA4507D2D23D7FAB827F /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
Expand All @@ -61,6 +78,11 @@
children = (
636166E9251443B20054FA7E /* ThresholdProvider.swift */,
8EDAA633C1F2B50286D16008 /* BoundingBoxView.swift */,
733FEE5C2CF5108C00C0D4E9 /* CoreML.swift */,
733FEE582CF3589A00C0D4E9 /* Detect.swift */,
733FEE542CF2DB6500C0D4E9 /* Classify.swift */,
733FEE5A2CF4BFA400C0D4E9 /* Segment.swift */,
733FEE642CF6D65A00C0D4E9 /* Pose.swift */,
);
path = Utilities;
sourceTree = "<group>";
Expand All @@ -86,11 +108,14 @@
63A946D8271800E20001C3ED /* Models */ = {
isa = PBXGroup;
children = (
6381D2132B7817C200ABA4E8 /* yolov8l.mlpackage */,
6381D2162B7817C200ABA4E8 /* yolov8m.mlpackage */,
6381D2172B7817C200ABA4E8 /* yolov8n.mlpackage */,
6381D2152B7817C200ABA4E8 /* yolov8s.mlpackage */,
6381D2142B7817C200ABA4E8 /* yolov8x.mlpackage */,
733FEE4A2CF2D77600C0D4E9 /* yolo11l.mlpackage */,
733FEE4B2CF2D77600C0D4E9 /* yolo11m.mlpackage */,
733FEE4C2CF2D77600C0D4E9 /* yolo11n.mlpackage */,
733FEE4D2CF2D77600C0D4E9 /* yolo11s.mlpackage */,
733FEE4E2CF2D77600C0D4E9 /* yolo11x.mlpackage */,
733FEE562CF357A900C0D4E9 /* yolo11n-cls.mlpackage */,
733FEE5E2CF579EE00C0D4E9 /* yolo11n-seg.mlpackage */,
733FEE612CF57A2200C0D4E9 /* yolo11n-pose.mlpackage */,
);
path = Models;
sourceTree = "<group>";
Expand Down Expand Up @@ -209,15 +234,23 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6381D21B2B7817C200ABA4E8 /* yolov8m.mlpackage in Sources */,
6381D21C2B7817C200ABA4E8 /* yolov8n.mlpackage in Sources */,
636EFCAF21E62DD300DE43BC /* VideoCapture.swift in Sources */,
733FEE4F2CF2D77600C0D4E9 /* yolo11s.mlpackage in Sources */,
733FEE502CF2D77600C0D4E9 /* yolo11m.mlpackage in Sources */,
733FEE5B2CF4BFA400C0D4E9 /* Segment.swift in Sources */,
733FEE512CF2D77600C0D4E9 /* yolo11n.mlpackage in Sources */,
733FEE522CF2D77600C0D4E9 /* yolo11x.mlpackage in Sources */,
733FEE552CF2DB6500C0D4E9 /* Classify.swift in Sources */,
733FEE5F2CF579EE00C0D4E9 /* yolo11n-seg.mlpackage in Sources */,
733FEE632CF57A2200C0D4E9 /* yolo11n-pose.mlpackage in Sources */,
733FEE572CF357A900C0D4E9 /* yolo11n-cls.mlpackage in Sources */,
733FEE532CF2D77600C0D4E9 /* yolo11l.mlpackage in Sources */,
733FEE592CF3589A00C0D4E9 /* Detect.swift in Sources */,
636166EA251443B20054FA7E /* ThresholdProvider.swift in Sources */,
6381D2182B7817C200ABA4E8 /* yolov8l.mlpackage in Sources */,
6381D21A2B7817C200ABA4E8 /* yolov8s.mlpackage in Sources */,
6381D2192B7817C200ABA4E8 /* yolov8x.mlpackage in Sources */,
636EFCB321E62DD300DE43BC /* AppDelegate.swift in Sources */,
636EFCAA21E62DD300DE43BC /* ViewController.swift in Sources */,
733FEE652CF6D65A00C0D4E9 /* Pose.swift in Sources */,
733FEE5D2CF5108C00C0D4E9 /* CoreML.swift in Sources */,
8EDAA33950796844333D60A7 /* BoundingBoxView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -354,12 +387,12 @@
INFOPLIST_FILE = YOLO/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ultralytics YOLO";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 8.2.0;
MARKETING_VERSION = 8.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ultralytics.iDetection;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -382,12 +415,12 @@
INFOPLIST_FILE = YOLO/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ultralytics YOLO";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 8.2.0;
MARKETING_VERSION = 8.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ultralytics.iDetection;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down
2 changes: 1 addition & 1 deletion YOLO/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>25</string>
<string>117</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>
Expand Down
Loading
Loading