/// <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); }
/// <summary> /// OCR終了処理 /// </summary> /// <param name="env">OCR実行環境</param> public void ocrExecuteEnd() { OcrExecuteEnv env = this._env; if (env == null) { return; } IHocrSDKComponent hocrSdk = HocrSDKInterface.HocrSDKFactory.GetHocrSDK(); IJocrSDKComponent jocrSdk = JocrSDKInterface.JocrSDKFactory.GetJocrSDK(); // パターン辞書登録解除 hocrSdk.CancelPatternDict(env.hocrLibHandle, env.hocrEnvHandle, env.hocrPatDictHandle); jocrSdk.CancelLangDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrLangDictHandle); jocrSdk.CancelPatternDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle); // パターン辞書アンロード hocrSdk.UnloadPatternDict(env.hocrLibHandle, env.hocrPatDictHandle); jocrSdk.UnloadLangDict(env.jocrLibHandle, env.jocrLangDictHandle); jocrSdk.UnloadPatternDict(env.jocrLibHandle, env.jocrPatDictHandle); // 実行環境クローズ hocrSdk.CloseExecEnv(env.hocrLibHandle, env.hocrEnvHandle); jocrSdk.CloseExecEnv(env.jocrLibHandle, env.jocrEnvHandle); // ライブラリーの終了処理 hocrSdk.End(env.hocrLibHandle); jocrSdk.End(env.jocrLibHandle); }
/// <summary> /// 活字OCRを使用した天地補正 /// </summary> /// <param name="image">二値画像</param> /// <returns>天地補正後画像</returns> public Image ExecuteDDirRotate(Image image) { Image rotateImage = null; OcrExecuteEnv env = this.Env; try { rotateImage = JocrSDKInterface.JocrSDKFactory.GetJocrSDK().AutoRotateImage( env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle, image, null, JocrSDKInterface.JocrSDKDefinition.DDIR_PROCESS_CLOSE_DEFAULT); } finally { ocrExecuteEnd(); } return(rotateImage); }
/// <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); }
/// <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); }
/// <summary> /// OCR開始処理 /// </summary> /// <returns>OCR実行環境</returns> public OcrExecuteEnv ocrExecuteBegin() { IHocrSDKComponent hocrSdk = HocrSDKInterface.HocrSDKFactory.GetHocrSDK(); IJocrSDKComponent jocrSdk = JocrSDKInterface.JocrSDKFactory.GetJocrSDK(); JocrSDKInterface.JocrSDKConfig config = new JocrSDKInterface.JocrSDKConfig(); config.langDictTemplate[0] = Config.GetJocrLangDictPath(); config.patternDictTemplate[0] = Config.GetJocrPatternDictPath(); config.langDictTemplate[1] = config.langDictTemplate[2] = null; config.patternDictTemplate[1] = config.patternDictTemplate[2] = null; OcrExecuteEnv env = new OcrExecuteEnv(); // ライブラリーの開始処理 env.hocrLibHandle = hocrSdk.Begin(); env.jocrLibHandle = jocrSdk.Begin(config); // 実行環境オープン env.hocrEnvHandle = hocrSdk.OpenExecEnv(env.hocrLibHandle, HocrSDKEnvType.OCR_HCR); env.jocrEnvHandle = jocrSdk.OpenExecEnv(env.jocrLibHandle, JocrSDKCrType.OCR_JCR); // 辞書ロード hocrSdk.LoadPatternDict(env.hocrLibHandle, Config.GetHocrPatternDictPath()); jocrSdk.LoadPatternDict(env.jocrLibHandle, config.patternDictTemplate[0]); jocrSdk.LoadLangDict(env.jocrLibHandle, config.langDictTemplate[0]); // 辞書ハンドル取得と登録 env.hocrPatDictHandle = hocrSdk.GetDictHandle(env.hocrLibHandle, Config.GetHocrPatternDictPath()); hocrSdk.RegisterPatternDict(env.hocrLibHandle, env.hocrEnvHandle, env.hocrPatDictHandle); env.jocrPatDictHandle = jocrSdk.GetDictHandle(env.jocrLibHandle, config.patternDictTemplate[0]); jocrSdk.RegisterPatternDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrPatDictHandle); env.jocrLangDictHandle = jocrSdk.GetDictHandle(env.jocrLibHandle, config.langDictTemplate[0]); jocrSdk.RegisterLangDict(env.jocrLibHandle, env.jocrEnvHandle, env.jocrLangDictHandle); return(env); }