Python实时语音识别控制

本文介绍了一种基于Python的实时语音识别系统,该系统利用百度语音识别库进行语音指令识别,并通过PyUserInput库实现对网页滚动的控制。文中详细介绍了所需安装的库及其版本选择建议,展示了如何录制音频并调用百度语音API进行识别。

代码地址如下:
http://www.demodashi.com/demo/12946.html

Python实时语音识别控制

概述

本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音识别,最后检测识别结果,利用 PyUserInput 库提供的方法模拟控制web页面滚动。
百度语音识别为开发者提供业界优质且免费的语音服务,通过场景识别优化,为车载导航,智能家居和社交聊天等行业提供语音解决方案,准确率达到90%以上,让您的应用绘“声”绘色。

百度语音AI

准备工作

安装百度语音识别SDK

pip install baidu-aip

安装Python音频处理库 PyAudio

python -m pip install pyaudio

安装鼠标控制库 PyUserInput

pip install pyuserinput

PyUserInput 库依赖另外两个库 pywin32pyHook ,需要单独安装。
安装方法可以参考下面这篇文章:Win10 Python3.5安装PyUserInput

令附文中提到的资源下载链接:lfd-pythonlibs

另外文中提到的两个包, 需要根据自己的系统和python版本来选择。

如果系统是64位的,就要选择带 amd64 的。

如果python版本为python3.7的,就要选择带 cp37 的。

比如:pywin32-223-cp37-cp37m-win_amd64.whl
pyHook-1.5.1-cp37-cp37m-win_amd64.whl

申请百度开发者帐号

参考下面链接中的文章注册百度帐号,完成开发者认证,创建应用,获取密钥
百度AI开放平台接入流程

用Pyaudio库录制音频

Pyaudio 是一个非常强大的音频处理库,简单几行代码即可实现音频播放,录制等功能.
百度语音识别API支持的语音格式有: pcm(不压缩)wav(不压缩,pcm编码)amr(压缩格式).
推荐 pcm , 采样率: 16000 固定值, 编码: 16bit , 位深: 单声道 .百度服务端会将非pcm格式, 转为pcm格式, 因此使用wav, amr会有额外的转换耗时.
为了实现实时语音识别功能, 这里通过pyaudio录制一段wav格式的音频, 报文成wav音频文件, 供后续识别时调用.

