Coder Social home page Coder Social logo

op's Introduction

  • 👋 Hi, I’m @WallBreaker2

Welcome to my github page!

op's People

Contributors

allensk avatar flaot avatar gamegrd avatar ss22219 avatar up1021 avatar wallbreaker2 avatar zhuizhubf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

op's Issues

FindPic,FindPicEx的bug

同样的场景下,使用找图模式3但不限于该模式,在大区域范围内无法寻找到在指定小范围内能寻找到的图

ret,ret_x,ret_y=op:FindPic(0,0,1909,909,"rock3.bmp","101010",0.8,3);
0,1682,482

ret,ret_x,ret_y=op:FindPic(1790,698,1909,909,"rock3.bmp","101010",0.8,3);
0,1790,698

以下为素材:
rock3.bmp https://drive.google.com/file/d/1EyLk9tYIqemSFL2PjkSqi9hSJLS2FTds/view?usp=sharing
场景 https://drive.google.com/file/d/1-o3WeqxBco0u95ao2lI7_JqM47akoLqx/view?usp=sharing

建议增加dxgi截图模式(虚拟显卡屏幕监控),这个速度更快,更省CPU

建议增加dxgi截图模式,这个速度更快,更省CPU,dll体积也几乎很少增大。
这个相当于DirectX型的虚拟显卡驱动(win8以上系统微软自带)
我测试了用bitblt,38402160的全屏桌面普通方式截图要100毫秒,只截窗体只要40毫秒。
如果用DXGI,可能只要5-10毫秒。
可以采用事件机制,DLL里面回调。
比如屏幕变化小的情况,纯桌面操作(非游戏或视频),可能5秒10秒才有小区域图片变动。
有发生变动时,不需要再全屏进行找图。
假如屏幕中间坐标:Left,Top:1000,1200位置发生了W,H: 300
500像素的变化,要找的图片是 FindW,FindH:100*200,
那只需要对区域(X1,Y1;X2,Y2)(900,1000;1400,1900)进行找图,不需要全屏找图。
坐标区域算法:Left-findw,Top-FindH;Left+W+Findw;Top+h+FindH

DXGI快速截屏录屏技术,高帧率直播桌面_HBStream流媒体与音视频技术-CSDN博客
https://blog.csdn.net/haibindev/article/details/84061641
很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,
Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,应用程序,可以通过这套API访问桌面数据。
而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高

经测试FindStr方法中待查找的字符串参数只可以一个中文字符

测试环境:win10专业版 1909 X64 版本号:18363.657
调用代码:
opCom.FindStr(0, 0, 1600, 1024, "银行", "ffffff-000000", 1.0, out x, out y);
返回0,输出参数 x,y都为-1
修改调用如下:
opCom.FindStr(0, 0, 1600, 1024, "银|行", "ffffff-000000", 1.0, out x, out y);
返回正常坐标点,
接口文档对此参数的描述:
string 字符串:待查找的字符串,可以是字符串组合,比如"长安|洛阳|大雁塔",中间用"|"来分割字符串
此为调用com接口方法,在此环境下只有绑定窗口前台激活才可以正常查找字符

dm字库问题

op使用大漠字库时偏色过多容易出现这个识别问题mmexport1617615724937

关于FindColor

我使用

op.FindColor(650, 582, 802, 607, "7FB4B4-803232", 0.9, 0, &x, &y)
op.MoveTo(x, y)

x坐标和y坐标都正确返回,鼠标可以移动到上面了,但是FindColor返回值是0没找到是怎么回事呢

BUG:较大图片,找图速度慢,优点:少量像素变化也能找到(大漠找不到)

表扬一下,OP对于图像有几个像素改动的都能认出来。
找大图宽高:1172,671,用时55秒(相似度80%,改成99%,一般1秒就找到了),找小图宽高:503,293,用时1秒。
目标物体在右下角:
OP库找图 坐标【2652,1424】937.6毫秒,相似度设置90%
OP库找图 坐标【2653,1424】223.8毫秒,相似度设置99%
OP库找图 坐标【67,230】171.4毫秒,相似度设置99%,目标物体在屏幕左上角

