如何在我的 Flask 应用程序中连接浏览器的麦克风?

2023-12-13

我正在使用语音识别模块通过语音识别搜索查询,然后打开显示查询结果的 google chrome 页面。基本上,它是谷歌语音搜索的替代品,但它是通过终端启动的。但我想把它做成一个网络应用程序。我创建了烧瓶应用程序:

- 搜索(目录)

-search.py (opens a tab using terminal directly/works independently)

-app.py (main flask app)

-static(directory)

-templates (directory)

但由于该应用程序托管在服务器上,我的 search.py​​ 从服务器麦克风获取输入(在本例中是我的 PC 麦克风/但在 AWS 上,它无法工作)。如何从客户端浏览器获取输入并在 voice.py 中使用它?我应该删除这个文件并直接在我的主应用程序中使用它吗?执行此功能的最有效方法是什么?

如果有人想知道的话,这是我的 search.py​​ 脚本: 它通过终端运行。

import subprocess

import speech_recognition as sr

browser_exe_path = "..."

r=sr.Recognizer()
with sr.Microphone() as source:
    print("Listening!")
    audio=r.listen(source)

    try:
        s_name=r.recognize_google(audio)
        """
        Code to open browser and search the query
        """
    except:
        print("Error!")

这两种可能是最好的方法:

  • 制作您自己的语音识别工具的模块/包并将其导入到您的 Flask 应用程序中
  • 将功能本身集成到应用程序中。

如果您打算再次使用它,最好将语音识别与网络应用程序分开,因为这样您就可以再次使用它。但是,如果将其与应用程序的视图函数等集成,您可以对其进行更多自定义。另外,您可能应该将所有 search.py​​ 逻辑放在一个函数或类中,以便您可以调用它。否则,如果您按现在的样子导入它,它将立即运行。

无论哪种方式,您都需要一个如下所示的语音结构:

  1. 用户提交一些语音,可以是现场语音、录制语音或文件形式。我们将此语音文件称为speech.wav(或任何其他文件类型,您选择)
  2. speech.wav由您的语音识别工具读取和解析。它可能返回一个单词列表,或者只是一个字符串。我们称之为output.
  3. output返回到网页并呈现为供用户阅读的内容。

我建议从表单提交开始,如果您可以让它发挥作用,您可以尝试使用 AJAX 进行实时语音识别。从基础开始,只需要求用户添加音频文件或录制音频文件。如果在桌面上,以下脚本将打开文件浏览器;如果在 iOS 或 Android 上,则让用户进行录制。

  <input name="audio-recording" type="file" accept="audio/*" id="audio-recording" capture>
  <label for="audio-recording">Add Audio</label>

  <p id="output"></p>

因此,一旦他们在那里获得了文件,您就需要访问它。您可能想要自定义它,但这里有一个基本脚本,它将控制上述音频。该脚本的功劳归功于谷歌开发人员。

<script>
  const recorder = document.getElementById('audio-recording');

  recorder.addEventListener('change', function(e) {
    const file = e.target.files[0];
    const url = URL.createObjectURL(file);
    // Do something with the audio file.
    
  });
</script>

哪里说的// Do something with the audio file,发出 AJAX GET 请求可能是一个很酷的主意,该请求将返回句子。但这是真正棘手的地方,因为您需要在参数中向 Flask 提供信息,而不是音频文件。但是因为我们已经将文件存在的位置存储在常量中url在我们的脚本中,我们可以使用它作为参数,例如:

from flask import request, jsonify
import search # this is your own search.py that you mentioned in your question.

@app.route("/process_audio")
def process_audio():
    url = request.args.get("url")
    text = search.a_function(url) #returns the text from the audio, which you've done, so I've omitted code
    if text != None
        return jsonify(result="success",text=text)
    else:
        return jsonify(result="fail")

这将以 JSON 格式返回数据,这就像客户端 js 和服务器端 python 之间的桥梁。它可能看起来像这样:

{
 "result":"success",
 "text":"This is a test voice recording"
}

