> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-jp/depuroi/sdks/ios-sdk.md).

# iOS SDK

Roboflow Mobile iOS SDK は、より高速な推論のために、あるいは新しい機能群、機能、ユースケース（拡張現実など）を解放するために、エッジ（iPad または iPhone）でモデルを動作させる必要がある iOS アプリケーションを開発している場合に最適な選択肢です。

カスタムのコンピュータビジョンモデルが組み込まれたネイティブモバイルアプリケーションにより、開発者はアプリに「視覚」を与えることができます。

## タスクのサポート

iOS SDK Deployment では、以下のタスクタイプがサポートされています：

| タスクタイプ           | iOS SDK Deployment によるサポート |
| ---------------- | -------------------------- |
| オブジェクト検出         | ✅                          |
| 分類               |                            |
| インスタンスセグメンテーション  | ✅（iOS 18 以上）               |
| セマンティックセグメンテーション |                            |

### CoreML エクスポート互換性

以下のモデルアーキテクチャは CoreML（`.mlpackage`）エクスポートによるオンデバイスデプロイに対応しています：

| モデル      | CoreML エクスポート |
| -------- | ------------- |
| RF-DETR  | ✅             |
| YoloLite | ✅             |
| 分類モデル    | ✅             |

## モデルを iOS デバイスにデプロイする

### 対応ハードウェアとソフトウェア

すべての iOS デバイスはオンデバイス推論をサポートしていますが、iPhone 8（A11 Bionic Processor）より古いものは、より省電力効率の低い GPU エンジンにフォールバックします。

Roboflow では、最低 iOS バージョン 15.4 が必要です（インスタンスセグメンテーションモデルは 18.0）。

## プロトタイピング

