当前位置: 首页 > 知识库问答 >
问题:

我如何通过麦克风为我网页上的用户自动填写表格?

方楷
2023-03-14

我有一个带烧瓶的网页表单。目前,用户需要手动将他们的信息输入网页。然后,它被附加到一个表中,一旦单击提交,它们将被重定向到该表。设置基本上是:视频自动播放并向用户提问,用户手动填写他们的答案,一旦点击提交,他们会看到他们的答案被附加到一个表格中。

我想减少页面的混乱,让用户可以口头回答视频问题。我已经阅读了getusermedia、webSocket和WebRTCs,但我对它们感到困惑。我到处都找过了,youtube,reddit,等等。具体来说,这里,这里,这里,这里没有太多运气。

我正在考虑一个简单的for循环,带有语音识别器,在dict中使用不同的变量,然后按原样传递数据,但我不确定如何将麦克风动作与前端连接起来。前端不是所有数据所在的地方,所以我们需要一个http请求来获取和分析它?这是我的密码:

主要的py:

from flask import render_template, Flask, request
import os
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer as SIA
import nltk
import io
import os
from nltk.corpus import stopwords
import speech_recognition as sr

app = Flask(__name__, static_folder = 'static')

# # set the stopwords to be the english version
# stop_words = set(stopwords.words("english"))
# # create the recognizer
# r = sr.Recognizer()
# # define the microphone
# mic = sr.Microphone(device_index=0)
# r.energy_threshold = 300
# # vader sentiment analyzer for analyzing the sentiment of the text
# sid = SIA()
# user = []
# location = []
# state = []
# info = [user, location, state]
# # patient.name?


@app.route("/", methods=["GET", "POST"])
def home():
    user = request.values.get('name')
    location = request.values.get('location')
    state = request.values.get('state')
    # if request.method == "POST":
        # with mic as source:
        #     holder = []
        #     for x in info:
        #         audio_data = r.listen(source)
        #         r.adjust_for_ambient_noise(source)
        #         text = r.recognize_google(audio_data, language = 'en-IN')
        #         holder.append(text.lower())
        #         if x == "state":
        #             ss = sid.polarity_scores(holder)
        #             if ss == "neg":
        #                 x.append(str("sad"))
        #             else:
        #                 x.append(str("not sad"))
        #         else:
        #             filtered_words = [words for words in holder if not words in stop_words] # this filters out the stopwords
        #             x.append(filtered_words.lower())

        # return redirect(url_for('care', user = user))

    return render_template('index.html', user = user, location=location, state=state)

@app.route("/care", methods=["POST"])
def care():
    user = request.values.get('name')
    location = request.values.get('location')
    state = request.values.get('state')
    return render_template('list.html', user = user, location=location, state=state)


if __name__ == "__main__":
    #app.run(debug=True)    
    app.run(debug=True, threaded=True)

指数html:

{% extends "base.html" %}
{% block content %}

