static void __executeBackground(byte[] buf) { oTesseractRequest r = null; string guid = Encoding.ASCII.GetString(buf); var redis = new RedisBase(new RedisSetting(REDIS_TYPE.ONLY_READ, 1000)); try { string json = redis.HGET("_OCR_REQUEST", guid); r = JsonConvert.DeserializeObject <oTesseractRequest>(json); Bitmap bitmap = redis.HGET_BITMAP(r.redis_key, r.redis_field); if (bitmap != null) { r = __ocrExecute(r, bitmap, redis); } } catch (Exception ex) { if (r != null) { string error = ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + "----------------" + Environment.NewLine + JsonConvert.SerializeObject(r); r.ok = -1; redis.HSET("_OCR_REQ_ERR", r.requestId, error); } } if (r != null) { redis.HSET("_OCR_REQUEST", r.requestId, JsonConvert.SerializeObject(r, Formatting.Indented)); redis.HSET("_OCR_REQ_LOG", r.requestId, r.ok.ToString()); redis.PUBLISH("__TESSERACT_OUT", r.requestId); } }
public static void convertImage2Text_OneOrAllPage(string requestId, COMMANDS cmd, string input, Dictionary <string, object> data) { var redis = new RedisBase(new RedisSetting(REDIS_TYPE.ONLY_WRITE, __CONFIG.REDIS_PORT_READ)); long docId = 0; int page = -1; string[] a = input.Split('.'); long.TryParse(a[0], out docId); if (a.Length > 1) { int.TryParse(a[1], out page); } var ocr_lang = data.Get <string>("ocr_lang", "vie"); var ocr_mode = data.Get <EngineMode>("ocr_mode", EngineMode.Default); var ocr_level = data.Get <PageIteratorLevel>("ocr_level", PageIteratorLevel.Word); try { if (redis.HEXISTS(docId.ToString(), page.ToString())) { var bitmap = redis.HGET_BITMAP(docId, page); if (bitmap != null) { var dic = new Dictionary <string, object>() { { "id", docId }, { "page", page }, }; using (var engine = new TesseractEngine("tessdata", ocr_lang, ocr_mode)) using (var pix = new BitmapToPixConverter().Convert(bitmap)) { using (var tes = engine.Process(pix)) { switch (cmd) { case COMMANDS.OCR_TEXT_PAGE: string s = tes.GetText().Trim(); dic.Add("ocr_text", s); break; case COMMANDS.OCR_BOX_PAGE: var boxes = tes.GetSegmentedRegions(ocr_level).Select(x => string.Format("{0}_{1}_{2}_{3}", x.X, x.Y, x.Width, x.Height)).ToArray(); dic.Add("box_format", "x_y_width_height"); dic.Add("box_text", string.Join("|", boxes.Select(x => x.ToString()).ToArray())); dic.Add("box_count", boxes.Length); break; } } } App.Reply(cmd, requestId, input, dic); } } } catch (Exception exInfo) { //string errInfo = cmd.ToString() + " -> " + file + Environment.NewLine + exInfo.Message + Environment.NewLine + exInfo.StackTrace; //redis.HSET("_ERROR:PDF:" + cmd.ToString(), docId.ToString(), errInfo); } }