其实一个模糊找图的插件组件,应该返回实际识别匹配度,输入80%,实际匹配度是95%,方便开发者改进方法,统计数据。
场景:---------------
当要找的图片中间有几个污点或者少量细线或几个小矩形框,对要找的图来说,不同的部分可能还没有3%。
但是用大漠,乐玩等插件就完全认不到了,他们可能使用了少许的偏色等实现相似度。
对于要找的图像素有1-10个点不同就完全失灵了,相似度改成80%,50%都没用。
测试记录:------------
寻找屏幕区域:3840*2160
》》》找大图宽高:1172,671(相似度100%)
大漠找图 坐标【-1,-1】186.1毫秒
乐玩找图 坐标【-1,-1】209.3毫秒
OP库找图 坐标【-1,-1】564.0毫秒

》》》图上有杂点,设置:相似度80%,OP能找到

大漠找图 坐标【-1,-1】155.2毫秒
乐玩找图 坐标【-1,-1】232.5毫秒
OP库找图 坐标【2587,1430】55209.4毫秒

===============================================================
图上有个小圈(小图2_2653_1424.bmp),只有OP能找到
【图1272 只有OP找图能识别到图片上有污点或小划痕,线条,小方框.jpg】
寻找屏幕区域:3840*2160
小图宽高:503,293
相似度:90%

大漠找图 坐标【-1,-1】174.3毫秒
乐玩找图 坐标【-1,-1】232.1毫秒
OP库找图 坐标【2652,1423】1022.2毫秒

请求修复

1.修复在WIN7下兼容性问题
2.增加类似于大漠的OcrInFile(x1, y1, x2, y2, pic_name, color_format, sim)函数

支持英雄联盟的截图吗?

英雄联盟有保护,win32api操作英雄联盟进程都会无效。

主要想在全屏模式也可以区域截图,然后找图

建议找图增加个可以传原图的接口

建议找图增加个可以传原图的接口,就是 类似 FindPic("图片路径","欲寻找的小图片路径",.....)
目前是只有绑定窗口找图,如果窗口不能截图(有些HOOK了API函数,禁止截图),那就找不了图了

建议增加:截图到内存,差异截图的功能

建议增加:截图到内存的功能,有时需要截一次,再用多个方法比较
LONG CaptureToMemBmp(0,0,2000,2000,位图深度:16位,24位,32位)

建议增加:截图到内存,纯RGB数据,无64字节位图头
LONG CaptureToMem(0,0,2000,2000,位图深度:16位,24位,32位)

建议增加:VB6,delphi等编程语言使用的高速模式,纯字符串表达会少量减少找图速度
建议增加生成图片变化差异图的接口,用于远程屏幕监视方面的省流量传输
一个原来的图片,再加一个有少量变化的图片,BITBLT生成一个差异图,SrcInvert参数,几乎是全黑的。
截图产生的24,32位RGB数据可以压缩成ZIP,容量从原来的30M变成30K
这个方式也可以用于WIN7,XP系统无法用DXGI驱动式截图时,只对屏幕变化部分进行找图

文档里的方法有部分缺失

KeyPressChar,KeyPress方法没有,同时KeyDown、KeyDownChar、KeyUp、KeyUpChar无效
我的环境WIN7 64旗舰版 C#将dll注册到系统 通过COM引用。

提交BUG

发现com注册成功后在delphi中导出接口时部分函数导不出来,导致无法调用比如SendString,SendStringIme,另外opencv_core343.dll, opencv_imgproc343.dll, zlib1.dll能不要么?拖几个尾巴有些麻烦

为什么调用OCR的时候窗口最小化就无法识别到文字?

c#代码如下:
`int hwnd = opCom.FindWindow(string.Empty, "*无标题 - 记事本");

int flag = opCom.SetDict(0, @"E:\Users\Jon\Desktop\test.dict");

int result = opCom.BindWindow(hwnd, "normal", "normal", "normal", 0);

string ocrResult = opCom.Ocr(0, 0, 1600, 1024, "ffffff-000000", 1.0);`

