百度api语音识别

来源:so.csdn.net 发布时间:Nov 29, 2020, 12:57:40 AM 原地址:https://blog.csdn.net/qq_40584593/article/details/110311540

百度API进行音频识别(包括长音频)

api注册

首先进度百度智能云,之后在里面注册一个语音识别api,获得密钥进行拼接使用
百度智能云

在这里插入图片描述
2.创建应用
在这里插入图片描述
3.里面内容可以随便填
在这里插入图片描述

4.获得使用的密钥在这里插入图片描述
5.刚开始还不能够直接使用,还需要获得免费次数,直接领取就可以
在这里插入图片描述

短音频识别

1.官方例子
在这里插入图片描述

2.不需要下载,直接看说明
在这里插入图片描述
3.在这里插入图片描述
4.其中aip包可以通过
pip install baidu-aip
在这里插入图片描述
5.短时间举例子
语音参数 必须符合16k或8K采样率、16bit采样位数、单声道
语音格式 PCM、WAV、AMR


from aip import AipSpeech

def baidu_Speech_To_Text(filePath):  # 百度语音识别
	""" 你的 APPID AK SK """
	APP_ID = '你的 App ID'
	API_KEY = '你的 Api Key'
	SECRET_KEY = '你的 Secret Key'
    aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)  # 初始化AipSpeech对象
    # 读取文件
    with open(filePath, 'rb') as fp:
        audioPcm = fp.read()
    json = aipSpeech.asr(audioPcm, 'wav', 16000, {
   'lan': 'zh', })
    print(json)
    if 'success' in json['err_msg']:
        context = json['result'][0]
        print('成功,返回结果为:', context)
    else:
        context = '=====识别失败====='
        print('识别失败!')
    return context


# oldPath='./audio/韩红 - 家乡.mp3'
oldPath = './audio/16k.wav'
# oldPath='temp-1.wav'


baidu_Speech_To_Text(oldPath)

资源地址:
https://download.csdn.net/download/qq_40584593/13203211

结果返回:
{‘corpus_no’: ‘6900431893696192867’, ‘err_msg’: ‘success.’, ‘err_no’: 0, ‘result’: [‘北京科技馆。’], ‘sn’: ‘548295614521606631998’}
成功,返回结果为: 北京科技馆。

长音频识别

# -*-encoding:utf-8-*-
""" # function/功能 : # @File : x2.py # @Time : 2020/11/29 10:18 # @Author : kf # @Software: PyCharm """
import os

from aip import AipSpeech
from pydub import AudioSegment
from pydub.utils import mediainfo


def sound_cut(file_name):
    if os.path.exists('识别结果.txt'):
        os.remove(r'识别结果.txt')
    song = mediainfo(file_name)
    song_length = str(int(float(song['duration'])))  # 读取文件时长
    song_size = str(round(float(int(song['size']) / 1024 / 1024), 2)) + 'M'  # 读取文件大小保留两位小数round(变量,2)
    song_filename = song['filename']  # 读取文件地址
    song_format_name = song['format_name']  # 读取文件格式
    print('\t长度', song_length, '\t文件大小', song_size, '\t文件路径', song_filename, '\t文件格式', song_format_name)
    cut_song_num = int(int(song_length) / 59) + 1  # 每段59s,计算切割段数
    print('切割次数', cut_song_num)
    sound = AudioSegment.from_mp3(file_name)
    # 单位:ms
    stat_time = 0
    end_time = 59
    for i in range(cut_song_num):
        if i == cut_song_num - 1:  # 判断如果是最后一次截断
            cut_song = sound[stat_time * 1000:]  # 截取到最后的时间
            end_time = int(song_length)
        else:
            cut_song = sound[stat_time * 1000:end_time * 1000]
        save_name = r"temp-" + str(i + 1) + '.mp3'  # 设置文件保存名称
        cut_song.export(save_name, format="mp3")  # 进行切割
        save_name_pcm = r"temp-" + str(i + 1) + '.wav'  # 设置文件保存名称
        mp3_version = AudioSegment.from_mp3(save_name)  # 可以根据文件不太类型导入不同from方法
        mono = mp3_version.set_frame_rate(16000).set_channels(1)  # 设置声道和采样率
        mono.export(save_name_pcm, format='wav', codec='pcm_s16le')  # codec此参数本意是设定16bits pcm编码器, 但发现此参数可以省略
        context = baidu_Speech_To_Text(save_name_pcm)
        with open(r'识别结果.txt', 'a', encoding='utf-8') as f:
            f.write(context)
        os.remove(save_name)  # 删除mp3文件
        os.remove(save_name_pcm)  # 删除mp3文件
        print(save_name, 'end_time=', stat_time, 'end_time=', end_time)
        # 切割完加入下一段的参数
        stat_time += 59
        end_time += 59


