# iOS SDK

Roboflow Mobile iOS SDK は、モデルをエッジ（iPad や iPhone）で動作させる必要があり、推論を高速化したり拡張現実などの新しい機能やユースケースを実現するネイティブ iOS アプリを開発する際に優れた選択肢です。

カスタムのコンピュータビジョンモデルを組み込んだネイティブモバイルアプリは、開発者がアプリに視覚機能を与えることを可能にします。

## 対応タスク

ホストされた API がサポートするタスクタイプは次のとおりです：

| タスクタイプ           | iOS SDK 配備でのサポート |
| ---------------- | ---------------- |
| 物体検出             | ✅                |
| 分類               |                  |
| インスタンスセグメンテーション  | ✅（iOS 18 以降）     |
| セマンティックセグメンテーション |                  |

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

### サポートされるハードウェアとソフトウェア

すべての iOS デバイスはオンデバイス推論をサポートしますが、iPhone 8（A11 Bionic プロセッサ）より前の機種ではよりエネルギー効率の低い GPU エンジンにフォールバックします。

Roboflow は最低 iOS バージョン 15.4 を要求します（インスタンスセグメンテーションモデルは 18.0）。

## プロトタイピング

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

## インストール&#x20;

* インストール [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)

このプロセスで RubyGems に管理者権限を付与したくない場合は「sudo 不要」のインストールオプションがあります。ただし、 `sudo` の方が一般的です。

CocoaPods が正常にインストールされているか確認するには、次を入力してください： `pod --version` をターミナルで実行します。

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

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

次に、 `Podfile` が次を指定していることを確認してください： `platform :ios, '15.4'`

次に、次を追加します： `pod 'Roboflow'` をあなたの `Podfile`.

XCode コマンドラインツールをインストールしていない場合は、次を実行します： `xcode-select --install` をターミナルで実行します。

これが返されます： `xcode-select: error: command line tools are alreadyinstalled, use "Software Update" to install updates` もしコマンドラインツールが既にシステムに存在する場合。&#x20;

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

![で開きます。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-742fddf172d5eea914ea63a42170583cbe748443%2Fimage.png?alt=media)

![Podfile のインストールが成功した後のターミナルのプロジェクトディレクトリ](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-85737dbd1b9fcb80ea6674633012e85c908f5c30%2Fimage.png?alt=media)

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

### Swift での Roboflow の使用

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

![](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-845222e3655098babfff65dff3575a9886c12c24%2Fimage.png?alt=media)

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

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

#### [プロジェクト情報の確認方法](https://docs.roboflow.com/roboflow/roboflow-jp/deploy/sdks/broken-reference)

**完了ハンドラの使用：**

```swift
import Roboflow
...
// API キーで初期化
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 or .balanced or .quality, // instance seg
                            maxNumberPoints: max number of mask processing points) // 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 キーで初期化
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] // インスタンスセグメンテーションモデルのみ
```

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

### ネイティブ Swift の例

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

### React Native Expo アプリの例

また、この SDK を Expo アプリに React Native で統合する例をこちらで提供しています。自分の下流アプリケーションの構築を検討する際に役立つかもしれません。&#x20;

必ず次の両方をインストールしていることを確認してください： [Expo](https://docs.expo.dev/) と [CocoaPods](https://cocoapods.org/) がインストールされています。

* `expo-cli` は次の Node.js バージョンをサポートします： `>=12.13.0 <15.0.0` （Maintenance LTS）と `>=16.0.0 <17.0.0` （Active LTS）
* Node.js 用に yarn パッケージをインストールする必要があります（`npm install -g yarn`)

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

### 例の iOS アプリ - CashCounter

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