百度AI接口的简单使用

百度云(https://cloud.baidu.com/)提供了许多人工智能的API接口,有一些是可以免费使用的。

image.png

环境配置

使用环境

  • windows7 x64

  • python3.7

  • vscode 编辑器,用于写代码

  • ffmpeg 用于将wav格式的音频文件转化成pcm格式,可在其官网(https://www.ffmpeg.org/)上下载
    ffmpeg 下载后解压,不用安装,将bin中三个文件复制到system32目录下即可。
    使用到的python包有

  • aip 百度AI接口库 使用pip install baidu-aip安装

  • pyaudio python3.7使用pip安装会报错,可以下载whl文件(https://github.com/intxcc/pyaudio_portaudio/releases),离线安装pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl,pyaudio库的使用可参考https://people.csail.mit.edu/hubert/pyaudio/,上面有例子代码

  • wave 使用pip install wave安装

代码实现

工具函数

#-*- coding:utf-8 -*-
"""音频处理"""
import os
import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
#RATE = 44100
RATE = 16000
RECORD_SECONDS = 5


#用来播放声音,声音文件为wav格式
def play_wav(filename):
    wf = wave.open(filename, 'rb')

    p = pyaudio.PyAudio()

    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(),
                    output=True)

    data = wf.readframes(CHUNK)


    while len(data) != 0:
        stream.write(data)
        data = wf.readframes(CHUNK)

    stream.stop_stream()
    stream.close()

    p.terminate()

#录音,将声音保存为wav格式
def record(output_filename):
    p = pyaudio.PyAudio()

    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    print("开始录音,最长为5s")

    frames = []

    over_flag = False
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)

    print("录音结束")

    stream.stop_stream()
    stream.close()
    p.terminate()

    wf = wave.open(output_filename, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()

#调用ffmpeg将wav格式的音频文件转化成pcm格式,返回pcm格式文件名
#可参考https://www.cnblogs.com/DragonFire/p/9212935.html
#http://ai.baidu.com/docs#/ASR-Tool-convert/top
def wav2pcm(wav_file_name):
    # 假设 wav_file = "音频文件.wav"
    # wav_file.split(".") 得到["音频文件","wav"] 拿出第一个结果"音频文件"  与 ".pcm" 拼接 等到结果 "音频文件.pcm"
    pcm_file = "%s.pcm" %(wav_file_name.split(".")[0])

    # 就是此前我们在cmd窗口中输入命令,这里面就是在让Python帮我们在cmd中执行命令
    os.system("ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s > ffmpeg.log"%(wav_file_name,pcm_file))

    return pcm_file

测试代码

#-*- coding:utf-8 -*-
from aip import AipSpeech
import pyaudio
import wave
import sys
from pyaudio_utils import play_wav,record,wav2pcm

""" 你的 APPID AK SK """
#如何获取这三个参数可参考官方文档
APP_ID = 'xxxx'
API_KEY = 'xxxx'
SECRET_KEY = 'xxx'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

#语音合成
#参考https://cloud.baidu.com/doc/SPEECH/TTS-Online-Python-SDK.html#.E8.AF.B7.E6.B1.82.E8.AF.B4.E6.98.8E
def text2sound(msg):
    result  = client.synthesis(msg, 'zh', 1, {
        'vol': 5,'aue':6
    })

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('auido.wav', 'wb') as f:
            f.write(result)
        play_wav('auido.wav')

#语音识别
#参考https://cloud.baidu.com/doc/SPEECH/ASR-Online-Python-SDK.html#.E8.AF.B7.E6.B1.82.E8.AF.B4.E6.98.8E
def sound2text(sound_filename,fmt):
    # 识别本地文件
    res = client.asr(open(sound_filename,'rb').read(), fmt, 16000, {
        'dev_pid': 1536,
    })
    print(res)
    if 'result' in res.keys():
        return(res['result'][0])
    return ''



def test():
    while True:
        #录音
        record('output.wav')
        #播放录音
        play_wav('output.wav')
        #将wav转化为pcm文件
        pcm_filename = wav2pcm('output.wav')
        #将声音转化为文字
        res = sound2text(pcm_filename,'pcm')
        if res:
            #将文字转化为声音并读出
            text2sound(res)


test()

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352