跳至主要內容

JavaScript WebkitSpeechRecognition:使用语音识别技术增强 Web 应用程序

h7mljavascriptwebkitSpeechRecognitionjavascriptwebkitSpeechRecognition大约 6 分钟约 1680 字

JavaScript WebkitSpeechRecognition:使用语音识别技术增强 Web 应用程序

WebkitSpeechRecognition 是一种 JavaScript API,它可以让您的 Web 应用程序使用语音识别技术。使用 WebkitSpeechRecognition,您可以让用户通过说话来与您的 Web 应用程序进行交互,这可以使您的应用程序更加易于使用,也可以为用户提供更加人性化的体验。

WebkitSpeechRecognition 的基本概念

WebkitSpeechRecognition 是 Webkit 浏览器中的一个 API,它提供了一种将用户的语音转换为文本的方法。该 API 允许您使用 JavaScript 控制语音识别过程,并获取识别结果。

WebkitSpeechRecognition API 的基本概念如下

SpeechRecognition 对象:SpeechRecognition 对象是 WebkitSpeechRecognition API 的核心对象,它表示语音识别过程。您可以使用 SpeechRecognition 对象来控制语音识别过程,例如开始识别、停止识别等

语音识别事件:SpeechRecognition 对象会触发多个事件,以便您在语音识别过程中获取信息。例如,onresult 事件会在识别成功后触发,onerror 事件会在识别失败时触发

识别结果:语音识别过程的主要输出是识别结果。识别结果是一个包含一个或多个识别的文本字符串的数组。您可以使用识别结果来理解用户说了什么,并相应地更新您的应用程序

如何使用 WebkitSpeechRecognition

要使用 WebkitSpeechRecognition API,您需要遵循以下步骤:

  1. 创建 SpeechRecognition 对象:使用以下代码创建 SpeechRecognition 对象:
const recognition = new webkitSpeechRecognition();
  1. 设置语言:使用以下代码设置语音识别的语言:
recognition.lang = window.navigator.language || 'en-US'; // 设置为语言

如果未指定语言,则 WebkitSpeechRecognition 默认使用浏览器的语言。

  1. 监听事件:使用以下代码监听语音识别事件:
recognition.onresult = (event) => {
  const result = event.results[event.results.length - 1];
  console.log(result[0].transcript);
};

在上面的代码中,我们使用 onresult 事件来监听语音识别结果。当识别成功时,该事件会触发,并将识别结果作为参数传递给事件处理程序。

  1. 开始和停止识别:使用以下代码开始和停止语音识别:
recognition.start(); // 开始语音识别
recognition.stop(); // 停止语音识别

在上面的代码中,我们使用 start 方法开始语音识别,使用 stop 方法停止语音识别。

使用 WebkitSpeechRecognition 的示例

使用语音输入来搜索 Baidu

