@uhpa (村瀬 陽一)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ラズベリーパイと音声でLEDの制御ができない。ご教示をお願いいたします。

image.png
https://qiita.com/mooriii/items/6a16663ce9a80b2e2b92
の記事を見ながら、実行しています。

途中までは、imagou様のお力を頂き、実行できましたが、最後の最後の以下が動きません。ご知見のある方、対応方法をご教示頂けませんでしょうか。

■実行内容
記事の
image.png

の3行を自身の環境に合わせて、
$ sudo modprobe snd-pcm-oss
$ julius -C ~/julius/julius-kit/dictation-kit-v4.4/am-gmm.jconf -nostrip -gram ~/julius/dict/denki -module
$ python /home/pi/prog/juliustest.py
と実行すると、

1行目の実行時
image.png
2行目の実行時
image.png
違うターミナルウインドウで3行目の実行時
image.png
その直後、2行目の実行時のターミナルウィンドウ
image.png
となり、記事のようにLEDの制御できません。

■わたしの推定
3行目を実行したときのエラーメッセージ
File "/home/pi/prog/juliustest.py", line 19, in
while (string.find(data, "\n.") == -1):
AttributeError: module 'string' has no attribute 'find'
において、python3での実行環境において対応していないもの(Python2までの対応)、と推定しております。
また、推定をベースに調べると、以下のような記事にたどり着きましたが、対応が不明です。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11199585811

■参考:
image.png
image.png

#/usr/bin/env python
#coding: utf-8
import socket
import string
import led_h as on
import led_l as off
import flash

host = '192.168.2.101' # Raspberry PiのIPアドレス
port = 10500 # juliusの待ち受けポート

#パソコンからTCP/IPで、自分PCのjuliusサーバに接続
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

data = ""
while True:
# "/RECOGOUT"を受信するまで、一回分の音声データを全部読み込む。
while (string.find(data, "\n.") == -1):
data = data + sock.recv(1024)
#音声XMLデータから、を抽出して音声テキスト文に連結する。
strTemp = ""
for line in data.split('\n'):
index = line.find('WORD="')
if index != -1:
line = line[index + 6:line.find('"', index + 6)]
if line != "[s]":
strTemp = strTemp + line
if strTemp != "":
print("結果:" + strTemp)
if strTemp == "つけて":
on.main()
if strTemp == "けして":
off.main()
if strTemp == "てんめつ":
flash.main()
data = ""

以上です。

0 likes

1Answer

(まったく動かしてないでコメントしてます、的外れでしたらごめんなさい)

また、推定をベースに調べると、以下のような記事にたどり着きましたが、対応が不明です。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11199585811

Yahoo知恵袋の当該記事にこたえ書いてありますね・・・

strやbytesのfindメソッドを使うか、
in/not inを使う方が良いかと。

string.find(a,b)==-1#見つからない#
↓↓↓↓
a.find(b)==-1#または#
b not in a

こんな感じに書き換えでしょうか?

- while (string.find(data, "\n.") == -1):
+ while (data.find("\n.") == -1):
1Like

Comments

  1. @uhpa

    Questioner

    hon_no_mushi様
    ご回答ありがとうございます。
    ご教示頂きましたように、
     while (data.find("\n.") == -1):
    と変更し、かつ、
     data = data + sock.recv(1024).decode('utf8')
    と変更することで、プログラムが走りました。


    ただ、この記事と同じように、Lチカができません。
    もう一度、先ずは、わたしにて調査し、いろいろトライしてみようとしております。
    仮にうまくいかない場合には、再び、質問をUP致しますが、お時間があれば、hon_no_mushi様のご知見を頂ければ幸いです。
  2. @uhpa

    Questioner

    hon_no_mushi様
    その後の実施で、Lチカができました。
    ここまで実施できたのも、hon_no_mushi様のご知見からです。
    重ね重ね、ありがとうございました。

Your answer might help someone💌