yys opencv自动图片识别 学习交流

  1. 这个版本使用springcloud为框架,方便开发。
  2. 使用图片识别算法,借用opencv,为了减少资源负载,部分功能需要手动设置好。例如御魂,队长或者队友,需先设置成默认模式,(当初做成了全自动,发现每次就使用一次,浪费资源,后来去掉了)。刷日和坊,需要点击到日和坊组队界面,系统自动判断。
  3. 优点是:1)不会多点击一次,系统不会检测(本人已经刷了一个月了)。2)占用系统资源少。3)适用于PC端任何比例,建议不要太小,本人是缩小至30%以上都可以的)。4)超级超级稳定。每天上号刷寮30御魂等,超级解放双手。5)远程监控,在家挂机手机邮箱收到监控的电脑画面。
  4. 缺点是:1.包过大,spring系列的直接打包进来没有精简。2.为了减少系统资源,没有做成全自动化。3。没有做成界面,需要修改配置文件。
  5. 后续自动刷狗粮还在研究中。
  6. 代码的研究意义挺大的,按照这个写,任何大型游戏都可以,试过DNF。都是可行的。
    上代码
    这个是opencv的官网代码,具体有耐心的可以去查一下,搜索直方图对比。也就是图片对比,整个程序的核心
public class OpenCVCompare {
    public static double run(String[] args) {
        if (args.length != 2) {
            System.err.println("You must supply 3 arguments that correspond to the paths to 3 images.");
            System.exit(0);
        }

        Mat srcBase = Imgcodecs.imread(args[0]);
        Mat srcTest1 = Imgcodecs.imread(args[1]);
        if (srcBase.empty() || srcTest1.empty()) {
            System.err.println("Cannot read the images");
            System.exit(0);
        }
        Mat hsvBase = new Mat(), hsvTest1 = new Mat();
        Imgproc.cvtColor(srcBase, hsvBase, Imgproc.COLOR_BGR2HSV);
        Imgproc.cvtColor(srcTest1, hsvTest1, Imgproc.COLOR_BGR2HSV);
        int hBins = 50, sBins = 60;
        int[] histSize = {hBins, sBins};
        // hue varies from 0 to 179, saturation from 0 to 255
        float[] ranges = {0, 180, 0, 256};
        // Use the 0-th and 1-st channels
        int[] channels = {0, 1};
        Mat histBase = new Mat(), histTest1 = new Mat();
        List<Mat> hsvBaseList = Arrays.asList(hsvBase);
        Imgproc.calcHist(hsvBaseList, new MatOfInt(channels), new Mat(), histBase, new MatOfInt(histSize), new MatOfFloat(ranges), false);
        Core.normalize(histBase, histBase, 0, 1, Core.NORM_MINMAX);
        List<Mat> hsvTest1List = Arrays.asList(hsvTest1);
        Imgproc.calcHist(hsvTest1List, new MatOfInt(channels), new Mat(), histTest1, new MatOfInt(histSize), new MatOfFloat(ranges), false);
        Core.normalize(histTest1, histTest1, 0, 1, Core.NORM_MINMAX);
        return Imgproc.compareHist(histBase, histTest1, 0);
    }
}

这个是鼠标点击,很简单的方法,常量值百度搜索一下

    private void comm(int x, int y, int range) {
        int random = new Random().nextInt(range);
        int dx = new Double((x + random + info.getLeft()) / pc.getPrecent()).intValue();
        int dy = new Double((y + random + info.getTop()) / pc.getPrecent()).intValue();
        robot.mouseMove(dx, dy);
        robot.mousePress(KeyEvent.BUTTON1_MASK);
        robot.delay(new Random().nextInt(100) + 150);
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);
    }

图片截取,保存,写的是部分方法 Rectangle 对象是java提供的对象,获取屏幕的数据流,之后生成图片

  Rectangle rec = new Rectangle(left, top, right - left, button - top);
        //没有检测到游戏时供测试使用
        if (button - top == 0) {
            rec = new Rectangle(0, 0, 800, 800);
        }
        BufferedImage bi = robot.createScreenCapture(rec);
        img2file(bi, GMConstant.IMAGE_FORMAT, type + GMConstant.IMAGE_SUFFIX);

  private boolean img2file(BufferedImage img, String extent, String name) {
        try {
            String currentPath = pc.getEnv_path();
            File file = new File(currentPath + pc.getOcr() + name);
            return ImageIO.write(img, extent, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;

代码填坑
因为使用了opencv,他这个版本只有本地包,maven依赖需要注意下,后面上源码,看一下完整的打包的配置,这个地方是困扰我最久的地方,打包打不进去。

        <dependency>
            <groupId>opencv</groupId>
            <artifactId>opencv</artifactId>
            <version>347</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/opencv-347.jar</systemPath>
        </dependency>

环境依赖
这是opencv需要的dll文件,maven打包会将打包文件变化,无法读取,目前还无法解决。

    @PostConstruct
    public void init() {
        int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
        if (bitness == 32) {
            System.load(pc.getEnv_path() + "x86\\opencv_java347.dll");
        } else if (bitness == 64) {
            System.load(pc.getEnv_path() + "x64\\opencv_java347.dll");
        }
    }

参数修改

#御魂== 1/2(设置1.2都行) 队长模式  队友模式  3 刷日和坊
modle:
  code: 3

#图片匹配的百分比
match:
  pre: 0.50

#windows屏幕参数  缩放比 见下图的设置
wing:
  precent: 1.5

#你的QQ邮箱和QQ的授权码,授权码如何设置可以自行百度下。
  mail:
    name: xxxx
    code: xxxx

#图片路径
paths:
  ocr: image\ocr\
  base: .\image

#启动配置 -Djava.library.path=D:\OPenCV\opencv\build\java\x64
env:
  path: D:\WORKSPACE_GM\mingc-gm-jv\onmyoji-jv\target\config\

在这里插入图片描述
如何启动

配置一下bat脚本,设置jdk路径,
注意,请使用管理管运行,否则不会生效。

在这里插入图片描述
在这里插入图片描述
源码下载,如果需要,可联系我发给你,留言邮箱地址即可

https://download.csdn.net/download/chengming_11/11826011

如果有问题,请留言,本人会快速回复。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值