不用安装微信也能用的调用微信OCR软件

红色森林 4月前 2207

微信自带的OCR功能,快捷准确。很好用。有大佬搞了一个py库实现了对微信ocr的调用。aardio作者一鹤老师做了一个aar的相关库,使得调用微信ocr非常方便。

通过自己带的库和例子就能生成一个cor文字识别软件。

不过,我在使用过程中,遇到有时能用,有时又不能用的情况,因为我电脑上安装了多个版本的微信,有时装一个新的版本,ocr就不能用了。有时换一个版本,又能用了。看到群里有人说一次都没有成功。感觉这里面一个是路径问题,一个是32位和64位问题。因为以前微信是32位,好像3.9后有64位也有32位。

现在,通过相关资料找到调用的文件,把它们提取出来,放到软件目录下调用,这样就不再依赖不同版本的微信,就算电脑上没有安装微信,也能用了。实现了

其实,作者的库是写很好的,可以指定路径,不指定才去寻找微信安装路径。当时遇到问题我也曾试着指定路径,但没有成功。因为我电脑上微信安装有多个路径。

下面的代码:

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.123865.com/s/TSc7jv-rtpg3提取码:9DU6


最新回复 (15)
  • 光庆 4月前
    0 2

  • 红色森林 4月前
    0 3
    //创建 OCR 调用对象 var ocr = process.wxOcr(); 之前这句没有删除,异致前面指定的路径是白白指定的,最后还是找本机。已经修改并重新编译打包了。更新了下载地址。
  • Xmzzz 4月前
    0 4

    这个不错,绿化版

  • 光庆 4月前
    0 5
    红色森林 //创建 OCR 调用对象 var ocr = process.wxOcr(); 之前这句没有删除,异致前面指定的路径是白白指定的,最后还是找本机。已经修改并重新编译打包了。更新了下载地址。
    这个新的不行,第一次运行识别不出来。第二次运行出不来界面。
  • tiansha 4月前
    0 6
    为什么的一直识别都是空的
  • hhs66317 4月前
    0 7
    如何才能让它在识别结果中包含对应的位置信息?比如识别结果中有个“定位”文字,我希望能获取到这个定位文字在图片中的位置 这样方便我在处理一些自绘窗口,无法获取标准控件时,通过Ocr识别定位后去点击对应区域
  • yesorno 4月前
    0 8
    有翻译功能吗
  • JRJJ 2月前
    0 9
    此楼层已删除
  • JRJJ 2月前
    0 10
    此楼层已删除
  • zhhyit 6天前
    0 11
    这个不联网,确实牛逼
  • zxl1969 4天前
    0 12
    好东西,怎不增加一个清除按钮
  • zxl1969 4天前
    0 13
    应该还要增加一复制按钮 可能我有强迫症
  • 近我者赤 4天前
    0 14
    import fonts.fontAwesome;
    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='\uF030 截屏并提取文本';left=116;top=341;right=248;bottom=376;db=1;dl=0.36;dr=0.24;font=LOGFONT(name='FontAwesome');z=2};
    button={cls="button";text='\uF0EA 复制文本';left=9;top=341;right=105;bottom=376;db=1;dl=1;dr=0.68;font=LOGFONT(name='FontAwesome');z=3};
    checkbox={cls="checkbox";text="累加";left=259;top=349;right=315;bottom=372;db=1;dr=1;z=4};
    edit={cls="edit";left=9;top=6;right=315;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;
                
                //逐行输出到文本框
                if(!winform.checkbox.checked){
                	winform.edit.text="";
                }
                for(k,ret in singleResult){
                     winform.edit.print(ret.singleStrUtf8)
                }  
            }
        )    
    }
    
    //显示窗口
    
    winform.button.oncommand = function(id,event){
    	import win.clip;
    	win.clip.write(winform.edit.text)
    }
    
    winform.show();
    win.loopMessage();


  • zxl1969 4天前
    0 15
    这个确实更好
  • redchina 2天前
    0 16
    很奇怪怎么在我的电脑上,这个程序总是无法识别截取的图片
返回
发新帖