macOSでSikulix+OCR動作(ver2.0.4対応)

# macOSでSikulix+OCR動作(ver2.0.4対応)

##■はじめに
オープンソースのRPAツール、Sikulix。
Javaで開発されていますが、RPAのフローはPython(ただしver2系)で書くことができます。

ネットなどではWindowsで動作させる情報が多いですが、Javaなので環境さえ用意すればmacでも動きます。
また、現在(2021/02/23現在)ダウンロードできる最新バージョンは2.0.4ですが、以前の1.1.4での情報がまだまだ多いですし、macOSでバージョン2.0.4＋ORC動作の情報はまだまだ見つかりません。
そこで、macOS+ver2.0.4+OCRが動作した環境構築の記録を上げます。何かのお役に立てば(^^)

このRPAの導入のきっかけは、会社で使っているWindowsPCで~~楽をする~~作業の簡略化を行うためなのですが、自宅ではmacをメインに使っているので、自宅のmacでも環境構築と動作検証をするためにmac環境での構築を始めました。楽をするためなら仕事の持ち帰りも徹夜もいとわないのがSEという職種です。

構築にあたっては、Windows環境での説明ですが『さわって学べるSikuliX　Pythonで作るRPA』(大澤 文孝著)がきっかけと主な参照元になっています。AmazonのKindle Unlimitedで読むことができます。


