def run(self, file_path): for i in range(5): client = AsrClient(self.url, self.port, None, self.enable_flush_data, log_level=self.log_level, product_id=self.product_id, sample_rate=self.sample_rate, user_name=self.user_name, password=self.password) responses = client.get_result(file_path) file_content = "" try: for response in responses: if response.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: file_content += response.audio_fragment.result logging.info(file_content) else: logging.warning("type is: %d", response.type) self.write_file(file_path + ".txt", file_content) logging.info("file %s write complete!", file_path) break except Exception as ex: # 如果出现异常,此处需要重试当前音频 logging.error( "encounter an error: %s, will create a new channel and retry audio!", ex.message) time.sleep(0.5)
def run(): """ 添加失败重传 :return: """ for i in range(5): client = AsrClient(url, port, None, enable_flush_data, log_level=log_level, product_id=product_id, sample_rate=sample_rate, user_name=user_name, password=password) responses = client.get_result("/path/of/audio.wav") try: for response in responses: if response.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: logging.info("%s\t%s\t%s\t%s", response.audio_fragment.start_time, response.audio_fragment.end_time, response.audio_fragment.result, response.audio_fragment.serial_num) else: logging.warning("type is: %d", response.type) break except Exception as ex: # 如果出现异常,此处需要重试当前音频 logging.error( "encounter an error: %s, will create a new channel and retry audio! times : %d", ex.message, i + 1) time.sleep(0.5)
def run(self, file_path): while True: client = AsrClient(self.url, self.port, self.product_id, self.enable_flush_data, log_level=self.log_level, send_per_seconds=0.02, user_name=user_name, password=password) responses = client.get_result(file_path) file_content = "" try: for response in responses: if response.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: file_content += response.audio_fragment.result logging.info(file_content) else: logging.warning("type is: %d", response.type) self.write_file(file_path + ".txt", file_content) logging.info("file %s write complete!", file_path) break except: # 如果出现异常,此处需要重试当前音频 logging.error( "connect to server error, will create a new channel and retry audio!" ) time.sleep(0.5)
def record_micro(): """ 产生流(mac上麦克风读取音频流,需要先brew install portaudio) :return: """ client = AsrClient(url, port, None, enable_flush_data, log_level=log_level, product_id=product_id, sample_rate=sample_rate, user_name=user_name, password=password) NUM_SAMPLES = 2560 # pyaudio内置缓冲大小 SAMPLING_RATE = 8000 # 取样频率 pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=SAMPLING_RATE, input=True, frames_per_buffer=NUM_SAMPLES) # yield stream while True: yield client.generate_stream_request(stream.read(NUM_SAMPLES))
def run_fifo_stream(): client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, user_name=user_name, password=password) responses = client.get_result_by_stream(general_fifo_stream()) for response in responses: # for res in responses: logging.info("%s\t%s\t%s\t%s", response.start_time, response.end_time, response.result, response.serial_num)
def run_url_streaming(): client = AsrClient(url, port, None, enable_flush_data, log_level=log_level, product_id=product_id, sample_rate=sample_rate, user_name=user_name, password=password) responses = client.get_result_by_stream(read_streaming_from_url()) for response in responses: # for res in responses: logging.info("%s\t%s\t%s\t%s", response.start_time, response.end_time, response.result, response.serial_num)
def read_streaming_from_url(): """ 读取url上的流 :return: """ client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, user_name=user_name, password=password) data = urllib2.urlopen(audio_url) while True: yield client.generate_stream_request(data.read(size=2560))
def run(self, repeat_num=1): i = 0 # ip和端口可根据需要修改 url = "180.76.107.131" port = "8050" product_id = AsrProduct.CUSTOMER_SERVICE_FINANCE enable_flush_data = True log_level = 0 user_name = "abc" password = "******" client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, user_name=user_name, password=password) name = threading.currentThread().getName() audio_path = "/Users/lijialong02/code/client/data/10s.wav" while i < repeat_num: try: response = client.get_result(audio_path) for res in response: if res.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: logging.info("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s", name, str(res.error_code), res.error_message, res.audio_fragment.start_time, res.audio_fragment.end_time, res.audio_fragment.result, res.audio_fragment.serial_num, str(res.audio_fragment.completed)) else: logging.warning("type is: %d", res.type) i += 1 except Exception as ex: # 如果出现异常,此处需要重试当前音频 logging.error( "encounter an error: %s, will create a new channel and retry audio!", ex.message) time.sleep(0.5) client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, user_name=user_name, password=password)
def run_stream(): client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, send_per_seconds=0.01, user_name=user_name, password=password) responses = client.get_result_by_stream(record_micro()) for response in responses: if response.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: logging.info("%s\t%s\t%s\t%s", response.audio_fragment.start_time, response.audio_fragment.end_time, response.audio_fragment.result, response.audio_fragment.serial_num) else: logging.warning("type is: %d", response.type)
def general_fifo_stream(): """ 读取管道数据 1.新建管道:mkfifo pipe.wav 2.获取流存入管道:ffmpeg -i "http://path/of/video/stream" -vn -acodec pcm_s16le -ac 1 -ar 8000 -f wav pipe:1 > pipe.wav :return: """ client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, send_per_seconds=0.16, user_name=user_name, password=password) rf = os.open("/Users/xiashuai01/TranFile/tem/pipe.wav", os.O_RDONLY) while True: stream = os.read(rf, 320) yield client.generate_stream_request(stream)
def generate_file_stream(): """ 产生流(本地音频流) :return: """ client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, send_per_seconds=0.16, user_name=user_name, password=password) file_path = "/Users/xiashuai01/TranFile/tem/3.wav" if not os.path.exists(file_path): logging.info("%s file is not exist, please check it!", file_path) os._exit(-1) file = open(file_path, "r") content = file.read(320) while True: yield client.generate_stream_request(content) content = file.read(320)
def run(): """ 添加失败重传 :return: """ for i in range(30): client = AsrClient(url, port, product_id, enable_flush_data, log_level=log_level, send_per_seconds=0.01, user_name=user_name, password=password) # responses = client.get_result("/Users/xiashuai01/Downloads/10s.wav") responses = client.get_result( "/Users/lijialong02/code/client/data/8k-0.pcm") # responses = client.get_result("/Users/xiashuai01/Downloads/300s.wav") try: for response in responses: if response.type == baidu_acu_asr.audio_streaming_pb2.FRAGMENT_DATA: logging.info("%s\t%s\t%s\t%s", response.audio_fragment.start_time, response.audio_fragment.end_time, response.audio_fragment.result, response.audio_fragment.serial_num) else: logging.warning("type is: %d", response.type) break except: # 如果出现异常,此处需要重试当前音频 logging.error( "connect to server error, will create a new channel and retry audio! times : %d", i + 1) time.sleep(0.5)