python监听麦克风并调用阿里云的实时语音转文字

import time
import threading
import queue
import sounddevice as sd
import numpy as np
import nls
import sys# 阿里云配置信息
URL = "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1"
TOKEN = "016ca1620aff421da8fac81b9fb52dc5"  # 参考https://help.aliyun.com/document_detail/450255.html获取token
APPKEY = "ahS8ZDaimkpWALHi"  # 获取Appkey请前往控制台:https://nls-portal.console.aliyun.com/applist# Queue to hold the recorded audio data
audio_queue = queue.Queue()# Callback function to capture audio data
def audio_callback(indata, frames, time, status):if status:print(status, file=sys.stderr)audio_queue.put(indata.copy())class RealTimeSpeechRecognizer:def __init__(self, url, token, appkey):self.url = urlself.token = tokenself.appkey = appkeyself.transcriber = Noneself.__initialize_transcriber()def __initialize_transcriber(self):self.transcriber = nls.NlsSpeechTranscriber(url=self.url,token=self.token,appkey=self.appkey,on_sentence_begin=self.on_sentence_begin,on_sentence_end=self.on_sentence_end,on_start=self.on_start,on_result_changed=self.on_result_changed,on_completed=self.on_completed,on_error=self.on_error,on_close=self.on_close,callback_args=[self])self.transcriber.start(aformat="pcm", enable_intermediate_result=True,enable_punctuation_prediction=True, enable_inverse_text_normalization=True)def send_audio(self, audio_data):if self.transcriber:self.transcriber.send_audio(audio_data)def stop_transcription(self):if self.transcriber:self.transcriber.stop()def on_sentence_begin(self, message, *args):print("Sentence begin: {}".format(message))def on_sentence_end(self, message, *args):print("Sentence end: {}".format(message))def on_start(self, message, *args):print("Start: {}".format(message))def on_result_changed(self, message, *args):print("Result changed: {}".format(message))def on_completed(self, message, *args):print("Completed: {}".format(message))def on_error(self, message, *args):print("Error: {}".format(message))def on_close(self, *args):print("Closed: {}".format(args))# 调用阿里云的语音转文字的接口
def recognize_speech(audio_data, recognizer):audio_data = np.concatenate(audio_data)recognizer.send_audio(audio_data.tobytes())# Start the audio stream and process audio data
def start_audio_stream(recognizer):with sd.InputStream(callback=audio_callback, channels=1, samplerate=16000, dtype='int16'):print("Recording audio... Press Ctrl+C to stop.")audio_buffer = []try:while True:while not audio_queue.empty():audio_buffer.append(audio_queue.get())if len(audio_buffer) >= 10:  # 调整音频数据块大小audio_data = np.concatenate(audio_buffer)recognize_speech(audio_data, recognizer)audio_buffer = []  # Clear buffer after sendingtime.sleep(0.1)except KeyboardInterrupt:print("Stopping audio recording.")recognizer.stop_transcription()if __name__ == "__main__":recognizer = RealTimeSpeechRecognizer(URL, TOKEN, APPKEY)start_audio_stream(recognizer)

这段代码实现了一个实时语音转文字系统,使用阿里云的语音转文字服务 (NlsSpeechTranscriber) 来处理从麦克风捕获的音频数据。以下是代码的详细解释:

主要模块和库

  • timethreading:用于处理时间和多线程。
  • queue:用于实现线程间通信的队列。
  • sounddevice (sd):用于从麦克风捕获音频数据。
  • numpy (np):用于处理音频数据数组。
  • nls:阿里云的语音服务库。
  • sys:用于处理系统相关的操作,如错误输出。

阿里云配置信息

URL = "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1"
TOKEN = "016ca1620aff421da8fac81b9fb52dc5"
APPKEY = "ahS8ZDaimkpWALHi"

这些变量存储了阿里云语音服务的配置信息,包括服务的 URL、令牌(TOKEN)和应用密钥(APPKEY)。

音频数据队列

audio_queue = queue.Queue()

用于存储从麦克风捕获的音频数据。

音频数据回调函数

def audio_callback(indata, frames, time, status):if status:print(status, file=sys.stderr)audio_queue.put(indata.copy())

这个回调函数会在音频数据可用时被调用,将捕获到的音频数据复制到队列 audio_queue 中。

RealTimeSpeechRecognizer 类

class RealTimeSpeechRecognizer:def __init__(self, url, token, appkey):self.url = urlself.token = tokenself.appkey = appkeyself.transcriber = Noneself.__initialize_transcriber()

