当前位置: 首页 > news >正文

【图片识别改名】批量读取图片区域文字识别后批量改名,基于Python和腾讯云的实现方案

项目场景

  • ​办公文档管理​​:将扫描的发票、合同等文档按编号、日期自动重命名。例如,识别“编号:2023001 日期:20230403”生成“2023001_20230403.jpg”。
  • ​产品图片整理​​:电商产品图片按产品编号、名称自动命名。例如,识别“产品编号:P1001 产品名称:无线耳机”生成“P1001_无线耳机.jpg”。
  • ​证件照片归档​​:身份证、学生证等证件照片按姓名、学号等信息命名。例如,识别“姓名:张三 学号:20230001”生成“张三_20230001.jpg”。
  • ​会议资料整理​​:会议照片按会议名称、日期自动命名。例如,识别“会议:季度总结 日期:20230403”生成“季度总结_20230403.jpg”。

界面设计

可以使用Python的tkinter库来设计一个简单的图形用户界面(GUI),以下是一个基本的界面设计思路:

  • ​标题​​:显示“批量图片文字识别与重命名工具”。
  • ​API配置区域​​:包含输入框用于填写腾讯云的SecretIdSecretKey,以及一个“保存配置”按钮。
  • ​关键字设置区域​​:输入框用于输入要识别的关键词,用逗号分隔,例如“编号,名称,日期”,并提供一个“设置关键词”按钮。
  • ​图片选择区域​​:一个按钮用于选择要处理的图片文件,支持多选,下方显示已选择的图片数量。
  • ​选项设置区域​​:包含“自动重命名文件”和“添加序号后缀”的复选框。
  • ​开始处理按钮​​:点击后开始进行文字识别和文件重命名操作。
  • ​进度条​​:显示处理进度。
  • ​结果区域​​:显示识别结果和重命名信息。

详细代码步骤

