Pure Javascript OCR for more than 100 Languages 📖🎉🖥
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
3.4 KiB

9 years ago
var defaultOptions = {
// workerPath: 'https://cdn.rawgit.com/naptha/tesseract.js/0.2.0/dist/worker.js',
9 years ago
corePath: 'https://cdn.rawgit.com/naptha/tesseract.js-core/0.1.0/index.js',
9 years ago
langPath: 'https://cdn.rawgit.com/naptha/tessdata/gh-pages/3.02/',
}
9 years ago
if (process.env.NODE_ENV === "development") {
9 years ago
console.debug('Using Development Configuration')
9 years ago
defaultOptions.workerPath = location.protocol + '//' + location.host + '/dist/worker.dev.js'
}else{
var version = require('../../package.json').version;
defaultOptions.workerPath = 'https://cdn.rawgit.com/naptha/tesseract.js/' + version + '/dist/worker.js'
}
9 years ago
exports.defaultOptions = defaultOptions;
exports.spawnWorker = function spawnWorker(instance, workerOptions){
9 years ago
if(window.Blob && window.URL){
var blob = new Blob(['importScripts("' + workerOptions.workerPath + '");'])
var worker = new Worker(window.URL.createObjectURL(blob));
}else{
var worker = new Worker(workerOptions.workerPath)
}
worker.onmessage = function(e){
9 years ago
var packet = e.data;
instance._recv(packet)
}
return worker
}
exports.terminateWorker = function(instance){
instance.worker.terminate()
}
9 years ago
exports.sendPacket = function sendPacket(instance, packet){
loadImage(packet.payload.image, function(img){
packet.payload.image = img
instance.worker.postMessage(packet)
})
}
function loadImage(image, cb){
if(typeof image === 'string'){
if(/^\#/.test(image)){
// element css selector
return loadImage(document.querySelector(image), cb)
9 years ago
}else if(/(blob|data)\:/.test(image)){
// data url
var im = new Image
im.src = image;
im.onload = e => loadImage(im, cb);
return
9 years ago
}else{
var xhr = new XMLHttpRequest();
xhr.open('GET', image, true)
xhr.responseType = "blob";
xhr.onload = e => loadImage(xhr.response, cb);
9 years ago
xhr.onerror = function(e){
if(/^https?:\/\//.test(image) && !/^https:\/\/crossorigin.me/.test(image)){
console.debug('Attempting to load image with CORS proxy')
loadImage('https://crossorigin.me/' + image, cb)
}
}
9 years ago
xhr.send(null)
return
}
}else if(image instanceof File){
// files
var fr = new FileReader()
fr.onload = e => loadImage(fr.result, cb);
fr.readAsDataURL(image)
return
}else if(image instanceof Blob){
return loadImage(URL.createObjectURL(image), cb)
}else if(image.getContext){
// canvas element
return loadImage(image.getContext('2d'), cb)
}else if(image.tagName == "IMG" || image.tagName == "VIDEO"){
// image element or video element
var c = document.createElement('canvas');
c.width = image.naturalWidth || image.videoWidth;
c.height = image.naturalHeight || image.videoHeight;
var ctx = c.getContext('2d');
ctx.drawImage(image, 0, 0);
return loadImage(ctx, cb)
}else if(image.getImageData){
// canvas context
var data = image.getImageData(0, 0, image.canvas.width, image.canvas.height);
return loadImage(data, cb)
9 years ago
}else{
return cb(image)
}
9 years ago
throw new Error('Missing return in loadImage cascade')
}