首页 >web前端 >js教程 >需要有关我的实时转录浏览器扩展的帮助 – 不工作

需要有关我的实时转录浏览器扩展的帮助 – 不工作

Patricia Arquette
Patricia Arquette原创
2024-10-20 16:39:021018浏览

Need Help with My Live Transcription Browser Extension – Not Working

大家好,

我一直在开发一个浏览器扩展,它应该使用语音识别 API 实时转录浏览器中播放的任何视频。然而,我遇到了一个问题,它没有按预期工作——转录没有出现,我不确定为什么。

到目前为止我所做的:
Manifest.json:我已经设置了捕获音频并运行必要脚本的权限。
Background.js:后台脚本负责使用 chrome.tabCapture 捕获音频。
ContentScript.js:我正在使用 Web Speech API (SpeechRecognition) 来处理捕获的音频并对其进行转录。
Popup.js:弹出窗口应该显示实时转录。
我已经在 Brave 和 Chrome 浏览器上测试了该扩展程序,但转录仍然无法正常工作。
关键文件:
Manifest.json

{
  "manifest_version": 3,
  "name": "Live Transcription Extension",
  "version": "1.0",
  "description": "A browser extension for live transcription",
  "permissions": [
    "audioCapture",
    "activeTab",
    "storage",
    "tabCapture",
    "microphone"
  ],
  "action": {
    "default_popup": "popup.html"
  },
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["contentScript.js"]
    }
  ],
  "host_permissions": ["<all_urls>"]
}

background.js

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.action === "start_transcription") {
    chrome.tabCapture.capture({ audio: true, video: false }, (stream) => {
      if (chrome.runtime.lastError || !stream) {
        console.error("Error capturing audio: ", chrome.runtime.lastError);
        sendResponse({ error: "Failed to capture audio" });
        return;
      }

      sendResponse({ stream });
    });
    return true;
  }
});

ContentScript.js

const startSpeechRecognition = () => {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  if (!SpeechRecognition) {
    console.error("Speech Recognition API not supported.");
    return;
  }

  const recognition = new SpeechRecognition();
  recognition.continuous = true;
  recognition.interimResults = true;
  recognition.lang = "en-US";

  recognition.onresult = (event) => {
    let finalTranscript = '';
    for (let i = event.resultIndex; i < event.results.length; ++i) {
      if (event.results[i].isFinal) {
        finalTranscript += event.results[i][0].transcript;
      }
    }
    chrome.runtime.sendMessage({ action: 'transcribe', text: finalTranscript });
  };

  recognition.onerror = (event) => {
    console.error("Speech recognition error: ", event.error);
  };

  recognition.start();
};

startSpeechRecognition();

Popup.js

chrome.runtime.onMessage.addListener((message) => {
  if (message.action === 'transcribe') {
    const transcriptionDiv = document.getElementById('transcription');
    transcriptionDiv.innerText += ` ${message.text}`;
  }
});

Popup.html

<!DOCTYPE html>
<html>
<head>
  <title>Live Transcription</title>
</head>
<body>
  <h1>Live Transcription</h1>
  <div id="transcription">
    Transcription will appear here...
  </div>
  <script src="popup.js"></script>
</body>
</html>

问题:
扩展加载正常,但当我尝试转录视频时没有任何反应。
弹出窗口中没有出现任何转录,并且我在 Chrome 控制台中没有看到任何明显的错误。
我也尝试在 Brave 上运行该扩展,但仍然得到相同的结果。
我尝试过的:
在浏览器上检查了 SpeechRecognition API——似乎是支持的。
已向扩展程序授予麦克风权限。
确认后台脚本捕获了音频,但似乎没有触发转录。
尝试在本地和生产环境中测试扩展,但没有什么区别。
可能的问题:
麦克风权限:我请求音频捕获权限的方式有问题吗?
SpeechRecognition API:浏览器是否存在兼容性问题,或者是否有什么东西阻止了语音识别?
转录处理:我不确定语音识别过程中的 onresult 事件是否正确触发,或者消息是否未到达弹出窗口。
任何帮助或建议将不胜感激!我在这个问题上坚持了很长一段时间,并且很想让它发挥作用。

提前致谢!

以上是需要有关我的实时转录浏览器扩展的帮助 – 不工作的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn