Ejemplo n.º 1
0
        /// <summary>
        /// OCR処理
        /// </summary>
        /// <param name="image">二値化画像</param>
        /// <param name="env">OCR実行環境</param>
        /// <param name="charOpt">OCR実行対象データ</param>
        /// <returns>OCR結果エンティティ</returns>
        public OcrExecuteResult executeOcr(Image image, CharOption charOpt, RcFontType mode)
        {
            OcrExecuteResult result = new OcrExecuteResult();
            OcrExecuteEnv    env    = this.Env;

            image = executeExtractImage(image, new Rectangle(1, 1, image.Width - 2, image.Height - 2));
            if ((mode & RcFontType.JOCR) == RcFontType.JOCR)
            {
                try
                {
                    // 活字OCR処理の実行
                    result.JocrResultList = executeJocr(image, env, charOpt);
                }
                catch
                {
                }
            }
            if ((mode & RcFontType.HOCR) == RcFontType.HOCR)
            {
                try
                {
                    //手書
                    result.HocrResultList = executeHocr(image, env, charOpt);
                }
                catch (Exception ex)
                {
                    string num = ex.Message;
                }
            }

            result.judgeResult();
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// OCR終了処理
        /// </summary>
        /// <param name="env">OCR実行環境</param>
        public void ocrExecuteEnd()
        {
            OcrExecuteEnv env = this._env;

            if (env == null)
            {
                return;
            }

            IHocrSDKComponent hocrSdk = HocrSDKInterface.HocrSDKFactory.GetHocrSDK();
            IJocrSDKComponent jocrSdk = JocrSDKInterface.JocrSDKFactory.GetJocrSDK();

            // パターン辞書登録解除
            hocrSdk.CancelPatternDict(env.hocrLibHandle, env.hocrEnvHandle, env.hocrPatDictHandle);
            jocrSdk.CancelLangDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrLangDictHandle);
            jocrSdk.CancelPatternDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle);

            // パターン辞書アンロード
            hocrSdk.UnloadPatternDict(env.hocrLibHandle, env.hocrPatDictHandle);
            jocrSdk.UnloadLangDict(env.jocrLibHandle, env.jocrLangDictHandle);
            jocrSdk.UnloadPatternDict(env.jocrLibHandle, env.jocrPatDictHandle);

            // 実行環境クローズ
            hocrSdk.CloseExecEnv(env.hocrLibHandle, env.hocrEnvHandle);
            jocrSdk.CloseExecEnv(env.jocrLibHandle, env.jocrEnvHandle);

            // ライブラリーの終了処理
            hocrSdk.End(env.hocrLibHandle);
            jocrSdk.End(env.jocrLibHandle);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 活字OCRを使用した天地補正
        /// </summary>
        /// <param name="image">二値画像</param>
        /// <returns>天地補正後画像</returns>
        public Image ExecuteDDirRotate(Image image)
        {
            Image         rotateImage = null;
            OcrExecuteEnv env         = this.Env;

            try
            {
                rotateImage = JocrSDKInterface.JocrSDKFactory.GetJocrSDK().AutoRotateImage(
                    env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle,
                    image, null, JocrSDKInterface.JocrSDKDefinition.DDIR_PROCESS_CLOSE_DEFAULT);
            }
            finally
            {
                ocrExecuteEnd();
            }

            return(rotateImage);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 活字OCR処理の実行
        /// </summary>
        /// <param name="image">二値化画像</param>
        /// <param name="env">OCR実行環境</param>
        /// <param name="ocrExecItem">OCR実行対象データ</param>
        private List <SDKResult> executeJocr(Image image, OcrExecuteEnv env, CharOption charOpt)
        {
            //// 手書きOCR処理
            //IJocrSDKComponent jocrSdk = JocrSDKInterface.JocrSDKFactory.GetJocrSDK();

            //var chartype = purseJocrParameter(charOpt);

            //// 認識対象文字種の設定
            //jocrSdk.SetCharType(env.jocrLibHandle, env.jocrPatDictHandle, chartype);

            //// 実行パラメーターの設定
            //JocrSDKInterface.JocrSDKParam param = new JocrSDKInterface.JocrSDKParam()
            //{
            //    line_dir = JocrSDKLineDir.JOCR_LD_HORIZONTAL,
            //    char_dir = JocrSDKCharDir.JOCR_CD_NORTH,
            //    edge_mode = JocrSDKEdgeMode.JOCR_EM_IGNORE,
            //    lineseg_level = JocrSDKLineSegLevel.JOCR_LL_DEFAULT,
            //    charseg_level = JocrSDKCharSegLevel.JOCR_CL_DEFAULT,
            //    quick_level = JocrSDKQuickLevel.JOCR_QL_MEDIUM,
            //    post_mode = JocrSDKPostMode.JOCR_PM_OFF,
            //    output_mode = JocrSDKOutputMode.JOCR_OM_NONE,
            //};

            //// 対象領域の設定
            //JocrSDKInterface.JocrSDKArea area = new JocrSDKInterface.JocrSDKArea()
            //{
            //    xs = 0,
            //    ys = 0,
            //    xe = System.Convert.ToInt16(image.Size.Width - 1),
            //    ye = System.Convert.ToInt16(image.Size.Height - 1),
            //};

            //// 活字OCR1行認識の実行
            //List<JocrSDKResult> jocrRetList = jocrSdk.ExecuteOneLine(env.jocrLibHandle, env.jocrEnvHandle,
            //    image, area, param, MaxOcrOneLineLength);

            //List<SDKResult> retList = new List<SDKResult>();
            //if (jocrRetList != null && jocrRetList.Count > 0)
            //{
            //    jocrRetList.ForEach(x => retList.Add(new SDKResult(x)));
            //}
            //return retList;
            return(null);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 手書きOCR処理の実行
        /// </summary>
        /// <param name="image">二値化画像</param>
        /// <param name="env">OCR実行環境</param>
        /// <param name="ocrExecItem">OCR実行対象データ</param>
        private List <SDKResult> executeHocr(Image image, OcrExecuteEnv env, CharOption charOpt)
        {
            //// 手書きOCR処理
            //IHocrSDKComponent hocrSdk = HocrSDKInterface.HocrSDKFactory.GetHocrSDK();

            //var chartype = purseHocrParameter(charOpt);

            //// 認識対象文字種の設定
            //hocrSdk.SetCharType(env.hocrLibHandle, env.hocrPatDictHandle, chartype);

            //// 実行パラメーターの設定
            //HocrSDKInterface.HocrSDKParam param = new HocrSDKInterface.HocrSDKParam()
            //{
            //    quick_level = HocrSDKInterface.HocrSDKRecogLevel.HOCR_QL_LOW,
            //};

            //// 対象領域の設定
            //HocrSDKInterface.HocrSDKArea area = new HocrSDKInterface.HocrSDKArea()
            //{
            //    xs = 0,
            //    ys = 0,
            //    xe = System.Convert.ToInt16(image.Size.Width - 1),
            //    ye = System.Convert.ToInt16(image.Size.Height - 1),
            //};

            //// 手書きOCR1行認識の実行
            //List<HocrSDKResult> hocrRetList = hocrSdk.ExecuteOneLine(env.hocrLibHandle, env.hocrEnvHandle,
            //    image, area, param, MaxOcrOneLineLength);

            //List<SDKResult> retList = new List<SDKResult>();
            //if (hocrRetList != null && hocrRetList.Count > 0)
            //{
            //    hocrRetList.ForEach(x => retList.Add(new SDKResult(x)));
            //}
            //return retList;
            return(null);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// OCR開始処理
        /// </summary>
        /// <returns>OCR実行環境</returns>
        public OcrExecuteEnv ocrExecuteBegin()
        {
            IHocrSDKComponent hocrSdk = HocrSDKInterface.HocrSDKFactory.GetHocrSDK();
            IJocrSDKComponent jocrSdk = JocrSDKInterface.JocrSDKFactory.GetJocrSDK();

            JocrSDKInterface.JocrSDKConfig config = new JocrSDKInterface.JocrSDKConfig();
            config.langDictTemplate[0]    = Config.GetJocrLangDictPath();
            config.patternDictTemplate[0] = Config.GetJocrPatternDictPath();
            config.langDictTemplate[1]    = config.langDictTemplate[2] = null;
            config.patternDictTemplate[1] = config.patternDictTemplate[2] = null;

            OcrExecuteEnv env = new OcrExecuteEnv();

            // ライブラリーの開始処理
            env.hocrLibHandle = hocrSdk.Begin();
            env.jocrLibHandle = jocrSdk.Begin(config);

            // 実行環境オープン
            env.hocrEnvHandle = hocrSdk.OpenExecEnv(env.hocrLibHandle, HocrSDKEnvType.OCR_HCR);
            env.jocrEnvHandle = jocrSdk.OpenExecEnv(env.jocrLibHandle, JocrSDKCrType.OCR_JCR);

            // 辞書ロード
            hocrSdk.LoadPatternDict(env.hocrLibHandle, Config.GetHocrPatternDictPath());
            jocrSdk.LoadPatternDict(env.jocrLibHandle, config.patternDictTemplate[0]);
            jocrSdk.LoadLangDict(env.jocrLibHandle, config.langDictTemplate[0]);

            // 辞書ハンドル取得と登録
            env.hocrPatDictHandle = hocrSdk.GetDictHandle(env.hocrLibHandle, Config.GetHocrPatternDictPath());
            hocrSdk.RegisterPatternDict(env.hocrLibHandle, env.hocrEnvHandle, env.hocrPatDictHandle);
            env.jocrPatDictHandle = jocrSdk.GetDictHandle(env.jocrLibHandle, config.patternDictTemplate[0]);
            jocrSdk.RegisterPatternDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle);
            env.jocrLangDictHandle = jocrSdk.GetDictHandle(env.jocrLibHandle, config.langDictTemplate[0]);
            jocrSdk.RegisterLangDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrLangDictHandle);

            return(env);
        }