一、背景
目前AI接口-短语音识别只能识别60s以下的音频文件,于是我使用短语音识别接口自行实现了识别长语音的功能,可用于类似会议记录等需要识别长语音的场景;
二、技术方案简介
1.将长语音文件分割为60s以下的短语音片段;
2.然后对短语音文件循环调用短语音识别接口,逐个获取到识别结果;
3.将识别结果进行拼接,统一写入到本地的txt文本文件中,记录下来;
三、具体实现的步骤
1.这里使用的python实现,pydub库可以很好的对语音文件进行分割,可以自定义切割的时长,在60s以下即可
##audio 需要识别的长语音文件
longAudio = '/Users/v_jingxiaowen/Downloads/c.wav' # 只支持 pcm/wav/amr
## 文件格式
format = longAudio[-3:]; # 文件后缀只支持 pcm/wav/amr/m4a
segmentAudio = AudioSegment.from_file(longAudio, format)
size = 50000 ##切割的毫秒数
chunks = make_chunks(segmentAudio, size) ##将文件切割为50s一块
for i, chunk in enumerate(chunks):
##枚举,i是索引,chunk是切割好的文件
chunk_name = "bulues{0}.wav".format(i)
#print(chunk_name)
##将切割后的短语音放入项目文件夹
audioPath="/....../PycharmProjects/untitled/venv/短语音接口识别长语音/audioFile/"+chunk_name
##保存文件
chunk.export(audioPath, format="wav")
2.引入短语音识别SDK,SDK可在官网下载:https://ai.baidu.com/sdk#asr
对切割后的语音文件调用短语音识别接口进行识别;
这部分放在for循环外面即可:
""" 你的 APPID AK SK """
APP_ID = 'xxx'
API_KEY = 'xxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxxxxx'
##使用短语音识别sdk 创建client
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
进行识别:
#对分割后的文件识别
## 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
## 识别本地文件
#print(audioPath)
res = client.asr(get_file_content(audioPath), 'wav', 16000, {'dev_pid': 1537})
print(res)
res1=res['result']
3.将识别后的结果进行提取,然后写入本地txt文件;
开头已在项目文件夹下创建文本文件:
##创建txt文件存放识别结果
fo = open("/xxxxxxxxx/PycharmProjects/untitled/venv/短语音接口识别长语音/audioFile/result.txt", mode='x')
写入文件:
res1=res['result']
##提取识别结果,写入到本地文件中并拼接起来
print(res1)
fo.write(str(res1))
四、实现的效果
1.运行代码后控制台的结果:
2.生成的分割文件:
3.保存的识别结果的本地文本文件:
五、总结
使用pycharm ce进行开发,调用了短语音识别接口;
用到了python的pydub库,参考的文章:https://blog.csdn.net/qq_41661056/article/details/102930764
项目代码:
链接:https://ecloud.baidu.com?t=4c66dc76f04ecbd5f185aa2c7a1c20ed
时间紧张,写的比较简单,还有很多地方可以优化;
比如分割音频时可以判断下每60s之前间隔较长的地方进行分割,防止整句分割识别导致句义识别不准确;
写入文件时每次文件名自加创建新文件,以便区分;
欢迎大家点赞以及给出建议 ~~~