パーマ型からファッション提案！『Fashion Advisor for Men's perm』　#TeachableMachine #ChatGPT #JavaScript

:::note info
【当記事で得られる知識】
・Teachable Machineで作ったモデルを使用したml5.jsでの推定方法
・JavaScriptでChatGPTとのAPI連携方法
（おまけ：CSSでの装飾）
:::

## Fashion Advisor for Men's perm
### 何パーマ？
筆者は30歳半ば手前にしてパーマをかけ始めました。
元々は興味で始めたことでしたが、湿気や寝癖を以前より気にならなくなり、楽だなぁーといった感想です。
しかし問題は別にあり、パーマのスタイルは美容師さんに任せてしまうので、何パーマをしてもらったのか分からないのです。なんちゃらパーマというものが多数あり、私には理解しきれず・・・

### 似合うファッションは？
ファッション雑誌を手に取るのはご無沙汰になっているものの、髪型にあったファッションを知りたいという漠然とした興味は持っていて、誰かに教えて欲しいと思っていました。
<p>
<font color=orange><b>⇒　この両方を一気に解決してくれるWebアプリを作成しました！</b></font><br>
パーマを自動判定し、その髪型に似合うファッション提案までをワンストップに、ボタンクリックのみで結果を提供します。
</p>

## Demo動画
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Fashion Advisor for Men’s perm<br>DEMO動画<br>|<a href="https://twitter.com/hashtag/Qiita?src=hash&amp;ref_src=twsrc%5Etfw">#Qiita</a> <a href="https://twitter.com/hashtag/JavaScript?src=hash&amp;ref_src=twsrc%5Etfw">#JavaScript</a> <a href="https://twitter.com/hashtag/TeachableMachine?src=hash&amp;ref_src=twsrc%5Etfw">#TeachableMachine</a> <a href="https://twitter.com/hashtag/ml5js?src=hash&amp;ref_src=twsrc%5Etfw">#ml5js</a> <a href="https://twitter.com/hashtag/chatGPT?src=hash&amp;ref_src=twsrc%5Etfw">#chatGPT</a> <a href="https://t.co/oMLrTCRFGn">pic.twitter.com/oMLrTCRFGn</a></p>&mdash; 焼鳥 (@Ichiros_malt) <a href="https://twitter.com/Ichiros_malt/status/1665667005691600898?ref_src=twsrc%5Etfw">June 5, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 機能
### パーマ判定
各種メンズパーマをTeachable Machineに学習させてモデルを作成します。
そのモデルをml5.jsで作成した学習モデルを読み込み、カメラ画像から推論された結果（パーマのスタイル）を返値として受け取ります。
（↓先人の知恵↓）　※参考部分：Teachable Machineでの学習方法、ml5.jsで作成した学習モデルを読込部分

https://qiita.com/twtjudy1128/items/4c29a98a035a6e8cbcb4

### ファッション提案
パーマ判定で得た結果（パーマのスタイル）をChatGPTに渡すセンテンスに組み込みます。
JavaScriptからaxios.jsを利用してChatGPTとAPI連携します。
ChatGPTから得られた結果（ファッション提案）をブラウザ上に反映します。
（↓先人の知恵↓）　※参考部分：ChatGPTとのAPI連携部分

https://qiita.com/chiiirotty/items/0c80d992a7ca4f172847

