Beispiel #1
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 #2
0
        private Image CutImage(TransArea area, Image orgImage)
        {
            if (area.TransRect.Height <= 0 || area.TransRect.Width <= 0 ||
                area.TransRect.X + area.TransRect.Width > orgImage.Width ||
                area.TransRect.Y + area.TransRect.Height > orgImage.Height)
            {
                return(null);
            }
            Bitmap newimg = (new Bitmap(orgImage)).Clone(area.TransRect, orgImage.PixelFormat);

            newimg.SetResolution(200, 200);
            return(newimg);
        }
Beispiel #3
0
        private void button3_Click(object sender, EventArgs e)
        {
            if (this.SelectedRow != -1)
            {
                if (cmbOmrType.SelectedValue == null)
                {
                    MessageBox.Show("OMR種別を選択してください。");
                }

                PictureBox pic = this.tableLayoutPanel1.GetControlFromPosition(1, this.SelectedRow) as PictureBox;
                if (pic == null)
                {
                    return;
                }

                Image resultImg = pic.Image;

                TransArea area = (TransArea)pic.Tag;

                Image     masterImage = this.TargetImage;
                Rectangle masterArea  = area.TransRect;

                OcrSDK ocrSdk = new OcrSDK();

                DocumentSDKCheckType omrType = (DocumentSDKCheckType)cmbOmrType.SelectedValue;

                Rectangle markArea = new Rectangle()
                {
                    X      = area.CharRect.X - area.TransRect.X,
                    Y      = area.CharRect.Y - area.TransRect.Y,
                    Width  = area.CharRect.X - area.TransRect.X + area.CharRect.Width,
                    Height = area.CharRect.Y - area.TransRect.Y + area.CharRect.Height,
                };
                if (omrType == DocumentSDKCheckType.OMR_CT_UNKNOWN)
                {
                    markArea = new Rectangle()
                    {
                        X      = 0,
                        Y      = 0,
                        Width  = area.TransRect.Width - 1,
                        Height = area.TransRect.Height - 1,
                    };
                }
                var result = ocrSdk.executeOmr(resultImg, omrType, markArea, masterImage, masterArea);

                this.txtResult.Text = string.Format("Check_res:{0} \n Score:{1}", result.one_res[0].check_res.ToString(), result.one_res[0].score);
            }
        }
Beispiel #4
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));
        }