2021年11月5日金曜日

”Tesseract”というOCRエンジンをWindowsにインストールしたが、コマンドラインはいただけなかったな ー Tesseract-OCR 5.0(アプリケーション)

ユーザーフォームを利用

ウインドウズを使っていると、OCR機能は、グーグルのツールを使うのが普通。
でも、グーグルドライブにファイルを移しながら、手の込んだ作業をするんだ。

つまり、画像ファイルをグーグルドキュメントのアプリで開かねばならないの。
これで、ドキュメントに画像が貼り付けられ、下部にOCR結果が表示されます。

まあ、こう言う手順で画像から文字起こしをしてくれますが、ややっこしいな。
もっと簡単に、OCRアプリに画像を読ませて結果をテキストに起こせないのか。

それをRPAを調べていたら、"tesseract"なるOCRエンジンの存在を発見したの。
このエンジンは、画像認識を活用するRPAアプリの”sikulix”で使われています。

まあ、人間がコンピューターで行う定型作業をロボットで自動化するのがRPA。
英語の略語ですが、自分もRPAアプリのお勉強がてらでインストールしたんだ

これからアプリはおいおい覚えていきますが、単独でOCR機能は使ってみたい。
でも、このエンジンはコマンドライン操作で、自分でプログラムを組むらしい。

なので、手っ取り早く使えるように、エクセルのブックにVBAを仕込んでみた。
コードを次の通り紹介しますので、ぜひインストールして使ってみてください。


Private Sub Workbook_Open() ’ThisWorkBookに記述、開くと実行
 Application.ScreenUpdating = False
   Load UserForm1
   UserForm1.Show
 Windows("OptclCrctrRcgntn.xlsm").Visible = False
End Sub 'ブックは隠してしまう

Private Sub UserForm_Initialize() ’ユーザーフォーム初期化
  Call ItmAdd ’プロシージャを呼び出し
End Sub 'フォームデザインは自分で作ってください
Private Sub CommandButton1_Click() ’コマンドボタンを押した処理
  Call OptclCrctrRcgntn ’プロシージャを呼び出し
End Sub

Sub ItmAdd() ’フォルダ内の画像ファイルの取り扱い(Module1)
Dim fso As FileSystemObject
Dim fl As Folder, f As File, i As Long, tmp() As String
  Set fso = New FileSystemObject ' インスタンス化
  Set fl = fso.GetFolder("C:\Users\PCのID\Pictures\tesseract\") 
   ReDim tmp(fl.Files.Count)
   i = 0
    For Each f In fl.Files ' フォルダ内のファイルを配列で取得
       tmp(i) = f.Name
       i = i + 1
    Next
        For i = 0 To (fl.Files.Count - 1)
          If Right (tmp(i), 4) = ".txt" Then
          GoTo Skip ' 配列のファイル名がテキストならスキップ
        Else
           UserForm1.ComboBox1.AddItem tmp(i)
        End If
Skip:
        Next i ’ユーザ-フォームのコンボボックスに項目追加
  Set fso = Nothing ' 後始末
  Set fl = Nothing
End Sub

Sub OptclCrctrRcgntn() ’Tesseract-OCRとメモ帳の起動(Module1)
Dim TsrAct1 As String, TsrAct2 As String, NtPd As String
Dim Rslt As Long, Str As String 
’読み取り画像は、ピクチャフォルダー下層の”tesseract”フォルダ格納
  NtPd = ""
  NtPd = NtPd & "C:\Windows\System32\notepad.exe "
  NtPd = NtPd & UserForm1.ComboBox1.Text
  NtPd = NtPd & ".txt"
  NtPd = NtPd & ""  'OCR結果をメモ帳で開く
    TsrAct1 = ""
    TsrAct1 = TsrAct1 & "C:\Program Files\Tesseract-OCR\tesseract.exe "
    TsrAct1 = TsrAct1 & UserForm1.ComboBox1.Text
    TsrAct1 = TsrAct1 & " "
    TsrAct1 = TsrAct1 & UserForm1.ComboBox1.Text 
    TsrAct1 = TsrAct1 & " -l jpn"
    TsrAct1 = TsrAct1 & "" '横書画像のOCR実行のパス
      TsrAct2 = ""
      TsrAct2 = TsrAct2 & "C:\Program Files\Tesseract-OCR\tesseract.exe "
      TsrAct2 = TsrAct2 & UserForm1.ComboBox1.Text
      TsrAct2 = TsrAct2 & " "
      TsrAct2 = TsrAct2 & UserForm1.ComboBox1.Text
      TsrAct2 = TsrAct2 & " -l jpn_vert"
      TsrAct2 = TsrAct2 & ""  '横書画像のOCR実行のパス
  Str = "横書画像:OK 縦書画像:NO"
  Rslt = MsgBox(Str, vbYesNo) 'メッセージボックスで横書・縦書選択
    If Rslt = vbYes Then
       ChDir "C:\Users\PCのID\Pictures\tesseract" ’読取りにパス変更必要
       Shell TsrAct1 '横書画像のOCR実行
    Else
       ChDir "C:\Users\PCのID\Pictures\tesseract"
       Shell TsrAct2 '縦書画像のOCR実行
End If
   Application.Wait [Now()] + 2000 / 86400000 '待ち時間2秒くらいか
   Application.DisplayAlerts = False 'エラーメッセージを出さない
   ChDir "C:\Users\PCのID\Pictures\tesseract" '読込先のパスを通す
   Shell NtPd 'OCR結果をメモ帳で開く、OCRが遅れると空白表示
   Application.DisplayAlerts = True
   ChDir ThisWorkbook.Path
End Sub
※注:上記で、記述”PCのID”は、実行PCの値を入力して下さい。

メッセージボックス



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