然后,您需要一些 jQuery(或任何其他 js 库,但 jQuery 很好而且很简单)来管理 AJAX 调用:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type=text/javascript>
        const recorder = document.getElementById('audio-recording');

  recorder.addEventListener('change', function(e) {
    const file = e.target.files[0];
    const url = URL.createObjectURL(file);
    $.getJSON('/process_audio', {
          url: url 
        }, function(data) {
          $("#output").text(data.text);
            });
            return false;
          
    </script>

对于任何包围错误,我们深表歉意。因此,应该将一些 JSON 的 GET 请求发送到“/audio_process”的 URL,这将返回我们之前看到的内容,然后它将输出"text"JSON 的"#output"HTML 选择器。

可能需要一些调试,但这似乎可以解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在我的 Flask 应用程序中连接浏览器的麦克风? 的相关文章

  • 为什么从 Pandas 1.0 中删除了日期时间?

    我在 pandas 中处理大量数据分析并每天使用 pandas datetime 最近我收到警告 FutureWarning pandas datetime 类已弃用 并将在未来版本中从 pandas 中删除 改为从 datetime 模块
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • Strapi 在用户注册时返回错误代码 400

    每次我尝试注册测试用户时 Strapi 用户注册都会返回错误 400 Bad Request 但用户确实是在 Users 集合中创建的 我使用的是标准的 Strapi 电子邮件插件 不是发送网格插件 每次我注册用户时 该插件不会发送电子邮件
  • 如何在 Pandas 中绘制条形堆栈?

    目标是使用 Pandas 内置绘图模块绘制如下所示堆叠的条形图 然而 我找不到任何试图实现类似目标的类似例子 我正在工作的示例代码如下 import pandas as pd import matplotlib import matplot
  • 语法错误:JSON 中出现意外的标记

    我正在使用 http get 执行 GET 请求 响应采用 JSON 格式 但某些字符采用 HTML 编码 示例如下 编码为 quot quot description quot quot invalid quot quot errorCo
  • iCloud 会同步所有应用程序的 Document 文件夹中的文件吗?

    我有一个关于 iCloud 的问题 希望您能帮助我 我已阅读iCloud 文档好几次了 我从该文档中得到的是 iCloud 不会将应用程序的文档文件夹更新到 iCloud 服务器 除非该应用程序有配置的 iCloud 权利 但是 我总是看到
  • C 错误“可变大小的对象可能未初始化”[重复]

    这个问题在这里已经有答案了 可能的重复 C 编译错误 可变大小的对象可能未初始化 我遇到了一个问题 因为我的编译器仍然给我一个错误 可变大小的对象可能未初始化 我的代码有什么问题吗 int x y n i printf give me th
  • 使用 VBA 识别并删除电子表格中的不间断空格字符

    好吧 我已经创建了 在 StackOverflow 的最佳帮助下 一个用户定义函数 它标识给定单元格内特定的 不可见的 不可打印的控制字符 然后 UDF 创建一个消息框 告诉用户已找到并删除了哪些字符 这些函数不会费心去定位 32 个 AS
  • 设备设置独立字体大小

    在开发我的应用程序时 我意识到如果有人改变了设备的正常字体大小 我的应用程序字体大小也会改变 并且会破坏我设计的一些视觉效果 所以我想问是否有一种方法可以独立于设备设置来修复文本大小 Thanks 查看源码DisplaySettings j
  • 在 Application Insights 中查看 POST 请求正文

    是否可以在 Application Insights 中查看 POST 请求正文 我可以看到请求详细信息 但看不到应用程序见解中发布的有效负载 我必须用一些编码来跟踪这个吗 我正在构建 MVC core 1 1 Web Api 你可以简单地
  • 仅 while 循环的最后一次迭代保存

    我有这个代码 symbolslist 100 200 300 400 500 600 700 800 900 1000 1500 2000 3000 4000 5000 7000 10000 i 0 while i
  • OnHeapColumnVector putLong NullPointerException

    我正在使用spark sql v4 5 0 我必须读取 s3 文件 如下所示 val df sc parallelize Array 2019 01 01 546209022 2018 10 12 2020 05 19 02 17 59 2
  • 如何在一定数量的输出后终止脚本

    我有一个 bash 脚本 它执行一些处理 记录操作 并将其写入文件 它持续运行直到用户终止它 我想要做的是自动终止 连续运行此脚本 直到它将文件填充到用户指定的特定大小或行数 这可能吗 我想不出如何做到这一点 因为如果这个脚本是连续的 我就
  • 如何使用 pymongo 对 mongodb 进行排序

    我尝试在查询 mongoDB 时使用排序功能 但失败了 相同的查询在 MongoDB 控制台中有效 但在这里不行 代码如下 import pymongo from pymongo import Connection connection C
  • iOS canOpenURL 返回 true,但应用程序未安装(facebook)

    目前 我想检查我的应用程序是否安装了 Facebook 应用程序 我在做什么 UIApplication shared canOpenURL URL string fb enter code here 在 URL 方案中 我添加了 fb 所
  • C# 中的静态类有什么优点/缺点?

    我正在为我的学校作业编写一个小游戏 该游戏是一个简单的 2D 游戏 有怪物 物品和子弹 基本上你跑来跑去并试图收集所有的物品硬币 怪物试图阻止你 你可以用你收集的子弹击落它们 很简单 问题是 我已将怪物 物品 墙壁 玩家和子弹添加到名为 L
  • 底图上的“map.scatter”不显示标记

    我有一张德国地图和几个城市的坐标 plot正确显示点 我想用scatter相反 为了能够相对于其他变量对市场进行着色 然后显示colorbar 代码在控制台中运行 但是当我替换时 这些点不可见map plot with map scatte
  • 如何使用java生成azure blob存储SAS url?

    我想生成一个 SAS URL 我可以与用户共享该 URL 以连接到存储帐户并将文件上传到任何位置 我如何使用 java api 生成 SAS url 我找到了一份文档 但看起来所有 api 都已贬值https azuresdkdocs bl
  • 索引 grouped_df 对象

    尝试选择类对象的列grouped df按索引给出 错误 索引超出范围 例如 x lt mtcars gt group by am gear gt summarise each funs sum disp hp drat class x gr
  • 如何动态更改正在查看的网站的 CSS 样式表?

    我有一个网站 用户可以使用其中的向导生成自己的 Codeigniter 网站 用户将提供模块 字段和功能详细信息 根据用户输入 将生成一个网站并将其部署在我的网站上 并在用户下载之前向用户展示演示 一切正常 现在我计划允许用户在预览生成的网
  • 使用 SSIS 包中的 Python 脚本预测数据

    我知道 Microsoft 在其 SQL Server 机器学习服务中包含了 Python 但这仅适用于 SQL Server 2017 及更高版本 而我的服务器目前无法满足这一要求 在这种情况下 我想完全在 SSIS 中部署我的生成预测与
  • 如何在我的 Flask 应用程序中连接浏览器的麦克风?

    我正在使用语音识别模块通过语音识别搜索查询 然后打开显示查询结果的 google chrome 页面 基本上 它是谷歌语音搜索的替代品 但它是通过终端启动的 但我想把它做成一个网络应用程序 我创建了烧瓶应用程序 搜索 目录 search p