OCR and Neural Nets in JavaScript

source: http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/

by Eshy Lavi

JavaScript

function getDataUri(url, callback) {
alert('oi')
  var image = new Image();

  image.onload = function() {
    var canvas = document.createElement('canvas');
    canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
    canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size

    canvas.getContext('2d').drawImage(this, 0, 0);

    // Get raw image data
    callback(canvas.toDataURL('image/png').replace(/^data:image\/(png|jpg);base64,/, ''));

    // ... or get as Data URI
    callback(canvas.toDataURL('image/png'));
  };

  image.src = url;
}

function convert_grey(image_data) {
  for (var x = 0; x < image_data.width; x++) {
    for (var y = 0; y < image_data.height; y++) {
      var i = x * 4 + y * 4 * image_data.width;
      var luma = Math.floor(image_data.data[i] * 299 / 1000 + image_data.data[i + 1] * 587 / 1000 + image_data.data[i + 2] * 114 / 1000);
      image_data.data[i] = luma;
      image_data.data[i + 1] = luma;
      image_data.data[i + 2] = luma;
      image_data.data[i + 3] = 255;
    }
  }
}

function filter(image_data, colour) {
  for (var x = 0; x < image_data.width; x++) {
    for (var y = 0; y < image_data.height; y++) {
      var i = x * 4 + y * 4 * image_data.width; // Turn all the pixels of the certain colour to white       
      if (image_data.data[i] == colour) {
        image_data.data[i] = 255;
        image_data.data[i + 1] = 255;
        image_data.data[i + 2] = 255; // Everything else to black       
      } else {
        image_data.data[i] = 0;
        image_data.data[i + 1] = 0;
        image_data.data[i + 2] = 0;
      }
    }
  }
}


getDataUri("http://www.casacompara.com.mx/api/globals/captchas/images/010032084151093126178057193123243049018152235174", function(response) {
	alert(response);
});