aboutsummaryrefslogtreecommitdiffstats
path: root/src/offscreen/ocr/index.js
blob: 432811ef9303beee1f1506370ec327904342ab81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import Tesseract from "./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");

async function performOcrInOffscreen(dataURL) {
	if (!ocrWorker) {
		ocrWorker = await Tesseract.createWorker("eng", 1, {
			workerPath: WORKER_PATH,
			corePath: CORE_PATH,
			workerBlobURL: false,
		});

		await ocrWorker.setParameters({
			// The only characters that appears
			tessedit_char_whitelist: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789",
		});
	}

	const { data } = await ocrWorker.recognize(dataURL);
	return data;
}

// Listen for messages from the Service Worker
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
	if (message.type === "OFFSCREEN_OCR_REQUEST" && message.dataURL) {
		performOcrInOffscreen(message.dataURL)
			.then(({ text, confidence }) => {
				sendResponse({ success: true, text, confidence });
			})
			.catch(error => {
				sendResponse({ success: false, error: error.message });
			});
		return true;
	}

	if (message.type === "OFFSCREEN_TERMINATE_OCR_WORKER") {
		if (ocrWorker) {
			ocrWorker.terminate();
			ocrWorker = null;
		}
		sendResponse({ success: true });
	}
});