From 54467df36805eabf9113d1bb84d7434b331cd167 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Sat, 14 Jun 2025 01:40:18 +0530 Subject: Successfully performing OCR on the captcha image and autofilling it for login. --- src/background/run-ocr.ts | 65 +++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 33 deletions(-) (limited to 'src/background/run-ocr.ts') diff --git a/src/background/run-ocr.ts b/src/background/run-ocr.ts index 1bf605b..4476f54 100644 --- a/src/background/run-ocr.ts +++ b/src/background/run-ocr.ts @@ -1,42 +1,41 @@ -import Tesseract from "tesseract.js"; -// -// chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { -// if (message.type === "OCR") { -// (async () => { -// const { data: { text, confidence } } = await Tesseract.recognize(message.dataURL, "eng+osd", { -// logger: m => console.log(m), -// }); -// sendResponse({ text, confidence }); -// })(); -// return true; -// } -// -// return false; -// }); +const OFFSCREEN_DOCUMENT_PATH = "offscreen/ocr/index.html"; +// Function to ensure the offscreen document is open +async function setupOffscreenDocument() { + if (await chrome.offscreen.hasDocument()) { + return; // Offscreen document already open + } + await chrome.offscreen.createDocument({ + url: OFFSCREEN_DOCUMENT_PATH, + reasons: [chrome.offscreen.Reason.CLIPBOARD], + justification: "Performing OCR with Tesseract.js in a long-running context." + }); +} + +// Listen for messages from content scripts (and popup if applicable) chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.type === "OCR") { + if (message.type === "OCR" && message.dataURL) { (async () => { - console.log(message); - const worker = await Tesseract.createWorker("eng", 1, { - workerBlobURL: false, - logger: console.log, - }); - - await worker.setParameters({ - tessedit_char_whitelist: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789", - }); + try { + // Ensure the offscreen document is open + await setupOffscreenDocument(); - const { - data: { text, confidence } - } = await worker.recognize(message.dataURL); + // Send the OCR request to the offscreen document + const offscreenResponse = await chrome.runtime.sendMessage({ + type: "OFFSCREEN_OCR_REQUEST", + dataURL: message.dataURL + }); - await worker.terminate(); - - sendResponse({ type: "OCR_RESULT", text, confidence }); + if (offscreenResponse && offscreenResponse.success) { + sendResponse({ success: true, text: offscreenResponse.text }); + } else { + sendResponse({ success: false, error: offscreenResponse?.error || "Unknown OCR error" }); + } + } catch (error) { + sendResponse({ success: false, error: (error as Error).message }); + } })(); - - return true; + return true; // Indicate async response } return false; -- cgit v1.2.3