次を対象に開発できます： [Roboflow Serverless Hosted API](https://docs.roboflow.com/deploy/serverless)。オンデバイス推論と同じ学習済みモデルを使用します。

## インストール

* インストール [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) | [トラブルシューティングガイド](https://guides.cocoapods.org/using/troubleshooting#installing-cocoapods)

「CocoaPods は Ruby で構築されており、macOS に標準で付属する Ruby でインストール可能です。Ruby のバージョンマネージャーを使用することもできますが、何をしているか分かっている場合を除き、macOS に標準で付属する Ruby を使うことを推奨します。デフォルトの Ruby を使う場合、gem をインストールする際に `sudo` を使用する必要があります。（ただし、これは gem のインストール中だけの問題です。）」 - [CocoaPods](https://guides.cocoapods.org/using/getting-started.html)

「Sudo-less」インストールは、この処理で RubyGems に管理者権限を与えたくない場合の選択肢です。ただし、 `sudo` インストールのほうが一般的であることに注意してください。

次を入力して CocoaPods が正常にインストールされていることを確認してください： `pod --version` を Terminal に入力します。

### Roboflow CocoaPod のインストール

まず、 `pod init` をプロジェクトディレクトリで実行します。

次が `Podfile` で `platform :ios, '15.4'`

と指定されていることを確認してください。次に、 `pod 'Roboflow'` を `Podfile`.

XCode Command Line Tools がインストールされていない場合は、次を実行します： `xcode-select --install` を Terminal に入力します。

次が返されます： `xcode-select: error: command line tools are alreadyinstalled, use "Software Update" to install updates` Command Line Tools がすでにシステムにある場合。

最後に、 `pod install` を実行し、生成された `.xcworkspace` ファイルを [XCode](https://developer.apple.com/xcode/).

![Podfile のインストール成功後の Terminal](/files/64434150043020401a8a6b8acf7a365391cb367e)

![Podfile のインストール成功後のプロジェクトディレクトリ](/files/2da66994d2a7ffc71b12b5f5c9d9f4c1888bcb6e)

* もし次のエラーが返る場合：「You may have encountered a bug in the Ruby interpreter or extension libraries,」まず `brew install cocoapods`を実行し、その後 `pod install` を実行し、生成された `.xcworkspace` ファイルを XCode で開きます。
  * 次を入力して CocoaPods が正常にインストールされていることを確認してください： `pod --version` を Terminal に入力します。

### Swift で Roboflow を使う

次に移動します： `.xcworkspace` ファイルを XCode で開きます。

![](/files/2295650ae62d8e5dc623df8b7a1b2679dd1b7fdd)

次に、以下を追加して Roboflow をインポートします： `import Roboflow`。を `.xcworkspace` ファイルに追加します。

次に、以下を使って Roboflow API のインスタンスを作成します： `let rf = Roboflow(apiKey: "API_KEY")`。 `modelVersion`については、 `YOUR-MODEL-VERSION-#` をモデルのバージョン番号の整数値に置き換えてください。

#### プロジェクト情報を見つける

**Completion Handler の使用方法：**

```swift
import Roboflow
...
// API Key で初期化
let rf = RoboflowMobile(apiKey: "API_KEY")
var model: RFModel?
...

// model はあなたのモデルのプロジェクト名です
rf.load(model: "YOUR-MODEL-ID", modelVersion: YOUR-MODEL-VERSION-#) { [self] model, error, modelName, modelType in
    if error != nil {
        print(error?.localizedDescription as Any)
    } else {
        model?.configure(threshold: threshold, overlap: overlap, maxObjects: maxObjects
                            processingMode: .performance または .balanced または .quality, // instance seg
                            maxNumberPoints: mask 処理ポイントの最大数) // instance seg
        self.model = model
    }
    
}
...

// model?.detect は UIImage を受け取り、それに対して推論を実行します
let img = UIImage(named: "example.jpeg") // または CVPixelBuffer
model?.detect(image: img!) { predictions, error in
    if error != nil {
        print(error)
    } else {
        print(predictions)
    }
}
```

**非同期の使用方法：**

非同期で使用するには、Roboflow モデルを非同期ブロック内で呼び出す必要があります。

```swift
import Roboflow
...
// API Key で初期化
let rf = RoboflowMobile(apiKey: "API_KEY")
...

// model はあなたのモデルのプロジェクト名です
let (model, loadingError, modelName, modelType) = await rf.load(model: "YOUR-MODEL-ID", modelVersion: YOUR-MODEL-VERSION-#)
model!.configure(threshold: threshold, overlap: overlap, maxObjects: maxObjects)
...

// model?.detect は UIImage を受け取り、それに対して推論を実行します
let img = UIImage(named: "example.jpeg")
let (predictions, predictionError) = await model!.detect(image: img!)
print(predictions)
```

**予測の形式：**

```
x:Float // オブジェクトの中心の x
y:Float // オブジェクトの中心の y
width:Float
height:Float
className:String
confidence:Float
color:UIColor
box:CGRect
points:[CGPoint] // instance segmentation モデルのみ
```

[CGRect](https://developer.apple.com/documentation/corefoundation/cgrect)

### ネイティブ Swift の例

その [roboflow-ios-starter](https://github.com/roboflow/roboflow-ios-starter) app は、roboflow モデルを使ってリアルタイムの iOS アプリを作成するための優れた出発点です。これには、カメラの設定、モデルの読み込みと処理、そしてオブジェクト検出とインスタンスセグメンテーションの両方のモデルに対応した出力描画コードが含まれています。

### React Native Expo App の例

ここでは、この SDK を React Native の expo app に統合する例も提供しています。自分の下流アプリケーションの構築を考える際に役立つかもしれません。

両方がインストールされていることを確認してください： [Expo](https://docs.expo.dev/) と [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) が

* `expo-cli` は次の Node.js バージョンをサポートしています： `>=12.13.0 <15.0.0` （Maintenance LTS）および `>=16.0.0 <17.0.0` （Active LTS）
* yarn パッケージは Node.js（`npm install -g yarn`)

{% embed url="<https://github.com/roboflow-ai/RoboflowExpoExample>" %}

### 例: iOS アプリケーション - CashCounter

ダウンロード [CashCounter](https://apps.apple.com/app/roboflow-cash-counter/id1633812788)。これは、iPhone にコンピュータビジョンモデルをデプロイする方法の例として、米国の硬貨と紙幣を数えるサンプル iOS アプリです。バウンディング बॉックスの可視化、FPS、オブジェクト数カウント、画像アップロードなどの例を見ることができます。
