# -*- coding:utf-8 -*- import time import re import socket import subprocess import xml.etree.ElementTree as ET import paho.mqtt.client as mqtt def run_julius(): print('start Julius') subprocess.Popen('/home/pi/julius/mqtt/run_julius.sh', shell=True) time.sleep(5) print('ready!') def kill_julius(): print('finish Julius') subprocess.Popen('/home/pi/julius/mqtt/kill_julius.sh', shell=True) def publish_mqtt(mqttClient): print("publish_mqtt start") mqttClient.publish('topic/aitc', 'こんにちは') def extract_words(response,mqttClient): print('+++++++++') print(response) print('+++++++++') # 認識結果抽出 xml_recogout = re.search( r'.+', response, flags=re.DOTALL) if xml_recogout is None: return # 一致した文字列を取得 result = xml_recogout.group() # 「こんにちは」が含まれていたらpublishする res = result.find("こんにちは") if res >= 0: publish_mqtt(mqttClient) return result def julius_speech_to_text(mqttClient): host = '127.0.0.1' port = 10500 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) while True: time.sleep(0.1) response = client.recv(4096).decode('utf-8') extract_words(response,mqttClient) if __name__ == '__main__': mqttClient = mqtt.Client() mqttClient.connect('127.0.0.1', 1883, keepalive=60) run_julius() try: julius_speech_to_text(mqttClient) except KeyboardInterrupt: print('keyboard interrupt') finally: kill_julius()