亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python人工智能之路 之PyAudio 實(shí)現(xiàn)錄音 自動(dòng)化交互實(shí)現(xiàn)問答

 更新時(shí)間:2019年08月13日 09:59:19   作者:DragonFire  
關(guān)于音頻, PyAudio 這個(gè)庫(kù), 可以實(shí)現(xiàn)開啟麥克風(fēng)錄音, 可以播放音頻文件等等。文章介紹了如何使用Python第三方庫(kù)PyAudio進(jìn)行麥克風(fēng)錄音然后自動(dòng)播放已經(jīng)合成的語音實(shí)現(xiàn)語音交互回答,需要的朋友可以參考下

Python 很強(qiáng)大其原因就是因?yàn)樗嫶蟮娜綆?kù) , 資源是非常的豐富 , 當(dāng)然也不會(huì)缺少關(guān)于音頻的庫(kù)

關(guān)于音頻, PyAudio 這個(gè)庫(kù), 可以實(shí)現(xiàn)開啟麥克風(fēng)錄音, 可以播放音頻文件等等,此刻我們不去了解其他的功能,只了解一下它如何實(shí)現(xiàn)錄音的

首先要先 pip 一個(gè) PyAudio

pip install pyaudio

一.PyAudio 實(shí)現(xiàn)麥克風(fēng)錄音

然后建立一個(gè)py文件,復(fù)制如下代碼

import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 16000
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "Oldboy.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    input=True,
    frames_per_buffer=CHUNK)
print("開始錄音,請(qǐng)說話......")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
 data = stream.read(CHUNK)
 frames.append(data)
print("錄音結(jié)束,請(qǐng)閉嘴!")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

嘗試一下,在目錄中出現(xiàn)了一個(gè) Oldboy.wav 文件 , 聽一聽,還是很清晰的嘛

接下來,我們將這段錄音代碼,寫在一個(gè)函數(shù)里面,如果要錄音的話就調(diào)用

建立一個(gè)文件 pyrec.py 并將錄音代碼和函數(shù)寫在內(nèi)

# pyrec.py 文件內(nèi)容
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 16000
RECORD_SECONDS = 2
def rec(file_name):
 p = pyaudio.PyAudio()
 stream = p.open(format=FORMAT,
     channels=CHANNELS,
     rate=RATE,
     input=True,
     frames_per_buffer=CHUNK)
 print("開始錄音,請(qǐng)說話......")
 frames = []
 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
  data = stream.read(CHUNK)
  frames.append(data)
 print("錄音結(jié)束,請(qǐng)閉嘴!")
 stream.stop_stream()
 stream.close()
 p.terminate()
 wf = wave.open(file_name, 'wb')
 wf.setnchannels(CHANNELS)
 wf.setsampwidth(p.get_sample_size(FORMAT))
 wf.setframerate(RATE)
 wf.writeframes(b''.join(frames))
 wf.close()

rec 函數(shù)就是我們調(diào)用的錄音函數(shù),并且給他一個(gè)文件名,他就會(huì)自動(dòng)將聲音寫入到文件中了

二.實(shí)現(xiàn)音頻格式自動(dòng)轉(zhuǎn)換 并 調(diào)用語音識(shí)別

錄音的問題解決了,趕快和百度語音識(shí)別接在一起使用一下:

不管你的錄音有多么多么清晰,你發(fā)現(xiàn)百度給你返回的永遠(yuǎn)是:

{'err_msg': 'speech quality error.', 'err_no': 3301, 'sn': '6397933501529645284'} # 音質(zhì)不清晰

其實(shí)不是沒聽清,而是百度支持的音頻格式PCM搞的鬼

所以,我們要將錄制的wav音頻文件轉(zhuǎn)換為pcm文件

寫一個(gè)文件 wav2pcm.py 這個(gè)文件里面的函數(shù)是專門為我們轉(zhuǎn)換wav文件的

使用 os 模塊中的 os.system()方法 這個(gè)方法是執(zhí)行系統(tǒng)命令用的, 在windows系統(tǒng)中的命令就是 cmd 里面寫的東西,dir , cd 這類的命令

# wav2pcm.py 文件內(nèi)容
import os
def wav_to_pcm(wav_file):
 # 假設(shè) wav_file = "音頻文件.wav"
 # wav_file.split(".") 得到["音頻文件","wav"] 拿出第一個(gè)結(jié)果"音頻文件" 與 ".pcm" 拼接 等到結(jié)果 "音頻文件.pcm"
 pcm_file = "%s.pcm" %(wav_file.split(".")[0])
 # 就是此前我們?cè)赾md窗口中輸入命令,這里面就是在讓Python幫我們?cè)赾md中執(zhí)行命令
 os.system("ffmpeg -y -i %s -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s"%(wav_file,pcm_file))
 return pcm_file

