说明:
在此声明,仅作学习交流使用,对产生的任何影响,本人概不负责.
大体是实现的具体思路,完整的代码恕不免费提供.
本人也是因为喜欢打游戏dnf 最近无聊就想着自己用python编程来写点小工具,查了很多资料一步步实现了一些功能,也是自己的一种提高吧
转载请注明出处:原创地址
刷图脚本转至此处,更多源码展示
刷图脚本地址刷图脚本
更新记录
2019/11/6日,刷图脚本更新部分函数
使用的的包:
- import win32api, win32con, time, win32gui
- from ctypes import windll
- from PIL import Image, ImageGrab
- import pytesseract
- import cv2
- import tkinter as tk
- from tkinter import ttk
- from sys import exit
- from os import popen
- from numpy import load, save
- import numpy as np
扫拍功能:
1. 实现键鼠模拟
也只有能模拟了后才可以去做其他功能,dnf这个游戏做了很多屏蔽手段,很多普通方法都无法进行模拟,我这里采用的是win32api方式,比较贴近底层,可以实现驱动级的按键模拟,模拟代码网上一大片,我这里展示的是我封装完成实现我需要的一些功能
鼠标模拟封装
# 单击/左击
click_left(self, x, y):
# 双击/右击
click_right(self, x, y, sleep1=0.05, sleep2=0.1) #sleep 控制速度
# 拖动物品
click_move(self, click_x, click_y, x, y) # click_x, click_y 原始坐标 x, y 移动坐标
此方法可以模拟点击事件游戏内有效,采用动态坐标形式,窗口移动了位置也无所谓,
键盘模拟
# 按键模拟
open_vk(self, sleep=0.02, *key) # 同上,key要模拟的键位
# 移动位置模拟
vk_key_run(self, vk, sleep, run_type) # vk 移动键位 , sleep 移动时间 run_type 设置停止移动的事件
2.自动输入要搜索的物品,
调用模拟按键输入就行
3.获得拍卖物品的价格
咱这里因为是脚本,所以不会读取游戏内存数据什么的,只能靠图片识别了
使用Tesseract-OCR
OCR与Tesseract介绍!
将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。
Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源OCR 系统。
除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体(只要这些字体的风格保持不变就可以),也可以识别出任何Unicode 字符。
一大通废话,主要就是使用这个识别引擎,把收集到的dnf价格图片进行训练,然后它就可以自动识别出想要的东西了,我需要的是价格,游戏图片都很统一主要就是数字比较容易识别,我这里训练一百多张后基本上识别率95以上了
训练的越多识别率越高,固定样式的图片基本上不会出错
图片识别封装,给它传入需要识别的区域坐标,就给你返回对应的识别结果,注:必须要自己训练识别库,否则无法识别
text 就是识别的内容,为str类型,如识别dnf价格结果就是27,111,000
首先要获得价格的截图,我直接截取价格区域,然后识别这个区域的数字.
截取的图片很小,识别起来速度会有保证,整个过程大概0.1秒左右,
如下训练用截图:
4.判断价格,合适就模拟鼠标购买
普通物品和卷子有所不同,以下是普通物品代码
判断价格和购买函数
5:简单写个界面
程序完成后我们总不能一直使用cmd来运行,使用界面,打包成exe后直接界面来操控
我了解过的python界面有两种1. tk 2. ttk推荐使用ttk
理由 比tk好看太多了
下面贴一点界面代码
def __init__(self, master=None):
ttk.Frame.__init__(self, master)