機械学習を使って分かりづらい端子の名称を教えてくれる仕組みを作ってみた

皆さんこんにちは！現在会社のシステム部門で働いている会社員です。
突然ですが、端子の形状って多すぎだと思いませんか？USB端子もType-AとかCとか、2.0とか3.0があるし、ディスプレイに繋ぐケーブルもHDMI、DisplayPort、VGA等々、、、多いだけならまだしも、システム部門で働いているとこれらに関する問い合わせも来るのです。「このケーブルが何に使うかわからない」「このケーブルが欲しいんですけど」、と普段使っていない人からするとケーブルの名称なんかいちいち覚えてませんし、電話で形を説明されてもポカーンとなってしまいます。そこで、今回は機械学習を使って、端子の形状をカメラで写すと名称を教えてくれる仕組みを作ってみました。

![ezgif-5-afecb5306c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/74a6421f-26ef-3bca-d012-078637704930.gif)
こんな感じで作成することができました。それでは作成した方法をご紹介していきます。

## 使用ツール紹介
**・Google Teachable Machine（https://teachablemachine.withgoogle.com/ ）**
Google Teachable MachineはGoogleが公開している機械学習ツールです。ウェブベースでサイトにアクセスすれば誰でも利用可能です。ノーコードで画像・音声・ポーズを学習させ、それらを判別するモデルを作成することができます。

**・CodePen（https://codepen.io ）**
CodePenはWebブラウザ上でHTML/CSS/JavaScriptなどを記述し、開発を行うことができるサービスです。

https://qiita.com/fumu238/items/f73274aa1a188eb15794


## その1-Google Teachable Machineで機械学習モデルを作成する-
**①Google Teachable Machine（https://teachablemachine.withgoogle.com/ ）にアクセスする**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/d2296ffd-7721-8192-7231-b852707f3699.png" width="500">
サイトにアクセスするとこのようなページが表示されます。「使ってみる」をクリックしましょう。

**②プロジェクトを選択する**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/a4243c69-c2ab-7820-3066-6d154433eed6.png"width="500">
Google Teachable Machineでは「画像プロジェクト」「音声プロジェクト」「ポーズプロジェクト」から選べるようになっています。
今回は「画像プロジェクト」を選択し進めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/8636d001-42ce-d97c-a360-9b523c6198f1.png"width="500">
上記の選択肢が表示されるので、ここでは標準の画像モデルを選択します。

**③Classの設定とモデルの作成**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/703b58c1-9828-2a5a-6384-1952e1d5975e.png"width="500">
次にClassの設定を行います。Class1つに対して1つの学習させたい対象を認識させます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/bb2010f5-bfbf-78c7-8a26-b13f3808c6bf.png"width="500">
このようにWebカメラを使用し対象を撮影していきます。

**④機械学習モデルの作成**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/706966ea-77c3-04e6-682b-8bd4568ef27d.png"width="500">
各端子の画像を撮影しました。撮影後、「モデルをトレーニングする」をクリックすると撮影した画像をもとに学習したモデルが作成されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/c58bcb6a-4644-73a8-b37e-a448fbafbd20.png"width="300">
実際にUSB（Type-B）端子を映してみるとUSB-Bの欄が90%と表示されており正しく認識されていることが分かります。

## その2-CodePenで機械学習モデルを連携する-
**①機械学習モデルのエクスポート**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/180d126f-5f1e-5139-018c-163f934d169d.png"width=500">
次に「モデルをエクスポート」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/7cd670fd-2214-60d5-d42f-46243e7c0396.png"width="500">
モデルをアップロードを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/8e388291-a248-6109-99d5-fcbb19f3ba04.png"width="500">
共有可能なリンクにURLが表示されたら完了です。

**②CodePenでWebアプリを作成する**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/7f8a0ea0-e376-b598-0d91-32b18d354c3a.png"width="500">
「p5.js」を選択し、コピーしておきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/bd49b994-3894-eafb-1efb-1d5c753f0cfa.png"width="800">
CodePenにアクセスし、HTML欄にコピーしたコードを貼り付けます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668023/a10e1456-7014-22eb-557a-2db5f0a196b5.png"width="300">
「SAVE」で保存し、「Change View」からFullPageViwを選択すると実行画面が見やすくなります。
このページのURLを利用すればスマホからでも使用することができるようになります。

## 最後に
今回初めてGoogle Teachable Machineを用いた機械学習を使用しましたが非常に簡単に機械学習モデルを作成することができました。今回作成したWebアプリを社内のポータルサイトに掲載するようにすれば誰でも自分で確認できるようになります。さらに、今回の手順を発展させ、より高度なWebアプリを作成できれば、画像認識から在庫の確認、出庫申請や発注手続きなど色々なことに繋げていけそうです。ぜひ皆さんもトライしてみてください！ご覧いただきありがとうございました！