#はじめに
どうも。
タイトルにもあるように、最近Pythonを使って気づいたことについてまとめてみました。
自分のメモ書き程度にしているため拙いですが、よければ見ていってください。
#pynputとPILの相性
pynputとPILの両方を使ってコードを書いていたとき、ちょっとトラブった話です。
pynputのmouse.Listernerでマウスのスクロール量やクリックの検知をしつつ、PILのPIL.ImageGrabで画面をキャプチャをやっていたら、カーソルの移動がとてもカクついてしまいました。
ググってもそれらしい文献が見当たらず、どうしようか悩んでしました。
その後、mssというスクリーンキャプチャを行えるライブラリを発見し、こちらは無事動きました。
もしかしたら、私の環境やコードが原因だったのかもしれませんが、まあそんなこともあるんだなという。
ちなみに、このmssは後でもう一度出てきます。
#Tesseract OCRの環境変数を通す
文字認識をやっていたときの話です。
Pythonで光学文字認識を行うとき、pyocrというライブラリを使用しますが、これを使うには先にTesseract OCRというソフトをインストールしておく必要があります。
で、インストールしたあとWindowsの環境変数にTesseract OCRを追加する必要があるわけですが、これがなぜか通らない...。
困ったなと思い調べると、pyocrを使用するコードの前に以下のコードを実装しておくだけで、勝手に環境変数に追加してくれるみたいです。
import os
path='C:\\Program Files\\Tesseract-OCR'
os.environ['PATH'] = os.environ['PATH'] + path
もし、環境変数でお困りの方はやってみてください。
ちなみに、変数pathにはインストールしたTesseract OCRまでのパスを代入してくださいね。
#mssによるスクリーンショットは最速
先程も出てきたmssですが、実はスクリーンショットを撮ることがどのライブラリよりも"最速"らしいです。(公式が言っている)
あまり詳しい検証をしていませんが、PIL.ImageGrabを用いたスクリーンショットよりも大体30msほど速いです。
もちろん、コードや環境などによって左右されますが、少なくとも私の環境下では結構速くなりました。
また、mssで撮ったスクリーンショットを以下のコードでPILのImageが使用できる形に変換できます。
import mss
from PIL import Image
sct = mss.mss()
monitor = {"top": y, "left": x, "width": width, "height": height}
sct_img = sct.grab(monitor)
pmap = Image.frombytes("RGB", sct_img.size, sct_img.bgra, "raw", "BGRX")
これでピクセル操作も可能になるで、画像処理を早くしたい方にはいいかもしれません。
調べていませんが、OpenCVにも置き換えはできるかもしれませんね。
#終わりに
はい、ということで最近Pythonを使って気づいたことについてでした。最後まで読んで頂き、ありがとうございました。