- 👋 Hi, I’m @WallBreaker2
wallbreaker2 / op Goto Github PK
View Code? Open in Web Editor NEWWindows消息模拟,gdi,dx,opengl截图,找图,找字(OCR)
License: MIT License
Windows消息模拟,gdi,dx,opengl截图,找图,找字(OCR)
License: MIT License
同样的场景下,使用找图模式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快速截屏录屏技术,高帧率直播桌面_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占用率很低,性能很高
dict.hpp
/*
第 0 代字库
*/
struct word_info_t {
//char of word
wchar_t _char[MAX_PATH];//这里可以考虑改大一点
long winkeypad::KeyUp(long vk_code);
long winkeypad::KeyDown(long vk_code);
//vk_code = toupper(vk_code); 上面2个函数都注释 toupper
测试环境: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接口方法,在此环境下只有绑定窗口前台激活才可以正常查找字符
如题,如果可以,请问该如何调用呢?
我使用
op.FindColor(650, 582, 802, 607, "7FB4B4-803232", 0.9, 0, &x, &y)
op.MoveTo(x, y)
x坐标和y坐标都正确返回,鼠标可以移动到上面了,但是FindColor返回值是0没找到是怎么回事呢
表扬一下,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%,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操作英雄联盟进程都会无效。
主要想在全屏模式也可以区域截图,然后找图
绑定雷电- 除了normal 其他都绑定不了, 所有opengl 都显示注入失败
有没有解决方案
dm同样电脑测过ok
https://github.com/kekeimiku/op-go
活跃开发中,欢迎大佬们提建议修改代码
编译出来的dll不支持xp环境
建议找图增加个可以传原图的接口,就是 类似 FindPic("图片路径","欲寻找的小图片路径",.....)
目前是只有绑定窗口找图,如果窗口不能截图(有些HOOK了API函数,禁止截图),那就找不了图了
[DllImport("op_x64.dll", EntryPoint = "FindWindow")] public static extern long FindWindow(string className, string title);
运行时抛出异常:System.EntryPointNotFoundException:“无法在 DLL“op_x64.dll”中找到名为“FindWindow”的入口点。”
建议增加:截图到内存的功能,有时需要截一次,再用多个方法比较
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引用。
发现com注册成功后在delphi中导出接口时部分函数导不出来,导致无法调用比如SendString,SendStringIme,另外opencv_core343.dll, opencv_imgproc343.dll, zlib1.dll能不要么?拖几个尾巴有些麻烦
启动 Launcher.exe 提示
“初始化失败!op插件未注册到系统”
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抓图后手动定义的
项目还有后续维护升级吗?
目前看最近的半年前更新的
FindColor找不到颜色,delay提示不支持此方法!
0.3.7 FindMultiColor无效且接口描述为FinopultiColor
long FindWindow(class,title)
丢失op_i.h文件
导致无法正常引用文件调用
支持!
有的老游戏使用opengl, 进行后台截图 你hook的几个方法都没有生效, 经过调试发现可以通过 hook "glFinish" 来捕获绘制完成时 进行后台截屏。
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);
1使用win10 X64系统,注册插件。
2使用vs2019创建C#项目,在引用只是发现opLib,没有op。
3使用python x64注册成功,使用demo是可以的。
使用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等情况之外增加一个抓图并分享给下一个截图方法,可以在多线程中使用避免多次抓图识别(如监视突发情况)。
LeftUp方法是否返回值写错了,成功了不返回1。使用的是打包了的op-0.3.9.0 64位。
在不绑定窗口的前提下执行某些函数比如move和leftclieck会导致程序异常!
错误信息:
错误 CS1061 '“IOpInterface”未包含“SetKeypadDelay”的定义,并且找不到可接受第一个“IOpInterface”类型参数的可访问扩展方法“SetKeypadDelay”(是否缺少 using 指令或程序集引用?)
另外SetMouseDelay也没有,我是在调用KeyPress和KeyDown方法时有一些按钮无效所以想尝试增加延迟的方式,但是找不到这个方法
另外在测试按下F1键时发现lParam与手动按下键盘发送的参数不一致,用User32的PostMessage并处理lParam方法后是可以的
lParam处理方法是调用了MakeKeyLparam((int)keyval, 256);
如題,因爲C#直接加載無法調用dll,非托管的dll,只能用注冊的方式,如果用免注冊的方式需要自己生成多一個類方法,略顯臃腫
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 //版本获取正确
display_method 没有初始化
etc:bkbase::get_widht 拼写不正确
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.