handwritten-mathematics-recogniser
Version:
Easy and abstracted way to recognise handwritten mathematics in a browser or in a web view.
40 lines (38 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const converter_1 = require("../../utility/converter");
const transformer_1 = require("../../utility/transformer");
class HandwrittenDigitTransformer {
static transform(canvas) {
const context = canvas.getContext('2d');
const image = converter_1.Converter.convertCanvasToImage(canvas);
const boundingBox = transformer_1.Transformer.getBoundingBox(image);
const translate = this.translate(image);
const canvasCopy = document.createElement('canvas');
canvasCopy.width = 280;
canvasCopy.height = 280;
canvasCopy.className = 'canvas';
const copyCtx = canvasCopy.getContext('2d');
const dx = boundingBox.max.x - boundingBox.min.x + 1;
const dy = boundingBox.max.y - boundingBox.min.y + 1;
const scale = 200 / Math.max(dx, dy);
copyCtx.translate(280 / 2, 280 / 2);
copyCtx.scale(scale, scale);
copyCtx.translate(-canvas.width / 2, -canvas.height / 2);
copyCtx.translate(translate.x, translate.y);
copyCtx.drawImage(context.canvas, 0, 0);
const transformed = converter_1.Converter.convertCanvasToImage(canvasCopy);
const serialized = transformer_1.Transformer.serializeImage(transformed);
return serialized;
}
static translate(image) {
const rows = image.length;
const columns = image[0].length;
const center = transformer_1.Transformer.getCenter(image);
const x = Math.round(columns / 2 - center.x);
const y = Math.round(rows / 2 - center.y);
return { x, y };
}
}
exports.HandwrittenDigitTransformer = HandwrittenDigitTransformer;
//# sourceMappingURL=handwritten-digit-transformer.js.map