python をつかって、Juliusで音声認識→pykakasiでローマ字変換→音声合成ICが発話というシステムです。
エラーがないのにうまく行きませんでした。
import socket
import time
import pykakasi
import RPi.GPIO as GPIO
import smbus
HOST = '172.26.102.216' # 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 Romaji(): print("話した言葉:" + strTemp) text = strTemp result = kks.convert(text) for item in result: romaji = "{}".format(item['hepburn'].capitalize()) print(romaji) return romaji 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 = "konnnichiwa\r" ATP3011_send_cmd6(cmd) else: cmd = Romaji() +"\r" ATP3011_send_cmd5(cmd) #ICniローマ字をwatasu fin_flag = False strTemp = ""
if name == "main":
julius = Julius() julius.run()
追記:
一旦このプログラムは無かったことにし、1から作り直している最中です。
回答1件
あなたの回答
tips
プレビュー