人工智能初識,百度AI

一.人工智能初識

什麼是智能

咱們一般把人稱爲智慧生物,那麼"智慧生物的能力"就是所謂的"人工智能"html

咱們有什麼能力?python

聽,說,看,理解,思考,情感等等....程序員

什麼是人工智能

顧名思義就是由人創造的"智慧能力",一樣具有,據說看理解等能力web

聽=語音識別算法

說=語音合成windows

看=圖像視頻文字識別api

理解=語言(文字)圖像視屏理解等邏輯處理ide

思考=理解後的邏輯處理函數

一個簡單的問答

問題:你叫什麼名字?工具

答案:個人名字叫栗子

回答者:"聽, 看"到問題,經過大腦進行問題的"理解"

回答者得到答案後:"說,寫"問題答案給提問者

這裏的聽就是語音識別,理解就是語言理解

目前的人工智能作了什麼?

語音識別:小米的小愛同窗,蘋果的siri,微軟的Cortana
語音合成:小米的小愛同窗,蘋果的siri,微軟的Cortana
圖像識別:交通攝像頭拍違章,刷臉解鎖手機等
視頻識別:抖音內容審覈,視頻社交APP的審覈機制
文字識別:從身份證照片提取身份證號碼,掃一掃翻譯
語義理解:智能問答機器人,也包含小米的小愛同窗,蘋果的siri,微軟的Cortana

咱們身邊的人工智能

銀行辦卡刷臉就行

車輛違章有牌就跑不了

違法犯罪路過天眼等於自投羅網

「小愛同窗」,」哎~」,」打開電視」,」好的!」
「歡迎使用10010智能語音系統」,」我還有多少話費」,」您的話費餘額爲0.01元」
掃一掃翻譯看不懂的文字(支持26國語言)

二.百度AI

此篇是人工智能應用的重點,只用現成的技術不作底層算法,也是讓初級程序員快速進入人工智能行業的捷徑

目前市面上主流的AI技術提供公司有不少,好比百度,阿里,騰訊,主作語音的科大訊飛,作只能問答的圖靈機器人等等

這些公司投入了很大一部分財力物力人力將底層封裝,提供應用接口給咱們,尤爲是百度,徹底免費的接口

既然百度這麼仗義,我們就不要浪費掉怎麼好的資源,從百度AI入手,開啓人工智能之旅

開啓人工智能技術的大門 : http://ai.baidu.com/

看看我大百度的AI大法,這些技術所有都是封裝好的接口,看着就爽

接下來我們就一步一步的操做一下

註冊百度帳號

首先進入控制檯,註冊一個百度的帳號(百度帳號通用)

開通一下咱們百度AI開放平臺的受權

而後找到已開通服務中的百度語音

走到這裏,想必已經知道我們要從語音入手了,語音識別和語音合成

建立語音引用

打開百度語音,進入語音應用管理界面,建立一個新的應用 

 

建立語音應用App

 

應用名稱:能夠隨意寫

應用類型:這裏隨便選擇,暫時選擇學習辦公

接口選擇:默認勾選了語音識別和語音合成。在天然語言處理中,所有選擇。下面會用到!

語言包名:選擇不須要,由於接下來是用純python操做!

應用描述:寫上一些描述,或者感人的話,都行!

 

回到應用列表咱們能夠看到已建立的應用了

這裏面有三個值 AppID , API Key , Secret Key 記住能夠從這裏面看到 , 在以後的學習中咱們會用到

好了 百度語音的應用已經建立完成了 接下來 我會用Python 代碼做爲實例進行應用及講解

語音合成

安裝SDK

首先我們要 pip install baidu-aip 安裝一個百度人工智能開放平臺的Python SDK實在是太方便了,這也是爲何咱們選擇百度人工智能的最大緣由

點擊左側的技術文檔

點擊左邊的語言合成->SDK文檔->Python SDK

 

請嚴格按照文檔裏描述的參數進行開發。請注意如下幾個問題:

  1. 合成文本長度必須小於1024字節,若是本文長度較長,能夠採用屢次請求的方式。切忌文本長度超過限制。

  2. 語音合成 rest api不限制調用量,可是初始的QPS爲100,若是默認配額不能知足您的業務需求,請從控制檯中申請提升配額,咱們會在兩個工做日內完成審批

  3. 必填字段中,嚴格按照文檔描述中內容填寫。

 

