編集履歴一覧に戻る
Nakajima_Harutoのアイコン画像

Nakajima_Haruto が 2024年01月30日18時57分34秒 に編集

コメント無し

本文の変更

# 背景 世の中には色とりどりな景色が広がっています。 我々が生活している日本には海があり、山があり、街があり、そこには数えきれない生き物がいます。

-

景色とはその時その瞬間にしか味わうことができない儚いものです。そんな景色、色を"音"として表現したいと思い、色で奏でる楽器[[Colorful Sun]]を制作いたしました。

+

景色とはその時その瞬間にしか味わうことができない儚いものです。

+

**そこで。。。** #### 景色、色を"音"として表現したいと思い、色で奏でる楽器[[Colorful Sun]]を制作いたしました!!

どんな人でも簡単に演奏ができるデザイン設計になっています! みんなで景色を奏でましょう!!

+

# パートナー様について このプロジェクトでは2組の障害のあるお子さんを持つご家庭の方々に協力して頂いております。フィールドワークを通じて健常者との社会的な隔離が課題となっていることが明らかになりました。この課題に対処し,ハンディキャップを感じずに,共に演奏することができる[ゆる楽器](https://prtimes.jp/main/html/rd/p/000000068.000018821.html)の開発に取り組むことにしました。

+

# 用意したもの | 名称 | 概要 | |:---:|:---| | Spresenseメインボード | Arduino互換ボードコンピュータ | | Spresense拡張ボード | microSDスロットやヘッドフォンジャック等様々なインターフェースが使えるようにするもの | | Adventure3 Pro | FLASHFORGE製の3Dプリンター 樹脂筐体の印刷に使用 | | PLAフィラメント | 樹脂筐体の材料 | | ネジ | 直径2mmのネジ:4本 | | スピーカー | 3.5mmオーディオジャックの入力ができるもの | |リチウムポリマー電池| 持ち運びの負担にならないもの| |昇圧モジュール|リチウムポリマー電池とUSBを繋ぐもの| # 仕組み ![Colorful Sunの仕組み](https://camo.elchika.com/3a1b251571ee5d25cecf3210da121d711a85a1a8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f63356536623833322d356331302d343064632d383061322d376431666536326539393036/)

-

1.カメラから任意の画像を数秒ごとに取得する 2.画像をSpresenseを介して学習済みデータに認識させる 3.認識した結果の色と対応する音を判定する 4.判定結果に該当する音をスピーカーから出力する

+

