python版本:3.8以上

第一步:安装腾讯的sdk

在这里插入代码片

第二步,将腾讯云对接代码封装,复制以下代码存入到txasr.py,代码如下:

import time
import json
import base64
import re
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.asr.v20190614 import asr_client, models

class TencentASR:
    def __init__(self, secret_id, secret_key, region):
        """
        初始化腾讯云ASR对象
        :param secret_id: 腾讯云账号的SecretId
        :param secret_key: 腾讯云账号的SecretKey
        :param region: 地域信息,例如'ap-guangzhou'
        """
        self.secret_id = secret_id
        self.secret_key = secret_key
        self.region = region
        self.cred = credential.Credential(secret_id, secret_key)
        self.client = asr_client.AsrClient(self.cred, self.region)
        self.params = {
            "EngineModelType": "16k_zh",
            "ChannelNum": 1,
            "ResTextFormat": 0,
            "SourceType": 1,
        }

    def send_audio(self, audio_path):
        """
        发送录音文件进行识别
        :param audio_path: 需要识别的语音文件路径
        :return: 识别任务ID,如果出现错误则返回None
        """
        with open(audio_path, 'rb') as f:
            speech = base64.b64encode(f.read()).decode('utf-8')

        self.params['Data'] = speech
        req = models.CreateRecTaskRequest()
        req.from_json_string(json.dumps(self.params))

        try:
            resp = self.client.CreateRecTask(req)
            task_id = json.loads(resp.to_json_string())['Data']['TaskId']
            return task_id
        except TencentCloudSDKException as err:
            print(err)
            return None

    def get_result(self, task_id, timeout=60):
        """
        获取识别结果
        :param task_id: 识别任务ID
        :param timeout: 超时时间,默认为60秒
        :return: 识别结果,如果出现错误则返回None
        """
        start_time = time.time()
        while True:
            req = models.DescribeTaskStatusRequest()
            params = {
                "TaskId": task_id,
            }
            req.from_json_string(json.dumps(params))

            try:
                resp = self.client.DescribeTaskStatus(req)
                resp_j = json.loads(resp.to_json_string())
                status = resp_j['Data']['Status']
                if status == 2:  # 任务处理成功
                    text_j = resp_j['Data']['Result']
                    pattern = r'\[\d+:\d+\.\d+,\d+:\d+\.\d+\]'
                    result = re.sub(pattern, '', text_j).strip()
                    lines = result.split('\n')
                    return lines
                elif status == 1:  # 任务正在处理中
                    if time.time() - start_time > timeout:
                        print("Timeout")
                        return None
                    time.sleep(1)
                else:  # 任务处理失败
                    print("Task failed")
                    return None
            except TencentCloudSDKException as err:
                print(err)
                return None

第三步,调用

from txasr import TencentASR
import time

asr = TencentASR('A腾讯云账号的SecretId', 'j腾讯云账号的SecretKey', 'ap-guangzhou')
task_id = asr.send_audio('录音名字.wav')
if task_id:
    print('发送录音文件成功,识别任务ID为:', task_id)
    print('等待识别结果...')
    time.sleep(10)
    result = asr.get_result(task_id)
    if result:
        print('识别结果:')
        for line in result:
            print('->:' + line.strip())
    else:
        print('获取识别结果失败')
else:
    print('发送录音文件失败')

运行以上代码,可以直接将录音转为文字,如不能使用,欢迎私信探讨。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