語音合成 Python SDK目錄結構

├── README.md
├── aip                   //SDK目錄
│   ├── __init__.py       //導出類
│   ├── base.py           //aip基類
│   ├── http.py           //http請求
│   └── speech.py //語音合成
└── setup.py              //setuptools安裝

 

支持Python版本:2.7.+ ,3.+

安裝使用Python SDK有以下方式:

  • 若是已安裝pip,執行pip install baidu-aip便可。
  • 若是已安裝setuptools,執行python setup.py install便可。

 

打開windows的cmd窗口,輸入命令 pip3 install baidu-aip

我已經安裝好了,效果以下:

新建AipSpeech

AipSpeech是語音合成的Python SDK客戶端,爲使用語音合成的開發人員提供了一系列的交互方法。

參考以下代碼新建一個AipSpeech:

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)

 

在上面代碼中,常量APP_ID在百度雲控制檯中建立,常量API_KEYSECRET_KEY是在建立完畢應用後,系統分配給用戶的,均爲字符串,用於標識用戶,爲訪問作簽名驗證,可在AI服務控制檯中的應用列表中查看。

 

打開Pycharm,新建一個目錄ai

建立文件 baidu_ai.py

代碼以下:

import time
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

 

將前面提到的AppID,API Key,Secret Key,複製到對應位置。

上面的id和KEY,後5位我改了,複製個人也沒有用!呵呵!

請求說明

  • 合成文本長度必須小於1024字節,若是本文長度較長,能夠採用屢次請求的方式。文本長度不可超過限制

舉例,要把一段文字合成爲語音文件:

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

 修改 baidu_ai.py

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

執行代碼,會看到當前目錄出現了一個auido.mp3文件,打開播放器,聽一下聲音。

我用QQ影音,打開正常

 

技術上,代碼上任何的疑惑,均可以從官方文檔中獲得答案

baidu-aip Python SDK 語音合成技術文檔 : https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top

剛纔咱們作了一個語音合成的例子,就用這個例子來展開說明

先來看第一段代碼

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

這是與百度進行一次加密校驗 , 認證你是合法用戶 合法的應用

AipSpeech 是百度語音的客戶端 認證成功以後,客戶端將被開啓,這裏的client 就是已經開啓的百度語音的客戶端了

再來看第二段代碼:

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 若是上面的三個參數APP_ID,API_KEY,SECRET_KEY填寫正確的話,res就是我們的音頻文件流
# 若是返回失敗的話,就會報錯!
print(result)

# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

 返回樣例:

// 成功返回二進制文件流
// 失敗返回
{
    "err_no":500,
    "err_msg":"notsupport.",
    "sn":"abcdefgh",
    "idx":1
}

 

用百度語音客戶端中的synthesis方法,並提供相關參數

成功能夠獲得音頻文件,失敗則返回一段錯誤信息

重點看一下 synthesis 這個方法 , 從 https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top 來得到答案吧

從參數入手分析:

result  = client.synthesis(
    '你好百度', # text: 合成的文本,使用UTF-8編碼,請注意文本長度必須小於1024字節
    'zh',  # lang: 語言,中文:zh 英文:en
    1,  # ctp: 客戶端信息這裏就寫1,寫別的很差使,至於爲何我們之後再解釋
    {
    'vol': 5,  # 合成音頻文件的準音量
    'spd':4,  # 語速 取值0-9,默認爲5 中語速
    'pit':8,  # 語調音調,取值0-9,默認爲5 中語調
    'per':4, # 發音人選擇,0爲女生,1爲男生,3爲情感合成-度逍遙,4爲情感合成-度丫丫,默認爲普通女
    }
)

 按照這些參數,重新發起一個語音合成

with open('auido.mp3', 'wb') as f:
    f.write(result)

 語音識別

點擊左邊的百度語言->語音識別->Python SDK

建議使用pcm,由於它比較好實現。而另外2種語言格式,有很是高的要求,只有專業級別的設備才能錄製。它才能達到百度的要求。

 

哎,每次到這裏,我都默默無語淚兩行,聲音這個東西格式太多樣化了,若是要想讓百度的SDK識別我們的音頻文件,就要想辦法轉變成百度SDK能夠識別的格式PCM

