メモログ

考えているコト、作ったモノ、書いたモノなどをゆるく書きとめる

Interface2017年8月号のお菓子認識プログラム実行時のIOErrorについて

はじめに

Interface2017年8月号のお菓子認識記事におけるお菓子の音を判定するプログラム(eval_snack.py)を実行したところ、私の環境ではIOErrorとなりました。

結果的に回避できましたので、その方法の紹介です。

環境

- Linux raspberrypi 4.9.36-v7+ #1015 SMP Thu Jul 6 16:14:20 BST 2017 armv7l GNU/Linux

  • USBマイク

- MXL USBバウンダリマイクロフォン AC-404

MXL USBバウンダリマイクロフォン AC-404

MXL USBバウンダリマイクロフォン AC-404

発生事象

記事の通りもろもろ準備をして、P.39に従ってお菓子の音を判定するプログラム(eval_snack.py)を実行すると以下の通りIOErrorになりました。

$ python eval_snack.py -m result/snack.model
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused

ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused

Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
recording...
Traceback (most recent call last):
File "eval_snack.py", line 152, in
main()
File "eval_snack.py", line 133, in main
data = stream.read(CHUNK)
File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981

やったこと

  • eval_snack.pyの104行目のCHUNKの値を1000から1024に変更
  • eval_snack.pyの135行目もrecording finishに修正(エラーとは関係ありません)

エラーになった当初は「PulseAudio: Unable to connect: Connection refused」や「IOError: [Errno Input overflowed] -9981」の線からggりまして、pyaudioを再インストールするなど2日ほど悩んでおりました。結果的に録音の設定の問題だろうと考えまして、pyaudio動作確認を行ったサンプルプログラムとeval_snack.pyのコードを調べてみたという流れです。

マイクの設定を行って、pyaudioのサイトに示されているサンプルコードがエラーなく実行できれば、準備に問題はないと思います。

おまけ

当該記事のプログラムは、Macでも動作しました。
特に悩んだところはありませんが、Chainerのバージョンは1.24.0でないと動きませんでした。