2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

最近Pythonを使って気づいたこと

Last updated at Posted at 2021-09-02

#はじめに
どうも。
タイトルにもあるように、最近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を使って気づいたことについてでした。最後まで読んで頂き、ありがとうございました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?