Python Opencv实时桌面屏幕进程

Python Opencv实时桌面屏幕进程,opencv,Opencv,我正在尝试处理实时屏幕。有一个关于捕鱼的游戏。当鱼在圆圈中时,你必须点击它。我想我可以用opencv处理我的屏幕,找到fish并用pyautogui点击它 我做了,但问题是程序不够快,无法点击。顺便说一下,这款游戏是Metin 2 mmorpg中的一款迷你游戏。这就像一个黑客或机器人,但我只是想知道我是否可以做到这一点 这是我的密码: import numpy as np import cv2 from PIL import ImageGrab import pyautogui import t

我正在尝试处理实时屏幕。有一个关于捕鱼的游戏。当鱼在圆圈中时,你必须点击它。我想我可以用opencv处理我的屏幕,找到fish并用pyautogui点击它

我做了,但问题是程序不够快,无法点击。顺便说一下,这款游戏是Metin 2 mmorpg中的一款迷你游戏。这就像一个黑客或机器人,但我只是想知道我是否可以做到这一点

这是我的密码:

import numpy as np
import cv2
from PIL import ImageGrab
import pyautogui
import time

while True:

    img=ImageGrab.grab(bbox=(341,208,430,290))
    img_np=np.array(img)
    #gray=cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)

    #lower=np.array([57,91,120])
    #upper=np.array([65,95,160])

    #mask=cv2.inRange(gray,95,130)

    #sonuc=cv2.bitwise_and(gray,gray,mask=mask)
    #cv2.imshow('frame',mask)


    degsk=np.argwhere(img_np==[123,90,57])
    if len(degsk)!=0:
        #print(degsk)
        yerx=341+degsk[int(len(degsk)/2),1]
        yery=208+degsk[int(len(degsk)/2),0]
        #pyautogui.click(x=yerx, y=yery)
        time.sleep(0.8)

    if cv2.waitKey(1)&0xFF==ord('q'):
        break

cv2.destroyAllWindows()
如你所见,首先我尝试屏蔽屏幕,但我意识到这是不必要的,所以我找到了fish的BGR值,并编程在numpy数组中找到它,而不是在数组中取中间值,然后使用鼠标移动功能。正如我所说,这是不够快,以捕捉鱼

因此,该计划正在运作,但因捕鱼而推迟。如何使该程序更快


我发现
IPython
最适合计时,因此如果您启动
IPython
并粘贴以下代码:

from PIL import ImageGrab

img=ImageGrab.grab(bbox=(341,208,430,290)) 
然后,您可以使用以下命令对语句计时:

%timeit img=ImageGrab.grab(bbox=(341,208,430,290))
我明白了:

552 ms ± 5.91 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
因此,抓取屏幕需要500毫秒以上的时间,因此你只能获得低于2帧/秒的速度,甚至不需要处理它

如果您想更快地抓取屏幕,我建议
ffmpeg
。我使用自制在运行
macOS
的iMac上安装了它,使用:

brew install ffmpeg
然后,我可以查看可用视频源的列表,并找到需要录制屏幕的内容:

ffmpeg -f avfoundation -list_devices true -i ""
样本输出

[AVFoundation input device @ 0x7fa7dcf05b40] AVFoundation video devices:
[AVFoundation input device @ 0x7fa7dcf05b40] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7fa7dcf05b40] [1] Capture screen 0             <--- THIS ONE IS THE SCREEN
[AVFoundation input device @ 0x7fa7dcf05b40] AVFoundation audio devices:
[AVFoundation input device @ 0x7fa7dcf05b40] [0] MacBook Pro Microphone
[AVFoundation input device @ 0x7fa7dcf05b40] [1] CalDigit Thunderbolt 3 Audio
我现在可以使用以下内容作为我的钓鱼计划:

#!/usr/bin/env python3

import numpy as np
import pyautogui
import time
import os, sys

# width, height
w, h = 400, 200

# Bytes per frame - assumes bgr0, i.e. 8-bits of blue, 8-bits red. 8-bits green and 8-bits junk
bytesPerFrame = w * h * 4

while True:
    img = sys.stdin.buffer.read(bytesPerFrame)
    if len(img) != bytesPerFrame:
        break
    # Process your video here

关键词:pyautogui、屏幕抓取、屏幕抓取、屏幕抓取、慢速、Mac、macOS、Python、捕获、屏幕捕获、ffmpeg、PIL、OpenCV

我发现
IPython
最适合计时,因此如果您启动
IPython
并粘贴以下代码:

from PIL import ImageGrab

img=ImageGrab.grab(bbox=(341,208,430,290)) 
然后,您可以使用以下命令对语句计时:

%timeit img=ImageGrab.grab(bbox=(341,208,430,290))
我明白了:

552 ms ± 5.91 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
因此,抓取屏幕需要500毫秒以上的时间,因此你只能获得低于2帧/秒的速度,甚至不需要处理它

如果您想更快地抓取屏幕,我建议
ffmpeg
。我使用自制在运行
macOS
的iMac上安装了它,使用:

brew install ffmpeg
然后,我可以查看可用视频源的列表,并找到需要录制屏幕的内容:

ffmpeg -f avfoundation -list_devices true -i ""
样本输出

[AVFoundation input device @ 0x7fa7dcf05b40] AVFoundation video devices:
[AVFoundation input device @ 0x7fa7dcf05b40] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7fa7dcf05b40] [1] Capture screen 0             <--- THIS ONE IS THE SCREEN
[AVFoundation input device @ 0x7fa7dcf05b40] AVFoundation audio devices:
[AVFoundation input device @ 0x7fa7dcf05b40] [0] MacBook Pro Microphone
[AVFoundation input device @ 0x7fa7dcf05b40] [1] CalDigit Thunderbolt 3 Audio
我现在可以使用以下内容作为我的钓鱼计划:

#!/usr/bin/env python3

import numpy as np
import pyautogui
import time
import os, sys

# width, height
w, h = 400, 200

# Bytes per frame - assumes bgr0, i.e. 8-bits of blue, 8-bits red. 8-bits green and 8-bits junk
bytesPerFrame = w * h * 4

while True:
    img = sys.stdin.buffer.read(bytesPerFrame)
    if len(img) != bytesPerFrame:
        break
    # Process your video here

关键词:pyautogui、屏幕抓取、屏幕抓取、屏幕抓取、慢速、Mac、macOS、Python、抓取、屏幕抓取、ffmpeg、PIL、OpenCV

为什么要使用时间。睡眠(0.8)?您不能连续点击,因此需要延迟。:)为什么使用time.sleep(0.8)?您不能连续命中,因此需要延迟。:)非常感谢你。我会努力的,我会很快给你反馈。非常感谢你。我会努力的,我会很快给你反馈。