1. 安装必要的库
pip install pillow requests tkinter
2. 代码实现
import os
import requests
from PIL import Image
from tkinter import Tk, Label, Entry, Button, Listbox, Checkbutton, IntVar, filedialog, messagebox, ttk# 腾讯云OCR API地址
OCR_API_URL = "https://ocr.tencentcloudapi.com"# 全局变量存储API密钥和关键词
SECRET_ID = ""
SECRET_KEY = ""
KEYWORDS = ""def set_api_config():global SECRET_ID, SECRET_KEYSECRET_ID = secret_id_entry.get()SECRET_KEY = secret_key_entry.get()if SECRET_ID and SECRET_KEY:messagebox.showinfo("提示", "API配置已保存")else:messagebox.showerror("错误", "请输入SecretId和SecretKey")def set_keywords():global KEYWORDSKEYWORDS = keywords_entry.get()if KEYWORDS:messagebox.showinfo("提示", "关键词已设置")else:messagebox.showerror("错误", "请输入要识别的关键词,用逗号分隔")def select_images():global image_pathsimage_paths = filedialog.askopenfilenames(filetypes=[("图片文件", "*.jpg;*.png")])if image_paths:image_count_label.config(text=f"已选择 {len(image_paths)} 张图片")else:messagebox.showerror("错误", "未选择任何图片")def recognize_and_rename():if not SECRET_ID or not SECRET_KEY or not KEYWORDS:messagebox.showerror("错误", "请先完成API配置和关键词设置")returnif not image_paths:messagebox.showerror("错误", "请先选择要处理的图片")returntotal = len(image_paths)progress["maximum"] = totalprogress["value"] = 0for i, image_path in enumerate(image_paths):try:# 读取图片with open(image_path, "rb") as f:image_data = f.read()# 构建请求参数params = {"Action": "GeneralBasicOCR","Version": "2018-11-19","Region": "ap-guangzhou","SecretId": SECRET_ID,"SecretKey": SECRET_KEY,"ImageBase64": image_data.hex()}# 发送请求response = requests.get(OCR_API_URL, params=params)result = response.json()if "TextDetections" in result:text = " ".join([item["DetectedText"] for item in result["TextDetections"]])# 根据关键词提取信息keyword_values = []for keyword in KEYWORDS.split(","):start_index = text.find(keyword)if start_index != -1:end_index = start_index + len(keyword)value = text[end_index:].split()[0](@ref)keyword_values.append(value)else:keyword_values.append("")# 生成新文件名new_name = "_".join(keyword_values) + os.path.splitext(image_path)[1]new_path = os.path.join(os.path.dirname(image_path), new_name)# 重命名文件os.rename(image_path, new_path)result_text.insert(tk.END, f"{image_path} -> {new_path}\n")else:result_text.insert(tk.END, f"{image_path} 识别失败\n")progress["value"] += 1root.update_idletasks()except Exception as e:result_text.insert(tk.END, f"{image_path} 处理出错: {str(e)}\n")progress["value"] += 1root.update_idletasks()messagebox.showinfo("完成", "处理完成")# 创建主窗口
root = Tk()
root.title("批量图片文字识别与重命名工具")# API配置区域
api_frame = LabelFrame(root, text="API配置")
api_frame.pack(pady=10, padx=10, fill="x")Label(api_frame, text="SecretId:").grid(row=0, column=0, padx=5, pady=5)
secret_id_entry = Entry(api_frame)
secret_id_entry.grid(row=0, column=1, padx=5, pady=5)Label(api_frame, text="SecretKey:").grid(row=1, column=0, padx=5, pady=5)
secret_key_entry = Entry(api_frame, show="*")
secret_key_entry.grid(row=1, column=1, padx=5, pady=5)save_api_button = Button(api_frame, text="保存配置", command=set_api_config)
save_api_button.grid(row=2, column=0, columnspan=2, pady=10)# 关键字设置区域
keyword_frame = LabelFrame(root, text="关键字设置")
keyword_frame.pack(pady=10, padx=10, fill="x")Label(keyword_frame, text="关键词:").grid(row=0, column=0, padx=5, pady=5)
keywords_entry = Entry(keyword_frame)
keywords_entry.grid(row=0, column=1, padx=5, pady=5)set_keyword_button = Button(keyword_frame, text="设置关键词", command=set_keywords)
set_keyword_button.grid(row=1, column=0, columnspan=2, pady=10)# 图片选择区域
image_frame = LabelFrame(root, text="图片选择")
image_frame.pack(pady=10, padx=10, fill="x")Label(image_frame, text="选择图片:").grid(row=0, column=0, padx=5, pady=5)
image_listbox = Listbox(image_frame)
image_listbox.grid(row=0, column=1, padx=5, pady=5)select_button = Button(image_frame, text="选择图片", command=select_images)
select_button.grid(row=1, column=0, columnspan=2, pady=10)image_count_label = Label(image_frame, text="未选择任何图片")
image_count_label.grid(row=2, column=0, columnspan=2, pady=5)# 选项设置区域
option_frame = LabelFrame(root, text="选项设置")
option_frame.pack(pady=10, padx=10, fill="x")auto_rename_var = IntVar()
auto_rename_checkbox = Checkbutton(option_frame, text="自动重命名文件", variable=auto_rename_var)
auto_rename_checkbox.grid(row=0, column=0, padx=5, pady=5)add_suffix_var = IntVar()
add_suffix_checkbox = Checkbutton(option_frame, text="添加序号后缀", variable=add_suffix_var)
add_suffix_checkbox.grid(row=1, column=0, padx=5, pady=5)# 开始处理按钮
start_button = Button(root, text="开始处理", command=recognize_and_rename)
start_button.pack(pady=20)# 进度条
progress = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")
progress.pack(pady=10)# 结果区域
result_text = Text(root, height=10, width=50)
result_text.pack(pady=10)root.mainloop()

相关文章:

  • 1.5 点云数据获取方式——双目立体相机
  • Uniapp:设置页面下拉刷新
  • 服务器远程超出最大连接数的解决方案是什么?
  • 基于C++的IOT网关和平台1:github项目ctGateway
  • 基于DrissionPage的实习信息爬虫改造与解析
  • nginx配置集群服务器中的tcp负载均衡器
  • 中国飞机迎来历史性窗口,航空装备研制不断突破,智能化升级成为核心驱动力
  • nginx核心功能
  • 微服务开发中的应用生命周期管理
  • Javscript 字符串的常用方法有哪些?
  • k8s 学习记录 (六)_Pod 污点和容忍性详解
  • 20250429 垂直地表发射激光测量偏转可以验证相对性原理吗
  • Lua 第14部分 数据结构
  • 【论文阅读】PEEKABOO: Interactive Video Generation via Masked-Diffusion
  • Educational Codeforces Round 178 (Rated for Div. 2)
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 【专题五】位运算(1):常见位运算操作总结
  • 【Java学习】Java的CGLIB动态代理:通俗解释与使用指南
  • 短视频矩阵批量剪辑与场景剪辑功能 OEM 定制开发
  • deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 新希望一季度归母净利润4.45亿,上年同期为-19.34亿
  • 李铁案二审驳回上诉,维持一审有期徒刑20年的判决
  • 现场聆听总书记讲话,“00后”博士和大模型CEO都“热血沸腾”
  • 10台核电新机组获核准,上海核电厂商独揽超500亿元订单
  • 葡萄牙总理:未来几小时内将全面恢复供电