Эти два, вероятно, будут наилучшими способами:
- создать модуль / пакет вашего собственного инструмента распознавания речи и импортировать его в свое flask приложение
- интегрировать функциональность
Если вы планируете использовать его снова, было бы неплохо сохранить распознавание речи отдельно от веб-приложения, потому что тогда вы можете использовать его снова. Но вы можете настроить его гораздо больше, если интегрируете, например, с функциями просмотра вашего приложения. Кроме того, вам, вероятно, следует поместить все ваши logi c search.py в одну функцию или класс, чтобы вы могли его вызвать. В противном случае, если вы импортируете его в том виде, в каком он есть сейчас, он немедленно запустится.
В любом случае вам нужна структура речи, которая выглядит примерно так:
- Пользователь отправляет какую-то речь в прямом эфире, в записи или в виде файла. Мы назовем этот речевой файл
speech.wav
(или любой другой тип файла по вашему выбору). speech.wav
читается и анализируется вашим инструментом распознавания речи. Он может вернуть список слов или, может быть, просто строку. Мы назовем это output
. output
возвращается на веб-страницу и отображается как что-то для чтения пользователем.
Я предлагаю начать с отправки формы и Если вы можете заставить это работать, вы можете попробовать распознавание живой речи с помощью AJAX. Запустите basi c и просто попросите пользователя добавить аудиофайл или записать его. Следующий скрипт откроет файловый браузер, если он находится на рабочем столе, или заставит пользователя записать, если он 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>
Итак, как только у них есть файл, вам нужно получить доступ к нему. Вы можете настроить его, но вот базовый c скрипт, который возьмет на себя управление вышеупомянутым звуком. Кредит за этот скрипт принадлежит разработчикам Google.
<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>
Приносим извинения за возможные ошибки брекетинга. Таким образом, он должен отправить запрос GET для некоторого JSON по URL-адресу «/ audio_process», который вернет то, что мы видели ранее, а затем он выведет "text"
из JSON в "#output"
HTML селектор.
Может потребоваться некоторая отладка, но, похоже, это помогает.