これまでのあらすじ:
2016年3月、フェルト生地を手で裁断している際にレーザーカッターがあれば複雑なカットが容易にできるなあと思って、安価になってきたレーザーカッターを購入しようと思ったのがきっかけ。調べていくうちに、合板も切れたほうがいいと思うようになって、CNCルーター(CNCミリング)についても考えるようになった。
Arduinoは以前から使っており、CNCシールドがあると気付いて自作も可能と思うようになった。当初はShapeOkoやX-CARVEを参考にMakerSlide、OpenRail、V-Wheel、2GTタイミングベルトなどで5万円くらいで自作しようと思っていた。AliExpressでも部品が安く買えることが分かって、しばらくは部品探し。探せば探すほど安くて本格的な部品も見つかってくるので、そんなにケチらなくてもいいのではないかと徐々にスペックアップ。最終的には剛性や精度のことも考えてボールスクリューやリニアスライドを使うことになり、予想以上に重厚な3軸CNCマシンをつくることに(約7万円)。
構想から約5週間(制作約3週間)でルーターとレーザーともに使えるようになり、現在はgrbl1.1+Arduino CNCシールドV3.5+bCNCを使用中(Macで)。余っていたBluetoothモジュールをつけてワイヤレス化。bCNCのPendant機能でスマホやタブレット上のブラウザからもワイヤレス操作可能。


CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:

*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。

2017年4月6日木曜日

音声認識:Voice Recognition Module VR3.1

ここしばらく音声認識が気になっていたので、引き続きいろいろ調べています。
AliExpressで見つけたArduino対応の音声認識モジュールがようやく届いたので試してみることに。

AliExpress.com Product - Free Shipping 5PCS APW7142KI-TRG APW7142KI APW7142 SOP8 in stock new and Original IC 2193円(送料無料)。
安くはないのですが、とんでもなく高いというわけでもないので、試しに購入してみました。これ以外にもいくつか音声認識モジュールはあるのですが、比較的小型(30x48mm)で、そこそこ認識力もありそうだったので。

どうやらELEHOUSEというところがメーカー/販売店らしく、このページから、マニュアルArduino用のライブラリがダウンロードできます。バージョン1や2もあるようで、今回購入したものはバージョン3.1でした。
似たようなモジュールとしてGreentechのVoice Recognition Moduleというのがあります。これはELEHOUSEのバージョン2に相当するモジュールで音声は3グループx5種類、合計15種類まで。基板の色が違うくらいで、構成や価格はほぼ同じです。

5Vでシリアル通信するので、Arduino Unoにはいいかもしれませんが、ESP8266などのような3.3Vのデバイスには、分圧などして電圧を下げないといけなさそうです。
言葉は80個(1.5秒/個)まで記憶できます。ただし一回でロードできるのはそのうち7個までのようですが、応用的な使い方として7個以上を使い分ける方法もあるようです。

グループ1:
0:グループ切り替えコマンド
1:音声1
2:音声2
3:音声3
4:音声4
5:音声5
6:音声6

グループ2:
0:グループ切り替えコマンド
1:音声1
2:音声2
3:音声3
4:音声4
5:音声5
6:音声6

という感じで、それぞれのグループの0番目をグループ切り替えコマンドに割り当てておけば、合計12個使い分けることもできると言う感じです。
グループ1をグループ2〜8へ移行するための分岐点にし、グループ2〜8の音声0をグループ1に戻るコマンドにして、音声1〜6までを通常コマンドに割り当てれば少なくとも42種類使えることになります。さらにツリー状に分岐させていけば80個まで使えるかもしれませんが、そこまで複雑な構造にしてしまうと途中で迷子になってしまいそうです。

ということでライブラリをArduino IDEにインストール。スケッチ>ライブラリをインクルード>ZIP形式のライブラリをインストール...でダウンロードしたzipファイル(解凍せず)を選択。

そして、スケッチ例からvr_sample_trainを選んでArduino Unoにアップロード。このプログラムでまずは音声を登録するようです。5Vなので、今回はArduino Unoで試しています。