![内蔵機器の写真](https://camo.elchika.com/12b1b948af1bc724587ad1ad0220281414c63e9f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f61643965333065642d646164652d343662312d383833392d323364356666666133383835/) **1.カメラから任意の画像を数秒ごとに取得する 2.取得した画像はSpresenseを経由して学習済みデータに認識させられる 3.認識した結果から色が判定され,それに対応する音が決定される 4.決定された音はスピーカーから出力される**

# 機械学習

-

はじめ色を認識させるためNNC(Neurarl Network Console)をいて機械学習を行い

+

機械学習おいて色を認識させるためソニー独自のAIツール[Neural Network Console](https://dl.sony.com/ja/)をした

-

今回4色(赤,黄,青,緑)の判別を目標と。事前にそれぞれの色の画像データを400枚程度収集しました。これらのデータから②構造自動探索機能て学習を行いました。

+

具体的な目標,4色(赤,黄,青,緑)の判別。事前にそれぞれの色に関する約400枚の画像データを収集しました。これらのデータを元に[構造自動探索機能](https://support.dl.sony.com/docs-ja/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E7%94%BB%E9%9D%A2%EF%BC%9A%E3%82%B3%E3%83%B3%E3%83%95%E3%82%A3%E3%82%B0%E3%82%BF%E3%83%96%EF%BC%88global-config%EF%BC%89%E3%81%AE%E4%BD%BF-2/)使て学習を行い特定のネットワーク構造を採用しました。

-

以下のネットワーク構造を使用しました。

![ネットワーク構造](https://camo.elchika.com/c19ab99607683b0f09eb61294604ad8350915e02/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f64663261616630662d316164312d343165302d396135352d306265643663333237373735/)

-

学習の結果、正答率50%ほどになりまし

+

しかし現段階では正答率50%ほどであるめ,今後の調整や改善が必要です

+

# 工作

-

この楽器のコンセプトは[景色を音に変換する!]ことです。 色を認識するためには光が必要です。 そこで光を照らしてくれる太陽をモチーフにしたデザインにしました。

+

この楽器のコンセプトは **[色を音に変換する!]** ことです。色を認識するためには光が不可欠な要素であるため,光を照らしてくれる太陽をモチーフにしたデザインを採用しました。

+

![CAD 表面](https://camo.elchika.com/4603b9a4208e4b7ac34d7dcd7d5ce61704ce7186/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f62633635326639382d323031632d343865382d383566312d656330633564323538663364/) ![CAD 裏面](https://camo.elchika.com/e6cbe652a6b749cb5b88f73042c9c241f2f91e72/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f38373436356439622d363330312d346339342d396134642d356130396232626662313566/)

-

Fusion360を用いて筐体の設計を行いました.裏面からSpresenseを筐体の中に挿入ことが

+

[Fusion360](https://www.autodesk.co.jp/products/fusion-360/overview?mktvar002=5022415|SEM|11655048452|115057817442|aud-1620555134072:kwd-52461241111&term=1-YEAR&tab=subscription&utm_source=GGL&utm_medium=SEM&utm_campaign=GGL_D-M_Fusion-360_JAPAN_JP_eComm_SEM_BR_Mix_EX_0064_5022415_MainBrand&utm_id=5022415&utm_term=aud-1620555134072:kwd-52461241111&gad_source=1&gclid=Cj0KCQiA2eKtBhDcARIsAEGTG42GsAVRDbbXAZVOHH2PxIghVDriBJdEsfJyJFluci-VnBYdeegYsfoaAvpyEALw_wcB&plc=FSN)を用いて筐体の設計を行いました.裏面から簡単にSpresenseを挿入できような構造にしました。筐体はネジを用いて蓋で閉じることが可能す。た使用る際の疲れを軽減するため,筐体のてっぺんに紐を通せる穴を設計しました

-

蓋はネジを用いて閉じることができます。 常時持つと手が疲れてしまうため,筐体のてっぺんに穴を開け紐を通せる設計になってます。

-

筐体の円周纏っている棘が尖っていて、怪我をする恐れがあるという意見頂いたた下記のよう修正加えました。

+

++サポーター様から寄せられ意見により,筐体の演習囲む棘が尖っており,怪我をする可能性があるという指摘がありました。このフィードバックに応じて棘の先端どして安全性向上させました。++

-

![キャプションを入力できます](https://camo.elchika.com/6c2360897ec46c7080713c0c42ec7f7c5e6a3799/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f64373665383430372d333661302d343032362d396534312d346133616639663739373632/)

+

![CAD 修正後](https://camo.elchika.com/6c2360897ec46c7080713c0c42ec7f7c5e6a3799/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646433616232362d373064662d343365322d616361392d6261346130363661616438632f64373665383430372d333661302d343032362d396534312d346133616639663739373632/)

# プログラム ```arduino:Lチカの例 #include <Camera.h> #include "Adafruit_ILI9341.h" #include <DNNRT.h> #include <SDHCI.h> #define TFT_DC 9 #define TFT_CS 10 Adafruit_ILI9341 display = Adafruit_ILI9341(TFT_CS, TFT_DC); #define OFFSET_X (104) #define OFFSET_Y (0) #define CLIP_WIDTH (112) #define CLIP_HEIGHT (224) #define DNN_WIDTH (28) #define DNN_HEIGHT (28) #define BEEP_PIN 8 // ビープ音のためのピン SDClass SD; DNNRT dnnrt; DNNVariable input(DNN_WIDTH*DNN_HEIGHT); const char label[4] = {'0','1','2','3'};//0:赤,1:青,2:黄,3:緑 void playTone(int note) { switch(note) { case 0: // ド tone(BEEP_PIN, 262, 100); // 262Hzで100ミリ秒 break; case 1: // レ tone(BEEP_PIN, 294, 100); // 294Hzで100ミリ秒 break; case 2: // ミ tone(BEEP_PIN, 330, 100); // 330Hzで100ミリ秒 break; case 3: // ファ tone(BEEP_PIN, 349, 100); // 349Hzで100ミリ秒 break; } delay(100); // 音を100ミリ秒鳴らした後に次の処理に移る } void CamCB(CamImage img) { if (!img.isAvailable()) { Serial.println("Image is not available. Try again"); return; } // カメラ画像の切り抜きと縮小 CamImage small; CamErr err = img.clipAndResizeImageByHW(small, OFFSET_X, OFFSET_Y, OFFSET_X + CLIP_WIDTH - 1, OFFSET_Y + CLIP_HEIGHT - 1, DNN_WIDTH, DNN_HEIGHT); if (!small.isAvailable()){ putStringOnLcd("Clip and Resize Error:" + String(err), ILI9341_RED); return; } // 認識用モノクロ画像を設定 uint16_t* imgbuf = (uint16_t*)small.getImgBuff(); float *dnnbuf = input.data(); for (int n = 0; n < DNN_HEIGHT * DNN_WIDTH; ++n) { dnnbuf[n] = (float)(((imgbuf[n] & 0xf000) >> 8) | ((imgbuf[n] & 0x00f0) >> 4)) / 255.; } // 推論の実行 dnnrt.inputVariable(input, 0); dnnrt.forward(); DNNVariable output = dnnrt.outputVariable(0); int index = output.maxIndex(); // 推論結果の表示 String gStrResult; if (index < 11) { gStrResult = String(label[index]) + String(":") + String(output[index]); Serial.println(gStrResult); if (label[index] >= '0' && label[index] <= '3') { playTone(label[index] - '0'); // 数字に対応する音を鳴らす } } else { gStrResult = String("Error"); } // 推論結果のディスプレイ表示 img.convertPixFormat(CAM_IMAGE_PIX_FMT_RGB565); display.drawRGBBitmap(0, 0, (uint16_t*)img.getImgBuff(), 320, 224); putStringOnLcd(gStrResult, ILI9341_YELLOW); } void putStringOnLcd(String str, uint16_t color) { display.fillScreen(ILI9341_BLACK); display.setTextColor(color); display.setTextSize(2); display.setCursor(0, 0); display.println(str); } void setup() { Serial.begin(115200); // SDカードの挿入待ち while (!SD.begin()) { putStringOnLcd("Insert SD card", ILI9341_RED); } // SDカードにある学習済モデルの読み込み File nnbfile = SD.open("model.nnb"); // 学習済モデルでDNNRTを開始 int ret = dnnrt.begin(nnbfile); if (ret < 0) { putStringOnLcd("dnnrt.begin failed" + String(ret), ILI9341_RED); return; } display.begin(); display.setRotation(3); pinMode(BEEP_PIN, OUTPUT); // ビープ音のピンを出力として設定 theCamera.begin(); theCamera.startStreaming(true, CamCB); } void loop() { } ``` # プロトタイピング動画 [オズの魔法使い法によるプロトタイピング動画](https://youtu.be/4E5XaPe5phc) *音は映像に後付けしています。

+

# 工夫点

-

触ってみたい!!と思ってもらえるデザインにしました。 また楽器らしさを表現するため,音符や記号を付け加えました。

+

「触ってみたい!!」と思ってもらえるようなデザインに注力を注ぎました。 また楽器らしい雰囲気を醸し出すために,音符や楽譜の記号をデザインに取り入れ,独自の音楽要素を加えました。屋外での利用を考慮し,電力供給に電池を採用することで,手軽に使用できるような設計に重点を置きました。

+

# 今後の課題

-

認識きる色の数を増やし,多くの音を発音させた。 また機械学習の正答率が低い為,より精度を上げ必要がある。 筐体がやや重いため,軽量化目指たい。 特定の景色対して音を鳴らすことが最終目標ため,今後改善していきたい

+

**色認識と音発音の拡充** 現在の色認識は認識できる色の数が限られため,これ増やてさら多様な音を発音ように改善が必要です

+

**機械学習の精度向上** 現在使用している機械学習モデルの正答率が低いため,アルゴリズムやデータセットの改善などを通じて,正確性を向上させる必要があります。

+

**筐体の軽量化** 筐体がやや重いため,製品の使い勝手向上のためにも軽量化を目指すことが重要だと思います。

-

## 用語説明 ①NNC ソニーネットワークコミュニケーションズ株式会社がリリースした、ニューラルネットワーク構築ツール

-

②構造自動探索機能 ニュラルネットワク構造自動的に変更しながら、指定された時間や探索回数に達する、さまざまなネットワーク構造繰り返し学習を行い、それらの結比較できる機能

+

**外での利用を考慮** 屋外での使用を前提としているため,スピ内蔵すること,外部環境も効的に音発信できるように検討します。

+

**特定の景色に対する音の発生** 最終目標は特定の景色に応じて音を鳴らすことです。このため,現在の機能を向上させ,より緻密で効果的な音響の操作を実現することを目指します。

+

### 参考文献

-

+

[SPRESENSEではじめるローパワーエッジAI](https://akizukidenshi.com/catalog/g/g117235/)