图像识别学习项目-python搭配opencv自动完成YYS集市and闹市千次活动

该博客介绍了一个使用Python实现的自动化点击脚本,旨在帮助玩家简化手游《阴阳师》中的重复性操作。通过图像截取、模板匹配和鼠标模拟点击,实现了对游戏内特定图标自动识别和点击的功能,从而节省手动操作时间。代码包括截屏、鼠标点击、图像匹配等模块,并提供了安装和使用说明。
摘要由CSDN通过智能技术生成

为了学习编程而做测试用,严禁用于商业非法盈利
可以尝试图像模板匹配及目标检测,后者对机器GPU显卡有点要求。

1.活动背景

在这里插入图片描述

听一个朋友说:
每天可以刷999+活动次数70次,
开头去尾10秒平均一次的话,10*999+70/3600~=3h,
朋友说实际做下来得6个小时,
加上手指头每次点两下,
ch兼职毫无人性....
so,人工智能AI就是来帮忙的呀...
ok,直接上原理:简单来讲-AI帮你去找到手指要点的目标并模拟人手去点两下鼠标。

1.先截游戏屏幕
2.opencv识别图像请添加图片描述点击开始,
3.识别图像在这里插入图片描述点击结束

2.代码

2.1 截屏

#新建python文件:prientscreen.py
#一切为了懒嘛,就直接把游戏窗口认认真真的拖到左上角了。。。
#截屏,获取原图,会一直更新,会在此图像上识别要点击的图标
from PIL import Image
from PIL import ImageGrab

def Printscreen():

    # 截图坐标 左上角 ,右下角
    size = (0, 0,1426,845)#界面大小,一定要先拖到左上角哦。
    img = ImageGrab.grab(size)
    # 保存截图
    img.save("yuan.png")
    print('截图进行了一次刷新')
    # 打开截图
    # img.show()

# 测试
# Printscreen()

2.2 鼠标点击

#新建python文件:click.py
import win32api
import win32con
import win32gui
import time
import random

def xunzhao():
    #寻找游戏窗口,要先打开游戏哦...
    wdname = u'阴阳师-网易游戏'
    # 取得窗口句柄
    hwnd = win32gui.FindWindow(0, wdname)
    if not hwnd:
        print("窗口找不到,请确认窗口句柄名称:【%s】" % wdname )
        exit()
    # 窗口显示最前面
    win32gui.SetForegroundWindow(hwnd)

def move_click(x, y, t=0):  # 移动鼠标并点击左键
    suiji1 = random.randint(0,10)
    suiji2 = random.randint(0,10)
    # print('鼠标抖动随机数为:+',suiji2,'  +',suiji1),鬼使黑,你懂的...
    win32api.SetCursorPos((x+suiji1, y+suiji2))  # 设置鼠标位置(x, y),设置随机数,以防被封
    time.sleep(0.1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 点击鼠标左键
    # print('模拟点击')
    return 0

# # 测试
# while True :
#     suiji = random.randint(0,5) #获得随机数
#     xunzhao() #游戏顶置,获得句柄
#     time.sleep(suiji) #间隔时间
#     move_click(1280, 685) #坐标点击

2.3 图像匹配

#新建文件image_discern.py
import cv2
import numpy as np
from matplotlib import pyplot as plt
import math

###图像匹配###
def Image_Discern(imgone,imgtwo):
    # 1.模板匹配,对比图1和图2
    # 大图
    img = cv2.imread(imgone)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 小图
    template = cv2.imread(imgtwo, 0)
    h, w = template.shape[:2]  # rows->h, cols->w
    img2 = img.copy()

    # 对比图像
    res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF_NORMED)#归一化平方差匹配法,核心工具

    # 返回坐标
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    top_left = min_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)

    # 计算中心坐标
    a1, a2 = top_left
    b1, b2 = bottom_right
    c1 = (a1 + w/2)*0.8  # 0.8匹配屏幕分辨率(因为分辨率原因这里乘0.8用于适应平复分辨率坐标位置)
    c2 = (a2 + h/2)*0.8
    e1 = math.ceil(c1)
    e2 = math.ceil(c2)
    d1 = (e1, e2)
    # print('中心坐标为:' , d1)

    ###测试图像匹配,弹出图像显示匹配位置###
    # 在匹配点画小圆心
    # cv2.circle(res, top_left, 10, 0, 2)
    # cv2.imshow("res", res)

    # # 画矩形
    # cv2.rectangle(img2, top_left, bottom_right, (0, 255, 0), 2)
    # cv2.imshow("img2",img2)
    # cv2.waitKey(0)

    # 两张图片是否匹配
    # print('各个参数为:',min_val, max_val, min_loc, max_loc)

    ###进行图像筛选###
    if min_val <= 0.03:#平方差越小匹配度越好;
        # print('图片匹配')
        return(d1)
    else:
        # print('图片不匹配')
        return(0)