## CodePen（ソース）
<b>JS補足</b>
<font color=blue>・start()</font>
カメラからの映像ストリームの取得、学習モデルの読込、パーマの推論（0.5秒おきに再分析）のロジックを実装
<font color=blue>・getResponse()</font>
ChatGPTとのAPI連携、結果（提案内容）をブラウザ表示のロジックを実装
<font color=red>API_KEYは発行のうえ、設定してください。</font>

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="RwqbWEQ" data-user="Ichiros_malt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/Ichiros_malt/pen/RwqbWEQ">
  PermanentAnalyse</a> by Ichiros_malt (<a href="https://codepen.io/Ichiros_malt">@Ichiros_malt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 使用した感想
提案されたファッションの一例を以下に載せます。
これが正しいファッションなのかは私には判断できず・・・。
課題として見えてきたものは、季節や天気をパラメタに入れないと季節感が伴わない提案になり、身長やスタイルのパラメタを追加しないと自身に似合った提案にならないと感じました。
また、パーマ判定では、髪型は一定でも向きやしぐさで判定が目まぐるしく変わってしまうため、学習モデルの精度向上も課題と認識しました。

<details><summary>スパイラルパーマ</summary>
スパイラルパーマのヘアスタイルは、個性的で派手な印象を与えることがあるため、服装はバランスを考える必要があります。以下は、スパイラルパーマの男性におすすめの服装アイテムです。<br>
1. シンプルなTシャツやシャツに、デニムパンツやチノパンツを合わせる。<br>
2. カジュアルなスポーツウェアを取り入れる。スウェットパンツやスニーカーがおすすめです。<br>
3. ジャケットやコートを羽織ることで、スパイラルパーマのヘアスタイルの個性を引き立てつつ、大人っぽい印象を与えます。<br>
4. アクセサリーを取り入れることで、スパイラルパーマのヘアスタイルにマッチしたスタイリングに仕上がります。例えば、大きめのネックレスやブレスレットを身に着けると良いでしょう。<br>
以上のアイテムを組み合わせることで、スパイラルパーマの男性に似合うファッションスタイルを提案できます。ただし、個人の好みや体型、場所によってスタイリングは異なるため、お客様に合ったスタイルを提案することが大切です。<br>
</details>

<details><summary>ツイストパーマ</summary>
ツイストパーマのヘアスタイルをしている男性の場合、カジュアルでスポーティーな服装が似合います。
以下は、ツイストパーマのヘアスタイルに合う服装の提案です。<br>
1.デニムジャケットとTシャツ<br>
デニムジャケットとTシャツの組み合わせは、カジュアルでスタイリッシュな印象を与えます。ツイストパーマのヘアスタイルに合わせて、カラフルなTシャツを選んでみるのも良いでしょう。<br>
2. スウェットパンツとスニーカー<br>
スウェットパンツとスニーカーの組み合わせは、スポーティーな印象を与えます。ツイストパーマのヘアスタイルに合わせて、カラフルなスニーカーを選んでみるのも良いでしょう。<br>
3. ボンバージャケットとチノパンツ<br>
ボンバージャケットとチノパンツの組み合わせは、カジュアルでスタイリッシュな印象を与えます。ツイストパーマのヘアスタイルに合わせて、ボンバージャケットをカラフルなものにすると、よりオシャレな印象を与えます。<br>
以上のように、ツイストパーマのヘアスタイルに合わせて、カジュアルでスポーティーな服装を選ぶと、よりオシャレな印象を与えることができます。<br>
</details>

<details><summary>カルマパーマ</summary>
カルマパーマのヘアスタイルをしている男性には、モダンでエッジの効いたスタイルが似合います。以下は、提案する服装の例です。<br>
1. スリムフィットのジーンズとタートルネックセーター：カジュアルでありながら、モダンな雰囲気を演出できます。<br>
2. ブルーのスーツと白いシャツ：クラシックなスタイルですが、カルマパーマのヘアスタイルとの相性がよく、>エレガントな印象を与えます。<br>
3. レザージャケットとボタンダウンシャツ：カジュアルでありながら、スタイリッシュな印象を与えます。<br>
4. チェック柄のシャツとチノパンツ：カジュアルな中にも、洗練された印象を与えます。<br>
5. ハイカットスニーカーとスキニージーンズ：カジュアルでありながら、モダンな印象を与えます。<br>
以上のように、カルマパーマのヘアスタイルをしている男性には、モダンかつエッジの効いたスタイルが似合います。<br>
</details>

<details><summary>プードルパーマ</summary>
プードルパーマのヘアスタイルは、レトロでクラシックな雰囲気があります。その雰囲気に合わせたファッションを提案します。<br>
1. テーラードジャケット<br>
プードルパーマの男性には、テーラードジャケットが似合います。クラシックな雰囲気があり、シャープな印象を与えます。ネイビーやグレーのテーラードジャケットを選ぶと良いでしょう。<br>
2. スリムフィットパンツ<br>
テーラードジャケットには、スリムフィットのパンツが合います。黒やグレー、ネイビーなど、シンプルな色味を選ぶと、クラシックな雰囲気が強調されます。<br>
3. オックスフォードシューズ<br>
テーラードジャケットには、オックスフォードシューズが似合います。ブラックやブラウンの革靴を選ぶと、クラシックな雰囲気が出ます。<br>
4. タートルネックセーター<br>
プードルパーマの男性には、タートルネックセーターが似合います。クラシックな印象を与える上に、保温性も高く、冬場のコーディネートにぴったりです。<br>
5. ウールコート<br>
最後に、ウールコートを羽織ると、クラシックな雰囲気が強調されます。ネイビーやチャコールグレーなど、シンプルな色味を選ぶと、よりクラシックな印象になります。<br>
以上が、プードルパーマの男性に似合うファッションの提案です。<br>
</details>

## その他参考URL
<b>装飾部分（CSS）</b>
<a href="https://www.colordic.org/">原色大辞典</a>
<a href="https://coliss.com/articles/build-websites/operation/css/styling-the-good-old-button.html">[CSS] button要素のスタイルシート、最新テクニックを徹底解説</a>