knowledge Webページのスクリーンショットを取得して表示された英数字をOCRで読み取るサンプル

本記事では、AutoMateのアクション「OCR」を使用して、画面情報から文字列(英数字)を読み取るサンプルを紹介します。
(なお、本サンプルは、「Webブラウザ - 値の取得」にて取得可能な要素をOCRで読み取っていますが、実際に使用する場面としては読み取り対象の文字列が画像になっていて文字列コピーできないような場合を想定しています)
【注意】AutoMateの「OCR」アクションは、英数字のみ対応しており、日本語の読み取りには対応しておりませんのでご注意ください。

■処理の概要:ページ下部「Copyright 2019 Sanwa Comtec K.K. All Rights Reserved.」の部分をOCRで読み取る
1. Webページ(https://www.sct.co.jp/amdemo/order1.php)を開く
2. ウィンドウサイズを固定化し、拡大倍率を125%に変更する(100%のままOCRをかけると、文字が小さすぎて精度が悪いため)
3. 2のウィンドウのスクリーンショットをデスクトップに保存
4. 3から、読み取り範囲を別の画像としてクロップする(OCRアクションのリージョン指定の場合、画像によって座標がずれる事象が確認されているため、こちらの方法で回避)
5. 4の画像をOCRアクションで読み取り。この際、黒字の方が認識率が高くなる為、画像の色を反転させて読み取りを行う
6. Internet Explorerの表示倍率を100%に戻す
7. 5にて読み取った結果をダイアログに表示

■処理作成時の留意点
A. スクリーンショットを取得する前に、対象画面のフォーカスおよびサイズ固定を必ず実施する
OCR処理は画面サイズが変化してはならない為、「ウィンドウ - サイズ変更」アクションを使用してサイズを必ず固定する必要があります。
また、本サンプルでは「アクティブ ウィンドウ」準拠でスクリーンショットを取得していますが、フルスクリーンで取得する場合は必ずウィンドウ位置も固定するか、最大化する必要があります。
(なお、フルスクリーン + 最大化で対応する場合は、ディスプレイの解像度が変化してはいけません)

B. 画像クロップの設定を行う際は、AutoMateで取得したスクリーンショットで実施する
画像をクロップする設定を行う際、もとになる画像はPrintScreenで取得した画像ではなく、AutoMateの「画像」アクションで取得したスクリーンショットを使用することが必要です。
必ずしもPrintScreenで取得した画像とAutoMateの「画像」アクションで取得したスクリーンショットが同一であるとは限らないためです。

C. 画像クロップの設定方法例
画像クロップを行う際に切り出し位置や選択する幅を特定するには、Windowsのペイント(mspaint)等を利用すると効果的です。
以下、設定例です(Windowsのペイントを使用した場合)。
・切り出し開始位置(左上隅)の特定
切り出し位置とするポイントにカーソルを合わせた際に、左下(赤枠部分)に現れるピクセル位置を控えます。
[図1]

なお、ペイントでは[横軸] x [縦軸]の表示となっていますが、AutoMateの切り出し開始位置の指定は[縦軸][横軸]の順に並んでいるのでご注意ください。
[図2:AutoMateの設定一例]

・切り出し幅(横・縦)の設定
ペイントにおいて「選択」をクリックし四角選択をクロップしたい範囲に対して実施すると、四角選択した部分の幅および高さが左下(赤枠部分、現在のマウス位置ピクセルの隣)に表示されます。
こちらはAutoMateでも[横軸][縦軸]の並び順になっているので、それぞれ入力します。
[図3]

■実際のサンプルタスク

<AMVARIABLE NAME="var_Text" VALUE="" />
<AMBROWSER URL="https://www.sct.co.jp/amdemo/order1.php" SESSION="BrowserSession1" />
<!--対象画面のサイズを変更-->
<AMWINDOW ACTIVITY="resize" WINDOWTITLE="AutoMate Demo - Internet Explorer" WIDTH="1222" HEIGHT="778" />
<!--対象の画面にフォーカス-->
<AMWINDOW WINDOWTITLE="AutoMate Demo - Internet Explorer" />
<AMWINDOW WINDOWTITLE="AutoMate Demo - Internet Explorer" />
<!--表示倍率を一度100%に戻す-->
<AMWAIT SCALAR="1" />
<AMINPUT KEYSTROKES="{CTRL}0" />
<AMWAIT SCALAR="1" />
<!--画面を拡大-->
<AMWAIT SCALAR="1" />
<AMINPUT KEYSTROKES="{CTRL}+" />
<AMWAIT SCALAR="1" />
<!--アクティブウィンドウのスクリーンショットをデスクトップに保存-->
<AMIMAGE ACTIVITY="capture_screen" FILE="%GetDesktopDirectory()%\Image.png" CAPTURETYPE="active_window" />
<!--所定の場所のイメージをクロップする-->
<AMIMAGE ACTIVITY="crop" OVERWRITE="YES" SOURCEIMAGE="%GetDesktopDirectory()%\Image.png" TOP="654" LEFT="420" WIDTH="387" HEIGHT="32" DESTINATIONIMAGE="%GetDesktopDirectory()%\Cropped_Image.png" />
<!--黒字の方が認識率が高いため、画像の色を反転させてOCRをかける-->
<AMOCR INVERT="YES" IMAGE="%GetDesktopDirectory()%\Cropped_Image.png" RESULTVARIABLE="var_Text" />
<!--表示倍率を100%に戻す-->
<AMWAIT SCALAR="1" />
<AMINPUT KEYSTROKES="{CTRL}0" />
<AMWAIT SCALAR="1" />
<AMSHOWDIALOG COUNTDOWNDELAY="10">読み取ったメッセージは
「%var_Text%」
です。</AMSHOWDIALOG>