Swiftで画像認識のアプリを触ってみた（swiftわからんけど）

#きっかけ
<font color="DarkGray">--------ここから雑談興味のない人は読み飛ばし推奨--------</font>
###趣味でポケモンの対戦を嗜んでいるときに、以下の問題に悩んでいた
・相手のポケモンのメジャーな持ち物と技を調べないとわからない
・ゲームの1ターンごとの時間が足りず、調べていると間に合わない
・そもそも、調べるのが面倒
![unnamed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/164086fd-ea76-b95d-7055-a214548adc62.png)
周知の事実ではありますが、万が一知らない人のために説明すると、

ゲーム内の1ターンは45秒、
その間に相手のポケモンの「技,持ち物,とくせい,種族値,努力値...etc」
を考慮してこちらの行動を選択するということが、
ポケモンバトルでは絶えず繰り返されています
その情報を調べるためにゲームをしながらPCに張り付いたりと結構面倒。。。

<font color="DarkGray">--------ここまで雑談興味のない人は読み飛ばし推奨--------</font>

###結局何がしたいのか
スマホのカメラを起動し、映ったポケモンの情報を画面に表示したかった。
![スクリーンショット 2021-12-03 12.40.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/5a9a1f21-255a-88be-94e3-9998c9fd106a.png)
※画像はイメージです
ただ、全てを一気にやるのは無理なので、一旦画像認識にスポットを当てて勉強することに

#本題
###環境
・Xcode 12.4-v
・iPhone SE iOS 14.4-v

###画像認識のやり方を調べる
XcodeのCreateMLが公式でサンプルアプリと画像データの作成方法を出していたのでこちらを使用

ざっくり説明すると、
画像データに関してはこんな感じで作ってくれるらしい
![スクリーンショット 2021-12-06 7.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/29d17be5-9e3d-98f7-2d55-6fba013e2c00.png)

できるアプリはこんな感じ
![IMG_0427.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/f487071a-1941-a023-7799-ba1463a2838c.png)

#実際の作業について

1,xcodeでCreateMLを使用し、画像データを作成する
2,公式からサンプルサンプルコードをダウンロードしてくる
3,サンプルコードの画像データを作成したサンプルファイルに書き換える

###1,xcodeでCreateMLを使用する
xcodoを開き、左上のxcodeタブから、
open develop tool → CreateMLの順で開く
![スクリーンショット 2021-12-06 8.06.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/f0919714-fc99-88e7-27df-0f1dcbbc8692.png)

プロジェクトを保存するディレクトリを選択してImage ClassifiClassificcationを選択
![スクリーンショット 2021-12-06 8.09.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/80b60d14-8cb0-f9ca-4e37-53c754741968.png)


そのままファイル名などを選択していくと.mlprojの拡張子のファイルができる
（今回だとpokemon_img.mlproj）
![スクリーンショット 2021-12-06 8.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/5f6106b6-af0a-c9eb-ad8e-6b7535da6c93.png)

サンプルとなる学習用のtrainingデータとtestデータと画像フォルダを作成する
![スクリーンショット 2021-12-06 8.18.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/700767ed-c54d-3804-a483-8b7974a942dc.png)

作成したpokemon_img.mlprojを開き、
青枠の部分にtrainingデータとtestデータのフォルダを選択し、
画面左上のtrainボタンを押す
![スクリーンショット 2021-12-06 8.17.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/0a330f4d-266c-74a2-f59e-8dd1ade594ca.png)

実行後の画面からoutputの項目を選択し、getのボタンを押すと
画像認識用のデータが作成される
![スクリーンショット 2021-12-06 8.26.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/4a9cdca7-f947-7867-ad6d-2124cbe079cc.png)

###2,公式からサンプルサンプルコードをダウンロードしてくる
以下のサイトから公式のサンプルコードを持ってくる
https://developer.apple.com/jp/machine-learning/models/

![スクリーンショット 2021-12-06 10.25.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/d09e67d6-9f9d-c8af-6415-dfbcf6350fdb.png)

###3,サンプルコードの画像データを作成したサンプルファイルに書き換える

まずはダウンロードしたサンプルコードをxcodeで開き、作成した画像データを取り込む
![スクリーンショット 2021-12-06 10.30.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/f6e694f4-1bd3-9818-0b9c-6c335ccb8802.png)

続いてアプリで読み込んでいる画像データファイルを書き換える
（このとき書くのはファイル名のみ）
![スクリーンショット 2021-12-06 10.32.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323171/b771a5fc-7ae9-b39c-e6bf-cdb259d07134.png)

これでアプリをビルドすれば完成！

#今後の課題

・現状のアプリだと写真を撮って画像を解析し、判定するという流れなので、リアルタイムに画面に映ったものを判別したい
・画面に二つ以上の要素があったときに片方だけしか反応しないので、複数の要素を判別できるようにする
・ポケモン公式が出しているAPIとの繋ぎ込みを考える
・ポケモンの名前を判別した後に、名前をタップすると情報が出てくるページを作りたい

まだまだ先はながい。。。

#参考文献（正直、参考文献の方がわかりやすいやつ）
Swiftでアイマスの画像認識やってみる
https://qiita.com/thimi0412/items/99613d41e5a66b6ea95f
Create MLで自作のモデルを作成して画像認識する
https://note.com/yorifuji/n/n315cc6a0ebd9
iOSの機械学習の公式サンプルアプリを試す（Core ML/Vision）
https://note.com/yorifuji/n/nffe255d02fd8