So-net無料ブログ作成

SPRESENSEでSony Neural Network Console を使ってみた! [SPRESENSE]

Sony Neural Network Console (以下 NNC)が使えるようになったので、今回はNNCで出力した学習済データを SPRESENSE で使ってみたいと思います。例によって動画にしてみたので、お時間のある方はどうぞ。





最初に、NNC を使って機械学習を行います。今回は、前回使った”4”、”9”を判別するネットワークを使います。


2019-07-14 (0).png


学習済データは、学習結果の履歴を右クリックで出てくるメニューの”Export”で取得することができます。このとき、フォーマットは"NNB"を選択します。


2019-07-14 (1).png


すると"model.nnb"が出力されていますので、それを使います。


2019-07-14 (7).png


次にArduino IDEを開きます。”スケッチ例”の”DNNRT”から”number_recognition”サンプルを起動します。このサンプルでは、学習済データの名前が”network.nnb”となっていますので、"model.nnb"へ変更します。

#include <SDHCI.h>
#include <NetPBM.h>
#include <DNNRT.h>

DNNRT dnnrt;  // NNCの学習済データを使うためのライブラリ
SDClass SD;

void setup() {

  Serial.begin(115200);

  File nnbfile = SD.open("model.nnb"); // NNCの学習済データを読み込み(拡張ボードが必要)
  if (!nnbfile) {
    Serial.print("nnb not found");
    return;
  }
  int ret = dnnrt.begin(nnbfile);
  if (ret < 0) {
    Serial.print("Runtime initialization failure. ");
    if (ret == -16) {
      Serial.println("Please update bootloader!");
    } else {
      Serial.println(ret);
    }
    return;
  }

  // Image size for this network model is 28 x 28.

  File pgmfile("number4.pgm");  // 識別したいファイルを指定
  NetPBM pgm(pgmfile);

  unsigned short width, height;
  pgm.size(&width, &height);

  DNNVariable input(width * height);
  float *buf = input.data();
  int i = 0;

  // Normalize pixel data into between 0.0 and 1.0.
  // PGM file is gray scale pixel map, so divide by 255.
  // This normalization depends on the network model.

  for (int x = 0; x < height; x++) {
    for (int y = 0; y < width; y++) {
      buf[i] = float(pgm.getpixel(x, y)) / 255.0;
      i++;
    }
  }

  dnnrt.inputVariable(input, 0);
  dnnrt.forward();
  DNNVariable output = dnnrt.outputVariable(0);

  // Get index for maximum value.
  // In this example network model, this index represents a number,
  // so you can determine recognized number from this index.

  int index = output.maxIndex();
  Serial.print("Image is ");
  Serial.print(index);
  Serial.println();
  Serial.print("value ");
  Serial.print(output[index]);
  Serial.println();
  if (output[index] < 0.2) Serial.println("the result is 4");
  else if (output[index] > 0.8) Serial.println("the result is 9");

  dnnrt.end();
}

void loop() {
}



SPRESENSEは、メインボードと拡張ボードを使います。出力した "model.nnb"とサンプルに使う画像をSDカードにコピーをして拡張ボードのSDカードスロットに差し込みます。


2019-07-14 (2).png


サンプルの画像は自作したものを使ってみました。こちらから取得ください。

2019-07-14 (3).png
2019-07-14 (4).png


number4.pgm を読み込ませてみた結果です。

2019-07-14 (5).png


number9.pgm を読み込ませてみた結果です。

2019-07-14 (6).png

うまく動きました!

Arduino IDE でAIプログラミングができるなんてすごく便利ですね。次はカメラから取得した画像を認識できるようにしてみたいと思います!
(^^)/~




ソニー開発のNeural Network Console入門【増補改訂・クラウド対応版】--数式なし、コーディングなしのディープラーニング