初始化函数,接收 URL、TOKEN 和 APPKEY,并调用内部函数 __initialize_transcriber 初始化语音转文字服务。

def __initialize_transcriber(self):self.transcriber = nls.NlsSpeechTranscriber(url=self.url,token=self.token,appkey=self.appkey,on_sentence_begin=self.on_sentence_begin,on_sentence_end=self.on_sentence_end,on_start=self.on_start,on_result_changed=self.on_result_changed,on_completed=self.on_completed,on_error=self.on_error,on_close=self.on_close,callback_args=[self])self.transcriber.start(aformat="pcm", enable_intermediate_result=True,enable_punctuation_prediction=True, enable_inverse_text_normalization=True)

初始化语音转文字服务并配置相关回调函数。

def send_audio(self, audio_data):if self.transcriber:self.transcriber.send_audio(audio_data)def stop_transcription(self):if self.transcriber:self.transcriber.stop()

用于发送音频数据到阿里云并停止转录。

回调函数

def on_sentence_begin(self, message, *args):print("Sentence begin: {}".format(message))def on_sentence_end(self, message, *args):print("Sentence end: {}".format(message))def on_start(self, message, *args):print("Start: {}".format(message))def on_result_changed(self, message, *args):print("Result changed: {}".format(message))def on_completed(self, message, *args):print("Completed: {}".format(message))def on_error(self, message, *args):print("Error: {}".format(message))def on_close(self, *args):print("Closed: {}".format(args))

这些函数在语音转文字服务的不同事件发生时被调用,打印相关信息。

处理音频数据

def recognize_speech(audio_data, recognizer):audio_data = np.concatenate(audio_data)recognizer.send_audio(audio_data.tobytes())

将音频数据连接成一个数组并发送给阿里云语音转文字服务。

开始音频流并处理音频数据

def start_audio_stream(recognizer):with sd.InputStream(callback=audio_callback, channels=1, samplerate=16000, dtype='int16'):print("Recording audio... Press Ctrl+C to stop.")audio_buffer = []try:while True:while not audio_queue.empty():audio_buffer.append(audio_queue.get())if len(audio_buffer) >= 10:  # 调整音频数据块大小audio_data = np.concatenate(audio_buffer)recognize_speech(audio_data, recognizer)audio_buffer = []  # Clear buffer after sendingtime.sleep(0.1)except KeyboardInterrupt:print("Stopping audio recording.")recognizer.stop_transcription()

这个函数打开音频输入流,开始录音并处理音频数据,将其发送到阿里云进行转录。当用户按下 Ctrl+C 时,停止录音并结束转录。

主程序入口

if __name__ == "__main__":recognizer = RealTimeSpeechRecognizer(URL, TOKEN, APPKEY)start_audio_stream(recognizer)

创建一个 RealTimeSpeechRecognizer 实例并开始录音和处理音频数据。

通过这些步骤,代码实现了从麦克风捕获音频数据并实时发送到阿里云进行语音转文字的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive基础知识(十八):Hive 函数的使用

1. 系统内置函数 1)查看系统自带的函数 hive (hive3)> show functions; Time taken: 0.085 seconds, Fetched: 289 row(s) 2)显示自带的函数的用法 hive (hive3)> desc function upper; OK tab_name upper(str)- Returns str with all characters…

“了解MySQL中的enum枚举数据类型“

目录 # 开篇 1. 创建包含枚举类型的表 2. 插入枚举类型的数据 3. 查询包含枚举类型的表 4. 更新枚举类型的数据 5. 使用枚举类型的好处 注意事项 示例总结 附加 # 开篇 在数据库中,枚举(ENUM)是一种数据类型,用于存储一组…

即插即用篇 | 手把手教你 YOLOv10 添加注意力机制 | 20+ 种全打通!

YOLOv10 添加注意力机制 ! 视频教程地址-哔哩哔哩 文章目录 YOLOv10 添加注意力机制 !注意力机制介绍注意力机制的分类1. SE 注意力模块1.1 原理1.2 代码2. CBAM 注意力模块2.1 原理2.2 代码3. ECA 注意力模块3.1 原理3.2 代码4. CA 注意力模块4.1 原理4.2 代码5. 添加方式�…

构建开源多模态RAG系统

在这个新的冒险中,我们将深入研究使用开源大型语言多模态(LLMM)构建检索增强型生成(RAG)系统的过程。值得注意的是,我们的重点是在不依赖LangChain或Llama索引的情况下实现这一点;相反&#xff…

