読者です 読者をやめる 読者になる 読者になる

min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi にマイクを接続 → docomo API を使った音声認識

RaspberryPi 音声認識 Linux bash

docomo API を使って RaspberryPi で音声認識してみたい。興味のきっかけはこのあたり。

qiita.com

手順はここのとおりに進める。

qiita.com

使う RaspberryPiはこれ。初代だからスペック低いけど、実験には充分だろう。

f:id:min117:20161205004954p:plain

ーーー

$ lsusb

f:id:min117:20161204213934p:plain

$ cat /proc/asound/modules

f:id:min117:20161204213951p:plain

snd_usb_audio がマイクのことらしい。

f:id:min117:20161204213954p:plain

$ vim /etc/modprobe.d/alsa-base.conf

f:id:min117:20161204213957p:plain

/etc/modprobe.d/alsa-base.conf の記述内容

f:id:min117:20161204213959p:plain

再起動

f:id:min117:20161204214000p:plain

優先順位確認(というか1つしかないから優先も何もないが)

f:id:min117:20161204215655p:plain

マイクの調整

f:id:min117:20161204215658p:plain

録音テスト

f:id:min117:20161204215657p:plain

録音までは完璧だ。

ーーー

今度は出力(音を出す)を試す。

f:id:min117:20161204221113p:plain

ダメ。aplay -l にリストが出力されない。sudo して実行してみても、上みたいな変な文字化けになる。再起動してみる。

f:id:min117:20161204221118p:plain

ダメ。再起動も変な文字化けになった。たぶん、一時的に何かおかしい。電源引っこ抜いて再起動する。

ーーー

再起動後。音声出力を無理やりやってみる。

$ aplay -Dhw:1,0 test.wav

f:id:min117:20161204221119p:plain

赤文字のところがデバイスらしいけど、番号わからないから適当に。

aplay -Dhw:1,1 test.wav

f:id:min117:20161204221120p:plain

 ダメやね。音を出すのは諦めて次に行く。ダメなものは切り捨てて、どんどん試す。小さな成功を重ねる(Linuxでは重要なことと思ってる)。

ーーー

pythonAPI キーを叩けるかテストする。まずはpythonのバージョンを見る。import requests するから、バージョンは2.7系じゃだめ。3でなきゃいけない。

$ python

f:id:min117:20161204221122p:plain

あれ?ダメじゃん。前回記事で、pyenvをインストールして、バージョン3.5にしたはずなのに?

f:id:min117:20161204223847p:plain

f:id:min117:20161204223902p:plain

おかしい。~/.pyenv がカラのはずはないのだ。完全に何かおかしいな。もう一度強制再起動。

ーーー

再起動後。

$ cd ~/.pyenv

$ ls

f:id:min117:20161204224821p:plain

やはりファイルはある。さっきカラだったのは、一時的なカーネルパニックか何かだろう。RaspberryPi1(電力弱い)やつにマイクなんかつけるから、一時的に電力不足だったのかも。

ーーー

pyenv の設定が消えているので、前回記事同様、profileに設定を入れる。参考は以下。

Raspberry PiでのPython 3.5環境構築 | MUDAなことをしよう。

サイトのとおり profile を書く。

f:id:min117:20161204223921p:plain

記載した直後はpython3.5になるけど、再起動するとまた2.7に戻っちゃう。ほんとpythonめんどくさい。

ーーー

設定を ~/.bashrc にかけば、再起動しても設定が消えないはず。

f:id:min117:20161204230434p:plainf:id:min117:20161204230429p:plain

再起動する。

$ sudo reboot

ーーー

再起動後。

python起動。3.5.1になってた。よかった。

f:id:min117:20161204231401p:plain

ーーー

引き続き、import requestsして(冒頭サイトのとおり)雑談APIを試す。

f:id:min117:20161204230900p:plain

簡単じゃないよ。「APIKEYを使って」ってあるけど、具体的にどこを書き換えればいいのか分かんない。サイト記載者は分かるのかもしれんけど、こっちゃ手探りだ。まずはコピペしてみるか。

>>> import requests

>>> import json

>>> url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY={}".format(APIKEY)

f:id:min117:20161204223950p:plain

エラーになった。青文字の部分を、docomoのサイトでゲットしたAPI KEYの文字列にしてみる。

f:id:min117:20161204224011p:plain

ダメか。こうか。

f:id:min117:20161204232205p:plain

ダメだ。

ーーー

