白嫖微信OCR,实现批量提取图片中的文字

10,027 阅读2分钟

微信自带的OCR使用比较方便,且准确率较高,但是唯一不足的是需要手动截图之后再识别,无法批量操作,这里我们借助wechat-ocr这一开源工具,实现批量读取文件夹下的所有图片并提取文本的功能。下面介绍下操作步骤。

1. 安装wechat-ocr这个库

这里我们使用的是GoBot这一自动化工具(如对该软件感兴趣,可以关注公众号:RPA二师兄),他提供的可视化安装依赖的功能。打开依赖包管理的Tab页,在Python包名称处填写wechat-ocr,然后点击安装,就能完成wechat-ocr的安装,安装完成之后可以切换到管理已安装模块的Tab,可以看到已经成功安装。

Pasted image 20241101200809.png

Pasted image 20241101200954.png

2. 编写调用代码

这里我们直接给出代码,只需要创建一个代码流程,将我们给的代码复制进去就可以了。

from package import variables as glv #全局变量,例如glv['test']
from robot_base import log_util
import robot_basic
from robot_base import log_util
import os
import re
from wechat_ocr.ocr_manager import OcrManager, OCR_MAX_TASK_ID


def main(args):
   #输入参数使用示例
   # if args is None:
   #    输入参数1 = ""
   #else:
   #    输入参数1 = args.get("输入参数1", "")
   log_util.Logger.info(args)
   init_ocr_manger(args['微信安装目录'])
   ocr_manager.DoOCRTask(args['待识别图片路径'])
   while ocr_manager.m_task_id.qsize() != OCR_MAX_TASK_ID:
       pass
   global ocr_result
   return ocr_result

ocr_result = {}
ocr_manager = None
def ocr_result_callback(img_path:str, results:dict):
   log_util.Logger.info(results)
   ocr_result = results

def init_ocr_manger(wechat_dir):
   wechat_dir = find_wechat_path(wechat_dir)
   wechat_ocr_dir = find_wechatocr_exe()
   global ocr_manager
   if ocr_manager is None:
       ocr_manager = OcrManager(wechat_dir)
       # 设置WeChatOcr目录
       ocr_manager.SetExePath(wechat_ocr_dir)
       # 设置微信所在路径
       ocr_manager.SetUsrLibDir(wechat_dir)
       # 设置ocr识别结果的回调函数
       ocr_manager.SetOcrResultCallback(ocr_result_callback)
       # 启动ocr服务
       ocr_manager.StartWeChatOCR()
     

def find_wechat_path(wechat_dir):
   # 定义匹配版本号文件夹的正则表达式
   version_pattern = re.compile(r'\[\d+\.\d+\.\d+\.\d+\]')

   path_temp = os.listdir(wechat_dir)
   for temp in path_temp:
       # 下载是正则匹配到[3.9.10.27]
       # 使用正则表达式匹配版本号文件夹
       if version_pattern.match(temp):
           wechat_path = os.path.join(wechat_dir, temp)
           if os.path.isdir(wechat_path):
               return wechat_path

def find_wechatocr_exe():
   # 获取APPDATA路径
   appdata_path = os.getenv("APPDATA")
   if not appdata_path:
       print("APPDATA environment variable not found.")
       return None

   # 定义WeChatOCR的基本路径
   base_path = os.path.join(appdata_path, r"Tencent\WeChat\XPlugin\Plugins\WeChatOCR")

   # 定义匹配版本号文件夹的正则表达式
   version_pattern = re.compile(r'\d+')

   try:
       # 获取路径下的所有文件夹
       path_temp = os.listdir(base_path)
   except FileNotFoundError:
       print(f"The path {base_path} does not exist.")
       return None

   for temp in path_temp:
       # 使用正则表达式匹配版本号文件夹
       if version_pattern.match(temp):
           wechatocr_path = os.path.join(base_path, temp, 'extracted', 'WeChatOCR.exe')
           if os.path.isfile(wechatocr_path):
               return wechatocr_path

   # 如果没有找到匹配的文件夹,返回 None
   return None

然后点击流程参数,创建流程的输入参数

Pasted image 20241101201206.png

3. 调用OCR识别的方法,实现批量的文字提取

使用调用流程组件,填写对应的参数,即可实现图片文字的提取了。

Pasted image 20241101201445.png