###環境
macOS:10.13.6(使っているアプリの都合でまだ10.13です。多分10.15とかでも同じだと思います）

##■下ごしらえ　〜sikulixのインストール〜
JREが必要になります。"JRE"で検索すると、Suicaのポイントページがでてきてしまうので、以下のリンクを参照して下さい。
ここを参照してJavaをダウンロードしてインストールして下さい。
https://www.java.com/ja/download/help/mac_install.html


###sikulixのダウンロード
1.1.4系の情報がいろいろありますが、2021年２月現在ダウンロードできる最新バージョンは2.0.4です。
※画像キャプチャーを取らず進めたので、インストールの手順はテキストで。

まず、以下のサイトから必要となる、
・Sikulix IDE
・Jython
の2つをダウンロードします
※今回はJython(Python)で使用することを前提としています。

SikuliXダウンロードサイト
https://raiman.github.io/SikuliX1/downloads.html

ここから、SikulixのIDE
「Download the ready to use sikulix.jar (SikuliX IDE)」と書かれているとこの「sikulixide-2.0.4.jar」をダウンロードします。

Jythonはこちら
「The Jython interpreter 2.7.1 for python scripting (the default)」の
「jython-standalone-2.7.1.jar」をダウンロード。

###sikulixのインストール(配置)
ダウンロードしたものを適当なフォルダに入れて(Applications」フォルダに「Sikulix」というフォルダを作っていれる、とか)、「sikulixide-2.0.4.jar」をダブルクリックします。
すると「jython-standalone-2.7.1.jar」が別のフォルダに移動します。
~/Library/Application Support/Sikulixが初期設定や拡張機能が格納される場所で、jythonのファイルはExtensionの中に移動します。
![スクリーンショット 2021-02-21 0.44.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/481936a4-f073-c12b-31b4-346578c52222.png)



再度、sikulixide-2.0.4.jarをダブルクリックすると、Sikulixが起動します。
多分、セキュリティーがどうのこうのというメッセージが出てくると思いますが、「システム環境設定」の「セキュリティとプライバシー」をいじってなんとかできます。ググってみてください（てきとーだな。私）
![スクリーンショット 2021-02-19 1.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/0f12b37e-d910-8a08-15ca-684291db40bf.png)

###sikulixの初期設定(mac向け)
ここで、動作確認としてポップアップメッセージを表示させるコードを書いて実行すると、こんなエラーが出ます。
「javax.script.ScriptException: ReferenceError: "[メソッドとか]" is not defined in nashorn:mozilla_compat.js at line number [エラーが発生している行番号]」
![スクリーンショット 2021-02-21 0.59.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/9ba9b419-d9e1-5c08-6d89-a89d0deb11d3.png)

macで初めて実行すると、デフォルトのコード記述がJavascriptになっているので、Pythonでコードを書いて実行するとエラーが出ます。
Windowsでは出なかったエラーです。WindowsではデフォルトはPython(jython)のようです。なのでこういうエラーは出ませんでした。
一度実行してエラーが出てしまうと、このコードは修正できない（多分あるけど新規ファイルを作って貼り直したほうが早い）ので、以下の手順で記述するプログラムをPythonに指定します。

「ファイル」から「新規作成」(Command+N)で「無題」の新規ファイルを作成します。
![スクリーンショット 2021-02-21 1.04.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/9c28711f-9de3-02f9-926f-ef2061ccedb1.png)

コード欄のタブ「無題」のところを右クリックして「Set Type」を選択。
![スクリーンショット 2021-02-21 1.05.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/7a3416c4-437f-dbe9-4187-28030f7f05cd.png)

「Jython」を選択して「OK」をクリック。
![スクリーンショット 2021-02-21 1.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/70d85e13-269f-2095-1661-4df9a45fc257.png)

これでコードを書いてファイルを保存して「実行」をクリック。
(日本語を含んだ文字列を表示させる場合、u"日本語"と表記する必要があります)
![スクリーンショット 2021-02-21 1.09.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/48eb9373-b197-197a-0a1e-fa612de01b7e.png)

この設定は一度行えば、次回から作成するファイルに反映されます。
これでMacでもSikulixが動きました！
けど、全然Sikulixらしい動作確認じゃないな。こりゃ。
![スクリーンショット 2021-02-21 1.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/f419d0c3-b869-24a4-e6f6-102a9f574aca.png)



このJavaのjarファイル、Dockに登録できないので、デスクトップとかにエイリアスを置いて起動させます。
![スクリーンショット 2021-02-21 1.58.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/147dcace-6b9d-4a1b-3c13-cddf932c3b0b.png)






##■OCRの日本語対応
**注意！
**Home brewが使える環境を用意しておいて下さい。以下のtesseractのインストールに必要です。**

このまま範囲を指定してOCRを実行するコードを実行してもエラーが出て動きません。
(すいません。キャプチャーとかエラーログを取り忘れました)

まず、ここの情報を見ると、、、
https://sikulix-2014.readthedocs.io/en/latest/news.html

`````
New or revised in version 2.0.2
Text and OCR features are now implemented using the Java library Tess4J (current latest version based on Tesseract 4.x). 
`````

と、sikulix2.0.2では、Tesseract 4.xを使っていると書いてあります。確か、デフォルトで入っているtesseractはver2.0。
（ただし、もしかしたら、tesseractを入れ替えなくても、この後に説明するbrewでtesseractを入れれば動作するかもしれません。以下の手順でtesseractの4.0.0を入れてもエラーが出たので、brewでtesseractをインストールしたので問題の切り分けをしてない。。。なので、tessaractのファイルを入れ替えなくても動く、かもしれません)

###tesseractの言語ファイルのダウンロード
(もしかしたら、デフォルトのtesseractのファイルでも動くかもしれません。後述するbrewでtesseractのインストールを先に行って、それでもOCRが動作しないようであれば、各言語ファイルを入れ替えたほうがいいかもしれません)

gitのtesseractのページからダウンロードします
まずここにアクセス。
https://github.com/tesseract-ocr/tessdoc

リンク「tessdata_best」をクリック。
![スクリーンショット 2021-02-23 19.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/c1f01c13-8a23-0f3e-d7fb-e2e5ecf61654.png)


「jpn.traneddata」をクリック。
![スクリーンショット 2021-02-23 19.06.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/38013152-a572-4f87-c4e7-57d0deb9e08c.png)


