tkinter+百度文字识别api开发文字识别工具,自制Python图片文字识别神器!

文章目录

  • 一、为什么要自制识别工具
  • 二、技术原理大揭秘
    • 2.1、百度 API:核心识别大脑
    • 2.2、Tkinter:构建交互桥梁
  • 三、一步步教你开发
    • 3.1、开发前的准备工作
    • 3.2、 界面设计
    • 3.3、 百度 API 调用
    • 3.4、 结果导出
  • 四、工具实测与效果展示
  • 五、完整代码
  • 六、写在最后

一、为什么要自制识别工具

在日常工作和生活中,我们常常会遇到需要处理大量图片文字的情况。像我,作为一名博主,经常需要整理各种资料,其中不少都是图片形式,里面的文字要是靠手动录入,那可太费时间和精力了。

一开始,我尝试使用市面上已有的图片文字识别工具,可它们或多或少都存在一些问题:

  • 有的工具虽然功能强大,但价格昂贵,对于我这种只是偶尔有大量识别需求的人来说,购买会员或按次付费实在不划算;
  • 有的免费工具又限制重重,比如每天只能识别一定数量的图片,或者对图片的大小、格式有严格要求,这让我在处理一些特殊图片时总是碰壁 。

而且,这些通用工具往往不能完全满足我的个性化需求。

我想要一个能快速批量识别图片文字,并且可以直接将识别结果导出为 txt 文本,方便我后续编辑整理的工具

既然找不到完全符合自己需求的工具,那不如自己动手,丰衣足食!于是,我决定利用 tkinter 和百度 api 来开发一款专属的图片文字识别工具。

二、技术原理大揭秘

2.1、百度 API:核心识别大脑

这款工具的核心 “大脑” 就是百度文字识别 API,它基于先进的深度学习算法 ,就像一个知识渊博的学者,能够快速准确地识别出图片中的文字。

其优势十分显著:

  • 识别率超高,无论是清晰的印刷体,还是略带潦草的手写体,它都能精准识别,极大地减少了识别错误,让我在处理资料时更加放心。
  • 支持多种语言,不管是中文、英文,还是其他常见语种,都不在话下,满足了我处理各种多语言资料的需求。

