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