屏幕自动化编程操作找图找色找字(操作自动化鼠标屏幕组件)「屏幕找图算法」

屏幕找字:使用系统自带组件其实 Windows 10/11 系统自带的一个强大、免费的屏幕图像文字识别组件,调用该组件生成的 EXE 文件体积很小。
下面我们用 aardio 编程语言写个例子,代码很简单,先上图看效果:请复制下面的源代码粘贴到 aardio 中,再按「运行」按钮就可以看到上图的效果 —— 程序自动找到了屏幕上的文本,鼠标自动移到了该位置。
import mouse;import dotNet.ocr;//创建 OCR 对象var ocr = dotNet.ocr();//识别屏幕上的文字var ocrResult = ocr.detectScreen()//查找文字在屏幕上的位置var x,y = ocrResult.findPoint("把鼠标移动到这里",0.1);mouse.moveTo(x,y,true)上面就是一个完整的程序了,aardio 写程序就这么简单。
这个系统 OCR 组件其实是一个 UWP 组件,不过 aardio 调用 .NET 组件、或者调用 UWP 组件都非常方便。
参考「 aardio 范例 > 调用其他语言 > dotNet > 调用 UWP 接口 」:屏幕找字:调用开源、免费、强大、绿色的 chineseocrliteaardio 基于 chineseocrlite 封装了 string.ocrLite 扩展库,支持生成绿色、独立的 EXE 文件,带模型生成的EXE打包后仅 十几 MB。
调用源代码很简单,先上图看效果:请复制下面的源代码,粘贴到 aardio 中,再按「运行」按钮就可以看到上图的效果 ——鼠标自动移到了屏幕上指定文本所在位置。
import mouse;import string.ocrLite;import string.ocrLite.defaultModels;//创建 OCR 对象var ocr = string.ocrLite();//识别屏幕上的文字var ocrResult = ocr.detectScreen();//查找文字在屏幕上的位置var x,y = ocrResult.findPoint("把鼠标移动到这里",0.2);mouse.moveTo(x,y,true);大家可能注意到了,aardio 中很多库的接口、用法都一样,可以一通百通。
如果是制作自动化机器人之类的软件,识别屏幕上文字的能力就好像机器人的眼睛一样重要。
尤其是现在很多无窗口界面的软件,通过 OCR 组件就可以较好地定位到界面上指定的部位进行准确的操作。
大家可以试试 OCR 结合 aardio 标准库里的 winex.mouse, mouse 等可以实现非常酷的效果,另外 aardio 工具里的「探测器->窗口探测器」也很重要(可以生成示例代码)。
屏幕找色找色很简单,请复制下面的范例代码粘贴到 aardio 中,然后点「运行」就可以看到效果:import gdi;import win;import mouse;import soImage;//抓屏var imgScreen = soImage();imgScreen.capture(); //在图像上搜索指定颜色的点,//第一个参数是一个表示查找颜色的数值,更多参数用法请查看智能提示var x,y = imgScreen.findColor( gdi.RGB(48,171,53) );//返回该坐标所在显示器左上角位置var scrX,scrY = win.getScreenPos(x=x,y=y); //快速移动鼠标(相对移动)mouse.move(scrX,scrY,true);//获取虚拟屏幕位置,双屏幕时可能起始坐标可能返回负数var scrX,scrY = win.getScreenPos(); //慢速移动鼠标,显示移动轨迹mouse.moveTo(x+scrX,y+scrY,true);注意 mouse.moveTo() 函数移动鼠标时可以看到移动轨迹,改为 mouse.move() 函数可以直接移动到指定坐标。
屏幕找图aardio 里屏幕找图就更简单了,首先加载要查找的图像:import soImage;var img = soImage();img.load("/res/find.jpg");"/res/find.jpg" 可以是硬盘上的图像文件路径,也可以是 EXE 资源文件路径(可以生成独立 EXE )。
也可以自内存直接加载图像,如下用第 2 个参数指定图像文件后缀名:img.setBytes( imgBytes,".png"); 查找图像要尽可能的小,并尽可能裁剪去掉背景,突出查找特征。
使用 img.findImage 全屏找图,也可以使用下面的函数在指定窗口内找图:var sm,x,y = imgFind.findImageInWindow(hwnd);上面的 hwnd 参数指定窗口句柄。
返回值 sm 为相似度( 0 到 100 之间的值,100 为完全相似,0 为完全不相似 ),返回值 x,y 为找到图像的右下角坐标。
自动化操作找图找色找字的目的是自动化操作,aardio 与自动化操作有关的库如下:win //窗口操作winex //外部程序窗口操作winex.accObject //Microsoft Active Accessibility 自动化接口winex.key //后台键盘操作winex.mouse //后台鼠标操作key //键盘操作mouse //鼠标操作process //进程操作soImage //找图找色与自动化操作有关的范例:网页自动化就不必用上面这些了,直接使用浏览器控件就可以,可参考我之前写的文章 更简单地自动化操作浏览器 。
「aardio 范例 > Web 界面」也可以看一下:
屏幕自动化编程操作找图找色找字(操作自动化鼠标屏幕组件)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息