# 测试
# Image_Discern('./png/imgone.PNG','./png/imgtwo.PNG') # (大图,小图)匹配图像

2.4 点击图标

#新建文件:identify_click.py
import click
import printscreen
import image_discern
import time
import random

###进行图标点击###
def Identify_Click(little):
    a = random.uniform(0,0.3)
    click.xunzhao()
    time.sleep(a) # 间隔秒数
    printscreen.Printscreen() # 截图
    time.sleep(a)
    b1 = image_discern.Image_Discern('yuan.png', little) #图像对比
    for i in range(1,6):#点不到图标的话重复几次
        if b1 == 0:
            # print('准备再次寻找第',i,'次')
            time.sleep(a)
            click.xunzhao()
            time.sleep(a)
            printscreen.Printscreen()
            time.sleep(a)
            b1 = image_discern.Image_Discern('yuan.png', little)
        else:
            time.sleep(a)
            printscreen.Printscreen() # 截图
            b1 = image_discern.Image_Discern('yuan.png', little) #图像对比
            a1, a2 = b1 #地址赋值
            click.move_click(a1, a2) #模拟点击
            time.sleep(a)
            break

###寻找场景内是否有相应图标###
def Identify_Click_Seek(little):

    b = random.uniform(0,0.5)#模型匹配随机数
    # print(a)
    # print(b)
    click.xunzhao()
    time.sleep(b) # 间隔秒数
    printscreen.Printscreen() # 截图
    time.sleep(b)
    b1 = image_discern.Image_Discern('yuan.png', little) #图像对比
    if b1 == 0:
        # print('没有相应图标')
        return(False)
    else:
        # print('找到相应图标')
        return(True)

2.5 集市&闹市

#新建python文件jishi.py
import time
import identify_click
import random

def Jishi():

    b = random.uniform(0.1,2)#引入战斗间隔随机数
    while True:
        a = ('-----------------')
        # ##判断体力是否足够##
        # if identify_click.Identify_Click_Seek('./png/img_GouMaiTiLi.png'):
        #     print(a)
        #     print('体力不足')
        #     break #结束循环

        #判断战斗结束情形1##
        if identify_click.Identify_Click_Seek('./png/img_Next.png'):
            identify_click.Identify_Click('./png/img_Next.png')
            print(a)
            print('战斗结束')
            continue #跳出本次循环
        #判断战斗结束情形2##
        if identify_click.Identify_Click_Seek('./png/img_Next2.png'):
            identify_click.Identify_Click('./png/img_Next2.png')
            print(a)
            print('战斗结束')
            continue #跳出本次循环
        #判断战斗结束情形3##
        if identify_click.Identify_Click_Seek('./png/img_Next3.png'):
            identify_click.Identify_Click('./png/img_Next3.png')
            print(a)
            print('战斗结束')
            continue #跳出本次循环
        ##继续战斗按钮##
        elif identify_click.Identify_Click_Seek('./png/img_Tiaozhan.png'):
            identify_click.Identify_Click('./png/img_Tiaozhan.png')
            print(a)
            print('战斗开始')
            continue #跳出本次循环
        time.sleep(b) #间隔秒数
    return(True)

# 测试
Jishi()

3.readme

一、安装
安装anaconda3,网址https://www.anaconda.com/products/individual#Downloads
电脑左下角点开始-anaconda3-anaconda prompt-
conda create -n YYS python=3.8
activate YYS
pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
cd C:\Anaconda3\envs\YYS\Scripts
python pywin32_postinstall.py -install
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib --trusted-host pypi.douban.com
pip install opencv-python --trusted-host pypi.douban.com

检查屏幕:1920X1080,YYS窗口精准放到左上角

二、使用:
1.管理员运行anaconda prompt
activate YYS
cd/d D:\hjz-py\Project\16-YYS\17_yys
python jishi.py,运行后若出错按⬆再次运行即可

修改战斗时间间隔:
jishi.py里面
第七行 b = random.randrange(1,3)#引入战斗间隔随机数

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值