FFmpeg

目前已知能夠實現自動化轉換格式而且屢試不爽的工具 : FFmpeg 這個工具的下載地址是 : 連接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密碼:w6hk

或者官網下載

http://ffmpeg.org/download.html

點擊windows圖標,點擊Builds

個人電腦是64位系統,選擇64位,必定要選擇Shared,最後點擊下載。

 

 

FFmpeg 環境變量配置:

首先你要解壓縮,而後找到bin目錄,個人目錄是 C:\ffmpeg\bin

而後 以 windows 10 爲例,配置環境變量

 

添加環境變量

 

若是沒搞明白的話,我也沒有辦法了,這麼清晰這麼明白

嘗試一下,是否配置成功

看到這個界面就算配置成功了,配置成功有什麼用呢, 這個工具能夠將wav wma mp3 等音頻文件轉換爲 pcm 無壓縮音頻文件

這個時候,必定要關閉Pycharm,不然Pycharm識別不到。

再次開啓Pycharm

 

作一個測試,首先要打開windows的錄音機,錄製一段音頻(說普通話)

如今假設錄製的音頻文件的名字爲 audio.wav 放置在 D:\DragonFireAudio\

而後咱們用命令行對這個 audio.wav 進行pcm格式的轉換而後獲得 audio.pcm

命令是 :

ffmpeg -y  -i audio.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm

而後打開目錄就能夠看到pcm文件了

注意事項

若是須要使用實時識別、長語音、喚醒詞、語義解析等其它語音功能,請使用Android或者iOS SDK 或 Linux C++ SDK 等。

  1. 請嚴格按照文檔裏描述的參數進行開發,特別請關注原始錄音參數以及語音壓縮格式的建議,不然會影響識別率,進而影響到產品的用戶體驗。

  2. 目前系統支持的語音時長上限爲60s,請不要超過這個長度,不然會返回錯誤。

 

pcm文件已經獲得了,趕忙進入正題吧

請求說明

舉例,要對段保存有一段語音的語音文件進行識別:

# 讀取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 識別本地文件
client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
    'dev_pid': 1536,
})

 

看參數,主要用到的是rate和1536

上圖的16000表示採樣率

1536表示能識別中文和英文,它的容錯率比較高

1537必須是標準的普通話,帶點地方口音是不行的。

因此建議使用1536

打開win10自帶的錄音機,錄製一段聲音,好比:你叫什麼呀

必定要帶一個呀字,下面的代碼執行會輸出10個結果,不然只有一個!

注意:筆記本的麥克風在攝像頭的2邊,因此錄製的時候,必定要對着攝像頭!

 

默認爲m4a格式的,重命名爲whatyouname.m4a,將文件放入ai目錄

修改baidu_ai.py,內容以下:

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 讀取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 識別本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})
print(a)

 

注意上面的id和key。文件名爲whatyouname.wav

執行文件,輸出:

{'sn': '7436726851526824321', 'err_no': 3301, 'err_msg': 'speech quality error.'}

 

返回錯誤'err_no': 3301

看文檔

找下面對應的3301,表示聲音不清晰!

再仔細用播放器,播放一下剛纔的聲音,挺清晰的呀!

這裏報3301不是由於聲音不清晰,而是格式不支持。

使用os模塊調用ffmpeg實現轉碼

代碼以下:

import os
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 讀取文件
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    os.system(cmd_str)  # 調用系統命令ffmpeg,傳入音頻文件名便可
    with open(filePath + ".pcm", 'rb') as fp:
        return fp.read()

# 識別本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})
print(a)

 

執行輸出,效果以下:

 

 

上面紅色文件,不是報錯,而是轉碼過程

主要看err_msg是什麼,這裏顯示success,表示成功。

在ai目錄下,會多出一個文件whatyouname.m4a.pcm。這個文件纔是剛纔真正發給百度的語言文件

返回的結果是一個字典,第一個結果,通常是最正確的。取第一個,就能夠了!

 

接下來,就須要從字典取值。字典取值,不要用如下這種方法:

print(a['result'])

 

爲何呢?若是key不存在,會直接報錯!畢竟報錯,是要崩潰的...

因此建議使用get方法,將最後一行的print(a),修改成如下內容:

