Beispiel #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);
        }
Beispiel #2
0
        /// <summary>
        /// OCR実行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (this.SelectedRow != -1)
            {
                PictureBox pic = this.tableLayoutPanel1.GetControlFromPosition(1, this.SelectedRow) as PictureBox;
                if (pic == null)
                {
                    return;
                }
                Image resultImg = pic.Image;
                counter.Start("ocrExecute");
                DoOcrSDK ocrSdk = new DoOcrSDK();

                ocrSdk.ocrExecuteBegin();
                CharOption opt = GetOption();

                TransArea area = (TransArea)pic.Tag;

                var result = ocrSdk.executeDoOcr(resultImg, area, opt, GetOcrMode());
                MessageBox.Show(result.ResultCharLine);
                this.txtResult.Text = result.ResultCharLine;

                ocrSdk.ocrExecuteEnd();
                counter.End();
                Image rangeImg = result.DrawRange(resultImg);
                this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                pictureBox1.Image         = rangeImg;
            }
        }
Beispiel #3
0
        /// <summary>
        /// DoOCR認識対象文字種の値作成
        /// </summary>
        /// <param name="ocrExecItem">OCR実行ビュー</param>
        /// <returns>認識対象文字種</returns>
        private DoOcrSDKCharType createDoOcrCharType(CharOption charOpt)
        {
            DoOcrSDKCharType charType = 0;

            // 第1水準漢字
            if (charOpt.JISLevel1KanjiSetRcFlag)
            {
                charType |= DoOcrSDKCharType.KANJI1;
            }

            // 第2水準漢字
            if (charOpt.JISLevel2KanjiSetRcFlag)
            {
                charType |= DoOcrSDKCharType.KANJI2;
            }

            // ひらがな
            if (charOpt.HiraganaRcFlag)
            {
                charType |= DoOcrSDKCharType.HIRAGANA;
            }

            // カタカナ
            if (charOpt.KatakanaRcFlag)
            {
                charType |= DoOcrSDKCharType.KATAKANA;
            }

            // 数字
            if (charOpt.NoRcFlag)
            {
                charType |= DoOcrSDKCharType.NUMERAL;
            }

            // 英大文字
            if (charOpt.UpperCaseRcFlag)
            {
                charType |= DoOcrSDKCharType.ALPHABETUPPER;
            }

            // 英小文字
            if (charOpt.LowerCaseRcFlag)
            {
                charType |= DoOcrSDKCharType.ALPHABETLOWER;
            }

            return(charType);
        }
Beispiel #4
0
        private CharOption GetOption()
        {
            CharOption opt = new CharOption()
            {
                NoRcFlag                = this.chkNoRcFlag.Checked,
                UpperCaseRcFlag         = this.chkUpperCaseRcFlag.Checked,
                LowerCaseRcFlag         = this.chkLowerCaseRcFlag.Checked,
                HiraganaRcFlag          = this.chkHiraganaRcFlag.Checked,
                KatakanaRcFlag          = this.chkKatakanaRcFlag.Checked,
                JISLevel1KanjiSetRcFlag = this.chkJISLevel1KanjiSetRcFlag.Checked,
                JISLevel2KanjiSetRcFlag = this.chkJISLevel2KanjiSetRcFlag.Checked,
                Symbol1RcFlag           = this.chkSymbol1RcFlag.Checked,
                Symbol2RcFlag           = this.chkSymbol2RcFlag.Checked,
                PunctuationRcFlag       = this.chkPunctuationRcFlag.Checked,
            };

            return(opt);
        }
Beispiel #5
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);
        }
Beispiel #6
0
        private CharOption GetOption()
        {
            CharOption opt = new CharOption()
            {
                NoRcFlag                = this.chkNoRcFlag.Checked,
                UpperCaseRcFlag         = this.chkUpperCaseRcFlag.Checked,
                LowerCaseRcFlag         = this.chkLowerCaseRcFlag.Checked,
                HiraganaRcFlag          = this.chkHiraganaRcFlag.Checked,
                KatakanaRcFlag          = this.chkKatakanaRcFlag.Checked,
                JISLevel1KanjiSetRcFlag = this.chkJISLevel1KanjiSetRcFlag.Checked,
                JISLevel2KanjiSetRcFlag = this.chkJISLevel2KanjiSetRcFlag.Checked,
                Symbol1RcFlag           = this.chkSymbol1RcFlag.Checked,
                Symbol2RcFlag           = this.chkSymbol2RcFlag.Checked,
                PunctuationRcFlag       = this.chkPunctuationRcFlag.Checked,
                RcDigit = (int)this.numRigit.Value,
                RcForm  = string.IsNullOrEmpty(this.txtRcForm.Text)?string.Empty:this.txtRcForm.Text
            };

            return(opt);
        }
Beispiel #7
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);
        }
Beispiel #8
0
        /// <summary>
        /// DoOCR記号フラグの値作成
        /// </summary>
        /// <param name="ocrExecItem">OCR実行ビュー</param>
        /// <returns>記号フラグ</returns>
        private DoOcrSDKSymbolFlag createDoOcrSymbolFlag(CharOption charOpt)
        {
            DoOcrSDKSymbolFlag symbolFlag = 0;

            // 記号1
            if (charOpt.Symbol1RcFlag)
            {
                symbolFlag |= DoOcrSDKSymbolFlag.SYMBOL_1;
            }

            // 記号2
            if (charOpt.Symbol2RcFlag)
            {
                symbolFlag |= DoOcrSDKSymbolFlag.SYMBOL_2;
            }

            // 句読点
            if (charOpt.PunctuationRcFlag)
            {
                symbolFlag |= DoOcrSDKSymbolFlag.SYMBOL_KANA;
            }

            return(symbolFlag);
        }
Beispiel #9
0
        /// <summary>
        /// 活字OCR認識対象文字種のパラメーター解析
        /// </summary>
        /// <param name="ocrExecItem">OCR実行ビュー</param>
        /// <returns>認識対象文字種</returns>
        private JocrSDKInterface.JocrSDKCharType purseJocrParameter(CharOption charOpt)
        {
            JocrSDKInterface.JocrSDKCharType charType = 0;

            // 数字
            if (charOpt.NoRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_NUM;
            }

            // 英大文字
            if (charOpt.UpperCaseRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_ALPH_UPPER;
            }

            // 英小文字
            if (charOpt.LowerCaseRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_ALPH_LOWER;
            }

            // カタカナ
            if (charOpt.KatakanaRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_KATAKANA;
            }

            // ひらがな
            if (charOpt.HiraganaRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_HIRAGANA;
            }

            // 第1水準漢字
            if (charOpt.JISLevel1KanjiSetRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_KANJI;
            }

            // 第2水準漢字
            if (charOpt.JISLevel2KanjiSetRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_KANJI2;
            }

            // 記号1
            if (charOpt.Symbol1RcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_SYMBOL;
            }

            // 記号2
            if (charOpt.Symbol2RcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_SYMBOL;
            }

            // 句読点
            if (charOpt.PunctuationRcFlag)
            {
                charType |= JocrSDKCharType.JOCR_CT_SYMBOL;
            }

            return(charType);
        }
Beispiel #10
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));
        }