<!---------Therapist Section--------->
    <section id="therapist">
        <div class="container" id="therapist_container">
            <script>
              window.onload = function() {
            </script>
            <div id="button">
              <button type="button" class="btn btn-primary" id="therapist-button" data-toggle="modal" data-target="#myModal">Talk with Delphi</button>
            </div>
            
            <!-- Modal -->
            <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="vid1Title" aria-hidden="true">
              <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                  <div class="modal-body">
                    <video width="100%" id="video1">
                      <source src="./static/movie.mp4" type="video/mp4">
                    </video>
                    <form action="/care" method="POST">
                      <input type="text" name="name" placeholder="what's your name?" id="name">
                      <input type="text" name="location" placeholder="Where are you?" id="location">
                      <input type="text" name="state" placeholder="how can I help?" id="state">
                      <input id="buttonInput" class="btn btn-success form-control" type="submit" value="Send">
                    </form>
                  </div>
                </div>
              </div>
            </div>
            <script>
              $('#myModal').on('shown.bs.modal', function () {
              $('#video1')[0].play();
              })
              $('#myModal').on('hidden.bs.modal', function () {
                $('#video1')[0].pause();
              })
              video = document.getElementById('video1');
              video.addEventListener('ended',function(){       
              window.location.pathname = '/care';})

              function callback(stream) {
                  var context = new webkitAudioContext();
                  var mediaStreamSource = context.createMediaStreamSource(stream);
              }

              $(document).ready(function() {
                  navigator.webkitGetUserMedia({audio:true}, callback);
              }

            </script>
        </div>
    </section>
{% endblock content %}

list.html:

{% extends "base.html" %}
{% block content %}

<!----LIST------>
<section id="care_list">
    <div class="container" id="care_list_container">
        <h1 class="jumbotron text-center" id="care_list_title">{{ user }} Care Record</h1>
        <div class="container">
            <table class="table table-hover"> 
                <thead>
                  <tr>
                    <th scope="col">Session #</th>
                    <th scope="col">Length</th>
                    <th scope="col">Location</th>
                    <th scope="col">State</th> 
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <th scope="row">1</th>
                    <td>{{ length }}</td>
                    <td>{{ location }}</td>
                    <td>{{ state }}</td>
                  </tr>
                  <tr>
                    <th scope="row">2</th>
                    <td></td>
                    <td></td>
                    <td></td>
                  </tr>
                  <tr>
                    <th scope="row">3</th>
                    <td colspan="2"></td>
                    <td></td>
                  </tr>
                </tbody>
              </table>
        <ul class="list-group list-group-flush" id="care_list">
            <li class="list-group-item">Please email tom@vrifyhealth.com for help.</li>
        </ul>
    </div> 
</section> 
{% endblock content %}

共有2个答案

柴正祥
2023-03-14

实际上,您不能使用flask进行语音识别。Flask是一个后端框架,在托管它的服务器上运行。因为您希望用户所说的话能够被识别,所以需要使用客户端的东西,即使用JavaScript。您可以使用本教程完成任务。

蒋曾笑
2023-03-14

这比我们想象的要容易得多,就像我们创建newarray(),有一个codenewspeechrecognition()来创建语音到文本转换器。不需要外部库来执行此操作。以下是代码:-

            /* JS comes here */
            function SpeechRecog() {
                var output = document.getElementById("output");
                var action = document.getElementById("action");
                var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition;
                var recognition = new SpeechRecognition();
            
                // This runs when the speech recognition service starts
                recognition.onstart = function() {
                    action.innerHTML = "<small>listening, please speak...</small>";
                };
                
                recognition.onspeechend = function() {
                    action.innerHTML = "<small>stopped listening, hope you are done...</small>";
                    recognition.stop();
                }
              
                // This runs when the speech recognition service returns result
                recognition.onresult = function(event) {
                    var transcript = event.results[0][0].transcript;
                    var confidence = event.results[0][0].confidence;
                    output.value=transcript;
                };
              
                 // start recognition
                 recognition.start();
            }
css lang-css prettyprint-override">button{
  color:white;
  background:blue;
  border:none;
  padding:10px;margin:5px;
  border-radius:1em;
}
input{
  padding:.5em;margin:.5em;
}
<p>I'm Aakash1282,<br> Are you lazy, here is voice writer for your</p>
<p><button type="button" onclick="SpeechRecog()">Write By Voice</button> &nbsp; <span id="action"></span></p>
        <input type="text" id="output">
 类似资料:
  • 我正在尝试创建一个麦克风应用程序,在会议中用作观众的真正麦克风。我们将把Android设备连接到Wi-Fi局域网,任何人都可以从他们的应用程序中触发麦克风,向他人讲话。数据将进入局域网内的服务器Java程序,并从那里进入扬声器。 我不知道该怎么做。有人能帮我吗???提前谢谢

  • 我有简单的Android应用程序,可以记录通话,它可以在Android 6三星设备上运行良好(使用MIC源和VOICE_COMMUNICATION)。但是,一旦三星设备更新到牛轧糖(例如S7 / S7 Edge),这些记录通话的方法就会失败:(MIC只录制我的声音,但不记录对手的声音,VOICE_COMMUNICATION根本不起作用。 有人能建议在这里能做些什么吗?

  • 大家好,我正在使用Peer Js创建一个WebRtc,就像一个视频通话一样,我只想创建一个按钮,当用户点击它时,关掉麦克风,这段代码在script.Js中: 这是Html代码: 所以我创建了这个按钮: 那么我如何制作一个能够禁用麦克风的脚本呢?

  • 问题内容: 我正在研究android voip应用程序。我想确定是否还有其他应用程序正在使用麦克风。因此,我想防止在使用时从其他应用程序访问麦克风。 请任何人有想法,这将对我非常有帮助。 谢谢, 问题答案: 终于知道我们可以按以下方式检查麦克风的可用性:

  • 问题内容: 我正在尝试通过Java访问麦克风的级别。我不需要录制任何东西,我只想知道声音水平的相对范围。 这可以实时吗? 如果这是不可能的,那么这可能会起作用:当电平超过某个值时开始记录,当电平下降到一定水平以下一段时间后停止录制四分之一秒的位并读取它的音量,如果它在阈值以下停止录音。 提前致谢 问题答案: 您可以通过Sound API访问麦克风,但不会给您简单的响度级别。您只需要捕获数据并就其声

  • 我想直播Android麦克风,可以使用VLC播放器等听到。 Playstore主要提供IP摄像头应用,但这些应用是通过内部网络实现的。我想在互联网上播放流媒体。 可能吗? 我尝试了以下代码片段,但目前不起作用: 在VLC播放器前,我试着听(媒体)- 还有别的办法吗?