# 用Pyaudio库录制音频
#   out_file:输出音频文件名
#   rec_time:音频录制时间(秒)
def audio_record(out_file, rec_time):
    CHUNK = 1024
    FORMAT = pyaudio.paInt16 #16bit编码格式
    CHANNELS = 1 #单声道
    RATE = 16000 #16000采样频率
    
    p = pyaudio.PyAudio()
    # 创建音频流 
    stream = p.open(format=FORMAT, # 音频流wav格式
                    channels=CHANNELS, # 单声道
                    rate=RATE, # 采样率16000
                    input=True,
                    frames_per_buffer=CHUNK)

    print("Start Recording...")

    frames = [] # 录制的音频流
    # 录制音频数据
    for i in range(0, int(RATE / CHUNK * rec_time)):
        data = stream.read(CHUNK)
        frames.append(data)
    
    # 录制完成
    stream.stop_stream()
    stream.close()
    p.terminate()

    print("Recording Done...")

    # 保存音频文件
    wf = wave.open(out_file, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()

调用百度语音API

# 读取paudio录制好的音频文件, 调用百度语音API, 设置api参数, 完成语音识别
#    client:AipSpeech对象
#    afile:音频文件
#    afmt:音频文件格式(wav)
def aip_get_asrresult(client, afile, afmt):
    # 选项参数:
    # cuid    String  用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
    # dev_pid String  语言类型(见下表), 默认1537(普通话 输入法模型)
    # 识别结果已经被SDK由JSON字符串转为dict
    result = client.asr(get_file_content(afile), afmt, 16000, {"cuid": CUID, "dev_pid": DEV_PID,})
    #print(result)
    # 如果err_msg字段为"success."表示识别成功, 直接从result字段中提取识别结果, 否则表示识别失败
    if result["err_msg"] == "success.": 
        #print(result["result"])
        return result["result"]
    else:
        #print(result["err_msg"])
        return ""

dev_pid 参数列表

dev_pid语言模型是否有标点备注
1536普通话(支持简单的英文识别)搜索模型无标点支持自定义词库
1537普通话(纯中文识别)输入法模型有标点不支持自定义词库
1737英语有标点不支持自定义词库
1637粤语有标点不支持自定义词库
1837四川话有标点不支持自定义词库
1936普通话远场远场模型有标点不支持

控制(鼠标)页面滚动

# 控制鼠标滚动
def mouse_control(dir_tr):
    MOVE_DX = 5 # 每次滚动行数
    ms = PyMouse()
    horizontal = 0
    vertical = 0
    if dir_tr.find("上") != -1: # 向上移动
        vertical = MOVE_DX
        #print("vertical={0}, 向上".format(vertical))
    elif dir_tr.find("下") != -1: # 向下移动
        vertical = 0 - MOVE_DX
        #print("vertical={0}, 向下".format(vertical))
    elif dir_tr.find("左") != -1: # 向左移动
        horizontal = 0 - MOVE_DX
        #print("horizontal={0}, 向左".format(horizontal))
    elif dir_tr.find("右") != -1: # 向右移动
        horizontal = MOVE_DX
        #print("horizontal={0}, 向右".format(horizontal))

    #print("horizontal, vertical=[{0},{1}]".format(horizontal, vertical))
    # 通过scroll(vertical, horizontal)函数控制页面滚动
    # 另外PyMouse还支持模拟move光标,模拟鼠标click,模拟键盘击键等
    ms.scroll(vertical, horizontal) 

完成实时语音识别控制

while(True):
    # 请说出语音指令,例如["向上", "向下", "向左", "向右"]
    print("\n\n==================================================")
    print("Please tell me the command(limit within 3 seconds):")
    #print("Please tell me what you want to identify(limit within 10 seconds):")
    audio_record(AUDIO_OUTPUT, 3) # 录制语音指令
    print("Identify On Network...")
    asr_result =  aip_get_asrresult(client, AUDIO_OUTPUT, AUDIO_FORMAT) # 识别语音指令
    if len(asr_result) != 0: # 语音识别结果不为空,识别结果为一个list
        print("Identify Result:", asr_result[0])
        print("Start Control...")
        mouse_control(asr_result[0]) # 根据识别结果控制页面滚动
        print("Control End...")
        if asr_result[0].find("退出") != -1: # 如果是"退出"指令则结束程序
            break;
        time.sleep(1) # 延时1秒

程序运行截图

语音识别

程序运行截图

语音控制

程序运行截图

项目内文件截图

项目内文件截图
Python实时语音识别控制

代码地址如下:
http://www.demodashi.com/demo/12946.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

### Python 实时语音识别与翻译的技术方案及库 Python 提供了多种库和工具,能够实现从语音识别到翻译的完整流程。以下是一些常用的库和技术方案: #### 1. **语音识别库** - **SpeechRecognition** 是一个功能全面且易于使用的 Python 语音识别库,支持多种语音识别引擎和 API,如 Google Web Speech API、Microsoft Bing Voice Recognition 等[^1]。 - **Vosk** 是一个离线语音识别库,适合需要在没有网络连接的情况下进行语音识别的应用场景[^2]。 #### 2. **翻译库** - **Googletrans** 是一个基于 Google Translate API 的免费翻译库,可以轻松地将文本从一种语言翻译成另一种语言[^3]。 - **DeepL** 是一个高质量的翻译服务,可以通过其官方 API 进行集成[^4]。 #### 3. **实时语音识别与翻译的实现方案** - **结合 SpeechRecognition 和 Googletrans**:通过 `SpeechRecognition` 库捕获并识别用户的语音输入,然后使用 `Googletrans` 将识别结果翻译为目标语言[^5]。 ```python import speech_recognition as sr from googletrans import Translator recognizer = sr.Recognizer() translator = Translator() def recognize_and_translate(audio_file, target_language="zh-cn"): with sr.AudioFile(audio_file) as source: audio_data = recognizer.record(source) text = recognizer.recognize_google(audio_data, language="en-US") translated_text = translator.translate(text, dest=target_language).text return text, translated_text if __name__ == "__main__": result = recognize_and_translate("example.wav") print(f"Original Text: {result[0]}") print(f"Translated Text: {result[1]}") ``` - **结合百度语音识别和翻译 API**:利用百度的 AipSpeech 库进行语音识别,并通过其翻译 API 完成翻译任务。 ```python from aip import AipSpeech APP_ID = '你的APP_ID' API_KEY = '你的API_KEY' SECRET_KEY = '你的SECRET_KEY' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def audio_recog(file_path): with open(file_path, 'rb') as fp: audio_content = fp.read() result = client.asr(audio_content, 'wav', 16000, {'dev_pid': 1537}) return result if __name__ == '__main__': recognition_result = audio_recog("audio.wav") print(recognition_result) ``` #### 4. **实时录音与处理** - **PyAudio** 是一个用于录制和播放音频的库,可以与 `SpeechRecognition` 结合使用,实现实时录音和语音识别[^3]。 ```python import pyaudio import wave def record_audio(output_file, duration=5, sample_rate=16000, chunk=1024, channels=1): p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paInt16, channels=channels, rate=sample_rate, input=True, frames_per_buffer=chunk) frames = [] for _ in range(0, int(sample_rate / chunk * duration)): data = stream.read(chunk) frames.append(data) stream.stop_stream() stream.close() p.terminate() wf = wave.open(output_file, 'wb') wf.setnchannels(channels) wf.setsampwidth(p.get_sample_size(pyaudio.paInt16)) wf.setframerate(sample_rate) wf.writeframes(b''.join(frames)) wf.close() if __name__ == "__main__": record_audio("recorded_audio.wav") ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值