FeiyuYip 发表于 2024-8-26 23:59

python调用微信OCR

本帖最后由 FeiyuYip 于 2024-9-4 22:46 编辑

## 一、写在前面
> 1.关于调用本地微信的OCR功能的小工具,本论坛已经有好几个。但似乎还没有直接用python调用本地微信的OCR功能的,现在分享一下。用途应该还是很多的
> 2.代码源于网络,感谢原作者的付出

## 二、使用方法介绍
### 1.电脑安装了微信,使用本工具不需要登录微信
### 2.找到“wechatocr.exe”的路径及微信的安装路径——原代码是通过写绝对路径的方法,但微信经常升级,升级后路径变了就无用了,所以我自己写了自动获得以上两个路径的方法
### 3.电脑安装python3.10版本,因为用到的wcocr.pyd是通过python3.10版本编译的
### 4.通过简单的代码就可以调用微信的OCR功能了


## 三、效果图



## 四、关键代码
### 1.自动获取微信安装路径及“wechatocr.exe”的路径
find_wechat_path.py

import os
import re

def find_wechat_path():
    # 假设微信安装在默认的路径下
    common_paths = r"C:\Program Files\Tencent\WeChat"

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

    path_temp = os.listdir(common_paths)
    for temp in path_temp:
      # 下载是正则匹配到
      # 使用正则表达式匹配版本号文件夹
      if version_pattern.match(temp):
            wechat_path = os.path.join(common_paths, 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

def main():
    wechat_path = find_wechat_path()
    print(wechat_path)

    wechatocr_path = find_wechatocr_exe()
    print(wechatocr_path)

if __name__ == '__main__':
    main()


### 2.执行OCR功能代码(通过python3.10来运行)
OCR.py
'''
必须用python 3.10,因为wcocr.pyd是用这个版本编译的
'''
import wcocr
import os
import json
from find_wechat_path import find_wechat_path, find_wechatocr_exe

def wechat_ocr(image_path):
    # wechat_path = r"C:\Program Files\Tencent\WeChat\"
    wechat_path = find_wechat_path()

    # wechatocr_path = os.getenv("APPDATA") + r"\Tencent\WeChat\XPlugin\Plugins\WeChatOCR\7079\extracted\WeChatOCR.exe"
    wechatocr_path = find_wechatocr_exe()

    wcocr.init(wechatocr_path, wechat_path)
    result = wcocr.ocr(image_path)

    for temp in result['ocr_response']:
      # print(temp)
      print(temp['text'])

if __name__ == '__main__':
    image_path = r"pic.jpg"
    wechat_ocr(image_path)
## 五、代码链接
> 链接:https://pan.baidu.com/s/1VjRjk2uH7XClwBpfr7UtOQ?pwd=vwev
提取码:vwev
--来自百度网盘超级会员V10的分享

>源码链接:
https://github.com/swigger/wechat-ocr
https://github.com/kanadeblisst00/wechat_ocr
https://github.com/EEEEhex/qqimpl
https://bbs.kanxue.com/thread-278161.htm

iokey 发表于 2024-8-27 01:13

能不能把微信相关文件打包出来,做个绿色版啊?

flamestsui 发表于 2024-8-27 10:35

无敌小儿 发表于 2024-8-27 09:32
大佬分享下,造福坛友

import os
import json
import time
from wechat_ocr.ocr_manager import OcrManager, OCR_MAX_TASK_ID

wechat_ocr_dir = r"C:\Users\iYan\AppData\Roaming\Tencent\WXWork\WeChatOCR\1.0.1.28\WeChatOCR\WeChatOCR.exe"                           # OCR的地址,可以用everythin工具查找一下地址
wechat_dir = r"D:\Program Files (x86)\Tencent\WeChat\"# 一定是要包含mmmojo.dll的路径

def ocr_result_callback(img_path: str, results: dict):
    """
    OCR 结果回调函数
    """
    result_file = os.path.basename(img_path) + ".json"
    print(f"识别成功,img_path: {img_path}, result_file: {result_file}")

    with open(result_file, 'w', encoding='utf-8') as f:
      f.write(json.dumps(results, ensure_ascii=False, indent=2))

    # 打印 results 的内容以便调试
    print("OCR 结果:", json.dumps(results, ensure_ascii=False, indent=2))

    # 尝试提取识别的文字
    if 'ocrResult' in results:
      text_lines = for item in results['ocrResult']]
      print(f"识别的文字: {text_lines}")
    else:
      print("结果中没有 'ocrResult' 键,无法提取文字。")


def main():
    # 创建 OCR 管理器实例
    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()
    # 开始识别图片
    ocr_manager.DoOCRTask(r"D:\UserData\Pictures\2024-08-15-0003.jpg")
    # 等待 OCR 任务完成
    time.sleep(1)
    while ocr_manager.m_task_id.qsize() != OCR_MAX_TASK_ID:
      pass
    # 结束 OCR 服务
    ocr_manager.KillWeChatOCR()


if __name__ == "__main__":
    main()

FeiyuYip 发表于 2024-8-27 21:07

nulptr 发表于 2024-8-27 21:01
https://github.com/swigger/wechat-ocr
swigger大佬的Repo,代码完全/高度可用

{:1_907:}真相了,其实我发的就是这里的代码。哈哈

Carinx 发表于 2024-8-27 09:08

iokey 发表于 2024-8-27 01:13
能不能把微信相关文件打包出来,做个绿色版啊?

+1,之前我还悬赏让帮忙下载一个帖子https://blog.csdn.net/a394467238/article/details/137674575,可惜付费的看不到,不然想要看一下别人怎么弄的{:301_972:}

T4DNA 发表于 2024-8-27 07:04

这很不错,微信ocr又快又好

FeiyuYip 发表于 2024-8-27 08:22

iokey 发表于 2024-8-27 01:13
能不能把微信相关文件打包出来,做个绿色版啊?

基于微信绿色版的ocr工具,我也见过,某论坛大佬开发的。改天我看看能不能发出来

iokey 发表于 2024-8-27 01:04

关于调用本地微信的OCR功能的小工具,本论坛已经有好几个。但我测试都不成功,都没有反应。微信是安装版的。

FeiyuYip 发表于 2024-8-27 01:08

iokey 发表于 2024-8-27 01:04
关于调用本地微信的OCR功能的小工具,本论坛已经有好几个。但我测试都不成功,都没有反应。微信是安装版的 ...

有可能是微信升级版本号变了,导致两个路径不对了,试试我这

iokey 发表于 2024-8-27 01:12

本帖最后由 iokey 于 2024-8-27 01:16 编辑

没装Python 有人打包了微信的OCR库文件,做成绿色版,说是不需要安装微信,他打包了微信所需要的文件,我测试了,还是失败。

hebeijianke 发表于 2024-8-27 01:14

本帖最后由 hebeijianke 于 2024-8-27 01:15 编辑

Python3.12也能使用。
写个截屏函数和UI,再加个快捷键,就完美了

zhangting2022 发表于 2024-8-27 05:59

感谢分享

零下72℃的坚强 发表于 2024-8-27 07:35

感谢分享

FeiyuYip 发表于 2024-8-27 08:13

hebeijianke 发表于 2024-8-27 01:14
Python3.12也能使用。
写个截屏函数和UI,再加个快捷键,就完美了

有可能是3.10及以上都可用版本吧,我只测试过3.10
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: python调用微信OCR