Python3.3用のPython Imaging Libraryモジュール(Win7、8 GBのRAM)を利用して、画面の小さな(〜40x50)ピクセル領域のスクリーンショットを毎秒1回取得し、それを画像と比較する小さなスクリプトがあります特定のパターンを検出し、見つかった場合は作成した他の 2 つのモジュールを実行する必要があります。スクリプトは最初の 30 分ほどは問題なく動作しているように見えますが、その後スクリプトがクラッシュし、次のエラーが発生します。
Traceback (most recent call last):
File "<string>", line 420, in run_nodebug
File "C:\Users\Nate Simon\Dropbox\CaptchaLibrary\detectNRun.py", line 68, in <module>:
im2 = ImageGrab.grab((left,upper,right,lower))
File "C:\Python33\lib\site-packages\PIL\ImageGrab.py", line 47, in grab:
size, data = grabber()
MemoryError
スクリーンショット間の時間を調整しましたが、プログラムがクラッシュしたときの遅延だけです。
問題のあるコードと思われるものは次のとおりです。
im2 = ImageGrab.grab((left,upper,right,lower)) # Take a screenshot at given coordinates
for x in range(im2.size[0]): # This section just changes to image to black/white for better comparing but might be relevant.
for y in range(im2.size[1]):
pixel = im2.getpixel((x,y))
if pixel[0] < 40 or pixel[1] < 40 or pixel[2] < 40:
color = (0, 0, 0)
else:
color = (255, 255, 255)
im2.putpixel((x,y), color)
このスクリプトに追加されるリスト、辞書、またはデータベースはありません。実行するたびに、古いスクリーンショットがメモリに上書きされます (ディスクに保存されることはありません)。
sleep()
また、関連する可能性があります:遅延に使用しtime()
、システム時間を追跡するために使用している時間モジュールから。また、マウス/キーボード入力に win32api を使用し、次の行で tkinter を使用してクリップボードを読み取ります。
c = Tk()
c.withdraw()
result = c.clipboard_get()
c.destroy()
別のセクションでは、新しいデータが追加される前にクリップボードがクリアされますc.clipboard_clear()