本帖最后由 红色森林 于 2024-9-4 13:12 编辑
微信自带的OCR功能,快捷准确。很好用。有大佬搞了一个py库实现了对微信ocr的调用。aardio作者一鹤老师做了一个aar的相关库,使得调用微信ocr非常方便。通过自己带的库和例子就能生成一个cor文字识别软件。
不过,我在使用过程中,遇到有时能用,有时又不能用的情况,因为我电脑上安装了多个版本的微信,有时装一个新的版本,ocr就不能用了。有时换一个版本,又能用了。看到群里有人说一次都没有成功。感觉这里面一个是路径问题,一个是32位和64位问题。因为以前微信是32位,好像3.9后有64位也有32位。
现在,通过相关资料找到调用的文件,把它们提取出来,放到软件目录下调用,这样就不再依赖不同版本的微信,就算电脑上没有安装微信,也能用了。实现了
其实,作者的库是写很好的,可以指定路径,不指定才去寻找微信安装路径。当时遇到问题我也曾试着指定路径,但没有成功。因为我电脑上微信安装有多个路径。
下面的代码:
[AAuto] 纯文本查看 复制代码 import win.ui;
/*DSG{{*/
var winform = win.form(text="调用微信 OCR";left=-2;top=-2;right=323;bottom=382;topmost=1)
winform.add(
btnOcr={cls="button";text="提取图像文本";left=150;top=341;right=308;bottom=376;db=1;dl=1;dr=1;z=2};
edit={cls="edit";left=9;top=6;right=314;bottom=335;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}
)
/*}}*/
/*
仅供技术研究测试,勿作任何不当用途
*/
import process.wxOcr;
var weChartPath="/wxocr/WeChat.exe";
var ocrPath="/wxocr/WeChatOCR.exe";
//创建 OCR 对象
var ocr = process.wxOcr(weChartPath,ocrPath);
if(!ocr) error("系统未安装微信");
//按钮事件
winform.btnOcr.oncommand = function(id,event){
//屏幕选区
import mouse.screenArea;
var screenArea = mouse.screenArea();
//保存屏幕选区
screenArea.onSelectionChanged = function(rc){
import gdip.snap;
var bmp = gdip.snap(screenArea.hwnd,rc.xywh());
bmp.save("/~~~~ocr.jpg",80);
owner.close();
}
screenArea.doModal();
//识别文本
ocr.sendRquest("/~~~~ocr.jpg",
function(mmojoOcrResponse){
//识别结果
var singleResult = mmojoOcrResponse.ocrResult.singleResult;
//逐行输出到文本框
for(k,ret in singleResult){
winform.edit.print(ret.singleStrUtf8)
}
}
)
}
//显示窗口
winform.show();
win.loopMessage();
代码没什么特别的,就是指定路径。开始路径没带exe,一直没成功。后面带上才成功了。
生成后,把提取的wxocr目录复制到exe同目录就可以运行了。
wxocr目录中,两个dll原本是在微信程序里面的,所以要找微信路径。但不调用微信。所以我这个目录中那个wechat.exe,就是一个空文件,写个名字而已。
另外几个文件,就是ocr要调用的模型。估计是用mojo训练的,所以要两那个dll。
你也可以从你自己电脑上提取正常使用的那几个文件替换。
上传说附件过大。
https://www.123pan.com/s/NtTCTd-lY79A?提取码:Euae
|