def baidu_Speech_To_Text(filePath):  # 百度语音识别
	""" 你的 APPID AK SK """
	APP_ID = '你的 App ID'
	API_KEY = '你的 Api Key'
	SECRET_KEY = '你的 Secret Key'
    aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)  # 初始化AipSpeech对象
    # 读取文件
    with open(filePath, 'rb') as fp:
        audioPcm = fp.read()
    json = aipSpeech.asr(audioPcm, 'pcm', 16000, {
   'lan': 'zh', })
    print(json['err_msg'])
    if 'success' in json['err_msg']:
        context = json['result'][0]
        print('成功,返回结果为:', context)
    else:
        context = '=====识别失败====='
        print('识别失败!')
    return context


file_name = r'./audio/世间最美的坟墓.mp3'
sound_cut(file_name)

示例文件:
https://download.csdn.net/download/qq_40584593/13203219
结果:

在这里插入图片描述

音频格式转换

# -*-encoding:utf-8-*-
""" # function/功能 : # @File : mp3变成wav.py # @Time : 2020/11/29 10:09 # @Author : kf # @Software: PyCharm """
import numpy as np
from pydub import AudioSegment


def mp32wav(from_path, to_path, frame_rate=16000):
    # from_path: 目标音频文件路径
    # to_path: 转码后文件路径
    # frame_rate: 默认16kHz,可以frame_rate=8000,既8kHz
    mp3_version = AudioSegment.from_mp3(from_path)  # 可以根据文件不太类型导入不同from方法
    # ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
    # flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")
    mono = mp3_version.set_frame_rate(frame_rate).set_channels(1)  # 设置声道和采样率
    mono.export(to_path, format='wav', codec='pcm_s16le')  # codec此参数本意是设定16bits pcm编码器, 但发现此参数可以省略


def wav2pcm(wavfile, pcmfile, data_type=np.int16):
    f = open(wavfile, "rb")
    f.seek(0)
    f.read(44)
    data = np.fromfile(f, dtype=data_type)
    data.tofile(pcmfile)


def trans_mp3_to_wav(filepath, filepath2):
    song = AudioSegment.from_mp3(filepath)
    song.export(filepath2, format="wav")


# oldPath='./audio/韩红 - 家乡.mp3'
# newPath="./audio/韩红 - 家乡.wav"
# wavfile="./audio/韩红 - 家乡.wav"
# pcmfile="./audio/韩红 - 家乡.pcm"

wavfile = "./audio/16k.wav"
pcmfile = "./audio/16k.pcm"
# mp32wav(oldPath,newPath)
wav2pcm(wavfile, pcmfile)


项目地址

https://github.com/Kuangfa/audioRecognition/tree/master

参考网页

  1. https://blog.csdn.net/Lynn_coder/article/details/79436579
  2. https://farm.readdinner.com/post/shi-yong-dui-yin-pin-jin-xing-zhuan-ma-man-zu-bai-du-yu-yan-he-teng-xun-chang-yu-yan-shi-bie-yao-qiu
  3. https://blog.csdn.net/a506681571/article/details/85201279
  4. http://www.xikrs.com/b(1)/lsb5b.htm
  5. https://blog.csdn.net/li_ji_an/article/details/102841611