栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图像识别学习项目-python搭配opencv搞定阴阳师集市、闹市999次活动

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图像识别学习项目-python搭配opencv搞定阴阳师集市、闹市999次活动

文章目录
  • 1.活动背景
  • 2.代码
    • 2.1 截屏
    • 2.2 鼠标点击
    • 2.3 图像匹配
    • 2.4 点击图标
    • 2.5 集市&闹市
  • 3.readme

为了学习编程而做测试用,严禁用于商业非法盈利
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:Anaconda3envsYYSscripts
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-pyProject16-YYS17_yys
python jishi.py,运行后若出错按⬆再次运行即可

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号