「master」ボタン>「Tags」タブ>4.0.0をクリック（4.1.0でもいいです)
![スクリーンショット 2021-02-23 19.07.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/e0c82929-42d0-a9b0-378e-d7b0eed82d46.png)


「Download」をクリック

![スクリーンショット 2021-02-23 19.08.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/315d8c47-13dc-4bc6-00d5-5f322f724be7.png)


ダウンロードしたファイルはこちらになります。
![スクリーンショット 2021-02-23 19.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/99b65f27-65b2-166e-8bee-82bc3d832f94.png)

同様の手順でeng.traineddataもダウンロードしておきます

ダウンロードしたファイルは以下のディレクトリ
~/Library/Application Support/Sikulix/SikulixTesseract/tessdataの中に入れます。
ただし、ver2のデータがあるので、別フォルダを作ってしまってから移動させました。

![スクリーンショット 2021-02-23 19.12.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/eda6a800-f7cd-0f18-4786-16402785e508.png)


##■brewでtesseractをインストール
これで動くと思ったら、、、怒られた。。。
![スクリーンショット 2021-02-23 19.17.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/1153e092-847c-4b6a-3de4-67175a013542.png)


エラーメッセージに表示されたリンク先を見ると、brewでtesserctを入れとけと書いてあったので、入れます。
https://github.com/RaiMan/SikuliX1/wiki/macOS-Linux:-Support-libraries-for-Tess4J-Tesseract-4-OCR

![スクリーンショット 2021-02-23 19.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/ee24ad81-712e-94fd-a7a5-e70e7408791e.png)


おなじみのbrewで入れます。「brew install tesseract」で一発インストール。依存関係とかも解決してくれるのでらくちんです。
![スクリーンショット 2021-02-23 19.18.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/78fc659c-fb3c-c2d5-ca43-d640980d9824.png)


10.13使ってるの！と言われました。古いバージョンはサポートしないですって。
ごちゃごちゃ言われましたが、とにかくインストールしてくれます。
![スクリーンショット 2021-02-23 19.20.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/e643d60c-08ba-51d1-d1a4-c12b5380a31a.png)

どうやらengとかosdとかsnum以外の言語ファイルはbrewで入れろ、とありますが、今回はSikulixで使うので、brewで入れたものが動作するか分からず。それでbrewでは入れていません。

![スクリーンショット 2021-02-23 19.21.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/e90421e1-71c4-39c4-0bd6-5b0dd49bb857.png)

一応入ったことだし、これでもう一度Sikulixを起動し直して、先ほどの範囲指定で日本語を認識させるコードを実行してみます。

認識率が非常に微妙で怪レい日本话ですが、一応"OCR"は動作してくれました。
まぁ、動いた、と。動かない高機能な環境より、低機能でも動く環境が正義。

![スクリーンショット 2021-02-23 19.25.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/fc94fdf2-264f-096b-ef80-2f33da34735f.png)



#■OCRでの認識テスト
こんなファイルを作ってみました。一番下の行、10ptではなく16ptですね。

![スクリーンショット 2021-02-23 19.42.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/ba4c92bc-bed5-8f5d-9b24-18b99982e9fb.png)


8ptでもこれだけ読んでくれました。意外と頑張ってくれます。
![スクリーンショット 2021-02-23 19.43.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/9a3fe594-d7f5-de3b-fae6-086202866de4.png)



16ptの異体字を認識させてみましたが、さすがに「はしごだか」の**「髙」**は普通の**「高」**で認識しました。ま、「高」と出てきてくれればいいです。
![スクリーンショット 2021-02-23 19.44.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56853/2a3b09ea-0a99-0563-d4f8-8e6de1eaec2f.png)

-----
冒頭にも書きましたが、この本、
『さわって学べるSikuliX　Pythonで作るRPA』がとても参考になりました。
Amazon Unlimitedなら無償で読めます(一応読めば出版社と作家さんに一定額が入ります)
https://www.amazon.co.jp/dp/B07WC9KYSB/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1