Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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))
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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)