Skip to content

Commit

Permalink
upd deps
Browse files Browse the repository at this point in the history
  • Loading branch information
mateogianolio committed Jan 17, 2016
1 parent 532d441 commit 7802b18
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 46 deletions.
Binary file modified examples/0123456789.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 46 additions & 43 deletions main.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
(function(log) {
(function (log) {
'use strict';

log('reading config file ...');

var synaptic = require('synaptic'),
network = require('./network.js'),
captcha = require('./captcha.js'),
tools = require('./tools.js'),
PNG = require('pngjs').PNG,
fs = require('fs'),
config = JSON.parse(fs.readFileSync('./config.json', 'utf8'));

if(config === null)
return;

config.training_set = config.training_set || 2000;
config.testing_set = config.testing_set || 500;
config.image_size = config.image_size || 20;
Expand All @@ -24,27 +24,27 @@
config.network.hidden = config.network.hidden || 40;
config.network.output = config.network.output || 8;
config.network.learning_rate = config.network.learning_rate || 0.1;

log('... done');
log();

var perceptron;

if(config.mnist === true) {
perceptron = new synaptic.Architect.Perceptron(
(config.image_size * config.image_size), // input
config.network.hidden, // hidden
config.network.output // output
4 // output
);

mnist();
} else {
perceptron = new synaptic.Architect.Perceptron(
(config.image_size * config.image_size), // input
config.network.hidden, // hidden
config.network.output // output
);

var index,
samples = config.training_set + config.testing_set,
training = [],
Expand All @@ -58,101 +58,101 @@
};

log('generating images ...');

for(index = 0; index < samples; index++)
captcha.generate(settings, generate(index));
}

// captcha callback
function generate(index) {
return function(text, data) {
var png = new PNG({ filterType: 4 });
png.parse(data, parse(text, index));

if(index === 0)
fs.writeFileSync('./examples/' + text + '.png', data, 'base64');
};
}

// parse MNIST data
function mnist() {
log('parsing MNIST data ...');
var data = fs.readFileSync('./mnist/train-images-idx3-ubyte'),
labels = fs.readFileSync('./mnist/train-labels-idx1-ubyte'),

var data = fs.readFileSync('./mnist/train-images.idx3-ubyte'),
labels = fs.readFileSync('./mnist/train-labels.idx1-ubyte'),
training = [],
testing = [],
pixels = [],
image,
x, y;

config.training_set = 60000;
config.testing_set = 10000;
config.threshold = 50;
config.image_size = 20;

for(image = 0; image < config.training_set; image++) {
for(y = 4; y < config.image_size + 4; y++)
for(x = 4; x < config.image_size + 4; x++)
pixels.push(data[(image * 28 * 28) + (x + (y * 28)) + 15]);

pixels = tools.center(
pixels.map(function(pixel) {
return pixel > config.threshold ? 1 : 0;
})
);

training.push({
input: pixels,
output: ('0000' + parseInt(labels[image + 8]).toString(2)).substr(-4).split('').map(Number)
});

pixels = [];
}
data = fs.readFileSync('./mnist/t10k-images-idx3-ubyte');
labels = fs.readFileSync('./mnist/t10k-labels-idx1-ubyte');

data = fs.readFileSync('./mnist/t10k-images-2.idx3-ubyte');
labels = fs.readFileSync('./mnist/t10k-labels.idx1-ubyte');

for(image = 0; image < config.testing_set; image++) {
for(y = 4; y < config.image_size + 4; y++)
for(x = 4; x < config.image_size + 4; x++)
pixels.push(data[(image * 28 * 28) + (x + (y * 28)) + 15]);

pixels = tools.center(
pixels.map(function(pixel) {
return pixel > config.threshold ? 1 : 0;
})
);

testing.push({
input: pixels,
output: ('0000' + parseInt(labels[image + 8]).toString(2)).substr(-4).split('').map(Number)
});

pixels = [];
}

log('... done', '\n');

tools.validate(perceptron, training);
tools.validate(perceptron, testing);

network.train(perceptron, training, config.network.learning_rate);
fs.writeFileSync('./ocr.js', perceptron.standalone().toString());
network.test(perceptron, testing);
}

// 'parsed' event callback
function parse(text, index) {
return function(error, data) {
if(error)
throw error;

var position,
chunk = [],
pixel = [],
i, j, k, x, y;

for(i = 0; i < config.text.length; i++) {
for(y = 0; y < data.height; y++) {
for(x = i * config.image_size; x < (i * config.image_size + config.image_size); x++) {
Expand All @@ -169,28 +169,31 @@
pixel = [];
}
}

chunk = tools.center(chunk);


var output = Array.apply(null, new Array(config.network.output)).map(Number.prototype.valueOf, 0);
output[i] = 1;

if(index < config.training_set) {
training.push({
input: chunk,
output: ('0000' + text.charCodeAt(i).toString(2)).substr(-4).split('').map(Number)
output: output
});
} else {
testing.push({
input: chunk,
output: ('0000' + text.charCodeAt(i).toString(2)).substr(-4).split('').map(Number)
output: output
});
}

chunk = [];
}

if(index === samples - 1) {
log('... done');
log();

network.train(perceptron, training, config.network.learning_rate);
fs.writeFileSync('./ocr.js', perceptron.standalone().toString());
network.test(perceptron, testing);
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
"author": "Mateo Gianolio",
"license": "MIT",
"dependencies": {
"canvas": "^1.2.1",
"pngjs": "^0.4.0",
"synaptic": "^0.1.7"
"canvas": "^1.3.7",
"pngjs": "^2.2.0",
"synaptic": "^1.0.2"
},
"repository": {
"type": "git",
Expand Down

0 comments on commit 7802b18

Please sign in to comment.