Python人工智慧第一篇:語音合成和語音識別
Python人工智慧第一篇:語音合成和語音識別
此篇是人工智慧應用的重點,只用現成的技術不做底層演算法,也是讓初級程式設計師快速進入人工智慧行業的捷徑。目前市面上主流的AI技術提供公司有很多,比如百度,阿里,騰訊,主做語音的科大訊飛,做只能問答的圖靈機器人等等。這些公司投入了很大一部分財力物力人力將底層封裝,提供應用介面給我們,尤其是百度,完全免費的介面。既然百度這麼仗義,咱們就不要浪費掉怎麼好的資源,從百度AI入手,開啟人工智慧之旅
開啟人工智慧技術的大門 : http://ai.baidu.com/
首先進入控制檯,註冊一個百度的賬號(百度賬號通用);開啟百度語音,進入語音應用管理介面
建立一個新的應用;
建立語音應用App
就可以建立應用了,回到應用列表我們可以看到已建立的應用了
這裡面有三個值 AppID , API Key , Secret Key 記住可以從這裡面看到 , 在之後的學習中我們會用到
好了 百度語音的應用已經建立完成了 接下來 我會用Python 程式碼作為例項進行應用及講解
一.安裝百度的人工智慧SDK:
首先咱們要 pip install baidu-aip 安裝一個百度人工智慧開放平臺的Python SDK實在是太方便了,這也是為什麼我們選擇百度人工智慧的最大原因
安裝完成之後就來測試一下:
baidu-aip Python SDK 語音合成技術文件 : https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top;我們可以選擇Python SDK
語音合成
# -*- coding: utf-8 -*- # @Time : 2019/9/28 11:01 # @Author : AnWen from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 詳細引數可看python sdk 文件 result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5, #音量,取值0-15,預設為5中音量 'per': 3, #發音人選擇, 0為女聲,1為男聲,3為情感合成-度逍遙,4為情感合成-度丫丫,預設為普通女 'spd': 7, #語速,取值0-15,預設為5中語速 }) # 識別正確返回語音二進位制 錯誤則返回dict 參照下面錯誤碼 if not isinstance(result, dict): with open('audio.mp3', 'wb') as f: f.write(result) # 在工程目錄下,就可以看到 audio.mp3 這個檔案了,來聽一聽
語音識別
百度的SDK識別咱們的音訊檔案,就要想辦法轉變成百度SDK可以識別的格式PCM,
可以實現自動化轉換格式並且屢試不爽的工具 : FFmpeg 這個工具的下載地址是 : 連結:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密碼:w6hk
FFmpeg 環境變數配置:
首先你要解壓縮,然後找到bin目錄,我的目錄是 C:\ffmpeg\bin
嘗試一下,是否配置成功:cmd 執行:ffmpeg
看到這個介面就算配置成功了,配置成功有什麼用呢, 這個工具可以將wav wma mp3 等音訊檔案轉換為 pcm 無壓縮音訊檔案
然後我們用命令列對這個 audio.wav 進行pcm格式的轉換然後得到 audio.pcm
命令是 : ffmpeg -y -i audio.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm
百度語音識別SDK的應用:
import os
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 讀取檔案
def get_file_content(filePath):
os.system(f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm")
with open(f"{filePath}.pcm", 'rb') as fp:
return fp.read()
# 識別本地檔案
#asr函式需要四個引數,第四個引數可以忽略,自有預設值,參照一下這些引數是做什麼的
#第一個引數: speech 音訊檔案流 建立包含語音內容的Buffer物件, 語音檔案的格式,pcm 或者 wav 或者 amr。(雖說支援這麼多格式,但是隻有pcm的支援是最好的)
#第二個引數: format 檔案的格式,包括pcm(不壓縮)、wav、amr (雖說支援這麼多格式,但是隻有pcm的支援是最好的)
#第三個引數: rate 音訊檔案取樣率 如果使用剛剛的FFmpeg的命令轉換的,你的pcm檔案就是16000
#第四個引數: dev_pid 音訊檔案語言id 預設1537(普通話 輸入法模型)
res = client.asr(get_file_content('jttqhbc.m4a'), 'pcm', 16000, {
'dev_pid': 1536,
})
print(res.get("result")[0])
如果err_no不是0的話,就參照一下錯誤碼錶
到此百度AI語音部分的呼叫就結束了,是不是感覺很簡