Skip to content

Commit

Permalink
fix #9
Browse files Browse the repository at this point in the history
  • Loading branch information
mateogianolio committed May 30, 2016
1 parent 3403261 commit a8e18af
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 153 deletions.
4 changes: 2 additions & 2 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"sans-serif",
"serif"
],
"training_set": 20000,
"testing_set": 500,
"training_set": 2000,
"testing_set": 1000,
"image_size": 16,
"threshold": 400,
"network": {
Expand Down
Binary file modified examples/0123456789.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
151 changes: 0 additions & 151 deletions main.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
<<<<<<< HEAD
(function (log) {
'use strict';

log('reading config file ...');
=======
(function () {
'use strict';

console.log('reading config file ...');
>>>>>>> softmax

var synaptic = require('synaptic'),
network = require('./network.js'),
Expand All @@ -29,131 +22,6 @@
config.fonts = config.fonts || ['serif', 'sans-serif'];
config.distortion = config.distortion === undefined ? true : config.distortion;
config.network.hidden = config.network.hidden || 40;
<<<<<<< HEAD
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
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 = [],
testing = [],
settings = {
size: config.text.length,
height: config.image_size,
text: config.text,
fonts: config.fonts,
distortion: config.distortion
};

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'),
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-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) {
=======
config.network.output = config.network.output || 10;
config.network.learning_rate = config.network.learning_rate || 0.1;

Expand Down Expand Up @@ -187,18 +55,13 @@
var png = new PNG({ filterType: 4 });

png.parse(data, function(error, data) {
>>>>>>> softmax
if(error)
throw error;

var position,
chunk = [],
pixel = [],
<<<<<<< HEAD
i, j, k, x, y;
=======
i, j, x, y;
>>>>>>> softmax

for(i = 0; i < config.text.length; i++) {
for(y = 0; y < data.height; y++) {
Expand All @@ -222,11 +85,7 @@
var output = Array.apply(null, new Array(config.network.output)).map(Number.prototype.valueOf, 0);
output[i] = 1;

<<<<<<< HEAD
if(index < config.training_set) {
=======
if(k < config.training_set) {
>>>>>>> softmax
training.push({
input: chunk,
output: output
Expand All @@ -241,29 +100,19 @@
chunk = [];
}

<<<<<<< HEAD
if(index === samples - 1) {
log('... done');
log();
=======
if(k++ === samples - 1) {
console.log('... done');
console.log();
>>>>>>> softmax

network.train(perceptron, training, config.network.learning_rate);
fs.writeFileSync('./ocr.js', 'module.exports = ' + perceptron.standalone().toString());
network.test(perceptron, testing);
}
});
}
<<<<<<< HEAD
})(console.log);
=======

console.log('generating images ...');

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

0 comments on commit a8e18af

Please sign in to comment.