示例#1
0
    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);
        }
    }
示例#2
0
    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);
        }
    }