目录
- 一、问题
- 二、主要思路
- 1. 安装相应的包
- 2. 下载Tessaract-OCR工具
- 3. 安装Tesseract
- 4. 配置环境
- 5. 编写代码
- 三、学后总结
一、问题
有人在微信群问如何快速把一些图片中的第一行或第二行的文字提取出来,并将其重命名。人工操作费时费力,如果用python就可以实现批量操作,而不必一张一张识别、校对再重命名了。
二、主要思路
Tesseract-OCR是一款优秀的开源OCR软件,目前由Google维护改进,已发展到5.0版本,从4.0版本起增加了基于LSTM神经网络的识别引擎。
本项目的主要思路是用Tesseract-OCR工具来识别图片,虽然这个工具的识别率并不高,但是免费可以使用,亲测效果不错。然后,提取图片中的第一行和第二行的内容为字符串,并将其中不能用于文件名的符号清除掉,再采用os.rename()来重命名。
1. 安装相应的包
要想识别图片,就要安装了 pytesseract 库和PIL库
pip install pytesseract,PIL
2. 下载Tessaract-OCR工具
如果光安装pytesseract库,不安装这个软件也不行,大家可以去下面的地址下载。
https://github.com/UB-Mannheim/tesseract/wikigithub.com/UB-Mannheim/tesseract/wiki
下载和你系统警醒的软件
3. 安装Tesseract
下载到本地后,大约有49M,然后进行安装,注意下android载过程中要识别不同的语言,就要勾选相应的语种,如我要识别的是中文,语言那里勾选的是Chinese-Simplified。
安装Tesseract
4. 配置环境
安装完之后,我们还需要找到安装目录下这个Tesseract.exe的路径,把它的路径放到Python里。
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'
5. 编写代码
万事俱备,就可以编写代码。编写时,需要用到文件管理模块os,正则表达式模块re,图像编辑模块PIL等。
import os import re from PIL import Image import pytesseract pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe' def sanitize_filename(name): """去除文件名中不允许的字符""" return re.sub(r'[<>:"/\\|编程客栈?*]', '', name) def rename_images_with_first_line_text(folder_path): # 获取文件夹中所有的jpg图片 f编程or filename in os.listdir(folder_path): if filename.lower().endswith(".jpg"): image_path = os.path.join(folder_path, filename) try: # 打开图片并使用 pytesseract 识别第一行文字 image = Image.open(image_path) text = pytesseract.image_to_string(image, lang="chi_sim") # 识别简体中文 first_line = "".join(text.splitlines()[0:2]).strip() # 仅取第一行和第二行文字并去除空格 android if first_line: # 将文件名设为识别到的第一行文字 new_filename = f"{sanitize_filename(first_line)}.jpg" new_path = os.path.join(folder_path, new_filename) os.rename(image_path, new_path) print(f"文件已重命名为: {new_filename}") else:www.devze.com print(f"未检测到文字,跳过文件: {filename}") except Exception as e: print(f"处理文件 {filename} 时出错: {e}") # 使用文件夹路径调用函数 folder_path = "." # 替换为存放JPG图片的文件夹路径 rename_images_with_first_line_text(folder_path)
三、学后总结
1. 采用tesseract来进行图片识别效率还挺高,一秒基本上一张,就是准备率还需要进一步提升。据说还可以进行模型训练,进一步提高其准确率。
2. 后期可以采用百度等大厂的图片识别api进行语片识别,进一步提高准确率。
3. 采用指定模块进行图片识别提供了一个不错的思路,毕竟现在api的调用费也十分高昂。
到此这篇关于Python进行图片信息提取并重命名的文章就介绍到这了,更多相关Python提取图片信息内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论