这两种可能是最好的方法:
- 制作您自己的语音识别工具的模块/包并将其导入到您的 Flask 应用程序中
- 将功能本身集成到应用程序中。
如果您打算再次使用它,最好将语音识别与网络应用程序分开,因为这样您就可以再次使用它。但是,如果将其与应用程序的视图函数等集成,您可以对其进行更多自定义。另外,您可能应该将所有 search.py 逻辑放在一个函数或类中,以便您可以调用它。否则,如果您按现在的样子导入它,它将立即运行。
无论哪种方式,您都需要一个如下所示的语音结构:
- 用户提交一些语音,可以是现场语音、录制语音或文件形式。我们将此语音文件称为
speech.wav
(或任何其他文件类型,您选择)
-
speech.wav
由您的语音识别工具读取和解析。它可能返回一个单词列表,或者只是一个字符串。我们称之为output
.
-
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 选择器。
可能需要一些调试,但这似乎可以解决问题。