百度AI接口的簡(jiǎn)單使用

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

image.png

環(huán)境配置

使用環(huán)境

  • windows7 x64

  • python3.7

  • vscode 編輯器,用于寫(xiě)代碼

  • ffmpeg 用于將wav格式的音頻文件轉(zhuǎn)化成pcm格式,可在其官網(wǎng)(https://www.ffmpeg.org/)上下載
    ffmpeg 下載后解壓,不用安裝,將bin中三個(gè)文件復(fù)制到system32目錄下即可。
    使用到的python包有

  • aip 百度AI接口庫(kù) 使用pip install baidu-aip安裝

  • pyaudio python3.7使用pip安裝會(huì)報(bào)錯(cuò),可以下載whl文件(https://github.com/intxcc/pyaudio_portaudio/releases),離線安裝pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl,pyaudio庫(kù)的使用可參考https://people.csail.mit.edu/hubert/pyaudio/,上面有例子代碼

  • wave 使用pip install wave安裝

代碼實(shí)現(xiàn)

工具函數(shù)

#-*- coding:utf-8 -*-
"""音頻處理"""
import os
import pyaudio
import wave

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


#用來(lái)播放聲音,聲音文件為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("開(kāi)始錄音,最長(zhǎng)為5s")

    frames = []

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

    print("錄音結(jié)束")

    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()

#調(diào)用ffmpeg將wav格式的音頻文件轉(zhuǎn)化成pcm格式,返回pcm格式文件名
#可參考https://www.cnblogs.com/DragonFire/p/9212935.html
#http://ai.baidu.com/docs#/ASR-Tool-convert/top
def wav2pcm(wav_file_name):
    # 假設(shè) wav_file = "音頻文件.wav"
    # wav_file.split(".") 得到["音頻文件","wav"] 拿出第一個(gè)結(jié)果"音頻文件"  與 ".pcm" 拼接 等到結(jié)果 "音頻文件.pcm"
    pcm_file = "%s.pcm" %(wav_file_name.split(".")[0])

    # 就是此前我們?cè)赾md窗口中輸入命令,這里面就是在讓Python幫我們?cè)赾md中執(zhí)行命令
    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

測(cè)試代碼

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

""" 你的 APPID AK SK """
#如何獲取這三個(gè)參數(shù)可參考官方文檔
APP_ID = 'xxxx'
API_KEY = 'xxxx'
SECRET_KEY = 'xxx'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

#語(yǔ)音合成
#參考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
    })

    # 識(shí)別正確返回語(yǔ)音二進(jìn)制 錯(cuò)誤則返回dict 參照下面錯(cuò)誤碼
    if not isinstance(result, dict):
        with open('auido.wav', 'wb') as f:
            f.write(result)
        play_wav('auido.wav')

#語(yǔ)音識(shí)別
#參考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):
    # 識(shí)別本地文件
    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轉(zhuǎn)化為pcm文件
        pcm_filename = wav2pcm('output.wav')
        #將聲音轉(zhuǎn)化為文字
        res = sound2text(pcm_filename,'pcm')
        if res:
            #將文字轉(zhuǎn)化為聲音并讀出
            text2sound(res)


test()

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容