ユーザーフォームを利用 |
ウインドウズを使っていると、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 件のコメント:
コメントを投稿