简单编程调用微信 OCR 识别图像文本

先声明一下:
本文提供的代码是为了学习与研究编程技术,勿作其他任何不当用途。

今天偶然在 GitHub 看到一个不错的开源项目:

C++ 版: github.com/EEEEhex/QQImpl 
Python 版: github.com/kanadeblisst00/wechat_ocr

可以调用微信 OCR 。

于是用纯 aardio 代码翻译了一下创建了 process.wxOcr 扩展库。扩展库源码的一些技术要点我都写了注释,大家可以看看。

用法很简单。

我们只要下载几 MB 的极简开发环境 aardio 。

新建工程,复制下面的代码粘贴到 main.aardio :

//创建窗口
import win.ui;
var winform = win.form(text="测试 OCR")
winform.add(
edit={cls="edit";marginLeft=1;marginTop=1;marginRight=1;marginBottom=1;multiline=1}
)

//导入 OCR 扩展库
import process.wxOcr; 

//创建 OCR 对象
var ocr = process.wxOcr(); 

//识别文本
ocr.sendRquest("D:	estocr.jpg",

    //最后一个参数指定一个函数异步接收识别结果
    function(mmojoOcrResponse){ 
        
        //识别结果
        var result = mmojoOcrResponse.ocrResult.singleResult;
        
        //逐行输出文本
        for(k,line in result){
            winform.edit.print(line.singleStrUtf8) 
        }  
    }
)

//显示窗口
winform.show();
win.loopMessage();

点击『保存 Ctrl +S』按钮:

简单编程调用微信 OCR 识别图像文本

按『运行 F5 』按钮看效果,按 F7 一键生成独立 EXE 文件。

下面再增加一点难度。

添加一个截屏选区转文本的功能:

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 ocr = process.wxOcr(); 
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();

运行效果如下:

简单编程调用微信 OCR 识别图像文本

注意识别结果里的 mmojoOcrResponse 是一个 protobuf.message 对象,aardio 里的 protobuf 消息对象是直接兼容 JSON 的,不需要写任何代码,可以直接用下面的代码转换为 JSON 。

web.json.stringify(mmojoOcrResponse)

或者用下面的代码转换为纯表对象:

web.json.strip(mmojoOcrResponse)

当然,直接用 mmojoOcrResponse 也很方便。

实则 aardio 中提供了不少 OCR 的扩展库,例如: string.ocrLite, dotNet.ocr ,tesseract 等等。利用 aardio 提供的 web.rest 调用各种在线 OCR 接口也很方便,基本不需要额外去封装扩展库。

© 版权声明

相关文章

18 条评论

  • 头像
    林_Ni 读者

    提示:系统未安装微信。我但安装了,是有板本要求吗?

    无记录
    回复
  • 头像
    糕手小青0729 读者

    内网能用吗?

    无记录
    回复
  • 头像
    娱乐侃侃君 读者

    没有Java的吗?

    无记录
    回复
  • 头像
    读者

    不明觉厉

    无记录
    回复
  • 头像
    爱幂恋战 投稿者

    之前下载了这软件,一直没用过。因为本身就是做c#。。

    无记录
    回复
  • 头像
    马亿喵 读者

    已有人发布类似工具了

    无记录
    回复
  • 头像
    枪王快3秒 投稿者

    关注作者很久了,从2015年开始,后面还花钱买了作者的教程,确实不错,简单易用,win平台下的开发利器

    无记录
    回复
  • 头像
    微笑常在心200501 投稿者

    向很多人推荐了aardio

    无记录
    回复
  • 头像
    酷酷哒 读者

    蛮好的,有空研究一下

    无记录
    回复
  • 头像
    嘉语 读者

    一定要安装微信吗 有没有DLL版本

    无记录
    回复
  • 头像
    一个烟圈 读者

    好棒👏

    无记录
    回复
  • 头像
    娟子 读者

    佩服💪

    无记录
    回复
  • 头像
    超雄土豆1 投稿者

    🎉五一快乐

    无记录
    回复
  • 头像
    合伙人 读者

    👏致敬劳动者

    无记录
    回复
  • 头像
    青岛海虹包装 读者

    太强了💪

    无记录
    回复
  • 头像
    海宇 读者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    离月小钗ocean 读者

    微信的二维码 生成与识别 开源没

    无记录
    回复
  • 头像
    阿聪聪聪聪啊 读者

    很有意思, 怎么从头开始学习您这个aardio?

    无记录
    回复