提取图片内容的 Python 程序

  🌈个人主页:易辰君-CSDN博客
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12813012.html

目录

前言

一、安装依赖

二、下载安装chi_sim.traineddata文件

三、代码示例


前言

要编写一个提取图片内容的 Python 程序,可以使用 OCR(光学字符识别)技术。常用的库是 pytesseract,它结合了 Tesseract OCR 引擎。本次需求是使用python程序读取指定文件夹中的图片,提取图片中的文字内容,并且将提取的内容生成txt档案,txt档案与识别的图片单独放在一个文件夹中。由于图片中的内容是中文,还需要下载安装chi_sim.traineddata文件


一、安装依赖

首先,你需要安装 pytesseractPillow 这两个库。

pip install pytesseract Pillow

另外,还需要安装 Tesseract OCR 引擎:

  • 对于 Windows,你可以从 这里 下载并安装 Tesseract。
  • 对于 Ubuntu,可以通过以下命令安装:
sudo apt-get install tesseract-ocr

二、下载安装chi_sim.traineddata文件

(一)下载并安装 chi_sim.traineddata 文件

首先,确保已经下载并安装了中文的语言包 chi_sim.traineddata 文件。你可以从 Tesseract 语言包 页面下载语言文件:

  • 下载 chi_sim.traineddata 文件:下载链接

(二)将 chi_sim.traineddata 文件放到正确的目录

找到 Tesseract 的安装目录,通常路径为:

  • Windows: C:\Program Files\Tesseract-OCR\tessdata\

  • Ubuntu: /usr/share/tesseract-ocr/4.00/tessdata/

将下载的 chi_sim.traineddata 文件放入该目录下的 tessdata 文件夹中。

(三)设置 TESSDATA_PREFIX 环境变量

你需要设置环境变量 TESSDATA_PREFIX,指向 tessdata 目录。以下是如何设置该环境变量的步骤:

Windows 系统:

  1. 打开“控制面板” -> “系统和安全” -> “系统”。

  2. 点击左侧的“高级系统设置”,然后点击“环境变量”。

  3. 在“系统变量”部分,点击“新建”,然后创建一个新的变量:

    • 变量名:TESSDATA_PREFIX

    • 变量值:C:\Program Files\Tesseract-OCR\ (此路径为你安装 Tesseract 的路径,请根据实际情况修改)

    注意:不要将路径设置为 tessdata,而是 Tesseract 安装目录。

  4. 确保这个路径是 tessdata 文件夹的上一级目录。

Ubuntu 系统:

在终端中,打开 .bashrc 文件并添加环境变量:

export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/

然后运行以下命令使其生效:

source ~/.bashrc

三、代码示例

import os
from PIL import Image
import pytesseract
import shutil# 指定 tesseract.exe 的完整路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'def extract_text_from_image(image_path):"""从图片中提取文本"""img = Image.open(image_path)text = pytesseract.image_to_string(img, lang='chi_sim')  # 使用简体中文return textdef process_images_in_folder(source_folder_path):"""处理文件夹中的所有图片,每张图片单独创建一个文件夹存储txt文件和图片"""# 遍历源文件夹中的所有图片文件for filename in os.listdir(source_folder_path):# 只处理图片文件if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.tif')):image_path = os.path.join(source_folder_path, filename)# 提取图片中的文字text = extract_text_from_image(image_path)# 创建以图片名称命名的文件夹folder_name = os.path.splitext(filename)[0]  # 使用文件名(无扩展名)作为文件夹名folder_path = os.path.join(source_folder_path, folder_name)if not os.path.exists(folder_path):os.makedirs(folder_path)# 生成txt文件路径txt_filename = folder_name + ".txt"txt_path = os.path.join(folder_path, txt_filename)# 将提取的文字写入到txt文件with open(txt_path, "w", encoding="utf-8") as txt_file:txt_file.write(text)# 将图片复制到同一个文件夹中new_image_path = os.path.join(folder_path, filename)shutil.copy2(image_path, new_image_path)print(f"图片和txt文件已保存到: {folder_path}")if __name__ == "__main__":# 设置包含图片的文件夹路径source_folder_path = r"F:\程序员编程之路\图灵课堂\PythonProject\4.需求\2.提取图片中的文字\image_directory"  # 替换为存放图片的文件夹路径# 处理文件夹中的所有图片process_images_in_folder(source_folder_path)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序设计语言基础:语言处理程序

语言处理程序 1、汇编程序1.1 汇编语言1.2 汇编程序 2、编译程序2.1 编译过程2.2 词法分析2.3 语法分析 3、解释程序 语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言…

JVM(HotSpot):GC之垃圾标记阶段

文章目录 前言一、标记阶段算法1、引用计数法2、可达性分析算法(JVM使用) 二、4种引用1、 强引用2、软引用(SoftReference)3、弱引用(WeakHashMap)4、虚引用(PhantomReference) 三、代码案例1、 强引用2、软引用(SoftReference)3、弱引用(WeakHashMap) 前…

如何恢复U盘里格式化数据?别慌,有带图详细步骤!

U盘,这个小巧的存储神器,我们几乎天天都在用。但有时候,一不小心手滑,U盘就被格式化了,里面的东西好像全没了,别急,其实数据恢复没那么难。这篇文章就来告诉你,怎么把格式化的U盘里的…

Harmony Navigation的使用

