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
JavaScript
;
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