+function onTesseractReady() {
+
+ window.tesseractWorker = new Tesseract.createWorker();
+
+ (async () => {
+ await window.tesseractWorker.load();
+ await window.tesseractWorker.loadLanguage('eng');
+ await window.tesseractWorker.initialize('eng');
+ await window.tesseractWorker.setParameters({
+ tessedit_char_whitelist: '0123456789?',
+ });
+ })();
+}
+
function recognizeChars(canvas) {
+ let src = cv.imread(canvas);
+ var areas = {
+ 'blue': {
+ 'bonus': [333, 588, 40, 53, 0],
+ 'malus': [333, 497, 40, 53, 0],
+ 'number': [279, 550, 148, 38, 0],
+ },
+ 'red': {
+ 'bonus': [586, 333, 53, 40, 270],
+ 'malus': [497, 333, 53, 40, 270],
+ 'number': [543, 279, 38, 148, 270],
+ },
+ 'yellow': {
+ 'bonus': [333, 67, 40, 53, 180],
+ 'malus': [333, 158, 40, 53, 180],
+ 'number': [279, 120, 148, 38, 180],
+ },
+ 'green': {
+ 'bonus': [63, 333, 53, 40, 90],
+ 'malus': [154, 333, 53, 40, 90],
+ 'number': [116, 282, 38, 148, 90],
+ },
+ }
+
+ window.regions = {};
+ for (let color in areas) {
+ regions[color] = {};
+ for (let area in areas[color]) {
+ extractRegion(src, areas[color][area], color, area);
+ }
+ }
+}
+
+
+function extractRegion(src, region, color, area) {
+ let drawId = 'color_' + color + '_area';
+
+ let rect = new cv.Rect(region[0], region[1], region[2], region[3]);
+ let dst = src.roi(rect);
+ // if (region[4] === 90 || region[4] === 270) {
+ // cv.imshow(getCanvas('c_' + drawId), dst);
+ // }
+
+ let res = new cv.Mat();
+ let w, h;
+ w = region[2];
+ h = region[3];
+
+
+ let size = new cv.Size(w, h);
+ let center = new cv.Point(w / 2, h / 2);
+ let bbox = cv.RotatedRect.boundingRect({center: center, size: size, angle: region[4]});
+ let M = cv.getRotationMatrix2D(center, region[4], 1);
+ M.data64F[2] += (bbox.width - w) / 2;
+ M.data64F[5] += (bbox.height - h) / 2;
+ cv.warpAffine(dst, res, M, bbox, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());
+
+ let canvas = getCanvas(drawId);
+ cv.imshow(canvas, res);
+
+ ocr(canvas.toDataURL(), color, area);
+}
+function ocr(image, color, area) {
+ (async () => {
+ const {data: {text}} = await window.tesseractWorker.recognize(image);
+ console.log(text);
+ regions[color][area] = text;
+ await window.tesseractWorker.terminate();
+ })();
+ // try {
+ // Tesseract.recognize(
+ // image,
+ // 'eng',
+ // {logger: m => console.log(m)}
+ // ).then(({data: {text}}) => {
+ // regions[color][area] = text;
+ // })
+ // } catch (e) {
+ //
+ // }
}
\ No newline at end of file
} else if (br === corner1) {
rotate = 90;
}
+ rotate += 45;
+
let center = new cv.Point(finalSize / 2, finalSize / 2);
let M1 = cv.getRotationMatrix2D(center, rotate, 1);
+ // Find box in order the rotated board fit
+ let bbox = cv.RotatedRect.boundingRect({center: center, size: boardSize, angle: rotate});
+ M1.data64F[2] += (bbox.width - finalSize) / 2;
+ M1.data64F[5] += (bbox.width - finalSize) / 2;
let board = cv.Mat.zeros(finalSize, finalSize, cv.CV_8UC3);
- cv.warpAffine(boardSized, board, M1, boardSize, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());
+ cv.warpAffine(boardSized, board, M1, bbox, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());
cv.imshow(getCanvas('perspective'), board);
}