Keras CNN Sound Classify #2

Keras CNN で 音の分類 #2。

ディープラーニングで音声分類 のサンプルが出ていたので、試してみました。

Keras CNN Sound Classify
で、学習済データが出来上がったので、

アプリケーションとして、
Window10 の MIC から音を取り込んで、
上記分類器にかけるプログラムを作ってみました。

環境
Windows10
マイク
USB カメラ / ロジクール ウェブカメラ C270n

XIAOKOA PCマイク USBマイク

 

プログラムは下記になります。

sound-predict3.py

Windows10 に繋がった USB カメラのマイクから音を拾って、
当初、HeadPhone から音をモニターしながらテストできる仕様でしたが、sound-player.py でテストする事にしたので止めました。

性能は、今は、ほどほどですが、後述のマイク入力後の高音域の減衰が改善できれば、もっと
良くなりそうです。
後述の、MobileNet v1 もそれなりに、判定できます。

マイクは、USB カメラのマイクでは無くて、出来るだけ性能の良い物を使った方が良いと思います。
MEMSマイクロフォン IM69D130 を使ってみたいですが、これは、どうやって使うのか?
https://www.macnica.co.jp/business/semiconductor/articles/infineon/129257/
市販の完成品は無いのかな?

使ってみて気が付いたこと。
変更1.
MICからの入力データを、2**15(32768) で一律割るように改めました。 2010.1.27
dx = np.frombuffer(data,dtype="int16").astype('float32')/2**15

変更2.
メルスペクトグラムデータの正規は、train.py に倣って、+- のまま、一律 4.1 で割ります。 2010.1.30

変更3.
テストには、下記の、sound-player.py からスピーカに音を出して、それをマイクで拾って、
試験する方法に改めました。2010.2.5

オリジナルのWAVの波形と、マイクで拾った波形を、どちらも、
matplotlib.pyplot で表示してみると、どうしても マイクで拾った音が短くなるみたいです。
これが改善できれば、もう少し判定結果が良くなるかもしれません。

変更4.
上記点に関して、sound-player.py にバグがありました。  2010.2.6
#output = stream.write(j)
output = stream.write(j,j.shape[0])   <- データ長の指定が必要です。

WAV データと、マイク入力されたデータのメルスペクトグラムを見比べて気が付いたのですが、
マイク入力データでは、高音域 の減衰が大きい様です。
これが、どこで生じているのか、スピーカの特性か、マイクの特性かはまだ分かりません。
ここが改善されれば、もっと良くなる気がします。

この点に関して、スピーカーが、ダイソーで買った300円の物なので、仕方がない。
但し、Windows10 の Sound の設定で、イコライザーが使えれば、高音域を補整して試して
みます。

ESC-50 の WAVデターを直接渡してのテストでは、正解率 0.95 程出ているので、
スピーカー > マイク 経由でも、同じESC-50 の WAVデターを使ったら、理屈上は、正解率 0.95
程は、出るはずなので、後は、プログラムの実装上の問題になるのか? (2010.2.7 by おんちゃん)

Realteck HD オーディオマネージャで、高音をブーストすれば、結構よくなりました。2010.2.7

sound-player.py

このブログ記事について

このページは、おんちゃんが2020年1月22日 16:49に書いたブログ記事です。

ひとつ前のブログ記事は「Keras CNN Sound Classify」です。

次のブログ記事は「Keras CNN Sound Classify #3」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