質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Python

    7980questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    805questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

[質問]RaspberryPiとdocomoAPIを用いた音声認識について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 535

x066

score 5

前提・実現したいこと

簡単にできる!音声認識と音声合成を使ってRaspberrypiと会話
自然会話ロボットを作ろう! RaspberryPiとArduinoで作る人工知能

上記サイト、及び書籍を元にRaspberyyPiとdocomoAPIを用いて雑談対話と音声認識機能を組み合わせた対話システムの構築を試みましたが、エラーが発生してしまいます。

発生している問題・エラーメッセージ

tex:file.txt
Please input recoding time>>>3
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
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.surround21
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
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
Traceback (most recent call last):
  File "final_P.py", line 72, in <module>
    frames_per_buffer = chunk)
  File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 747, in open
    stream = Stream(self, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 442, in __init__
    self._stream = pa.open(**arguments)
IOError: [Errno Invalid input device (no default output device)] -9996

該当のソースコード

# -*- coding: utf-8 -*-
#マイク0番からの入力を受ける。一定時間(RECROD_SECONDS)だけ録音し、ファイル名:mono.wavで保存する。

import pyaudio
import sys
import time
import wave
import requests
import os
import json

while True:

    def recognize():
        url = "https://api.apigw.smt.docomo.ne.jp/amiVoice/v1/recognize?APIKEY={}".format(APIKEY)
        files = {"a": open(PATH, 'rb'), "v":"on"}
        r = requests.post(url, files=files)
        message = r.json()['text']
        print message
        return message

    def dialogue(message="こんにちは"):    
        url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY={}".format(APIKEY)
        payload = {
          "utt": message,
          "context": "",
          "nickname": "光",
          "nickname_y": "ヒカリ",
          "sex": "女",
          "bloodtype": "B",
          "birthdateY": "1997",
          "birthdateM": "5",
          "birthdateD": "30",
          "age": "16",
          "constellations": "双子座",
          "place": "東京",
          "mode": "dialog",
          "t":20
        }
        r = requests.post(url, data=json.dumps(payload))
        print r.json()['utt']
        return r.json()['utt']

    def talk(message="こんにちは", card=1, device=0):        
        # os.system('/home/pi/aquestalkpi/AquesTalkPi " ' + message.encode('utf-8') + ' " | aplay -Dhw:{},{}').format(card, device)
        os.system('/home/pi/3nen/Kaiwa/aquestalkpi/AquesTalkPi " ' + message.encode('utf-8') + ' " | aplay') # .format(card, device)

    if __name__ == '__main__':
        chunk = 1024
        FORMAT = pyaudio.paInt16
        CHANNELS = 1
        PATH = 'tmp.wav'
        APIKEY='docomoAPIKey' #DocomoAPI Key
        CARD = 1 #OUTPUTの指定
        DEVICE = 0 #OUTPUTの指定

        #サンプリングレート、マイク性能に依存
        RATE = 16000
        #録音時間
        RECORD_SECONDS = input('Please input recoding time>>>')

        #pyaudio
        p = pyaudio.PyAudio()

        #マイク0番を設定
        input_device_index = 0
        #マイクからデータ取得
        stream = p.open(format = FORMAT,
                        channels = CHANNELS,
                        rate = RATE,
                        input = True,
                        frames_per_buffer = chunk)
        all = []
        for i in range(0, RATE / chunk * RECORD_SECONDS):
            data = stream.read(chunk)
            all.append(data)

        stream.close()    
        data = ''.join(all)                    
        out = wave.open(PATH,'w')
        out.setnchannels(1) #mono
        out.setsampwidth(2) #16bits
        out.setframerate(RATE)
        out.writeframes(data)
        out.close()

        p.terminate()

        message = recognize()
        talk_message = dialogue(message)
        talk(talk_message, CARD, DEVICE)

補足情報(言語/FW/ツール等のバージョンなど)

使用したソフトは以下のとおりです

・Python2.7.9
・docomoAPI
雑談対話API
音声認識API【Powered by アドバンスト・メディア】

ハードの規格は以下の通りです

・RaspberryPi3 Model B
MITSUBISHI 27型ワイド三菱液晶ディスプレイ RDT271WLM(BK)
VERY100 コンデンサーマイク 全指向性ミニUSBマイク←現在使用しているマイク
サンワサプライ USBマイクロホン MM-MCUSB25←以前使用していたマイク

・サンワサプライのマイクは基本的に動作しますが、時々エラーが発生し、再起動すると直ることがあります
・VE*RY100は一度も動作したことがありません

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

類似のエラーが大量にありますね。

・VE*RY100は一度も動作したことがありません

が一番懸念されるところです。

モジュールの重複
https://stackoverflow.com/questions/4672155/pyaudio-ioerror-no-default-input-device-available/10339307#10339307

CHUNKが大きい
https://www.raspberrypi.org/forums/viewtopic.php?t=23504

マイクの検証
https://github.com/shichao-an/soundmeter/issues/7

マイクが正しくセットできていない
https://stackoverflow.com/questions/31642765/speechrecognition-jack-server-is-not-running

一部はエラーではない、ただの警告
https://stackoverflow.com/questions/7088672/pyaudio-working-but-spits-out-error-messages-each-time

警告を何とかする方法
https://www.raspberrypi.org/forums/viewtopic.php?t=136974

以下のコードを実行するとマイクがそもそも認識されているのかがわかるかもしれません。

import pyaudio
pa = pyaudio.PyAudio()
print(pa.get_default_input_device_info())

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/20 14:40

    ご回答ありがとうございます。
    認識確認のコードを実行したところ、以下のようなメッセージが表示されました

    pi@raspberrypi:~ $ python file_test.py
    ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
    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

    ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
    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
    {'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': -1.0, 'defaultLowInputLatency': 0.008684807256235827, 'maxInputChannels': 1L, 'structVersion': 2L, 'hostApi': 0L, 'index': 0L, 'defaultHighOutputLatency': -1.0, 'maxOutputChannels': 0L, 'name': u'USB PnP Sound Device: Audio (hw:0,0)', 'defaultHighInputLatency': 0.034829931972789115}

    やはりマイク自体の認識がされていないのでしょうか?

    キャンセル

  • 2017/12/20 14:53

    何かが認識されている結果いろいろとデフォルト値が入っているようですね。

    pyaudioを使わずに、デバイスの状況を先に確認すべきかもしれません。
    https://qiita.com/setsulla/items/c08a6d8fcdddc83c54c5
    https://qiita.com/t_oginogin/items/f0ba9d2eb622c05558f4

    キャンセル

  • 2017/12/21 19:42

    https://qiita.com/t_oginogin/items/f0ba9d2eb622c05558f4
    こちらのサイトを参考に実行してみました。
    cat /proc/asound/modulesを実行したところ【0 snd_bcm2835】のみ表示されました。
    やはりマイク自体を認識していないようです。

    新しいマイクを購入する場合、RaspberryPiに対応しているかどうかはどう見分ければよいでしょうか?

    キャンセル

  • 2017/12/21 20:12

    私自身はRaspberryPiでそのようなことを行ったことがないのでわからないのですが、
    http://kyochika-labo.hatenablog.com/entry/RaspberryPi_record_voice
    のようにマイクの商品名とRaspberryPiで検索して誰かがすでにやってみているのかを確認するのが一番手っ取り早い気がします。

    ちなみにですが、同様のマイクで
    https://ameblo.jp/kids-ict/entry-12236256700.html
    のブログに同じようなことを行って、うまく行ったとの報告例があるようです。

    キャンセル

  • 2017/12/25 12:26

    返答が遅れて申し訳ありません。

    とりあえず動作例のあるSANWA SUPPLY MM-MCUSB16 USBマイクロホンの後続であるMM-MCU02BKを購入してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7980questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    805questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。