這樣我們就有了把wav轉(zhuǎn)為pcm的函數(shù)了 , 再重新構(gòu)建一次咱們的代碼

這次的返回結(jié)果還挺讓人滿意的嘛

{'corpus_no': '6569869134617218414', 'err_msg': 'success.', 'err_no': 0, 'result': ['老男孩教育'], 'sn': '8116162981529666859'}

拿到語音識(shí)別的字符串了,接下來用這段字符串 語音合成, 學(xué)習(xí)咱們說出來的話

三.語音合成 與 FFmpeg 播放mp3 文件

拿到字符串了,直接調(diào)用synthesis方法去合成吧

這段代碼銜接上一段代碼,成功獲得了 synth.mp3 音頻文件,并且確定了實(shí)在學(xué)習(xí)我們說的話

接下來就是讓我們的程序自動(dòng)將 synth.mp3 音頻文件播放了 其實(shí)PyAudio 有播放的功能,但是操作有點(diǎn)復(fù)雜

所以我們還是選擇用簡(jiǎn)單的方式解決復(fù)雜的問題,就是這么簡(jiǎn)單粗暴,是否還記得FFmpeg 呢?

FFmpeg 這個(gè)系統(tǒng)工具中,有一個(gè) ffplay 的工具用來打開并播放音頻文件的,使用方法大概是: ffplay 音頻文件.mp3

建立一個(gè)playmp3.py文件, 寫一個(gè) play_mp3 的函數(shù)用來播放已經(jīng)合成的語音

# playmp3.py 文件內(nèi)容
import os
def play_mp3(file_name):
 os.system("ffplay %s"%(file_name))

回到主文件,調(diào)用playmp3.py文件中的 play_mp3 函數(shù)

執(zhí)行代碼,當(dāng)你看到 : 開始錄音,請(qǐng)說話......

請(qǐng)大聲的說出: 學(xué)IT 找老男孩教育

然后你就會(huì)聽到,一個(gè)嬌滴滴聲音重復(fù)你說的話

四.簡(jiǎn)單問答

首先我們要把代碼重新梳理一下:

把語音合成 語音識(shí)別部分的代碼獨(dú)立成函數(shù)放到baidu_ai.py文件中

# baidu_ai.py 文件內(nèi)容
from aip import AipSpeech
# 這里的三個(gè)參數(shù),對(duì)應(yīng)在百度語音創(chuàng)建的應(yīng)用中的三個(gè)參數(shù)
APP_ID = "xxxxx"
API_KEY = "xxxxxxx"
SECRET_KEY = "xxxxxxxx"
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def audio_to_text(pcm_file):
 # 讀取文件 , 終于得到了PCM文件
 with open(pcm_file, 'rb') as fp:
  file_context = fp.read()
 # 識(shí)別本地文件
 res = client.asr(file_context, 'pcm', 16000, {
  'dev_pid': 1536,
 })
 # 從字典里面獲取"result"的value 列表中第1個(gè)元素,就是識(shí)別出來的字符串"老男孩教育"
 res_str = res.get("result")[0]
 return res_str
def text_to_audio(res_str):
 synth_file = "synth.mp3"
 synth_context = client.synthesis(res_str, "zh", 1, {
  "vol": 5,
  "spd": 4,
  "pit": 9,
  "per": 4
 })
 with open(synth_file, "wb") as f:
  f.write(synth_context)
 return synth_file

然后把我們的主文件進(jìn)行一下修改

import pyrec # 錄音函數(shù)文件
import wav2pcm # wav轉(zhuǎn)換pcm 函數(shù)文件
import baidu_ai # 語音合成函數(shù),語音識(shí)別函數(shù) 文件
import playmp3 # 播放mp3 函數(shù) 文件
pyrec.rec("1.wav") # 錄音并生成wav文件,使用方式傳入文件名
pcm_file = wav2pcm.wav_to_pcm("1.wav") # 將wav文件 轉(zhuǎn)換成pcm文件 返回 pcm的文件名
res_str = baidu_ai.audio_to_text(pcm_file) # 將轉(zhuǎn)換后的pcm音頻文件識(shí)別成 文字 res_str
synth_file = baidu_ai.text_to_audio(res_str) # 將res_str 字符串 合成語音 返回文件名 synth_file
playmp3.play_mp3(synth_file) # 播放 synth_file

