UNPKG

handwritten-mathematics-recogniser

Version:

Easy and abstracted way to recognise handwritten mathematics in a browser or in a web view.

48 lines (46 loc) 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const handwritten_digit_transformer_1 = require("../common/handwritten-digit-transformer"); const model_1 = require("./model"); class HandwrittenDigitRecogniserDNN { static recognise(canvas) { const image = handwritten_digit_transformer_1.HandwrittenDigitTransformer.transform(canvas); const recognitions = this.feedForward(image); return recognitions.indexOf(Math.max(...recognitions)); } static recogniseWithMetadata(canvas) { const image = handwritten_digit_transformer_1.HandwrittenDigitTransformer.transform(canvas); const recognitions = this.formatRecognitions(this.feedForward(image)); return recognitions; } static formatRecognitions(recognitions) { return recognitions .map((probability) => Math.round(probability * 100) / 100) .map((probability, recognition) => ({ probability, recognition })); } static feedForward(image) { const activation2 = []; for (let i = 0; i < model_1.w12.length; i++) { activation2[i] = model_1.b2[i]; for (let j = 0; j < model_1.w12[i].length; j++) { activation2[i] += image[j] * model_1.w12[i][j]; } activation2[i] = 1 / (1 + Math.exp(-activation2[i])); } const activation3 = []; for (let i = 0; i < model_1.w23.length; i++) { activation3[i] = model_1.b3[i]; for (let j = 0; j < model_1.w23[i].length; j++) { activation3[i] += activation2[j] * model_1.w23[i][j]; } } const maxProbability = Math.max(...activation3); const normalisedProbabilities = activation3.map((probability) => Math.exp(probability - maxProbability)); const totalProbability = normalisedProbabilities.reduce((partialProbability, probability) => partialProbability + probability); const recognitions = normalisedProbabilities.map((probability) => probability / totalProbability); return recognitions; } } HandwrittenDigitRecogniserDNN.treshold = 1.5; exports.HandwrittenDigitRecogniserDNN = HandwrittenDigitRecogniserDNN; //# sourceMappingURL=handwritten-digit-recogniser-dnn.js.map