TesseractOCRアプリケーションの作成について<手順3.TesseractOCR.exeを作成>

<TesseractOCRアプリケーションの画面一覧について>

  ・メイン画面・・・ジョブの状況を一目で確認できるようにする
  ・帳票定義一覧・・・帳票定義の内容を一覧で表示
  ・帳票定義詳細・・・帳票定義の詳細を更新・削除
  ・読取枠定義・・・帳票定義の読取枠の定義を更新・削除
  ・ジョブ定義一覧・・・ジョブの一覧を表示
  ・ジョブ定義詳細・・・ジョブの内容を登録・削除
  ・ジョブ結果項目修正・・・OCRの結果を確認、修正

<メイン画面>

  特に複雑な画面構成ではないので、Gridコントロールを使い、DataGridを配置していく。
  

<帳票定義一覧>

  


<帳票定義詳細>

  


<読取枠定義>

  

  この画面がTesseractOCRでは一番手間がかかると思っていたが、InkCanvasを利用すると比較的簡単に処理が記述できた。
   <画像を表示しているXaml部分>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Grid.Row="0" >
            <InkCanvas Grid.Row="0" Name="ikcReadItemCanvas" Width="{Binding ActualWidth, ElementName=image}" Height="{Binding ActualHeight, ElementName=image}" 
                       HorizontalAlignment="Left" VerticalAlignment="Top" EditingMode="Select" >
                <InkCanvas.RenderTransform>
                    <MatrixTransform x:Name="matrixTransform" />
                </InkCanvas.RenderTransform>
                <InkCanvas.Background>
                    <VisualBrush >
                        <VisualBrush.Visual>
                            <Image x:Name="image" Stretch="Fill" Width="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelWidth}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelHeight}" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </InkCanvas.Background>
            </InkCanvas>
        </ScrollViewer>

   
 <呼び出し側>

        /// <summary>
        /// 画像設定処理(他の画面からこれを呼ぶ)
        /// </summary>
        /// <param name="filePath">画像ファイルパス</param>
        /// <returns>読み込み成功時true</returns>
        public bool SetImage(string filePath)
        {
            // パスが空
            if (string.IsNullOrEmpty(filePath))
            {
                return false;
            }

            var bmp = new BitmapImage();
            bmp.BeginInit();
            bmp.UriSource = new Uri(filePath);
            bmp.EndInit();
            // 画像設定
            image.Source = bmp;

            return true;
        }

  <Borderの表示方法>
     var b = new Border();
     ikcReadItemCanvas.Children.Add(b);
        InkCanvas.SetTop(b, 10);
        InkCanvas.SetLeft(b, 20);

  <保存するとき>
        y = InkCanvas.GetTop(b);
        x = InkCanvas.GetLeft(b);

  ViewModelに配列を用意しておいて、Borderをインスタンス化し、List<Border>に別管理しておいて保存時に利用するのがおすすめ。
 一応今回の画面は読取枠を表現するためにFileItemクラスというのを作成しておいて、
プロパティとしてBorderArea(Borderクラス),Title(Stringクラス)などを用意しておいた。BorderAreaプロパティは、ikcReadItemCanvasのChildrenにAddしてある。
  例)
     FileItem i = new FileItem();
         ThisViewModel.FileItems.Add(i);
      ikcReadItemCanvas.Children.Add(i.BorderArea);
         InkCanvas.SetTop(i.BorderArea, 10);
         InkCanvas.SetLeft(i.BorderArea, 20);       

<ジョブ定義一覧>

  

<ジョブ定義詳細>

  

<ジョブ結果項目修正>

  

   OCRManager.exeでOCR.exeのために画像を読取枠ごとに切り取っている。この画面はその画像を表示し、データの修正を行えるようにしている。データを修正してからダウンロードでCSVファイル化することができる。

0 件のコメント:

コメントを投稿

PowerShellでEdgeを自動化(インストール不要。参考:郵便追跡サービス自動操作)

1.経緯について  RPAのソフトをインストールできないので、これまでVBSでCreateObjectでブラウザの自動操作をすることがたまにあった。 ※いざというときの手札として持っているだけで安心感が段違い  見た目上IEがインストールされていなくても、CreateObject...