大家好,
我一直在開發一個瀏覽器擴展,它應該使用語音識別 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中文網其他相關文章!