import os
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 讀取文件
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    os.system(cmd_str)  # 調用系統命令ffmpeg,傳入音頻文件名便可
    with open(filePath + ".pcm", 'rb') as fp:
        return fp.read()

# 識別本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})

if a.get('result'):
    print(a.get('result')[0])

 

執行輸出:

從結果上來看就只有一個了。

low版問答系統

whatyouname.m4a,是已經錄製好的音頻

 

import os
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'


client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 讀取音頻文件函數
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    os.system(cmd_str)  # 調用系統命令ffmpeg,傳入音頻文件名便可
    with open(filePath + ".pcm", 'rb') as fp:
        return fp.read()

# 識別本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})

# if a.get('result'):
#     print(a.get('result')[0])

q = a.get('result')[0]  # 識別音頻文件的內容
a = "我不知道你在說什麼"
if q == "你叫什麼名字":
    a = "我叫小青龍"

# 配置音頻流,a就是指定的文本
result  = client.synthesis(a, 'zh', 1, {
    'spd': 4, 'vol': 5, 'pit': 8, 'per': 4
})

# 寫入文件
if not isinstance(result, dict):
    with open('audio.mp3', 'wb') as f:
        f.write(result)

    os.system("audio.mp3")
View Code

 

os.system("audio.mp3") ,它會自動調用windows的默認音頻軟件,並打開文件audio.mp3

 

執行程序,會自動彈出音樂播放器,內容是: 我叫小青龍

 

若是須要定義別的問題,須要從新錄製,並在py文件中定製問題。很low是吧,後續會講web版的問答系統!

 短文本類似度

短文本類似度接口用來判斷兩個文本的類似度得分。

 

文檔連接:

https://ai.baidu.com/docs#/NLP-Python-SDK/6dfe1b04

text1 = "浙富股份"

text2 = "萬事通自考網"

""" 調用短文本類似度 """
client.simnet(text1, text2);

""" 若是有可選參數 """
options = {}
options["model"] = "CNN"

""" 帶參數調用短文本類似度 """
client.simnet(text1, text2, options)
View Code

 

查看參數

短文本類似度返回示例

{
    "log_id": 12345,
    "texts":{
        "text_1":"浙富股份",
        "text_2":"萬事通自考網"
    },
    "score":0.3300237655639648 //類似度結果
},
View Code

 

舉例:

新建一個文件baidu_nlp.py

from aip import AipNlp

APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

nlp_client = AipNlp(APP_ID,API_KEY,SECRET_KEY)

""" 調用短文本類似度 """
res = nlp_client.simnet("你叫什麼名字","你的名字叫什麼")
print(res)

# 若是類似度達到70%
if res.get("score") > 0.7:
    print("我叫青龍")
View Code

 

執行輸出:

{'log_id': 4522060321660798564, 'texts': {'text_2': '你的名字叫什麼', 'text_1': '你叫什麼名字'}, 'score': 0.864488}
我叫青龍

這裏的score是類似度,這裏表示86.4%。若是是1,表示100%

 

那麼就可使用短文本類似度,來回答問題了

修改baidu_ai.py,導入AipNlp,修改問題部分,代碼以下:

import os
from aip import AipSpeech
from aip import AipNlp

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY)

# 讀取音頻文件函數
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    os.system(cmd_str)  # 調用系統命令ffmpeg,傳入音頻文件名便可
    with open(filePath + ".pcm", 'rb') as fp:
        return fp.read()

# 識別本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})

# if a.get('result'):
#     print(a.get('result')[0])

q = a.get('result')[0]  # 識別音頻文件的內容
a = "我不知道你在說什麼"
# 當類似度達到70%時
if nlp_client.simnet(q, "你的名字叫什麼").get("score") >= 0.7:
    a = "我叫小青龍"

# 配置音頻流,a就是指定的文本
result  = client.synthesis(a, 'zh', 1, {
    'spd': 4, 'vol': 5, 'pit': 8, 'per': 4
})

# 寫入文件
if not isinstance(result, dict):
    with open('audio.mp3', 'wb') as f:
        f.write(result)

    os.system("audio.mp3")
View Code

 

執行程序,會自動打開音頻文件,說出: 我叫小青龍

 參考文檔:https://www.cnblogs.com/DragonFire/p/9208195.html

相關文章
相關標籤/搜索