Guillermo
10 years ago
2 changed files with 215 additions and 79 deletions
@ -1,79 +1,119 @@
@@ -1,79 +1,119 @@
|
||||
var Tesseract = {} |
||||
var Tesseract = (function(){ |
||||
|
||||
Tesseract.recognize = function(image, options, callback){ |
||||
var lang = options.lang |
||||
if(typeof lang === "undefined"){ |
||||
lang = 'eng' |
||||
} |
||||
var Tesseract = {} |
||||
|
||||
var blob = new Blob(["importScripts('http://localhost:1234/master/worker/worker.js');"]); |
||||
console.log('localhost') |
||||
var worker = new Worker(window.URL.createObjectURL(blob)); |
||||
|
||||
var index = 0 |
||||
var handlers = [] |
||||
|
||||
if (typeof options === 'string') { |
||||
lang = options |
||||
options = {} |
||||
worker.onmessage = function(e){ |
||||
// console.log(handlers, e)
|
||||
var handler = handlers[e.data.index] |
||||
if(e.data.progress){ |
||||
handler.progress(e.data.progress) |
||||
} |
||||
else if(e.data.err){ |
||||
handler.reject(e.data.err) |
||||
handler.callback(e.data.err) |
||||
} |
||||
else { |
||||
handler.resolve(e.data.result) |
||||
handler.callback(null,e.data.result) |
||||
} |
||||
} |
||||
|
||||
if (typeof options === "function") { |
||||
callback = options |
||||
options = {} |
||||
function convertToImageData(image){ |
||||
if(image.getContext){ |
||||
image = image.getContext('2d'); |
||||
}else if(image.tagName == "IMG" || image.tagName == "VIDEO"){ |
||||
var c = document.createElement('canvas'); |
||||
if(image.tagName == "IMG"){ |
||||
c.width = image.naturalWidth; |
||||
c.height = image.naturalHeight; |
||||
}else if(image.tagName == "VIDEO"){ |
||||
c.width = image.videoWidth; |
||||
c.height = image.videoHeight; |
||||
} |
||||
var ctx = c.getContext('2d'); |
||||
ctx.drawImage(image, 0, 0); |
||||
image = ctx; |
||||
} |
||||
if(image.getImageData) image = image.getImageData(0, 0, image.canvas.width, image.canvas.height); |
||||
return image |
||||
} |
||||
|
||||
Tesseract.detect = function(image, progress, callback){ |
||||
image = convertToImageData(image) |
||||
|
||||
if(image.getContext){ |
||||
image = image.getContext('2d'); |
||||
}else if(image.tagName == "IMG" || image.tagName == "VIDEO"){ |
||||
var c = document.createElement('canvas'); |
||||
if(image.tagName == "IMG"){ |
||||
c.width = image.naturalWidth; |
||||
c.height = image.naturalHeight; |
||||
}else if(image.tagName == "VIDEO"){ |
||||
c.width = image.videoWidth; |
||||
c.height = image.videoHeight; |
||||
if(typeof progress === "undefined"){ |
||||
progress = callback = new Function() |
||||
} |
||||
var ctx = c.getContext('2d'); |
||||
ctx.drawImage(image, 0, 0); |
||||
image = ctx; |
||||
} |
||||
if(image.getImageData) image = image.getImageData(0, 0, image.canvas.width, image.canvas.height); |
||||
|
||||
if (typeof callback === "undefined"){ |
||||
callback = progress |
||||
progress = new Function() |
||||
} |
||||
|
||||
var blob = new Blob(["importScripts('https://cdn.rawgit.com/naptha/tesseract.js/master/worker/worker.js');"]); |
||||
var i = index++ |
||||
|
||||
var worker = new Worker(window.URL.createObjectURL(blob)); |
||||
handlers[i] = { |
||||
resolve: new Function(), |
||||
reject: new Function() |
||||
} |
||||
handlers[i].callback = callback |
||||
handlers[i].progress = progress |
||||
|
||||
return new Promise(function(resolve, reject){ |
||||
handlers[i].resolve = resolve |
||||
handlers[i].reject = reject |
||||
worker.postMessage({index: i, fun: 'detect', image: image}) |
||||
}) |
||||
|
||||
} |
||||
|
||||
var progress = (function(){ |
||||
if(typeof options.progress === 'function'){ |
||||
var p = options.progress |
||||
delete options.progress |
||||
return p |
||||
Tesseract.recognize = function(image, options, callback){ |
||||
var lang = options.lang |
||||
if(typeof lang === "undefined"){ |
||||
lang = 'eng' |
||||
} |
||||
return function(){} |
||||
})() |
||||
|
||||
if (typeof options === 'string') { |
||||
lang = options |
||||
options = {} |
||||
} |
||||
|
||||
if(typeof callback === "function"){ |
||||
worker.onmessage = function(e){ |
||||
if(e.data.progress){ |
||||
progress(e.data.progress) |
||||
} |
||||
else{ |
||||
callback(e.data.err, e.data.result) |
||||
} |
||||
if (typeof options === "function") { |
||||
callback = options |
||||
options = {} |
||||
} |
||||
worker.postMessage({image: image, lang: lang}) |
||||
} |
||||
else { |
||||
return new Promise(function(resolve, reject){ |
||||
worker.onmessage = function(e){ |
||||
if(e.data.progress){ |
||||
progress(e.data.progress) |
||||
} |
||||
else if(e.data.err){ |
||||
reject(e.data.err) |
||||
} |
||||
else { |
||||
resolve(e.data.result) |
||||
} |
||||
|
||||
image = convertToImageData(image) |
||||
|
||||
var i = index++ |
||||
|
||||
handlers[i] = { |
||||
resolve: new Function(), |
||||
reject: new Function() |
||||
} |
||||
handlers[i].callback = callback || new Function() |
||||
handlers[i].progress = (function(){ |
||||
if(typeof options.progress === 'function'){ |
||||
var p = options.progress |
||||
delete options.progress |
||||
return p |
||||
} |
||||
worker.postMessage({image: image, lang: lang, options: options}) |
||||
return function(){} |
||||
})() |
||||
|
||||
return new Promise(function(resolve, reject){ |
||||
handlers[i].resolve = resolve |
||||
handlers[i].reject = reject |
||||
worker.postMessage({index: i, fun: 'recognize', image: image, lang: lang, options: options}) |
||||
}) |
||||
|
||||
} |
||||
} |
||||
return Tesseract |
||||
})() |
Loading…
Reference in new issue