使用Python實(shí)現(xiàn)從麥克風(fēng)獲取音頻并識(shí)別
更新時(shí)間:2025年02月28日 08:30:38 作者:鳳梟香
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)從麥克風(fēng)獲取音頻并識(shí)別功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
python麥克風(fēng)獲取音頻并識(shí)別
麥克風(fēng)獲取
# 打開麥克風(fēng)流
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
設(shè)置參數(shù)
# 錄音參數(shù) FORMAT = pyaudio.paInt16 # 16-bit resolution CHANNELS = 1 # 單聲道 RATE = 16000 # 采樣率 16kHz CHUNK = 1024 # 數(shù)據(jù)塊大小 RECORD_SECONDS = 5 # 錄制時(shí)長(zhǎng) (秒) WAVE_OUTPUT_FILENAME = "output.wav"
讀取數(shù)據(jù)塊
# 循環(huán)讀取數(shù)據(jù)塊
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
阿里語音識(shí)別模型加載
paraformer_path = "./iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn"
fsmn_path = "./iic/speech_fsmn_vad_zh-cn-16k-common-pytorch"
ct_punc_path = "./iic/punc_ct-transformer_cn-en-common-vocab471067-large"
cam_path = "./iic/speech_campplus_sv_zh-cn_16k-common"
model = AutoModel(model=paraformer_path, model_revision="v2.0.4",
vad_model=fsmn_path, vad_model_revision="v2.0.4",
punc_model=ct_punc_path, punc_model_revision="v2.0.4",
spk_model=cam_path, spk_model_revision="v2.0.2",
device="cpu"
)
阿里語音識(shí)別
res = model.generate(input=WAVE_OUTPUT_FILENAME,
batch_size_s=16000,
hotword='魔搭')
整體代碼
import pyaudio
import wave
import threading
import keyboard
from funasr import AutoModel
# 錄音參數(shù)
FORMAT = pyaudio.paInt16 # 16-bit resolution
CHANNELS = 1 # 單聲道
RATE = 16000 # 采樣率 16kHz
CHUNK = 1024 # 數(shù)據(jù)塊大小
WAVE_OUTPUT_FILENAME = "./wav_data/output.wav"
# 初始化 PyAudio
audio = pyaudio.PyAudio()
frames = []
stream = None
recording = False
paraformer_path = "./iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn"
fsmn_path = "./iic/speech_fsmn_vad_zh-cn-16k-common-pytorch"
ct_punc_path = "./iic/punc_ct-transformer_cn-en-common-vocab471067-large"
cam_path = "./iic/speech_campplus_sv_zh-cn_16k-common"
model = AutoModel(model=paraformer_path, model_revision="v2.0.4",
vad_model=fsmn_path, vad_model_revision="v2.0.4",
punc_model=ct_punc_path, punc_model_revision="v2.0.4",
spk_model=cam_path, spk_model_revision="v2.0.2",
device="cpu"
)
print("加載模型完成?。?!")
def start_recording():
"""
開始錄音
"""
global stream, recording
if not recording:
print("開始錄音...")
recording = True
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
record_thread = threading.Thread(target=record_audio)
record_thread.start()
def stop_recording():
"""
停止錄音并進(jìn)行識(shí)別
"""
global stream, recording
if recording:
print("錄音結(jié)束.")
recording = False
stream.stop_stream()
stream.close()
save_audio()
audio.terminate()
print("開始識(shí)別?。?!")
res = model.generate(input=WAVE_OUTPUT_FILENAME,
batch_size_s=16000,
hotword='魔搭')
print("識(shí)別結(jié)束?。?!")
print("識(shí)別結(jié)果:", res)
def record_audio():
"""
錄音功能實(shí)現(xiàn)
"""
while recording:
data = stream.read(CHUNK)
frames.append(data)
def save_audio():
"""
保存錄音文件
"""
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
# 監(jiān)聽 Ctrl 鍵開始錄音
keyboard.add_hotkey('ctrl', start_recording)
# 監(jiān)聽 Alt 鍵結(jié)束錄音
keyboard.add_hotkey('alt', stop_recording)
print("按 Ctrl 開始錄音,按 Alt 結(jié)束錄音")
keyboard.wait() # 保持程序運(yùn)行到此這篇關(guān)于使用Python實(shí)現(xiàn)從麥克風(fēng)獲取音頻并識(shí)別的文章就介紹到這了,更多相關(guān)Python麥克風(fēng)獲取音頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
檢測(cè)python爬蟲時(shí)是否代理ip偽裝成功的方法
這篇文章主要介紹了檢測(cè)python爬蟲時(shí)是否代理ip偽裝成功的方法以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下2019-07-07
python3.6+selenium實(shí)現(xiàn)操作Frame中的頁面元素
這篇文章主要為大家詳細(xì)介紹了python3.6+selenium實(shí)現(xiàn)操作Frame中的頁面元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python實(shí)現(xiàn)按任意鍵繼續(xù)執(zhí)行程序
本文給大家分享的是如何使用Python腳本實(shí)現(xiàn)按任意鍵繼續(xù)執(zhí)行程序的代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-12-12
Python對(duì)列表進(jìn)行排序的5種實(shí)現(xiàn)方式
這篇文章介紹了五種在Python中進(jìn)行排序的方法,包括sort()方法、sorted()函數(shù)、lambda表達(dá)式作為key參數(shù)進(jìn)行排序、operator模塊進(jìn)行排序以及numpy模塊進(jìn)行排序,每種方法都有其適用的場(chǎng)景和優(yōu)勢(shì),可以根據(jù)具體需要選擇最合適的方法2025-12-12

