示例#1
0
        /// <summary>
        /// 文字認識領域を取得する
        /// </summary>
        /// <returns></returns>
        public DoOcrSDKArea GetCharArea()
        {
            DoOcrSDKArea area;

            if (this.CharRect.IsEmpty || !this.TransRect.Contains(this.CharRect))
            {
                //文字領域が設定されないあるいは文字領域は不正の場合、項目領域を使用する
                //(項目画像のため画像全体だが、ピッタリだとDoOCRがうまく動かないため)
                area = new DoOcrSDKArea()
                {
                    xs = (short)1,
                    ys = (short)1,
                    xe = (short)(TransRect.Width - 1),
                    ye = (short)(TransRect.Height - 1),
                };
            }
            else
            {
                area = new DoOcrSDKArea()
                {
                    xs = (short)(CharRect.X == TransRect.X ? CharRect.X - TransRect.X + 1 : CharRect.X - TransRect.X),
                    ys = (short)(CharRect.Y == TransRect.Y ? CharRect.Y - TransRect.Y + 1 : CharRect.Y - TransRect.Y),
                    xe = (short)(CharRect.Width == TransRect.Width ? CharRect.X - TransRect.X + CharRect.Width - 1 : CharRect.X - TransRect.X + CharRect.Width),
                    ye = (short)(CharRect.Height == TransRect.Height ? CharRect.Y - TransRect.Y + CharRect.Height - 1 : CharRect.Y - TransRect.Y + CharRect.Height),
                };
            }
            return(area);
        }
示例#2
0
 public SDKArea(DoOcrSDKArea area)
 {
     this.xs = area.xs;
     this.xe = area.xe;
     this.ys = area.ys;
     this.ye = area.ye;
 }
示例#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));
        }