/// <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); }
public SDKArea(DoOcrSDKArea area) { this.xs = area.xs; this.xe = area.xe; this.ys = area.ys; this.ye = area.ye; }
/// <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)); }