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文件中.
2 关于
欢迎关注我的微信公众号.
原文始发于微信公众号(其之):python调用微信高精度OCR模型识别文本
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204894.html