특정 프로그램이 실행될 때마다 활성화되는 간단한 Python 스크립트를 만들었습니다. 이 프로그램은 화면에 정보를 보내 스크립트가 잡아서 분석해야합니다. 다음과 같이 스크립트의 논리의파이썬으로 픽셀 데이터를 구문 분석하는 가장 효율적/가장 빠른 방법은 무엇입니까?
일부 표현 될 수있다
while a certain condition is met:
function to continuously check pixel information on a fixed area of the screen()
if pixel data (e.g. RGB) changes:
do something
else:
continues to check
가 이미 정확히이 일을 뭔가를 발견,하지만 아주 빨리 내가 원하는만큼.
import ImageGrab
box = (0,0,100,100) # 100x100 screen area to capture (0x0 is top left corner)
pixel = (60,20) #target pixel coordenates (must be within the box's boundaries)
im = ImageGrab.grab(box) #grabs the image area (aka printscreen) -> source of bottleneck
hm = im.getpixel(pixel) # gets pixel information from the captured image in the form of an RGB value
I는 그 RGB 값을 취하고 함수에 의해 얻어진 이전의 값과 비교할 수 여기서 임의의 값 파이썬 이미징 라이브러리 (PIL)를 사용하는 솔루션이다. 그것이 바뀌면 화면에 뭔가가 생겼다. 이는 프로그램이 뭔가를 한 것을 의미하므로 스크립트는 이에 따라 행동 할 수있다. 그러나 스크립트는 특히 복잡하고 큰 결함이있는 더 큰 함수의 일부이기 때문에 반응이 빠른이 필요하므로 코드를 비트 단위로 최적화하는 과정에 있습니다.
이 솔루션은 i7 4770k cpu에서 스크립트를 초당 ~ 30 반복으로 제한합니다. 빨리 보이지만 비슷한 속도로 픽셀 정보를 파싱하는 다른 기능을 추가하면 모든 것이 더해집니다. 최종 목표는 초당 5 ~ 10 회 반복 실행될 수 있도록 단일 함수에서 초당 200 회 이상, 아마도 150 회 반복하는 것이 목표입니다.
짧은 이야기 : 다른 방법으로 화면의 픽셀을 더 빠르게 파싱 할 수 있습니까?
파이썬은이 작업을위한 도구가 아닙니다. 실시간 그래픽 처리에는 C++와 같은 더 비싼 언어가 필요합니다. 그리고 처리 코드의 성능에 제한이 없더라도 대부분의 윈도우 시스템에서 화면의 일부를 잡는 것은 느린 작업입니다. – orlp
@ 대니얼 쇼 :이 질문을보십시오. http://stackoverflow.com/questions/1997678/faster-method-of-reading-screen-pixel-in-python-than-pil?rq=1 – BenjaminGolder
@nightcracker 글쎄요. 그냥 .. 낙담하는거야. 적어도 조금 더 빨라지는 방법이 반드시 있어야합니다. –