何度か試してやっとうまくいった。

f:id:min117:20161205001106p:plain

>>>  url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY={}".format("123b1234599998888a77777859777771354e626a4446636756694177777b6e744446667778888999999a31")

コツは 2つ。

① format の中身はダブルクオート""で囲むこと。

② 赤字の部分は自分がdocomoのサイトで取得したAPIキーを書く(赤字はダミー)。

ーーー

payload を入れてリクエストを投げてみる。こうなるはず。

f:id:min117:20161205001351p:plain

ならなかった。エラーが返ってくる。なんで…

f:id:min117:20161205001412p:plain

>>> print r

f:id:min117:20161205002233p:plain

>>> print (r)

f:id:min117:20161205002327p:plain

レスポンスには 200 が返ってきている。OKってことだから、リクエスト文字列(API KEYの文字列)は間違ってないはず…

ーーー

やっとうまくいった。この記述が嘘だった。

f:id:min117:20161205002625p:plain

正しくは、printのあとをカッコ()で囲む

>>> print (r.json()['utt'])

f:id:min117:20161205002706p:plain

たしか、python はバージョン 3 になってから、print文が変わったと聞いた。上の嘘の記述を書いた人は、バージョン2.7に慣れた人なのかもしれない。いずれにしても、pythonに2.7と3が混在しているせいで、こういう手間が出るのはほんと困る。

ーーー

ここまでで、以下ができるようになった。

話しかけたい内容(payload)を、docomo雑談APIに投げる。

APIからの回答を print する。

話しかけまくって雑談してみる。

f:id:min117:20161205003237p:plain

よし。雑談APIまではうまくいった。

ーーー

次は音声認識APIを試す。

f:id:min117:20161205003501p:plain

「なんでやねん」という音声が必要ってことか。録音する。

arecord -r 16000 -f S16_LE test.wav

録音が開始するので、マイクに向かって「なんでやねん」を発音してから、Ctrl + Cで録音を止める。

f:id:min117:20161205003750p:plain

APIに投げて結果を見る。

f:id:min117:20161205004300p:plain

おかしい。何も入ってこない。録音が悪かったのか?(発音が悪い?関西弁の抑揚が必要なのか?)。レスポンス結果を見てみる。

>>> print (r)

f:id:min117:20161205004527p:plain

200だ。結果はOKで来てるみたい。よくわからないから、pyaudioのインストールに進む。

ーーー

このサイトを見ろとある。

raspberryPi と pyaudioで録音、音声波形処理 | 半端工作

pyaudioのインストール。

f:id:min117:20161205010952p:plain

alsa-base.conf の書き換え。

f:id:min117:20161205011020p:plain

f:id:min117:20161205011023p:plain

f:id:min117:20161205011712p:plain

f:id:min117:20161205011024p:plain

1行目に #!/usr/bin/python を追記。

37行目のファイル名を test.wav に変更。

f:id:min117:20161205011924p:plain

f:id:min117:20161205011950p:plain

pyaudio さっきインストールしたじゃん。pyenvでインストールしなきゃいけないのか?

f:id:min117:20161205012325p:plain

f:id:min117:20161205012327p:plain

うまくいかないから録音(puaudio)は諦める。あとで試す。

ーーー

Aques Talk Pi をいれて、Piに喋らせる。

f:id:min117:20161205013115p:plain

規約を下までスクロールしないと、「同意してDownload」が有効にならない。

f:id:min117:20161205013123p:plain

iMacでダウンロードしたのを、scpでPiに送る。

f:id:min117:20161205013126p:plain

Piにて解凍。

f:id:min117:20161205013128p:plain

f:id:min117:20161205013132p:plain

f:id:min117:20161205013331p:plain

f:id:min117:20161205013332p:plain

f:id:min117:20161205013336p:plain

出力デバイス(イヤホン)を見つけられなくてエラーになってるぽいので再起動して見る。

ーーー

再起動後。

f:id:min117:20161205013645p:plain

ダメだ。出力デバイスをApple製のイヤホンから、こないだ買ったスピーカー(イヤホンジャック接続)に変えてみる。

f:id:min117:20161205015234p:plain

f:id:min117:20161205015048p:plain

aplay -l を認識させないとはじまらない。

RaspberryPi で Python 2.7 と 3 の両方を使えるようにする

RaspberryPi bash Linux

 

Python好きだけど、バージョン「2.7」と「3」が混在してて困る。ネットの情報も、2.7のソースと思ってコピペして動かしてみたら実は3のソースだったとか。分かりにくい。