然后就是大展宏圖的時(shí)候了,展開你們的想象力:

res_str 是字符串,如果字符串等于"你叫什么名字"的時(shí)候,我們就要給他一個(gè)回答:我的名字叫老男孩教育

新建一個(gè)FAQ.py的文件然后建立一個(gè)函數(shù)faq:

# FAQ.py 文件內(nèi)容
def faq(Q):
 if Q == "你叫什么名字": # 問題
  return "我的名字是老男孩教育" # 答案
  return "我不知道你在說什么" #問題沒有答案時(shí)返

在主文件中導(dǎo)入這個(gè)函數(shù),并將語音識(shí)別后的字符串傳入函數(shù)中

現(xiàn)在來嘗試一下:"你叫什么名字","你今年幾歲了"

成功了,現(xiàn)在你可以對(duì) FAQ.py 這個(gè)文件進(jìn)行更多的問題匹配了

還是那句話,別玩兒壞了

思考題:

1.如何實(shí)現(xiàn)一直問答不用問一次停一次?

2.問題那么多,是不是要寫這么多問題呢?

3.如果我問你是誰,是不是要重復(fù)也一次 我的名字叫老男孩教育 的答案呢?

總結(jié)

以上所述是小編給大家介紹的Python人工智能之路 之PyAudio 實(shí)現(xiàn)錄音 自動(dòng)化交互實(shí)現(xiàn)問答 ,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式

    Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式

    PyInstaller是一個(gè)十分有用的第三方庫(kù),通過對(duì)源文件打包,Python程序可以在沒有安裝Python的環(huán)境中運(yùn)行,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關(guān)于Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式,需要的朋友可以參考下
    2022-04-04
  • Python二叉樹定義與遍歷方法實(shí)例分析

    Python二叉樹定義與遍歷方法實(shí)例分析

    這篇文章主要介紹了Python二叉樹定義與遍歷方法,結(jié)合實(shí)例形式分析了二叉樹的概念、原理及Python定義、遍歷二叉樹相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python隨機(jī)模塊random的22種函數(shù)(小結(jié))

    python隨機(jī)模塊random的22種函數(shù)(小結(jié))

    這篇文章主要介紹了python隨機(jī)模塊random的22種函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用PyQtGraph繪制精美的股票行情K線圖的示例代碼

    使用PyQtGraph繪制精美的股票行情K線圖的示例代碼

    這篇文章主要介紹了使用PyQtGraph繪制精美的股票行情K線圖的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫

    python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 詳解Python開發(fā)語言中的基本數(shù)據(jù)類型

    詳解Python開發(fā)語言中的基本數(shù)據(jù)類型

    數(shù)據(jù)類型想必大家都知道是什么含義,指的是輸入數(shù)據(jù)的類型,任何數(shù)據(jù)都有明確的數(shù)據(jù)類型。本文主要和大家聊聊Python的三種基本數(shù)據(jù)類型,感興趣的可以了解一下
    2022-10-10
  • Python偽隨機(jī)數(shù)模塊random詳解

    Python偽隨機(jī)數(shù)模塊random詳解

    這篇文章主要為大家詳細(xì)介紹了Python偽隨機(jī)數(shù)模塊random,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 分享給Python新手們的幾道簡(jiǎn)單練習(xí)題

    分享給Python新手們的幾道簡(jiǎn)單練習(xí)題

    這篇文章主要給學(xué)習(xí)Python的新手們分享了幾道簡(jiǎn)單練習(xí)題,文中給出了詳細(xì)的示例代碼供大家學(xué)習(xí)參考,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 使用Pytorch Geometric進(jìn)行鏈接預(yù)測(cè)的實(shí)現(xiàn)代碼

    使用Pytorch Geometric進(jìn)行鏈接預(yù)測(cè)的實(shí)現(xiàn)代碼

    PyTorch Geometric (PyG)是構(gòu)建圖神經(jīng)網(wǎng)絡(luò)模型和實(shí)驗(yàn)各種圖卷積的主要工具,在本文中我們將通過鏈接預(yù)測(cè)來對(duì)其進(jìn)行介紹,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-10-10
  • 用python批量解壓帶密碼的壓縮包

    用python批量解壓帶密碼的壓縮包

    批量解壓縮帶密碼的壓縮包的Python腳本,直接拖入文件夾或壓縮文件即可,支持解壓幾乎所有壓縮文件格式??蓴y帶 Portable
    2021-05-05

最新評(píng)論