diff --git a/frontend/document/koptinterface.lua b/frontend/document/koptinterface.lua index 2b5cbaa45..6628bc476 100644 --- a/frontend/document/koptinterface.lua +++ b/frontend/document/koptinterface.lua @@ -7,7 +7,7 @@ require "ui/reader/readerconfig" KoptInterface = { tessocr_data = "data", ocr_lang = "eng", - ocr_type = 0, -- default, for more accuracy use 3 + ocr_type = 3, -- default 0, for more accuracy use 3 } ContextCacheItem = CacheItem:new{} @@ -19,6 +19,15 @@ function ContextCacheItem:onFree() end end +OCREngine = CacheItem:new{} + +function OCREngine:onFree() + if self.ocrengine.freeOCR then + DEBUG("free OCREngine", self.ocrengine) + self.ocrengine:freeOCR() + end +end + function KoptInterface:waitForContext(kc) -- if koptcontext is being processed in background thread -- the isPreCache will return 1. @@ -107,6 +116,11 @@ function KoptInterface:getPageText(doc, pageno) end function KoptInterface:getOCRWord(doc, pageno, rect) + local ocrengine = "ocrengine" + if not Cache:check(ocrengine) then + local dummy = KOPTContext.new() + Cache:insert(ocrengine, OCREngine:new{ ocrengine = dummy }) + end local bbox = doc:getPageBBox(pageno) local context_hash = self:getContextHash(doc, pageno, bbox) local hash = "ocrword|"..context_hash..rect.x..rect.y..rect.w..rect.h @@ -117,14 +131,10 @@ function KoptInterface:getOCRWord(doc, pageno, rect) if cached then local kc = self:waitForContext(cached.kctx) local fullwidth, fullheight = kc:getPageDim() - --os.execute("echo 3 > /proc/sys/vm/drop_caches") local ok, word = pcall( - kc.getOCRWord, kc, - self.tessocr_data, - self.ocr_lang, - self.ocr_type, - rect.x, rect.y, - rect.w, rect.h) + kc.getTOCRWord, kc, + rect.x, rect.y, rect.w, rect.h, + self.tessocr_data, self.ocr_lang, self.ocr_type, 0, 1) Cache:insert(hash, CacheItem:new{ ocrword = word }) return word end