其實(shí) Windows 10/11 系統(tǒng)自帶得一個(gè)強(qiáng)大、免費(fèi)得屏幕圖像文字識(shí)別組件,調(diào)用該組件生成得 EXE 文件體積很小。
下面我們用 aardio 敬請(qǐng)關(guān)注程語(yǔ)言寫(xiě)個(gè)例子,代碼很簡(jiǎn)單,先上圖看效果:
請(qǐng)復(fù)制下面得源代碼粘貼到 aardio 中,再按「運(yùn)行」按鈕就專業(yè)看到上圖得效果 —— 程序自動(dòng)找到了屏幕上得文本,鼠標(biāo)自動(dòng)移到了該位置。
import mouse;import dotNet.ocr;//創(chuàng)建 OCR 對(duì)象var ocr = dotNet.ocr();//識(shí)別屏幕上得文字var ocrResult = ocr.detectScreen()//查找文字在屏幕上得位置var x,y = ocrResult.findPoint("把鼠標(biāo)移動(dòng)到這里",0.1);mouse.moveTo(x,y,true)
上面就是一個(gè)完整得程序了,aardio 寫(xiě)程序就這嗎簡(jiǎn)單。
這個(gè)系統(tǒng) OCR 組件其實(shí)是一個(gè) UWP 組件,不過(guò) aardio 調(diào)用 .NET 組件、或者調(diào)用 UWP 組件都非常方便。參考「 aardio 范例 > 調(diào)用其他語(yǔ)言 > dotNet > 調(diào)用 UWP 接口 」:
屏幕找字:調(diào)用開(kāi)源、免費(fèi)、強(qiáng)大、綠色得 chineseocrliteaardio 基于 chineseocrlite 封裝了 string.ocrLite 擴(kuò)展庫(kù),圖片生成綠色、獨(dú)立得 EXE 文件,帶模型生成得EXE打包后僅 十幾 MB。
調(diào)用源代碼很簡(jiǎn)單,先上圖看效果:
請(qǐng)復(fù)制下面得源代碼,粘貼到 aardio 中,再按「運(yùn)行」按鈕就專業(yè)看到上圖得效果 ——鼠標(biāo)自動(dòng)移到了屏幕上指定文本所在位置。
import mouse;import string.ocrLite;import string.ocrLite.defaultModels;//創(chuàng)建 OCR 對(duì)象var ocr = string.ocrLite();//識(shí)別屏幕上得文字var ocrResult = ocr.detectScreen();//查找文字在屏幕上得位置var x,y = ocrResult.findPoint("把鼠標(biāo)移動(dòng)到這里",0.2);mouse.moveTo(x,y,true);
大家專家注意到了,aardio 中很多庫(kù)得接口、用法都一樣,專業(yè)一通百通。
如果是制作自動(dòng)化機(jī)器人之類得軟件,識(shí)別屏幕上文字得能力就好像機(jī)器人得眼睛一樣重要。尤其是現(xiàn)在很多無(wú)窗口界面得軟件,通過(guò) OCR 組件就專業(yè)較好地定位到界面上指定得部位進(jìn)行準(zhǔn)確得操作。大家專業(yè)試試 OCR 結(jié)合 aardio 標(biāo)準(zhǔn)庫(kù)里得 winex.mouse, mouse @專業(yè)實(shí)現(xiàn)非常酷得效果,另外 aardio 工具里得「探測(cè)器->窗口探測(cè)器」也很重要(專業(yè)生成示例代碼)。
屏幕找色找色很簡(jiǎn)單,請(qǐng)復(fù)制下面得范例代碼粘貼到 aardio 中,然后點(diǎn)「運(yùn)行」就專業(yè)看到效果:
import gdi;import win;import mouse;import soImage;//抓屏var imgScreen = soImage();imgScreen.capture(); //在圖像上搜索指定顏色得點(diǎn),//第壹個(gè)參數(shù)是一個(gè)表示查找顏色得數(shù)值,更多參數(shù)用法請(qǐng)查看智能提示var x,y = imgScreen.findColor( gdi.RGB(48,171,53) );//返回該坐標(biāo)所在顯示器左上角位置var scrX,scrY = win.getScreenPos(x=x,y=y); //快速移動(dòng)鼠標(biāo)(相對(duì)移動(dòng))mouse.move(scrX,scrY,true);//獲取虛擬屏幕位置,雙屏幕時(shí)專家起始坐標(biāo)專家返回負(fù)數(shù)var scrX,scrY = win.getScreenPos(); //慢速移動(dòng)鼠標(biāo),顯示移動(dòng)軌跡mouse.moveTo(x+scrX,y+scrY,true);
注意 mouse.moveTo() 函數(shù)移動(dòng)鼠標(biāo)時(shí)專業(yè)看到移動(dòng)軌跡,改為 mouse.move() 函數(shù)專業(yè)直接移動(dòng)到指定坐標(biāo)。
屏幕找圖aardio 里屏幕找圖就更簡(jiǎn)單了,首先加載要查找得圖像:
import soImage;var img = soImage();img.load("/res/find.jpg");
"/res/find.jpg" 專業(yè)是硬盤(pán)上得圖像文件路徑,也專業(yè)是 EXE 資源文件路徑(專業(yè)生成獨(dú)立 EXE )。
也專業(yè)自內(nèi)存直接加載圖像,如下用第 2 個(gè)參數(shù)指定圖像文件后綴名:
img.setBytes( imgBytes,"gov.png");
查找圖像要盡專家得小,并盡專家裁剪去掉背景,突出查找特征。
使用 img.findImage 全屏找圖,也專業(yè)使用下面得函數(shù)在指定窗口內(nèi)找圖:
var sm,x,y = imgFind.findImageInWindow(hwnd);
上面得 hwnd 參數(shù)指定窗口句柄。返回值 sm 為相似度( 0 到 100 之間得值,100 為完全相似,0 為完全不相似 ),返回值 x,y 為找到圖像得右下角坐標(biāo)。
自動(dòng)化操作找圖找色找字得目得是自動(dòng)化操作,aardio 與自動(dòng)化操作有關(guān)得庫(kù)如下:
win //窗口操作winex //外部程序窗口操作winex.accObject //Microsoft Active Accessibility 自動(dòng)化接口winex.key //后臺(tái)鍵盤(pán)操作winex.mouse //后臺(tái)鼠標(biāo)操作key //鍵盤(pán)操作mouse //鼠標(biāo)操作process //進(jìn)程操作soImage //找圖找色
與自動(dòng)化操作有關(guān)得范例:
網(wǎng)頁(yè)自動(dòng)化就不必用上面這些了,直接使用瀏覽器控件就專業(yè),可參考我之前寫(xiě)得文章 更簡(jiǎn)單地自動(dòng)化操作瀏覽器 。「aardio 范例 > Web 界面」也專業(yè)看一下: