cqarray 发表于 2024-11-15 10:33

OCR图像文本识别

本帖最后由 cqarray 于 2024-11-15 10:37 编辑

闲来无事,跟着教程写个图片文本内容提取工具

```
import os
import pytesseract
from PIL import Image
from tkinter import Tk, filedialog, Button, Text, END, Menu, Frame,messagebox,Label,PhotoImage
from datetime import datetime
import tkinter as tk

content_text = ""

def select_folder():
    root = Tk()
    root.withdraw()# 隐藏主窗口
    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.png")])# 打开文件选择对话框
    img = PhotoImage(file=file_path)
    return file_path

def show_popup(event):
    # 显示弹出菜单
    popup_menu.post(event.x_root, event.y_root)

def copy_text(event=None):
    # 获取选中的文本
    selected_text = text_box.selection_get()
    # 将选中的文本复制到剪贴板
    text_box.clipboard_clear()
    text_box.clipboard_append(selected_text)

def process_images(file_path):
    img = Image.open(file_path).convert('L')
    text = pytesseract.image_to_string(img, lang='chi_sim')
    return text

def on_button_click():
    file_path = select_folder()
    if file_path:
      text = process_images(file_path)
      if text:
            # 将识别出的文本显示在文本框中
            text_box.delete(1.0, END)# 清空文本框
            text_box.insert(END, text)# 插入新文本
      else:
            text_box.delete(1.0, END)# 清空文本框
            text_box.insert(END, '扫描文本内容为空')# 插入新文本
    else:
      text_box.delete(1.0, END)# 清空文本框
      text_box.insert(END, '未选择图片文件')# 插入新文本

def clear_text():
    text_box.delete(1.0, END)# 清空文本框

def save_content():
    text = text_box.get('1.0', 'end-1c')# 获取文本框内容
    if text:
      # 获取当前时间并格式化为字符串
      current_time = datetime.now().strftime("%Y%m%d_%H%M%S")

      # 定义文件名和目录
      directory = "log"
      file_name = f"{current_time}.txt"
      file_path = os.path.join(directory, file_name)

      # 获取文件的绝对路径
      root_file_path = os.path.abspath(file_name)

      # 确保目录存在
      os.makedirs(directory, exist_ok=True)

      # 尝试将文本内容写入到以时间命名的文件中
      try:
            with open(file_path, 'w', encoding='utf-8') as file:
                file.write(text)
            # 弹出信息对话框
            messagebox.showinfo("保存成功", f"本地文件路径为:{root_file_path}")
      except Exception as e:
            # 弹出警告对话框
            messagebox.showwarning("Save Error", f"Failed to save the content: {e}")
    else:
      print("has no content to save.")

if __name__ == "__main__":
    # 创造GUI界面
    root = Tk()
    root.title("OCR 图像文本识别")
    # 设置窗口大小
    root.geometry("700x550")

    # 定义按钮
    open_button = Button(root, text="打开图像", command=on_button_click)
    open_button.pack(pady=20)

    # 创建按钮框架
    content_frame = Frame(root)
    content_frame.pack(fill=tk.BOTH, expand=True)

    # 定义文本框
    text_box = Text(content_frame, wrap='word', width=70, height=20, border=0)
    text_box.pack(side="left", fill=tk.BOTH, expand=True, padx=5)

    # 创建按钮框架
    button_frame = Frame(root)
    button_frame.pack(pady=10)

    # 定义清空按钮和保存按钮,并放在同一行显示
    clear_button = Button(button_frame, text="清空内容", command=clear_text)
    clear_button.pack(side="left", padx=5)

    save_button = Button(button_frame, text="保存为TXT", command=save_content)
    save_button.pack(side="left", padx=5)

    # 创建弹出菜单
    popup_menu = Menu(root, tearoff=0)
    popup_menu.add_command(label="Copy", command=copy_text)
   
    # 绑定鼠标右键点击事件到show_popup函数
    text_box.bind("<Button-3>", show_popup)

    #运行打包EXE命令:pyinstaller --onefile --noconsole ocr_script.py

    root.mainloop()

```

运行截图

wangdanq 发表于 2024-11-15 11:08

谢谢楼主分享学习一下

htq999 发表于 2024-11-15 11:12

谢谢,学习学习

zjhzxx666 发表于 2024-11-15 11:14

好的好的

yinuo2012 发表于 2024-11-15 11:17

学习了,谢谢楼主

jianfeng1334 发表于 2024-11-15 11:18

谢谢楼主分享!

rmk101 发表于 2024-11-15 11:29

好物!多谢!

gxhc168 发表于 2024-11-15 11:32


谢谢楼主的分享

huoxx007 发表于 2024-11-15 11:41

OCR识别的难度还是在手写和不规则

L178881359 发表于 2024-11-15 12:25

谢谢楼主分享
页: [1] 2 3 4 5 6 7
查看完整版本: OCR图像文本识别