大家好,
我一直在开发一个浏览器扩展,它应该使用语音识别 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中文网其他相关文章!