【Python】调用微信OCR来对输入的图片进行文字识别

参考资料:

1、三年磨一剑——微信OCR图片文字提取-腾讯云开发者社区-腾讯云

2、可供独立使用且最小依赖的微信 OCR 功能包 – 吾爱破解 – 52pojie.cn

3、GitHub – kanadeblisst00/wechat_ocr: 使用Python调用微信本地ocr服务

4、[原创]Python调用微信OCR识别文字和坐标-编程技术-看雪-安全社区|安全招聘|kanxue.com

示例代码:

这段简易代码实现创建一个GUI,输入一个图片,将图片中的文字进行OCR,按段落生成到一个TXT中。

import os
import json
import time
import tkinter as tk
from tkinter import filedialog, messagebox
from wechat_ocr.ocr_manager import OcrManager, OCR_MAX_TASK_ID


def ocr_result_callback(img_path: str, results: dict):
    save_text_to_txt(results, img_path)


def save_text_to_txt(ocr_results, original_image_path):
    if 'ocrResult' in ocr_results and isinstance(ocr_results['ocrResult'], list):
        all_text = ""
        for result in ocr_results['ocrResult']:
            text = result.get('text', '')
            if text:
                all_text += text + "\n"

        base_name, ext = os.path.splitext(original_image_path)
        txt_path = f"{base_name}_ocr_result.txt"
        with open(txt_path, 'w', encoding='utf-8') as f:
            f.write(all_text)
        print(f"已保存OCR结果到: {txt_path}")
    else:
        print("OCR结果不符合预期格式。")


def select_image():
    file_path = filedialog.askopenfilename(
        title="选择图片",
        filetypes=(("Image files", "*.png;*.jpg;*.jpeg;*.bmp;*.tiff"), ("All files", "*.*"))
    )
    if not file_path:
        return

    wechat_ocr_dir = r"C:\Users\YourID\AppData\Roaming\Tencent\WeChat\XPlugin\Plugins\WeChatOCR79\extracted\WeChatOCR.exe"
    wechat_dir = r"C:\Program Files\Tencent\WeChat\[3.9.12.17]"
    ocr_manager = OcrManager(wechat_dir)
    ocr_manager.SetExePath(wechat_ocr_dir)
    ocr_manager.SetUsrLibDir(wechat_dir)
    ocr_manager.SetOcrResultCallback(ocr_result_callback)
    ocr_manager.StartWeChatOCR()

    ocr_manager.DoOCRTask(file_path)

    while ocr_manager.m_task_id.qsize() > 0 or ocr_manager.IsOcrRunning():
        time.sleep(0.5)

    ocr_manager.KillWeChatOCR()
    messagebox.showinfo("完成", "文字提取并保存完成!")


def main():
    root = tk.Tk()
    root.title("OCR文字提取到txt工具")
    root.geometry("300x100")

    btn_select = tk.Button(root, text="选择图片", command=select_image)
    btn_select.pack(pady=20)

    root.mainloop()


if __name__ == "__main__":
    main()

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注