ーーー

RaspberryPi(初代)は、標準で 2.7系 が入っている。

f:id:min117:20161204105146p:plain

3も動くようにしてみる。参考サイトはここ。

Raspberry PiでのPython 3.5環境構築 | MUDAなことをしよう。

手順そのまま進めていく。

$ sudo apt-get install build-essential libncursesw5-dev

f:id:min117:20161204105111p:plain

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

f:id:min117:20161204105450p:plain

git なんてコマンドはない、と怒られた。gitをインストールする。

$ sudo apt-get -y install git

f:id:min117:20161204105553p:plain

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

f:id:min117:20161204105748p:plain

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile

$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile

$ echo 'eval "$(pyenv init -)"' >> ~/.profile

$ source ~/.profile

f:id:min117:20161204105905p:plain

$ pyenv install 3.5.1

f:id:min117:20161204110138p:plain

pyenvってコマンドでPythonをインストールできるのか。普通に考えれば「apt-get  -y install python」な気がするけど、そうじゃないらしい。このへんがやっかいなところ。インストールには1時間以上かかった。

ーーー

Python3.5.1 のインストールが終わったので、冒頭サイトのとおり環境を切り替える。

f:id:min117:20161204140947p:plain

こりゃ便利だ。

f:id:min117:20161204141058p:plain

ーーー

これでPythonは3系が使われるようになったはず。Python製のbotを動かして試してみる。botの中身はこれ。

$ vim bot.py

f:id:min117:20161204165124p:plain

冒頭に #!/usr/bin/python の記述あり。内部のPythonで3系が使われていれば、requests_oauthlib がエラーにならないはず。

f:id:min117:20161204165040p:plain

bot実行。

$ ./bot.py

f:id:min117:20161204165259p:plain

あれ?エラーになる。別の方法で実行してみよう。

$ sh ./bot.py

f:id:min117:20161204165453p:plain

これもだめだ。

ーーー

python と明示して実行してみる。

$ python bot.py

f:id:min117:20161204165857p:plain

これで成功。bashがどのpythonを呼んでいるか調べないと。

f:id:min117:20161204170430p:plain

pyenvのPATHになってる。よくわからん。これがあるからpythonは大変だ。

 

RaspberryPi(初代)に Camera を取り付ける

RaspberryPi bash Linux

RaspberryPi用のカメラを買ってあったんだけど、付ける機会がなかった。初代が空いたので、取り付けしてみる。

f:id:min117:20161203234445p:plain

f:id:min117:20161203234454p:plain

f:id:min117:20161203234503p:plain

USBのすぐ後ろ(水色パーツの正面)がカメラ取り付け箇所。

f:id:min117:20161203234512p:plain

f:id:min117:20161203234523p:plain

ケースを開ける。

f:id:min117:20161203234532p:plain

カメラを挿し込む。

f:id:min117:20161203234604p:plain

挿し込みの時は、クリーム色のプラ部分を爪で浮き上がらせてからカメラを挿し込む。これが分からなくて四苦八苦した。

f:id:min117:20161203234610p:plain

f:id:min117:20161203234613p:plain

別角度から見た図。水色パーツで位置関係が分かる。

f:id:min117:20161203234616p:plain

無事装着完了。

f:id:min117:20161203234638j:plain

あとは raspi-config でカメラを有効にして、Pythonスクリプトで画像キャプチャを試す。

 

f:id:min117:20161204005306p:plain

f:id:min117:20161204005324p:plain

f:id:min117:20161204005446p:plain

f:id:min117:20161204005340p:plain

f:id:min117:20161204005348p:plain

f:id:min117:20161204005331p:plain

 

ami-gs.hatenablog.com

ami-gs.hatenablog.com

RaspberryPi Zero 1.3 を海外サイト(Pimoroni)からAmazon決済で買う

RaspberryPi bash Linux

Rapberry Pi Zero が気になっていたが、国内販売がないので買わないままでいた。最近新版(Ver1.3)が出たらしいので買ってみる。

deviceplus.jp

fabcross.jp

たった数センチの基盤なのに、スペック的には初代 Pi 1 B+ より上らしい。

www.youtube.com

CPUは1GHzもある。

f:id:min117:20161203224703p:plain

購入は海外サイト(イギリス)の Pimoroni というところでしてみる。日本国内では売ってないみたい。