配線はVCC、GND、TX、RXの4本だけです。Arduino UnoのほうはSoftwareSerialで通信するようで、サンプルにはTX、RX用にD2、D3のピンを使用することになっていますが、それ以外のピンでも大丈夫そうです。ESP8266の時は、使えるピンに変更したほうがよさそうです。

vr_sample_trainをアップロードしたら、シリアルモニタから音声登録ができます。
まず「settings」を入力すると登録モードに突入します。
sigtrain 0 switch
と入力する。この場合0番目に音声登録、「switch」は任意の名前。
そうすると、すぐに「Speak now」と表示が出るので、そこでマイクに向かって音声録音します。
さらに「Speak again」でもう一回録音し、「Success」が出て以下のようになれば登録完了です。

一個1.5秒しかないので、短い言葉しか入れることができません。例えば、「オン」と「オフ」を録音する場合、「オ」の後にくる「ン」や「フ」が曖昧だと、どちらも「オン」に識別されてしまうこともありました。だめなら、また入力しなおせばいいのですが、基本的にはハッキリしゃべったほうがいいのかもしれません。それから、似ている言葉はあまりつかわないほうがいいのかもしれません。
とはいうものの認識力はそこそこある感じです。

実際録音した音声を確認するには、
load 0 1 2 3 4
などと「load」のあとに録音した番号を連ねて入力します(最大7個まで)。
あとは、マイクに向かってそれぞれの言葉をしゃべると、認識されれば対応した番号が出てきます。
サンプルにあるLEDのオンオフ実験もやってみましたが、大体反応しました。「オン」はすぐに反応しますが、「オフ」は「フ」の部分をハッキリと発音しないと反応しないときもありました。
マイクとの距離は30cmほどで録音し1m離れたところからしゃべっても反応ありました。2m離れると反応しないので、マイクの感度をあげるか、離れたところから音声登録(録音)するといいのかもしれません。
とはいえ、このモジュールは比較的簡単に設定もできるし、Arduinoライブラリなどもあり使いやすいと思います。スタンドアロンのデバイスをすぐにつくることができると思います。


今回のモジュール以外では、Arduino用にuSpeechという音声認識ライブラリがあり、それも試してみましたが、上手くいかないので諦めてしまいました。
そのほか、Snowboyというオープンソースの音声認識システムも試しているところです。


ポイントとしては、長時間無音状態でも待機できるというのが条件です。音声認識させるために、画面をタップしたり、ボタンを押して音声入力するということをせず、気が向いたときに話しかけることで起動するという状態が理想的であり現実的に使える状況だと思います。このSnowboyは、長時間待機でき、インターネット接続なしでも使えるようです。このプログラム(Python)をRaspberry PiなどでRunさせておけばいいのかもしれません。
Amazon Echo/Alexaもgitにありますが、まだ日本語には対応していないようなので保留中です。

まだどの音声認識がいいかいろいろ試している段階です。以前試したWeb Speech APIが今の所個人的には一番便利そうです。もともとデバイス単体で使うというより、ネットワークに複数のデバイスをつなげて信号を送受信させようと思っているので、インターネットに常時接続していなければいけないということは、今の所問題ではないという感じです。Web Speech APIの場合は、Speech to TextとText to Speechなので、いろいろ応用できそうです。

Google Speech API(月間60分まで無料、61分〜100万分まで$0.006/15秒)
Amazon Echo Alexa(Git hub)
Web Speech API(MDN)
Watson Speech to Text(月間1000分まで無料、以降$0.02/分)
Julius
Python Speech Recognition3.6.3(python2.6以上)
Snowboy

Matrix Voice(WIFI/BT/MCU:$65)
EasyVR(4860円)
Voice Recognition V3(2193円)
Speech Recognition LD3320(1606円)

関連:
音声認識Wifiスイッチ/ESP8266使用(まとめ)についてはこちら

0 件のコメント:

コメントを投稿

人気の投稿