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
        private RcFontType GetOcrMode()
        {
            RcFontType mode = RcFontType.None;

            if (this.chkJOCR.Checked)
            {
                mode = RcFontType.JOCR;
            }
            if (this.chkHCOR.Checked)
            {
                mode = mode | RcFontType.HOCR;
            }
            if (mode == RcFontType.None)
            {
                mode = RcFontType.JOCR;
            }
            return(mode);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// DoOCR処理
        /// </summary>
        /// <param name="image">二値化画像</param>
        /// <param name="env">OCR実行環境</param>
        /// <param name="ocrExecItem">OCR実行対象データ</param>
        /// <param name="monitoring">監視フォルダ定義</param>
        /// <returns>DoOCR結果エンティティのリスト</returns>
        public DoOcrExceuteResult executeDoOcr(Image image, TransArea transArea, CharOption charOpt, RcFontType mode)
        {
            IDoOcrSDKComponent doOcrSdk = DoOcrSDKFactory.GetDoOcrSDK();

            // 活字認識用環境の設定
            DoOcrSDKJocrEnvHandle jocrEnv;

            if ((mode & RcFontType.JOCR) == RcFontType.JOCR)
            {
                // 認識字体が活字か両方
                // ライブラリハンドル
                DoOcrSDKJocrLibHandle jocrLibHandle = new DoOcrSDKJocrLibHandle()
                {
                    pLibHandle = this.Env.jocrLibHandle.pLibHandle,
                };
                // 辞書ハンドル
                DoOcrSDKJocrHandle jocrDicHandle = new DoOcrSDKJocrHandle()
                {
                    handle = this.Env.jocrPatDictHandle.handle,
                };
                // 言語辞書ハンドル
                DoOcrSDKJocrHandle jocrLDicHandle = new DoOcrSDKJocrHandle()
                {
                    handle = this.Env.jocrLangDictHandle.handle,
                };
                jocrEnv = new DoOcrSDKJocrEnvHandle()
                {
                    libHandle  = jocrLibHandle,         // ライブラリハンドル
                    dicHandle  = jocrDicHandle,         // 辞書ハンドル
                    ldicHandle = jocrLDicHandle,        // 言語辞書ハンドル
                    certainty  = (short)charOpt.TypeCp, // 確信度
                };
            }
            else
            {
                // 認識字体が手書き
                jocrEnv = null;
            }

            // 手書き認識用環境の設定
            DoOcrSDKHocrEnvHandle hocrEnv;

            if ((mode & RcFontType.HOCR) == RcFontType.HOCR)
            {
                // 認識字体が手書きか両方
                // ライブラリハンドル
                DoOcrSDKHocrLibHandle hocrLibHandle = new DoOcrSDKHocrLibHandle()
                {
                    pLibHandle = this.Env.hocrLibHandle.pLibHandle,
                };
                // 辞書ハンドル
                DoOcrSDKHocrHandle hocrDicHandle = new DoOcrSDKHocrHandle()
                {
                    handle = this.Env.hocrPatDictHandle.handle,
                };
                hocrEnv = new DoOcrSDKHocrEnvHandle()
                {
                    libHandle      = hocrLibHandle,                 // ライブラリハンドル
                    dicHandle      = hocrDicHandle,                 // 辞書ハンドル
                    certainty_ank  = (short)charOpt.HwCpANK,        // 確信度(ANK)のしきい値
                    certainty_kana = (short)charOpt.HwCpKanaKanji,  // 確信度(かな)のしきい値
                };
            }
            else
            {
                // 認識字体が活字
                hocrEnv = null;
            }

            // 認識対象領域情報の設定(項目画像のため画像全体だが、ピッタリだとDoOCRがうまく動かないため)
            DoOcrSDKArea area = transArea.GetCharArea();

            // 認識実行パラメータの設定
            DoOcrSDKNoiseSize noiseSize = new DoOcrSDKNoiseSize()
            {
                minWidth  = 0,              // 有効な矩形の最小幅
                minHeight = 0,              // 有効な矩形の最小高さ
                maxWidth  = short.MaxValue, // 有効な矩形の最大幅
                maxHeight = short.MaxValue, // 有効な矩形の最大高さ
            };


            DoOcrSDKItemMargin itemMargin = new DoOcrSDKItemMargin()
            {
                left   = 0,
                top    = 0,
                right  = 0,
                bottom = 0,
            };
            DoOcrSDKOcrParam param = new DoOcrSDKOcrParam()
            {
                line_dir      = DoOcrSDKDirection.LANDSCAPE,           // 行方向
                char_dir      = DoOcrSDKCharDirection.NORTH,           // 文字方向
                char_type     = createDoOcrCharType(charOpt),          // 認識対象文字種
                symbol_flag   = createDoOcrSymbolFlag(charOpt),        // 記号認識有無フラグ
                dilation_flag = 0,                                     // 手書き文字太らせフラグ(未使用)
                onechar_flag  = (short)(charOpt.RcDigit == 1 ? 1 : 0), // 一画認識フラグ(未使用)
                form          = charOpt.RcForm,                        // 認識フォーム
                noise_size    = noiseSize,                             // ノイズ除去サイズ(別途行っているためここでは不要)
                item_margin   = itemMargin,                            // マージン情報(未使用)
            };

            List <DoOcrSDKResult> resultList = new List <DoOcrSDKResult>();

            // 活字OCR1行認識の実行
            // 例外処理は一つ上で処理させるため、ここではtry-catchは使用しない
            resultList = doOcrSdk.DoOcrExecute(jocrEnv, hocrEnv, image, area, param, Convert.ToSByte(charOpt.RcDigit));

            // 指定した文字数分だけ結果を残す
            //            this.deleteResultByOutofRcDigit(resultList, Convert.ToInt32(ocrExecItem.RcDigit));

            return(new DoOcrExceuteResult(resultList));
        }