2017-07-04 23 views
0

今、スクリーンショットに基づいてマウスの動きを更新するCNNにスクリーンショットをフィードするための非常に高速なスクリーンショットが必要です。私はthis paperで提示された同じ種類の振る舞いをモデル化しようとしています。同様に、図6に示した手順を(極座標変換なしで)実行します。本当に速いの入力を必要とした結果、私は少し周りを検索したと、このスクリプトfrom hereは若干出力がPythonで10スクリーンショット/秒以上の速度が可能ですか?

from PIL import ImageGrab 
from datetime import datetime 

while True: 
    im = ImageGrab.grab([320, 180, 1600, 900]) 
    dt = datetime.now() 
    fname = "pic_{}.{}.png".format(dt.strftime("%H%M_%S"), dt.microsecond // 100000) 
    im.save(fname, 'png') 

は私が速く何かを期待することができ10FPSという修正を取得することができましたか?私はそれが利用可能な場合は、別のプログラムを使用すると大丈夫だろう。

+0

フルスクリーンショットを取る必要がありますか?それが必要なのであれば、マウスの座標を直接キャプチャする方法はおそらくあります。 – dimo414

+0

ああありがとう:Pはそれを見つけることができませんでした。カーソルの動きは、スクリーンショットの他の要素に基づいて移動されます。これは、紙のプレーヤーがゲームの壁に基づいて位置を変更するのと同じです。 – Dinoswarleafs

+0

SSDを使用していますか? – cup

答えて

2

ディスクへの書き込みは非常に遅く、おそらくループを長くするのに大きな部分を占めています。 im.save()行をコメントアウトして、キャプチャできるスクリーンショットの数を確認してください(counter変数などをキャプチャして、キャプチャしているスクリーンショットの数をカウントしてください)。

ディスクI/Oがボトルネックであると仮定すると、これらの2つのタスクを分割する必要があります。スクリーンショットをキャプチャしてメモリに保存する(たとえば、タイムスタンプをキーにした辞書に)、別のスレッドで要素を辞書から取り出してディスクに書き込むループを作成します。

Pythonのスレッディングに関するポインタについては、これまであまり多かったことがない場合はthis questionを参照してください。

+0

ああ、あなたは正しい、私のディスクの深刻なボトルネック。私の場合、実際にはファイルをディスクに保存する必要はありません。テンソルフローで読み込むだけです。私はちょうど使用するために、私は必要なすべてである20-30 fpsになっているように見える使用のためのtfスクリプトで直接イメージグラブを使用することができると思います:)私はこれについて考えなかった理由は分かりませんが、今すべて明らかです。あなたの答えをありがとう!それはおそらくちょうど私の時間のトンを救った – Dinoswarleafs

+0

私は助けることができる嬉しい:) – dimo414

関連する問題