/// <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; } }
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); }
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); } }
/// <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)); }