Pimoroni - Raspberry Pi, Adafruit, SparkFun from the UK

サイトの検索窓から「ZERO」で探すと、4ユーロで売っていた。クリスマスセールで安いのか?為替だとそんなもん?画面下の「Checkout now」で購入に進む。

f:id:min117:20161203225403p:plain

「ヘイ!買い忘れはない?」と聞いてくる。無い。今回は本体だけ買うし、オプションは要らん。そもそもが、売ってる電源とか日本のコンセントと違うから買っても使えないし。

f:id:min117:20161203225520p:plain

支払い情報を入れろと出た。「Pay with Amazon」とある。こういうときはアマゾンは便利だ。

f:id:min117:20161203225806p:plain

Email と パスワードを入れると Amazon のアカウントで決済できる。

f:id:min117:20161203225854p:plain

「Pimoroni Ltd. を信頼するなら Okay を押せ」かな。

f:id:min117:20161203230137p:plain

クレジットカードの情報を入れる。

f:id:min117:20161203230415p:plain

通常の国際便(5から7日程度)なら5.55ユーロ、1営業日で手配するなら26.28ユーロ。もち通常でいい。

f:id:min117:20161203230443p:plain

決済が済んだ。メールで詳細が飛んでくる。3.33ユーロの買い物に、Shipping(船便?)が5.55ユーロかかって、合計8.83ユーロ。

f:id:min117:20161203230331p:plain

って日本円でいくら?

f:id:min117:20161203230804p:plain

1068円らしい。やっす。これで1GHzのコンピュータが手に入るんだから、ほんと便利な世の中になった。届くまで楽しみに待つ。

 

AmazonWebService(AWS)で毎月知らぬ間に2500円引き落とされていた

AmazonCloudDrive

AWS(AmazonWebService)。結論から言うと、個人利用は全くオススメしない。無料利用枠「まずは無料で始める」を試してみたが、使いにくい。

f:id:min117:20161203130521p:plain

勧めない理由

 全く使わないデータベース(RDS、消し忘れインスタンス)に知らぬ間に毎月の支払いが始まってしまっていた。事前の引落通知等は一切なし。今回は2,500円と少額だったからまだいいが、これが数万円単位だったと思うと怖い。以下、使いにくいところ。

① 請求に関するところが全て英語

 メニューの「請求」というリンク文字だけが日本語で、その後に出てくる請求情報は全て英語。請求書もドル表記。銀行引落明細を見るまで、実際いくら引落されるかは分からない。

f:id:min117:20161203130240p:plain

 お金に関して安心感がない。読めばわかるにしても、クレジットカードの引き落としに関するところは、せめて日本語でやりとりしたいし、窓口もそうしてほしい。これだけの巨大企業で日本語窓口を置かないのは意図的。請求をわかりにくくするためだろう。

② 請求レポートがない

 「毎月の引き落とし額を事前にメールで通知する」等、利用金額に気づける仕組みがない。いや、あるのかもしれないが、分かりにくい。「レポートを作成する」というメニューが実は「ご利用金額の通知」なのか?英語以前に、発想がアメリカ人向けで使えない。国内で安心して使えない。

③ お知らせ機能がない

 今回引き落とされてしまった2,500円は、RDS(データベース)利用料だった。引き落としに際し、事前の引き落とし額の通知等は全くなし。

RaspberryPi 3 の豆腐の文字化けをsudo apt-get install jfbterm で解消する

RaspberryPi フォント

RaspberryPi 3 の画面をテレビにHDMI出力したら豆腐に文字化けしていた。

f:id:min117:20161127213300p:plain

原因

 日本語フォントが入っていないから。

解消方法

sudo apt-get install jfbterm 

f:id:min117:20161127212609p:plain

f:id:min117:20161127212637p:plain

# sudo reboot

再起動後、解消。

f:id:min117:20161127213450p:plain

 

 

RaspberryPi で無線LAN

RaspberryPi 無線LAN/Wifi

これで通信できた。確定版メモ。

# vim /etc/wpa_supplicant/wpa_supplicant.conf

f:id:min117:20161127204346p:plain

id_str="インターフェース名" を設定するのがコツ。

f:id:min117:20161127204423p:plain

# vim /etc/network/interfaces

f:id:min117:20161127204441p:plain

auto wlan0 記述忘れるな

allow-hotplug wlan0 記述忘れるな

if wlan_mySSID01 inet static インターフェース名の指定を上と合わせること

f:id:min117:20161127204450p:plain