要使用百度文字识别 API,首先得申请并获取 API 密钥。具体步骤如下:

  1. 登录百度 AI 开放平台(https://console.bce.baidu.com/ai/#/ai/ocr/app/create),如果你已有百度账号,直接登录即可;若没有,需先注册一个。
  2. 进入控制台,在众多 AI 服务中找到 “文字识别” 选项。
    点击 “创建应用”,填写应用名称、应用描述等信息,然后提交创建。
  3. 创建成功后,在应用详情页面就能看到 API Key 和 Secret Key,这两个密钥就是打开识别大门的钥匙,一定要妥善保管 。

2.2、Tkinter:构建交互桥梁

Tkinter 在工具开发中扮演着 “交互桥梁” 的重要角色,它是 Python 的标准 GUI 库,让我能轻松创建出图形界面,把复杂的代码操作转化为直观的图形交互。

利用 Tkinter,我创建了各种图形界面元素。比如按钮,用户点击 “选择图片” 按钮,就能从本地文件中选择需要识别的图片;点击 “开始识别” 按钮,工具就会调用百度 API 进行文字识别;点击 “导出结果” 按钮,识别结果就能以 txt 文本的形式保存到本地。还有文本框,用于显示识别结果,方便用户查看和编辑。通过 Tkinter,这些界面元素被有序地组合在一起,形成了一个操作便捷、界面友好的工具 ,让即使不太懂技术的用户也能轻松上手。

三、一步步教你开发

3.1、开发前的准备工作

在开始开发前,我们需要准备好相应的开发环境。

  1. 确保你的电脑上安装了 Python,建议安装 Python 3.x 版本,可从 Python 官方网站(https://www.python.org/downloads/ )下载。在安装过程中,注意勾选 “Add Python to PATH” 选项,这样就能在命令行中直接使用 Python 命令了。如果下载和安装过程较慢,可以尝试更换官方镜像源或使用下载工具进行加速 。
  2. 安装好 Python 后,还需要安装一些必要的库。其中,tkinter是 Python 的标准 GUI 库,一般情况下,安装 Python 时会自动安装。若没有安装,可以通过命令pip install tkinter进行安装。
  3. 调用百度 API 则需要安装requests库,在命令行中输入pip install requests即可完成安装 。

在安装这些库的过程中,可能会遇到网络问题导致安装失败,此时可以尝试更换 pip 源,比如使用清华大学的镜像源,在安装命令中加上-i https://pypi.tuna.tsinghua.edu.cn/simple参数,就能提高安装成功率。

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2、 界面设计

使用tkinter创建图形界面,以下是创建窗口、按钮、文件选择框等界面元素的核心代码:

import tkinter as tk
from tkinter import filedialog, scrolledtext
import requests
import base64


# 百度API配置(需要用户自己申请)
# 申请地址:https://console.bce.baidu.com/ai/#/ai/ocr/app/create
API_KEY = ''
SECRET_KEY = ''
OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"


class OCRApp:
    def __init__(self, master):
        """OCR应用主界面初始化

        Args:
            master: Tkinter根窗口对象
        """
        # 新增文件路径列表属性
        self.file_list_paths = []  # 存储用户选择的完整文件路径

        self.master = master
        master.title("OCR文字识别工具")

        # 顶部工具栏
        btn_frame = tk.Frame(master)
        btn_frame.pack(pady=10, padx=10, fill=tk.X)
        # 功能按钮:选择文件/开始识别/导出结果
        tk.Button(btn_frame, text="选择文件", command=self.select_image).pack(side=tk.LEFT, padx=5)
        tk.Button(btn_frame, text="开始识别", command=self.recognize_text).pack(side=tk.LEFT, padx=5)
        tk.Button(btn_frame, text="导出结果", command=self.export_text).pack(side=tk.LEFT, padx=5)

        # 主布局(左右分割视图)
        main_paned = tk.PanedWindow(master, orient=tk.HORIZONTAL)
        main_paned.pack(fill=tk.BOTH, expand=True)

        # 左侧文件列表区域
        left_frame = tk.Frame(main_paned)
        self.file_listbox = tk.Listbox(left_frame, width=40)  # 显示文件名列表
        scroll_left = tk.Scrollbar(left_frame, orient=tk.VERTICAL)
        # 滚动条与列表框绑定
        self.file_listbox.config(yscrollcommand=scroll_left.set)
        scroll_left.config(command=self.file_listbox.yview)

        # 右侧识别结果区域
        right_frame = tk.Frame(main_paned)
        self.result_text = scrolledtext.ScrolledText(right_frame, width=70, wrap=tk.WORD)  # 带滚动条的文本区域

        # 布局组件
        self.file_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scroll_left.pack(side=tk.RIGHT, fill=tk.Y)
        self.result_text.pack(fill=tk.BOTH, expand=True)

        # 将左右面板添加到主分割窗口
        main_paned.add(left_frame)
        main_paned.add(right_frame)

在这段代码中,用tkinter构建界面,select_image函数用于打开文件选择对话框,让用户选择图片文件,并将选择的文件路径显示在文本框中。recognize_text函数负责获取文本框中的文件路径,然后调用识别函数对图片进行文字识别,这里的识别函数还未实现,后续会详细介绍。export_text函数用于将识别结果导出为 txt 文本。

tk.Button用于创建按钮,tk.Text用于创建文本框,pack方法用于布局这些界面元素 。

3.3、 百度 API 调用

调用百度 API 进行文字识别的代码如下:

  def get_access_token(self):
      """获取百度API访问令牌"""
      auth_url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}"
      response = requests.get(auth_url)
      return response.json().get("access_token")

  def recognize_text(self):
      """执行OCR识别主逻辑"""
      if not hasattr(self, 'file_list_paths'):
          return

      self.result_text.delete(1.0, tk.END)

      for i, path in enumerate(self.file_list_paths):
          try:
              access_token = self.get_access_token()
              if not access_token:
                  raise Exception("认证失败,请检查API配置")

              # 读取图片并编码
              with open(path, "rb") as f:
                  image_data = base64.b64encode(f.read()).decode()

              # 调用OCR接口
              headers = {'Content-Type': 'application/x-www-form-urlencoded'}
              payload = {
                  'access_token': access_token,
                  'image': image_data,
                  'language_type': 'CHN_ENG'
              }
              response = requests.post(OCR_URL, headers=headers, data=payload)
              result = response.json()

              # 显示结果
              if 'words_result' in result:
                  texts = [item['words'] for item in result['words_result']]
                  # 添加结果分隔标识
                  self.result_text.insert(tk.END, f"\n▶ 文件:{self.file_listbox.get(i)}\n")
                  self.result_text.insert(tk.END, '\n'.join(texts) + '\n')
          except Exception as e:
              self.result_text.insert(tk.END, f"\n▶ 文件:{self.file_listbox.get(i)} 识别失败\n{str(e)}\n")

在这段代码中,get_access_token方法,将传入的API_KEY和SECRET_KEY获取得到access_token。recognize_text函数用于读取获取到的图片文件,并调用百度 API 的OCR_URL进行文字识别。如果识别成功,从返回结果中提取文字,并以换行符连接成字符串返回;如果识别失败或没有识别到文字,返回识别失败 。

为了提高识别效率,可以考虑使用多线程或异步编程,比如使用concurrent.futures模块中的ThreadPoolExecutor来创建线程池,并行处理图片识别任务,这样可以大大缩短批量识别的时间 。

3.4、 结果导出

将识别结果导出为 txt 文本的代码如下:

 def export_text(self):
     """导出识别结果到txt文件"""
     content = self.result_text.get("1.0", tk.END).strip()
     if not content:
         return

     file_path = filedialog.asksaveasfilename(
         defaultextension=".txt",
         filetypes=[("Text files", "*.txt"), ("All files", "*.*")]
     )

     if file_path:
         try:
             with open(file_path, "w", encoding="utf-8") as f:
                 f.write(content)
         except Exception as e:
             self.result_text.delete(1.0, tk.END)
             self.result_text.insert(tk.END, f"导出失败:{str(e)}")

在export_text函数中,首先获取所有图片的识别结果,然后使用open函数以写入模式打开file_path文件夹。遍历识别结果列表,将每个图片的识别结果写入文件中,并在每个结果前加上图片名称,以区分不同图片的识别内容 。

四、工具实测与效果展示

tkinter+百度文字识别api开发文字识别工具,自制Python图片文字识别神器!_第1张图片

说了这么多,这个工具实际用起来到底怎么样呢?下面就带大家一起来实测一下 。当我打开这个工具时,映入眼帘的是简洁直观的界面,各个按钮和文本框布局合理,让人一目了然。

  1. 点击 “选择文件” 按钮,我一次性选择了 3 张图片。

  2. 接着,点击 “开始识别” 按钮,工具迅速响应,调用百度 API 对图片进行识别。短短几秒,所有图片的文字就识别完成了,速度非常快。在识别结果文本框中,清晰地展示了每张图片识别出的文字,准确率相当高。

  3. 识别完成后,点击 “导出结果” 按钮,识别结果就会以 txt 文本的形式保存到本地。打开生成的 txt 文件,里面按照图片顺序,清晰地展示了每张图片的识别结果,方便我进行整理和编辑 。

五、完整代码

链接: https://pan.baidu.com/s/1l5rOsZMLRrt8WgoKWxcdeA?pwd=87vh 提取码: 87vh

六、写在最后

这款用 tkinter 开发、结合百度 api 的图片文字识别工具,操作简单、功能强大,能够高效地解决图片文字识别和批量处理的问题,为大家节省大量时间和精力。

而且,通过自己开发工具,我们能更深入地了解技术原理,还能根据实际需求不断优化和扩展功能。如果你对编程感兴趣,不妨参考本文的思路和代码,自己动手开发一个,说不定还能发现更多有趣的玩法和应用场景 。

我也非常期待大家能在留言区分享使用这款工具的体验和想法,比如在使用过程中遇到了哪些问题,有没有什么改进建议,或者你还希望增加哪些功能。让我们一起交流探讨,共同把这个工具变得更加完善 。

你可能感兴趣的:(GUI,python基础知识,百度,python,dubbo)