- 2020–09–18 手順修正
- 2018–08–23追記
本記事の開発手順ではiPadでビルド時にエラーとなってしまう部分について、IBMのDeveloperである浜口氏が手順をまとめてくれました。
■Apple CoreMLでWatson Visual RecognitionのデモアプリををiPhoneだけではなくiPadでも使えるようにする
https://qiita.com/satoruhamaguchi/items/a48de5898c39bc034898
WatsonとCore MLモデル
Core MLでは、開発者は学習させた機械学習モデルをアプリケーションに統合することができます。 ワトソンのVisual Recognitionは、このCore MLモデルをサポートしています。 今回は、Watson Visual Recognitionを使用してCore MLモデルを作成し、iOSアプリケーションにデプロイする方法を紹介します。
IBM Code Patterns
こちらはCode Patetrnsからの日本語解説になります。私が実際にこのアプリを作成して確認し、一部手順が異なる部分は、私の方で適宜訂正してあります。
筆者の環境はMacですが、Windowsでもさほど変わらないと思います。英語で読み進められる方は、オリジナルサイトに沿って試してみても良いと思います。
英語版のオリジナルはこちらです。
https://developer.ibm.com/code/patterns/deploy-a-core-ml-model-with-watson-visual-recognition/
概要
例えば、みなさんが航空会社の技術者で、何千もの部品の1つを特定したいとします。インターネットへ接続できる環境がない場合、どうしますか?
ほとんどの画像認識サービス・製品は、HTTP経由でサーバーへAPIを呼び出すスタイルですが、 Core MLなら、あなたのアプリで学習させたモデルをデプロイすることができます。また、Watson Visual Recognitionを使用すると、コーディングせずにモデルを学習できます。Watson Studioツールで画像をアップロードし、学習させたCore MLモデルをiOSアプリケーションにデプロイするだけです。
今回紹介するコードパターンではカスタムモデルを学習します。数回クリックするだけで、そのモデルをテストしてエクスポートして、iOSアプリケーションで使用することができます。このパターンには、さまざまな種類のケーブル(HDMIとUSB)を検出できるアプリケーションを構築するのに役立つサンプルデータセットが含まれていますが、独自のデータを使用することもできます。
このコードパターンを一通り試せば、次のことが学べます。
・Watson Studioでのデータセット作成方法
・データセットに基づいたWatson Visual Recognition分類器の学習方法
・分類器をCore MLモデルとしてiOSアプリケーションにデプロイする方法
・トレーニングを受けたモデルをダウンロード、管理、実行するための、Watson Swift SDKの使用方法
Visual RecognitionとCore ML
Watson Visual RecognitionとCore MLで画像を分類します。 画像はVisual Recognition によって訓練されたディープニューラルネットワークを用いてオフラインで分類されます。
このプロジェクトには、 QuickstartWorkspace.xcworkspace
ワークスペースと下記2つのプロジェクトが含まれています。
- Core ML Vision Simple:Visual Recognitionを使用しローカルで画像を分類します。
- Core ML Vision Custom:カスタムVisual Recognitionモデルのトレーニングにより、より特化した分類をします。
はじめに
開発環境として、 Xcode version 11.xが必要です。
実機テストをする場合は、iOS11以降をお使いください。エミュレーターでのテストであればXcodeにバンドルされているエミュレーターで問題ありません。
プロジェクトファイルの取得
以下GitHubのリポジトリをクローンするか、zipをダウンロードしてください。
https://github.com/watson-developer-cloud/visual-recognition-coreml.git
Core ML Vision Simpleを実行してみる
ビジュアル認識モデルが組み込まれた一般的なオブジェクトを識別します。 画像はCore MLフレームワークで分類されます。
- Xcodeで
QuickstartWorkspace.xcworkspace
を開きます。 Core ML Vision Simple
スキーマを選択します。- シミュレーターか実機でこのアプリケーションを実行します。
- カメラのアイコンをクリックし、フォトライブラリから写真を選択して、画像を分類します。 シミュレーターでカスタム画像を追加するには、Finderからシミュレータウィンドウに画像をドラッグします。
Tip: このプロジェクトには、樹木や菌類を分類するCore MLモデルも含まれています。 ImageClassificationViewControllerで使用したいモデルのコメントを外して、2つのCore MLモデルを切り替えることができます。
Source code for ImageClassificationViewController
.
Core ML Vision Customを実行してみる
このプロジェクトでは、一般的な種類のケーブル(HDMI、USBなど)を識別するためのVisual Recognitionモデル(クラシファイアとも呼ばれます)を学習します。 トレーニングを受けたモデルをダウンロード、管理、実行するには、Watson Swift SDKを使用します。 Watson Swift SDKを使用することで、基礎となるCore MLフレームワークについて学ぶ必要はありません。
Watson StudioでのVisual Recognitionをセットアップする
- IBM Cloudへログインします
IBM Cloudのアカウントが必要になります。お持ちでない方はこちらから作成して下さい。 - IBM CloudカタログよりWatson Studioのサービスを作成します
料金プランはLiteを選択します。 - Get StartedボタンからWatson Studioを起動します
- Visual Recognitionサービスを作成します
Create Serviceメニューから、Visual Recognitionを選択し、料金プランLiteで作成します。
手順の流れは以下の画像を参考にしてください。(オリジナルサイトでの案内と少し異なります。)
モデルの学習
- 前の手順で作成されたVisual Recognitionのツールを起動します。最初は起動までに数分かかります。起動したらCustom Modelsの中のClassify ImagesタイルのCreate Modelボタンをクリックします。
- プロジェクトが、作成したVisual Recognitionインスタンスにまだ関連付けられていない場合は、プロジェクトが作成されます。 プロジェクトに「Custom Core ML」と名前を付けて、「Create」をクリックします。
Training Images
のサンプル画像の各.zipファイルをデータパネルにアップロードします。 画面右側にある[Browse]リンクをクリックしてhdmi_male.zip
ファイルをモデルに追加します。 また、usb_male.zip
,thunderbolt_male.zip
,vga_male.zip
ファイルもモデルに追加します。
(オリジナルサイトでの説明と少し異なります。)
- ファイルがアップロードされ全ての画像が読み込まれたら、[Train Model]ボタンがアクティブになるのでクリックします。
Model ID と API Keyをコピーする
- カスタムモデルのOverviewページで、Visual Recognitionのインスタンス名(関連付けられているサービスの横にある)をクリックします。
- 下にスクロールして、作成したCustom Core MLクラシファイアを見つけます。
- Model IDをコピーします。
- Watson StudioのVisual Recognitionインスタンス概要ページにて、[Credentials]タブをクリックし、[View credentials]をクリックします。 サービスの
api_key
をコピーします。
Model ID と API Key をプロジェクトへ追加
- プロジェクトをXCodeで開きます。
- Model IDをコピーし、ImageClassificationViewController ファイルのclassifierIDプロパティへペーストします。
- api_keyをコピーし、 ImageClassificationViewController ファイルのapiKeyプロパティへペーストします。
Watson Swift SDKをダウンロードします。
Cocoapods 依存管理マネージャーを使用して、Watson Swift SDK をダウンロードしてビルドします。
- Cocoapods をインストール。
- ターミナルを開いて、
Core ML Vision Custom
ディレクトリに移動。 - 以下のコマンドを実行して、Watson Swift SDK をダウンロードし、ビルドする:
pod install
Tip: SDK のアップデートを定期的にダウンロードして、このプロジェクトのアップデートと同期してください。
カスタムモデルのテスト
QuickstartWorkspace.xcworkspace
をXcodeで開きます。Core ML Vision Custom
スキーマを選択します。- シミュレーターまたは実機でアプリを実行します。
- カメラのアイコンをクリックし、フォトライブラリから写真を選択して、画像を分類します。 シミュレーターでカスタム画像を追加するには、Finderからシミュレータウィンドウに画像をドラッグします。
※ Watson Studioにて、学習し直した場合などは、新しいVisual Recognitionモデルを、iOSアプリ右下の雲マークのボタンでダウンロードします。
Tip: 分類器のステータスが使用準備になっている必要があります。 Visual Recognitionインスタンスの概要ページでステータスが「ready」になっていることを確認します。
Source code for ImageClassificationViewController
.
次にやってみる事
Watson Discoveryサービスを取り入れた Core ML Visual Recognition with Discovery も試してみましょう。
リソース
- Watson Visual Recognition
- Watson Visual Recognition Tool
- Apple machine learning
- Core ML documentation
- Watson Swift SDK
- IBM Cloud
――――――――――――――――――――――――――――――――――――――
Information
IBM だチャンネルPodcast
https://ibm.biz/BdjthM
IBM Developer Advocate Profile
https://developer.ibm.com/code/community/advocates/taijih
Cloud Developers Circle
(ベンダー依存しないクラウドデベロッパーのためのコミュニティ)
https://cdevc.connpass.com/
Node-RED ユーザーグループ
https://node-red.connpass.com/
IBM Cloud ユーザーグループ
https://bmxug.connpass.com/