使用语音输入来搜索 Baidu
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Speech Recognition Example</title>
  </head>
  <body>
    <input type="text" id="search-box" placeholder="Search Baidu" />
    <button id="search-button">Search</button>
    <script>
      const recognition = window.webkitSpeechRecognition ? new webkitSpeechRecognition() : null; // 判断是否支持 webkitSpeechRecognition
      if (recognition) {
          recognition.lang = window.navigator.language || 'en-US'; // 设置为语言
          const searchBox = document.getElementById('search-box');
          const searchButton = document.getElementById('search-button');
          recognition.onresult = (event) => {
              const result = event.results[event.results.length - 1];
              searchBox.value = result[0].transcript;
          };
          searchButton.addEventListener('click', () => {
              const query = searchBox.value;
              window.location.href = ` https://www.baidu.com/s?ie=utf-8&wd=${query}`;
              // });
              document.addEventListener('keydown', (event) => {
                  if (event.keyCode === 13) {
                      event.preventDefault();
                      searchButton.click();
                  }
              });
              document.addEventListener('keydown', (event) => {
                  if (event.keyCode === 32 && !event.repeat) {
                      recognition.start();
                  }
              });
              document.addEventListener('keyup', (event) => {
                  if (event.keyCode === 32 && !event.repeat) {
                      recognition.stop();
                  }
              });
          }
      else
          {
              console.log('浏览器不支持语音识别');
          } // 加上容错处理
    </script>
  </body>
</html>

Vue 3 代码实现

Vue 3 代码实现 @file App.vue

React 代码实现

React 代码实现
import React, { useState, useEffect } from 'react';

function WebkitSpeechRecognition() {
  const [recognition, setRecognition] = useState(null);
  const [recognitionStatus, setRecognitionStatus] = useState('Recognition not started');
  const [recognizedText, setRecognizedText] = useState('');

  useEffect(() => {
    if (window.webkitSpeechRecognition) {
      const recognition = new webkitSpeechRecognition();
      recognition.continuous = true;
      recognition.interimResults = true;

      recognition.onstart = () => {
        setRecognitionStatus('Recognition started');
      };

      recognition.onend = () => {
        setRecognitionStatus('Recognition ended');
      };

      recognition.onresult = (event) => {
        const recognized = event.results[event.results.length - 1][0].transcript;
        setRecognizedText(recognized);
      };

      setRecognition(recognition);
    } else {
      setRecognitionStatus('Recognition not supported');
    }
  }, []);

  const startRecognition = () => {
    if (recognition) {
      recognition.start();
    }
  };

  const stopRecognition = () => {
    if (recognition) {
      recognition.stop();
    }
  };

  return (
    <div>
      <button onClick={startRecognition}>Start Recognition</button>
      <button onClick={stopRecognition}>Stop Recognition</button>
      <p>{recognitionStatus}</p>
      <p>{recognizedText}</p>
    </div>
  );
}

export default WebkitSpeechRecognition;

在上面的示例中,我们创建了一个 SpeechRecognition 对象,并将其设置为英语语言。我们还创建了一个搜索框和一个搜索按钮,用户可以在搜索框中输入搜索词并点击搜索按钮来进行搜索。

我们使用 onresult 事件来监听语音识别结果,并将其设置为搜索框的值。我们还使用 addEventListener 方法来监听搜索按钮的点击事件和键盘事件,以便在用户按下回车键或空格键时触发搜索。

最后,我们在按下空格键时使用 start 方法开始语音识别,在松开空格键时使用 stop 方法停止语音识别。

WebkitSpeechRecognition 的局限性

尽管 WebkitSpeechRecognition 可以让 Web 应用程序使用语音识别技术,但它仍然存在一些局限性。以下是一些常见的局限性:

  1. 浏览器支持:WebkitSpeechRecognition API 只能在 Webkit 浏览器中使用,因此无法在其他浏览器中使用。
  2. 语音识别质量:语音识别技术的质量取决于多个因素,例如用户的发音、语音识别引擎的质量等。因此,WebkitSpeechRecognition 可能无法准确地识别所有用户的语音。
  3. 隐私问题:由于 WebkitSpeechRecognition 需要访问用户的麦克风,因此可能会引起隐私问题。如果您的应用程序需要使用 WebkitSpeechRecognition,请确保遵循适当的隐私保护措施。

WebkitSpeechRecognition 兼容性

  • Chrome 25+
  • Edge 79+
  • Firefox 44+
  • Opera 27+
  • Safari 6+ 需要注意的是,不同浏览器可能有不同的语音识别引擎,因此识别结果可能会有所不同。此外,由于 WebkitSpeechRecognition API 是实验性的,因此其行为和特性可能会在未来版本中发生变化。

如果你要使用 WebkitSpeechRecognition API,请务必进行充分的测试和容错处理,以确保你的应用在不同浏览器和设备上都能正常运行。

结论

WebkitSpeechRecognition 是一种有用的 JavaScript API,它可以使您的 Web 应用程序更加易于使用,并为用户提供更加人性化的体验。虽然 WebkitSpeechRecognition 有一些局限性,但它仍然是一种有用的技术,可以让您的应用程序更加智能化。