router已经不推荐使用了,推荐使用Navigation实现页面路由。那么下面就看看Navigation的具体使用步骤: 1、使用Navigation替换主入口页面,并设置NavPathStack,使用NavPathStack执行跳转的逻辑。 @Entry @Component struct Index {pathStack: NavPathStack = new NavPathS…

整理—Redis

目录 Redis底层的数据结构 ZSet用过吗 Zset 底层是怎么实现的 跳表是怎么实现的? Redis为什么使用跳表而不是用B树? 压缩列表是怎么实现的? Redis 中的 listpack 哈希表是怎么扩容的? String 是使用什么存储的 Redis为什么快&#xf…

c语言基础程序——经典100道实例。

c语言基础程序——经典100道实例 001, 组无重复数字的数002,企业发放的奖金根据利润提成003,完全平方数004,判断当天是这一年的第几天005,三个数由小到大输出006,输出字母C图案007,特殊图案008&…

Nginx(Linux):服务器版本升级和新增模块

目录 1、概述2、使用Nginx服务信号完成Nginx升级2.1 备份当前版本的Nginx2.2 向服务器导入新的Nginx2.3 向服务器导入新的Nginx2.4 停止老版本Nginx 3、使用Nginx安装目录的make命令完成升级3.1 备份当前版本的Nginx3.2 向服务器导入新的Nginx3.3 执行更新命令 1、概述 如果想…

cisp考试费用多少?

在网络安全领域,CISP(注册信息安全专业人员)认证备受关注。对于许多想要在这个领域深入发展的人来说,了解 CISP 考试费用是他们迈出的第一步。那么,CISP 考试费用究竟是多少呢? 一、CISP 认证的重要性与价值 (一)行业认可度高 CISP 是由中国…

计算机网络:数据链路层 —— 扩展共享式以太网

文章目录 共享式以太网共享式以太网存在的问题在物理层扩展以太网扩展站点与集线器之间的距离扩展共享式以太网的覆盖范围和站点数量 在链路层扩展以太网网桥的主要结构网桥的基本工作原理透明网桥自学习和转发帧生成树协议STP 共享式以太网 共享式以太网是当今局域网中广泛采…

道路垃圾识别数据集 含pt模型界面 18类 共7542张图片,xml和txt标签都有;

道路垃圾识别数据集 含pt模型&界面 18类 共7542张图片,xml和txt标签都有; YOLO道路垃圾识别系统 系统概述 名称:YOLO道路垃圾识别系统 图片数量:7542张标注格式:XML和TXT(支持YOLO格式)类…

智诊小助手TF卡记录文件导出

若想将TF卡中记录的数据文件导出可按以下的流程进行配置: 点击主界面中的导出选项即可进入到 下图中TF卡应用界面 点击TF卡应用界面中“查看记录文件”的选项,进入导出文件界面。 点击“选择”进入勾选文件的界面 点击“导出”后,点…

Android Studio 的 Gradle 任务列表只显示测试任务

问题现象如下: 问题原因: 这是因为Android Studio 设置中勾选了屏蔽其他gradle任务的选项。 解决方法: File -> Settings -> Experimental 取消勾选Only include test tasks in the Gradle task list generated during Gradle Sync&…

【Golang】Gin框架:Go语言中的轻量级Web框架

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

aws(学习笔记第六课) AWS的虚拟私有,共有子网以及ACL,定义公网碉堡主机子网以及varnish反向代理

aws(学习笔记第六课) AWS的虚拟私有,共有子网以及ACL,定义公网碉堡主机子网以及varnish反向代理 学习内容: AWS的虚拟私有,共有子网以及ACL定义公网碉堡主机子网,私有子网和共有子网以及varnish反向代理 1. AWS的虚拟…

springboot051医院管理系统(论文+源码)_kaic

医院管理系统 摘要 随着信息互联网信息的飞速发展,医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求,创建了一个计算机管理医院管理系统的方案。文章介绍了医院管理系统的系统分析部分&#…

Gitlab 完全卸载–亲测可行

1、停止gitlab gitlab-ctl stop2.卸载gitlab(注意这里写的是gitlab-ce) rpm -e gitlab-ce 3、查看gitlab进程 ps aux | grep gitlab 4、杀掉第一个进程(就是带有好多.............的进程) 5、删除所有包含gitlab文件 find / …

配置文件get调用为null

生成get方法调用显示为null 修改get方法去掉static调用成功

LCWLAN设备的实际使用案例

我们的LCWLAN设备在实际使用中以裸板的形式放在客户的智能总线控制器中,客户的 智能总线刀片灯,柔性灯货架,柔性感应钢网柜以及智能电子料架等设备都是接到总线控制 器中,然后总控制器通过CAN总线和我们的LCWLAN设备连接&#xff…

两个表格讲清日语形容词怎么用!柯桥小语种学习零基础日语培训

い形容词 1、敬体形和简体形 _ 肯定形 否定形 敬体现在时 词干+い+です 词干+くない+です 敬体过去时 词干+い+でした 词干+くない+です/ありません 简体现在时…

基于Qt的雷达航迹控件(解决QWidget绘制多点卡顿问题)

:详细讲解 在本篇文章中,我们将详细探讨如何使用Qt创建一个雷达轨迹系统。该系统可以模拟雷达轨迹的显示、处理用户的交互并管理轨迹选中状态。通过这篇文章,您将了解到自定义类 RadarTrackItem、RadarTrackManager、OverlayWidget 和 Radar…