aboutsummaryrefslogtreecommitdiffstats
path: root/src/offscreen/ocr/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/offscreen/ocr/index.js')
-rw-r--r--src/offscreen/ocr/index.js26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/offscreen/ocr/index.js b/src/offscreen/ocr/index.js
index 432811e..dfe93c9 100644
--- a/src/offscreen/ocr/index.js
+++ b/src/offscreen/ocr/index.js
@@ -1,20 +1,29 @@
-import Tesseract from "./tesseract.esm.min.js";
+import Tesseract from "./static/tesseract.esm.min.js";
let ocrWorker = null;
const WORKER_PATH = chrome.runtime.getURL("offscreen/ocr/static/worker.min.js");
const CORE_PATH = chrome.runtime.getURL("offscreen/ocr/static");
+/**
+ * Creates (or reuses) a Tesseract.js worker and recognises text from
+ * the given image data URL. The worker is configured to only recognise
+ * uppercase alphanumerics (excluding `0`, `O`, `1`, `I`) suitable for
+ * CAPTCHA text.
+ *
+ * @param {string} dataURL - A `data:image/png;base64,…` string.
+ * @returns {{ text: string, confidence: number }}
+ */
async function performOcrInOffscreen(dataURL) {
if (!ocrWorker) {
ocrWorker = await Tesseract.createWorker("eng", 1, {
workerPath: WORKER_PATH,
corePath: CORE_PATH,
- workerBlobURL: false,
+ workerBlobURL: false
});
await ocrWorker.setParameters({
// The only characters that appears
- tessedit_char_whitelist: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789",
+ tessedit_char_whitelist: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
});
}
@@ -23,13 +32,18 @@ async function performOcrInOffscreen(dataURL) {
}
// Listen for messages from the Service Worker
-chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
+/**
+ * Handles two message types from the background service worker:
+ * - `"OFFSCREEN_OCR_REQUEST"`: runs OCR on the supplied data URL.
+ * - `"OFFSCREEN_TERMINATE_OCR_WORKER"`: terminates the worker to free memory.
+ */
+chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
if (message.type === "OFFSCREEN_OCR_REQUEST" && message.dataURL) {
performOcrInOffscreen(message.dataURL)
- .then(({ text, confidence }) => {
+ .then(function({ text, confidence }) {
sendResponse({ success: true, text, confidence });
})
- .catch(error => {
+ .catch(function(error) {
sendResponse({ success: false, error: error.message });
});
return true;