python调用微信高精度OCR模型识别文本

python调用微信OCR识别文字

0 背景

截至目前, 微信的OCR识别是我用的最多的OCR工具. 最主要的当然还是识别准确率非常高, 最最最重要是在离线状态下进行的, 对于中文 & 英文 & 标点符号的识别效果都比较好, 也保证了数据的安全性, 之前用的其他的OCR工具要么离线OCR的模型识别效果不好, 要么需要联网识别. 其次, 识别速度很快, 往聊天窗口发送一张图片, 点开就可以复制了; 再次, 可以通过位置坐标进行复制, 哪里的文字需要复制, 直接点击上去复制就好了.

但是挺好用的功能, 没有API可以用.

前阵子, 看到看雪发布了一篇weixin ocr逆向的文章, 再后面看到有作者开源了weixin ocr的python工具. 因此也来学习一下.

https://mp.weixin.qq.com/s/cYiQXt38QPkCW7vEC_wlPw

https://github.com/kanadeblisst00/wechat_ocr

那这样, 它可以用在哪里呢? 我想比方说PDF的高精度文字识别, 我们可以制作一个免费的pdf识别工具, 将扫描版或者图片样式的pdf, 转换称可以复制文本的pdf. 再比方说, 提供一个web接口, 可以其他的web或者python程序调用完成一些高精度的文字识别工作, 比如身份证或者固定样式图片文本的提取. 再比如, 一些pdf是具备页眉, 页脚的, 如果我们仅仅需要提取pdf的文字, 页眉页脚的文字就会对文本提取造成干扰, 那么我们也可以利用文字坐标去除掉这些干扰的文字, 去除掉无用的文字后, 就可以提取出提纯后的文本.

1 使用

这个框架是依赖微信本地的ocr模型供Python来调用,据作者说明, 该项目是将原C++代码翻译成了纯Python实现.

安装python包:

pip install wechat-ocr

作者提供一个简单的例子, 我在实际使用的过程, 为了方便使用, 我写成了一个类, 以便可以提供接口给其他程序使用和长期使用. 比如说在基于Django, Flask框架, 提供web接口就可以通过http的方式进行调用了.


from json import dumps, loads
from pathlib import Path
from wechat_ocr.ocr_manager import OcrManager, OCR_MAX_TASK_ID


class WechatOcrService(object):
    def __init__(self, wechat_dir, wechat_ocr_dir):
        self.ocr_manager = OcrManager(wechat_dir)
        self.ocr_manager.SetExePath(wechat_ocr_dir)
        self.ocr_manager.SetUsrLibDir(wechat_dir)
        self.ocr_manager.SetOcrResultCallback(self.ocr_result_callback)
        self.ocr_manager.StartWeChatOCR()

    def ocr_result_callback(self, img_path: str, result_json: str or dict):
        img_file = Path(img_path)
        result_file = img_file.with_suffix('.json')
        print(f"识别成功,img_path: {img_file.as_posix()}, result_file: {result_file.as_posix()}")
        result_file.write_text(dumps(result_json, ensure_ascii=False, indent=4))

    def parse_img(self, img_paths: str or list):
        if isinstance(img_paths, str):
            img_paths = [img_paths]
        for img_path in img_paths:
            self.ocr_manager.DoOCRTask(img_path)

    def close(self):
        while self.ocr_manager.m_task_id.qsize() != OCR_MAX_TASK_ID:
            pass
        self.ocr_manager.KillWeChatOCR()


if __name__ == "__main__":
    # WeChatOCR.exe路径
    wechat_ocr_dir = r"C:UsersorangeAppDataRoamingTencentWeChatXPluginPluginsWeChatOCR7053extractedWeChatOCR.exe"
    # mmmojo.dll所在路径
    wechat_dir = r"C:Program Files (x86)TencentWeChat[3.9.6.33]"
    app = WechatOcrService(wechat_dir, wechat_ocr_dir)
    app.parse_img([
        'E:/temp/weixin_ocr/clip_20231117_204305.png',
        'E:/temp/weixin_ocr/clip_20231117_204357.png',
    ])
    app.close()

其中:

parse_img 通过该函数传递图片路径的参数, 进行识别, 识别后, 会将结果写入到图片同文件夹下的同名的json文件中.

python调用微信高精度OCR模型识别文本

2 关于

欢迎关注我的微信公众号.


原文始发于微信公众号(其之):python调用微信高精度OCR模型识别文本

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204894.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!