ソニー開発のNeural Network Console入門【増補改訂・クラウド対応版】--数式なし、コーディングなしのディープラーニング

  • 作者: 足立 悠
  • 出版社/メーカー: リックテレコム
  • 発売日: 2018/11/14
  • メディア: 単行本(ソフトカバー)



nice!(34)  コメント(0) 
共通テーマ:趣味・カルチャー

「SPRESENSE」がマルチコア・プログラミング対応へ! [SPRESENSE]

ソニーの SPRESENSE が最近のバージョンアップで Arduino IDE でマルチコアプログラミング ができるようになりました。ヘッダータイトルも”IoT”から”エッジコンピューティング”に変更になっています。


spresense.png
https://developer.sony.com/ja/develop/spresense/


リリースページに今回の更新内容が書かれています。Spresense SDK も Windows / MacOS に対応しています。いずれもブートローダの更新が必要なのは要注意ですね。




SPRESENSE v1.3.0 リリース(2019/6/5)

Arduino IDE
概要
  • Arduino IDEによるマルチコアプログラミング環境を用意しました。 詳しくはSpresense Arduino Library の使い方の「Spresense Arduino マルチコア環境を動かしてみる」をご参照ください。
  • 新規機能追加および機能拡張、そしていくつかの改善を行いました。
  • 今回のリリースにより ブートローダの更新 が必要になります
  •  
    Spresense SDK
    概要
  • Ubuntuに加えてWindows および macOS が正式な開発環境としてサポートされました。 詳しくは Spresense SDK の使い方 の「ツールの準備」の章をご参照ください。
  • 新規機能追加および機能拡張を行いました。
  • 今回のリリースにより ブートローダーの更新 が必要になります




  • SPRESENSE のマルチコア機能を使ったアプリケーションが気軽に作れるようになるのは朗報ですね。仕事に少し合間ができたらマルチコアを使ったアプリケーションを作ってみようと思います。

    SPRESENSE は ”AI あり””マルチコアあり”"ハイレゾオーディオあり""カメラあり""GPSあり"で機能豊富なのは嬉しいですが、何から手をつけていいか困りますね。
    (^^;








    nice!(36)  コメント(2) 
    共通テーマ:趣味・カルチャー

    SPRESENSE の Wi-Fi アドオンボードを動かしてみた! [SPRESENSE]

    SPRESENSE の Wi-Fi アドオンボードの動作確認をしてみました。この Wi-Fi アドオンボードは、ESP8266 が搭載されており、ATコマンドで操作することができます。


    Spresense_ESP8266.jpg


    このアドオンボードはスイッチサイエンスで購入することができます。

    4042_main.jpg
    https://www.switch-science.com/catalog/4042/


    動作確認をするために、次のスケッチをSPRESENSEに書き込みます。コンソールの入力をそのまま Wi-Fi アドオンボードを伝えることができます。


    #define BAUDRATE 115200
    
    void setup() {
      Serial.begin(BAUDRATE);
      Serial2.begin(BAUDRATE);
      while(!Serial);
      while(!Serial2);
    }
    
    void loop() {
      if (Serial.available())
        Serial2.write(Serial.read());
    
      if (Serial2.available())
        Serial.write(Serial2.read());
    
    }
    



    動作確認の様子を動画にしてみましたので、お時間のある方はこちらをどうぞ!





    お時間のない方のために、簡単に内容を説明します。最初に、ATコマンドを使って接続を確認します。


    AT_Check.jpg


    次にWiFiに接続してみます。テスト用のアクセスポイントを作って接続をしてみました。


    AT_WiFi_Connect.jpg


    "AT+CWMODE=1" は、ESP8266 をステーションモードにするためのコマンドです。
    "AT+CWJAP="testAP","123123123"" で、Wi-Fi のSSIDとパスワードを指定して接続します。
    "AT+CIFSR" で、取得したIPアドレスを確認することができます。


    無事にWi-Fiに接続できたようなので、TCP/IP で通信できるか試してみます。お手軽にTCP/IP通信のテストができる Hercules というソフトを使って接続確認します。


    TCPConnection.jpg


    "AT+CIPSTART="TCP","192.168.2.105",8080" で通信方式の指定とIPアドレス、ポート番号を指定してサーバーに接続します。
    "AT+CIPMODE=1"で、UARTの入力データを受け付けるモードに切り替えます。
    "AT+CIPSEND"で、データ通信モードに入り、UARTの入力をデータとして都度通信します。


    無事に通信ができたので、このATコマンドをベースにライブラリを作ってスケッチから動かせるようにしたいと思います!
    (^^)/~







    nice!(37)  コメント(2) 
    共通テーマ:趣味・カルチャー

    SPRESENSE の Wi-Fi ボードを入手! [SPRESENSE]

    SPRESENSE の最大の弱点。それは通信機能。その弱点を克服するボードを入手しました。

    DSC05362.JPG


    ESP8266 を搭載したWi-Fiボードです。スイッチサインエスで購入することができます。入荷したらすぐに売り切れになってしまうので、すでに在庫は0です(2019/3/5現在)。

    4042_main.jpg
    https://www.switch-science.com/catalog/4042/


    搭載してみました。少し足が長いので三段空母ならぬ二段空母のようですが、この小ささにシステムが収まるのは大きな魅力ですね。


    DSC05363.JPG


    さて、SPRESENSE と Wi-Fiボードで何を作ろうかな…。お楽しみに!
    (^^)/~








    タグ:SONY Wi-Fi Spresense
    nice!(34)  コメント(1) 
    共通テーマ:趣味・カルチャー

    SPRESENSE でステレオ録音を試してみた! [SPRESENSE]

    SPRESENSEのマイクをもう一つ作ってステレオ録音にチャレンジしてみました。例によって動画にしてみましたので、お時間のあるかたはどうぞ!





    ステレオ録音をする前に、SDカードにMP3エンコーダーがインストールされていることを確認してください。


    Spresense StereoRecording.png


    スケッチは、Spresense サンプルの中の "recorder" スケッチを使います。録音には音叉を使ったのですが、最初録音したときに少しレベルが高く耳に突き刺さる感じでしたので、ゲインを下げてみました。


    Spresense StereoRecordingSetting.png


    実際に録音した音がこちらです。ステレオのサウンドが分かるように、ヘッドホンで聞いてみて下さい!





    これでスイッチとタイマーをつければ、思ったタイミングで録音を開始できるので、音源作りがはかどりますね。DTMの幅が広がります!
    (^^)/~







    タグ:SONY AUDIO Spresense
    nice!(32)  コメント(2) 
    共通テーマ:趣味・カルチャー

    SPRESENSEでハイレゾ録音対決! [SPRESENSE]

    SPRESENSEでいよいよハイレゾ録音にチャレンジします。ここでハイレゾの定義を振り返ってみます。
    ハイレゾの定義は JEITAで決められており、CD音質以上のものはハイレゾオーディオとなっています。以下抜粋です。

    48kHz/24bit →(CD スペック同等/CD スペック超)→ ハイレゾオーディオ
    96kHz/16bit →(CD スペック超/CD スペック同等)→ ハイレゾオーディオ
    96kHz/24bit →(CD スペック超/CD スペック超) → ハイレゾオーディオ
    48kHz/16bit →(CD スペック同等/CD スペック同等)→ 非該当
    96kHz/12bit →(CD スペック超/CD スペック未満)→ 非該当
    32kHz/24bit →(CD スペック未満/CD スペック超)→ 非該当
    


    ですので、SPRESENSEで録音できる 48kHz/24bit が最低限のハイレゾで、192kHz/24bit が最高音質のハイレゾになります。

    今回、この二つを比較してみました。お時間のあるかたはこちらの動画をどうぞ。





    最初に、ハイレゾ録音するための前準備をします。SPRESENSEは WAVフォーマットでハイレゾ録音ができます。そのエンコーダである「SRCエンコーダ」をインストールします。

    「dsp_installer」から「src_installer」を選択・実行してお使いのSDカードにインストールしてください。


    src_installer.png


    いよいよ、ハイレゾ録音します。最初に 48kHz/24bit で録音をしてみましょう。「application」から「recorder_wav」を選択します。


    recorde_wav_48kHz24bit.png


    A/Dの解像度を24bitに設定し、マイクは一つなのでMONOに変更します。録音したデータをグラフ化してみました。


    48kHz_24bit_Graph.png


    さて、次に192kHz/24bit で録音をしてみましょう。同じく「recorder_wav」を開きます。


    recorde_wav_192kHz24bit.png


    192kHzで録音するには、クロックを変更しなければならないことに注意してください。setRenoderingClockMode という関数で設定を変更できます。

    あとは、サンプリングレートを48kHzから192kHzに変更し、同じく解像度を24bit、チャンネルはMONOに変更します。同じように、録音したデータをグラフ化してみます。


    192kHz_24bit_Graph.png


    明らかに違いますね。両方を並べてみました。


    Comparison_Graph.png


    192kHz/24bit 恐るべしです。録音した音を Githubに置きました。(通常の音楽配信サービスだと再エンコーディングされてしまうので)実際に聞き比べてみてください。


    https://github.com/YoshinoTaro/resources/tree/master/HiResoSoundRecordedBySpresense


    48kHz/24bit の音は少しこもったように聞こえますが、192kHz/24bit はかなりクリアに聞こえます。やはりハイレゾはすごいですね。「CD音質==高音質」というのは、もう過去のものです!
    (^^)/~







    タグ:SONY AUDIO Spresense
    nice!(37)  コメント(0) 
    共通テーマ:趣味・カルチャー

    SPRESENSEでマイクのゲインを変えて録音してみた! [SPRESENSE]

    SPRESENSEにマイクをつけたのですが、どうも録音された音が小さい。マイクのゲインを変える方法がないかAPIを調べてみました。


    sDSC05336.jpg


    Spresense の APIリファレンスを調べてみたら、setRecorderMode 関数で変更できることが分かりました。


    spresenes_input_gain.png


    デフォルトが書いていないので実装を確認してみたら、初期値は 0 dbに設定されていました。最大値は 21 db なので、0 db から 20 db に変更して録音をしてみました。


    spresense_micgain_10db.png


    実際に録音したのがこちらです。0 db、2 db、5 db、10 db、20 db、指定なし(0 db)です。




    20 db くらいになると、少しノイズが気になりますね。このマイクの場合は、10 db 位がよいのかな。動画にもしてみましたのでお時間のある方はご覧ください。





    次はいよいよハイレゾの録音にチャレンジします。でも、録音したデータをどこに置こうかなぁ。
    (-ω-;)








    タグ:SONY AUDIO Spresense
    nice!(35)  コメント(2) 

    SPRESENSEでWebラジオ!? [SPRESENSE]

    SPRESENSEでWebラジオを作った人がいました。すごいですね。


    sonyspresensewebradio.png


    SPRESENSEとESP8266を組み合わせたアプリケーションです。私の大好きな二つのデバイスです。なかなか良い組み合わせですね。

    ESP8266でWebラジオを受信・デコードを行い、I2Sに出力して、SPRESENSEで再生するというものです。

    SPRESENSEのもつアンプ機能をうまく利用したアプリケーションですね。しかし、ESP8266でI2S出力ができたんですね。知らなかったー。下記に作り方の詳細などが紹介されています。


    Talking Web Radio with ESP8266 and Sony Spresense
    https://www.hackster.io/pjdecarlo/talking-web-radio-with-esp8266-and-sony-spresense-b04e02


    ESP8266のI2Sライブラリを使えば簡単できそうですね。最近は YouTube 動画を作るのに凝ってしまって、なかなかアプリまで手がまわりませんが、そろそろ頑張ろうかなぁ。
    (^^;









    nice!(38)  コメント(2) 
    共通テーマ:趣味・カルチャー

    SPRESENSEでMP3録音をしてみた! [SPRESENSE]

    今年初の工作&実験です。今年も色々なことにチャレンジしていきたいと思います!

    ということで、今回はSPRESENSEの録音機能を試してみました。時間のある方はこちらの動画をどうぞ。




    時間のない方のために、以下に解説をつけておきます。最初にマイクを制作する必要があります。マイクの制作については、次の記事を参考にしてください。

    SPRESENSE用のアナログマイクを作ってみた!

    作ったマイクを接続してみました。


    sDSC05336.jpg


    MP3で録音するので、MP3エンコーダをインストールする必要があります。Arduino IDE のサンプル例の中から "mp3_enc_installer" を開きます。


    mp3_enc_installer.png


    SPRESENSEに書き込んだら、シリアルモニターを開いてMP3エンコーダをSDカードにインストールします。


    install_mp3_enc.png


    次に録音用のスケッチを開きます。Arduino IDE のサンプル例の中から "recorder" を開きます。


    recorder_sketch.png


    マイクは一つだけなので、設定をステレオ録音からモノラル録音に変更します。


    change_streo_to_mono.png


    このスケッチはSPRESENSEをリセットしたあと、Audioライブラリの初期化後10秒間くらい録音されます。今回は私のへたくそなウクレレの演奏を録音してみました。^^;





    そのうちハイレゾ録音やステレオ録音にもチャレンジしてみたいと思います!
    (^^)/~















    タグ:SONY AUDIO Spresense
    nice!(32)  コメント(3) 
    共通テーマ:趣味・カルチャー

    SPRESENSE用のアナログマイクを作ってみた! [SPRESENSE]

    SPRESENSEで再生はできたので、次は録音だ!ということで、アナログマイクを準備することにしました。


    DSC05314.JPG


    マイクは、CM-102 というものを使いました。SPRESENSEに合わせてバイアスを印加するタイプのものを購入しました。千石電商で100円くらいでした。


    DSC05316.JPG


    結線図を見れば分かりますが、このマイクは信号線にバイアス電圧を抵抗でつなげています。その後にキャパシタンスでDCをACに変換して使うようになっています。


    しかし、Spresenseのマイク接続の説明を読むと、以下のように記述されています。

    コンデンサベースの2線式エレクトレットマイクを接続する場合、JP10ピンヘッダのマイク入力端子に2.0Vのバイアス電圧を印加する必要があります。各チャンネルごとに2.2kΩ(1005サイズ)の抵抗を指定位置にマウントしてください。
    



    念のため回路図を確認すると、2.2kΩでバイアスをしており、その先でキャパシタンスでAC接続しているのが確認できます。

    schema.png


    この回路図を見る限り、バイアスを接続しなくても良さそうですが、それは、R51, R52, R47,R48 をマウントできればの話です。


    R50R51R47R48.png


    いやいやいや、一般ピープルにはとてもこの大きさのチップ抵抗をマウントはムリでしょ!

    ということで、大人しくコンデンサマイクにバイアスを印加して使いましょう。普通の抵抗が使えて、半田づけも安心です。


    sDSC05317.jpg


    念のため、拡張ボードのシルクでピンヘッダの配置を確認します。下から GND、BIAS、MIC です。


    DSC05320.JPG


    つなげてみました。もう一つ追加すれば、ステレオ録音ができるようになります!


    DSC05318.JPG


    次はSPRESENSEでの録音を試してみます!ハイレゾのステレオ録音できちゃうかな~。
    (^^)/~









    タグ:SONY AUDIO Spresense
    nice!(37)  コメント(2) 
    共通テーマ:趣味・カルチャー