把绑定的窗口切换到前台是正常的,最小化窗口就无法识别到文字。
color_format确定是对的,dict字典也是使用optool.exe抓图后手动定义的

opengl后台截图 hook补充

有的老游戏使用opengl, 进行后台截图 你hook的几个方法都没有生效, 经过调试发现可以通过 hook "glFinish" 来捕获绘制完成时 进行后台截屏。

FindStr在BindWindow为normal正常模式时的坐标问题

FindStr在BindWindow为normal正常模式时找到的坐标和MoveTo方法的坐标不匹配,需要去掉windows窗口边框的宽度和标题栏的高度
我的做法是这样的:
//设置窗口在屏幕的位置为0,0
MoveWindow(hwndOpCom, 0, 0);
//调用GetClientRect获取目标窗口在屏幕的位置,我的系统里是边框宽度5,标题栏高度28
GetClientRect(hwndOpCom, out cx1, out cy1, out cx2, out cy2);
//调用findstr方法获取字符位置
opCom.FindStr(0, 0, sw, sh, tznpc, "ffffff-000000", 1.0, out ox, out oy);
//x坐标减去边框宽度,y坐标减去标题栏高度
x = Convert.ToInt32(ox) - borWidth;
y = Convert.ToInt32(oy) - borHeight;
//此时移动鼠标才是正确的文本所在坐标点
opCom.MoveTo(x, y);

C# 如何引用插件?

1使用win10 X64系统,注册插件。
2使用vs2019创建C#项目,在引用只是发现opLib,没有op。
3使用python x64注册成功,使用demo是可以的。

0.3.5版本FingStr、FingStr、GetColor、CmpColor有问题

使用X64静态库lib调用
op.FindStr(0, 0, 800, 600, L"特殊奖励", L"ffacba-000000", 0.95, &x, &y, &ret);
op.GetColor(1848, 1058,wstr);
op.CmpColor(1848, 1058, L"e8524f-000000", 1.0,&ret)

FingStr、FingStr用dm工具生成的字库识别返回0,返回的x,y为-1。
GetColor不能获取到实际屏幕点的颜色。
CmpColor返回的是0,不管颜色是否匹配,

建议

建议在findstr等情况之外增加一个抓图并分享给下一个截图方法,可以在多线程中使用避免多次抓图识别(如监视突发情况)。

BUG

在不绑定窗口的前提下执行某些函数比如move和leftclieck会导致程序异常!

Com接口缺少SetKeypadDelay方法

错误信息:
错误 CS1061 '“IOpInterface”未包含“SetKeypadDelay”的定义,并且找不到可接受第一个“IOpInterface”类型参数的可访问扩展方法“SetKeypadDelay”(是否缺少 using 指令或程序集引用?)

另外SetMouseDelay也没有,我是在调用KeyPress和KeyDown方法时有一些按钮无效所以想尝试增加延迟的方式,但是找不到这个方法

另外在测试按下F1键时发现lParam与手动按下键盘发送的参数不一致,用User32的PostMessage并处理lParam方法后是可以的
lParam处理方法是调用了MakeKeyLparam((int)keyval, 256);

FindMultiColor 闪退

findpic/ocr 测试正常

FindMultiColor

647, 56, 943, 147, "ffdf2d-101010", "0|-3|e2da5b-101010,0|-6|b0b5bb-101010", 0.90, 0

用的是以上参数 直接闪退

文档中函数缺失

long BindWindowEx(hwnd,display,mouse,keypad,public,mode)
BindWindowEx在文档中有提到,但是op中没有

大神求助,关于按键精灵调用

请问你这个用按键精灵能调用吗?我试了一下32位的最新版,输出版本信息都没问题,但是move 不生效,不知道咋回事 代码如下

Set op = CreateObject("op.opsoft")
res = op.MoveTo (100,100 )
TracePrint res // 输出的是0

ver=op.Ver()
MsgBox ver //版本获取正确

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.