Raspberry Piで音声認識
解決したいこと
Raspberry Pi4を用いて、pythonからjuliusをモジュールモードで起動し、音声認識により指示を与えようとしています。
その前段階として、"女性"または"男性"とjuliusが認識するとそれぞれの音声合成LSIが"こんにちは"と喋るプログラムを作りたいのですが、どちらの音声合成LSIが喋りません。またエラーも特に表示されていません。
解決方法を教えて下さい。
発生している問題・エラー
エラーは出ていないのに、音声合成LSIが喋りません。
該当するソースコード
import socket
import time
import pykakasi
import RPi.GPIO as GPIO
import smbus
HOST = '000.00.000.000' # juliusサーバーのIPアドレス
PORT = 10500 # juliusサーバーの待ち受けポート
DATESIZE = 1024 # 受信データバイト数
kks = pykakasi.kakasi()
GPIO.setmode(GPIO.BCM)
bus = smbus.SMBus(1)
class Julius:
def ATP3011_send_cmd5(cmd):
cmd0 = ord(cmd[0])
cmd1 = []
for c in cmd[1:]:
cmd1.append(ord(c))
bus.write_i2c_block_data(0x2f,cmd0,cmd1)
def ATP3011_send_cmd6(cmd):
cmd0 = ord(cmd[0])
cmd1 = []
for c in cmd[1:]:
cmd1.append(ord(c))
bus.write_i2c_block_data(0x2e,cmd0,cmd1)
def __init__(self):
self.sock = None
def run(self):
# socket通信でjuliusサーバーに接続
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock:
self.sock.connect((HOST, PORT))
strTemp = "" # 話した言葉を格納する変数
fin_flag = False # 話終わりフラグ
while True:
def ATP3011_send_cmd5(cmd):
cmd0 = ord(cmd[0])
cmd1 = []
for c in cmd[1:]:
cmd1.append(ord(c))
bus.write_i2c_block_data(0x2f,cmd0,cmd1)
def ATP3011_send_cmd6(cmd):
cmd0 = ord(cmd[0])
cmd1 = []
for c in cmd[1:]:
cmd1.append(ord(c))
bus.write_i2c_block_data(0x2e,cmd0,cmd1)
# juliusサーバからデータ受信
data = self.sock.recv(DATESIZE).decode('utf-8')
for line in data.split('\n'):
# 受信データから、<WORD>の後に書かれている言葉を抽出して変数に格納する。
# <WORD>の後に、話した言葉が記載されている。
index = line.find('WORD="')
if index != -1:
# strTempに話した言葉を格納
strTemp = strTemp + line[index+6:line.find('"',index+6)]
# 受信データに</RECOGOUT>'があれば、話終わり ⇒ フラグをTrue
if '</RECOGOUT>' in line:
fin_flag = True
# 話した言葉毎に、print文を実行
if fin_flag == True:
if '女性' in strTemp:
print("mode:女性")
cmd = "konnnichiwa\r"
ATP3011_send_cmd5(cmd)
if '男性' in strTemp:
print("mode:男性")
cmd = "konnnitchiwa\r"
ATP3011_send_cmd6(cmd)
else: #認識した言葉をローマ字になおす
print("話した言葉:" + strTemp)
text = strTemp
result = kks.convert(text)
for item in result:
X = "{}".format(item['hepburn'].capitalize())
print(X)
fin_flag = False
strTemp = ""
if __name__ == "__main__":
julius = Julius()
julius.run()
自分で試したこと
cmdにローマ字を格納する方法をユーザー関数に変えてやってみましたがうまくいきませんでした。
0