LabVIEW在机器人研究所中的应用

机器人研究所致力于机器人技术的研究与开发,涵盖工业机器人、服务机器人、医疗机器人等多个领域。研究所需要一个高效、灵活的实验控制和数据采集系统,以进行复杂的机器人实验,并对实验数据进行实时处理和分析。 项目需求 实时控制与监控&am…

Python函数魔术:深入理解18个高级函数特性

今天,我们将一起探索那些让代码瞬间变得优雅而强大的高级函数。准备好,让我们一起揭开它们的神秘面纱吧! 1. map():一招制胜,批量操作 想象一下,你需要给一个数字列表的每个元素加上5。普通的循环是不是让…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(下,结构化剪枝)

文章目录 0. 前言1. torch.nn.utils.prune中的结构化剪枝方法2. PyTorch实例2.1 random_structured2.2 prune.ln_structured 3. 总结 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但…

NC--介绍-未加密加密后-流量抓包对比

免责声明:本节仅做技术交流与学习... 目录 介绍: 用法: 未加密--流量抓包 加密: 攻击端 靶机 抓包分析: 介绍: nc 是一个Linux环境下常用的工具命令,可以用来帮助开发者查询和解决网路问题,通常被认为是 NetCat 工具的缩写,在网络工具…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/ 找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步&…

仓颉编程语言入门

华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。 仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出:你好,仓颉…

ESP32-S3方案应用设备无线交互技术,产品远程控制与语音交互

在物联网和人工智能(AI)技术融合的浪潮中,ESP32-S3芯片以其卓越的性能和多功能性,成为智能家居和工业自动化领域的明星产品。 ESP32-S3是一款基于Xtensa LX6处理器的嵌入式系统级芯片,具有高效、低功耗的特点。集成的Wi-Fi和蓝牙功能&#x…

浔川python代码编辑器——浔川总社部

众所周知, tkinter的Text文本框功能强大, Python自带的IDLE编辑器也是用tkinter编写的。这里作者也用tkinter的Text文本框等控件, 设计功能较齐全的文本编辑器程序。 目标功能: 编辑文本文件 编辑二进制文件 (字符会以转义序列形式显示, 如’abc\xff’) 支持ansi、gbk、utf-8…

《昇思25天学习打卡营第01天|基本介绍》

基本情况 MindSpore昇思是一个全场景深度学习框架 设计目标 MindSpore的设计目标是让深度学习开发更加简单、高效和安全 优点 简单性:MindSpore 有一个直观的API设计,使得新手也能快速上手,同时还支持自动微分。高效性:它针对…

golang中的内存缓存如何避免被GC扫描,BigCache实现原理

GC到底清理的是什么? Golang是函数式编程语言,如果是函数内定义的临时变量,在函数退出时会被自动清理掉不需要GC参与;如果使用了指针,那么即使函数退出了也不会将其清理,这个时候就需要全局的GC来清扫。 …

三大交易所全面恢复 IPO 申请

6月21日晚间,北交所受理了3家企业的IPO申请,这是北交所时隔3个月之后恢复IPO受理。6月20日晚间,沪深交易所各受理了1家IPO申请,这是沪深交易所时隔半年后再次受理IPO。这也意味着,三大交易所IPO受理全部恢复。 6月21日…

致敬企业家精神:比亚迪仰望发布“旷野宣言”

近年来,随着汽车在中国的普及,钟爱越野和探险的车主群体也在飞速发展壮大。 那么问题就来了:为什么会有这么多的人们钟爱越野和探险?越野精神究竟是什么? 作为备受关注的硬派越野车,比亚迪旗下的高端品牌仰…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 08:剩下的就是态度问题

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字,英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

C++基础编程100题-013 OpenJudge-1.3-11 计算浮点数相除的余数

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/11/ 描述 计算两个双精度浮点数a和b的相除的余数&#xff0c;a和b都是正数的。这里余数&#xff08;r&#xff09;的定义是&#xff1a;a k * b r&#xff0c;其中 k是整数&#xff0c; 0 < r < b。…

Spring Boot 快速入门4 ——JSR-303 数据校验

目录 一、前言 二、JSR303 简介 三、使用方法 常用注解 Validated、Valid区别 四、编写测试代码&#xff1a; 1. 实体类添加校验 2. 统一返回类型 3. 测试类 4.我们把异常返回给页面 5.抽离全局异常处理 2. 书写ExceptionControllerAdvice 一、前言 我们在日常开发…