【VBA】画像ファイル内のテキストを抽出する【OCR】

VBAで
画像ファイル内のテキストを・・・

画像ファイル内のテキスト
画像ファイル内のテキスト


抽出できます!
※OCRできます。
※精度はそこそこです。

抽出されたテキスト
抽出されたテキスト


VBAから
 ・無料のOCRエンジン「tesseract-ocr」
を実行することで実現します!
※「tesseract-ocr」のインストールが必要です。

PR

tesseract-ocrのダウンロード

手順

以下のURLにアクセスする。



手順

「tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe (64 bit)」をクリックしてインストーラーをダウンロードする。

「tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe」をダウンロード
「tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe」をダウンロード
PR

tesseract-ocrのインストール

手順

ダウンロードしたインストーラー(tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe)をダブルクリックする。

「tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe」をダブルクリック
「tesseract-ocr-w64-setup-X.X.X.XXXXXXXX.exe」をダブルクリック


手順

「OK」をクリックする。

「OK」をクリック
「OK」をクリック


手順

「Next」をクリックする。

「Next」をクリック
「Next」をクリック


手順

「I Agree」をクリックする。

「I Agree」をクリック
「I Agree」をクリック


手順

「Next」をクリックする。

「Next」をクリック
「Next」をクリック


手順

「Additional script data(download)」の「+」をクリックして、以下の2つにチェックを入れる。
※日本語を抽出するために必要なモノです。

・Japanese script
・Japanese vertical script

「Additional script data(download)」の「+」をクリック
「Additional script data(download)」の「+」をクリック
「Japanese script」と「Japanese vertical script」にチェックを入れる
「Japanese script」と「Japanese vertical script」にチェックを入れる


手順

「Additional language data(download)」の「+」をクリックして、以下の2つにチェックを入れて、「Next」をクリックする。
※こちらも日本語を抽出するために必要なモノです。忘れずに。

・Japanese
・Japanese(vertical)

「Additional language data(download)」の「+」をクリック
「Additional language data(download)」の「+」をクリック
「Japanese」と「Japanese(vertical)」チェックを入れて、「Next」をクリック
「Japanese」と「Japanese(vertical)」チェックを入れて、「Next」をクリック


手順

「Next」をクリックする。

「Next」をクリック
「Next」をクリック


手順

「Install」をクリックする。

「Install」をクリック
「Install」をクリック


手順

「Next」をクリックする。

「Next」をクリック
「Next」をクリック


手順

「Finish」をクリックする。

「Finish」をクリック
「Finish」をクリック
PR

VBAコード

ここでは例として
 ・デスクトップ配下の画像ファイル「sample_gazou.png」から
 ・テキストを抽出
します。
※テキストファイルを出力します。

画像ファイル「sample_gazou.png」内のテキスト
画像ファイル「sample_gazou.png」内のテキスト
'変数の宣言を必須
Option Explicit

Sub excePromptCmd()
    
    Dim tesseractOcrExe As String
    Dim imageFile As String
    Dim outputFolder As String
    Dim outputFileName As String
    Dim execCommand As String
    Dim wsh As Object
    Dim result As Integer
    
    'Tesseract OCRの実行ファイル
    tesseractOcrExe = "C:\Program Files\Tesseract-OCR\tesseract.exe"
    '画像ファイル
    imageFile = "C:\Users\user\Desktop\sample_gazou.png"
    '出力ファイル名
    outputFileName = "sampleOcr"
    '出力フォルダ ※末尾に「\」を付ける
    outputFolder = "C:\Users\user\Desktop\output\"

    '実行するコマンドを指定
    execCommand = """" & tesseractOcrExe & """" & " " & imageFile & " " & outputFolder & outputFileName & " -l jpn"
    
    Set wsh = CreateObject("WScript.Shell")
    
    'コマンドを同期実行
    result = wsh.Run(Command:="%ComSpec% /c " & execCommand, WindowStyle:=0, WaitOnReturn:=True)
    
    If (result = 0) Then
        MsgBox ("コマンドは正常終了しました。")
    Else
        MsgBox ("コマンドは異常終了しました。")
    End If
    
    '後片付け
    Set wsh = Nothing
    
End Sub

以下を指定します(15~21行目)。
※状況に応じて任意の値を指定してください。

・Tesseract OCRの実行ファイル
・画像ファイル ※今回はpngファイルを指定していますが別の形式のファイルでも大丈夫です。
・出力ファイル名
・出力フォルダ  ※末尾に「\」を付ける

抽出するテキストが「日本語 かつ 書き」のため、オプション「-l」に「jpn」を指定します(24行目)。
※「日本語 かつ 書き」の場合は「jpn_vert」を指定します。

PR

実行結果

画像ファイル内のテキストを抽出できました。
※テキストファイルを出力できました。

実行結果①
実行結果①
実行結果②
実行結果②
実行結果③
実行結果③
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

PR

参考②

Pythonでも画像ファイル内のテキストを抽出できます。

詳細は以下の記事をご確認ください。

PR

参考③

OCRエンジン「tesseract-ocr」はHPやGoogle等により開発されました。

詳細は以下をご確認ください。