还在为手动处理办公文件中的表格图片抓狂吗?别担心!今天我带你用 Python 和图像识别技术,把图片里的文字一键提取出来。无论是会议记录还是报表截图,只需几行代码,就能轻松搞定,提升你的办公效率!
1. 图像识别核心工具:Pytesseract
Pytesseract是一个基于 Tesseract OCR 引擎的 Python 库,专门用来识别图片中的文字。Tesseract 是谷歌维护的开源项目,识别准确率很高。
安装必要的工具
首先,确保安装了 Tesseract OCR 引擎。
Windows 用户可以在 Tesseract 官方安装页 下载并安装。
macOS 用户可通过 Homebrew 安装:
brew install tesseract
Linux 用户可通过包管理器安装:
sudo apt install tesseract-ocr
安装 Python 库:
pip install pytesseract pillow
简单示例:识别图片文字
以下是一个简单的例子,展示如何用 Python 提取图片中的文字:
from PIL import Image
import pytesseract
# 确保指定 Tesseract 可执行文件路径(Windows 用户)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# 加载图片
image = Image.open("table_image.png")
# 提取文字
text = pytesseract.image_to_string(image)
print("识别出的文字如下:")
print(text)
运行代码后,你会看到图片中的文字内容被直接打印出来!
小贴士:如果识别结果不理想,可能是图片质量不好,可以尝试对图片做一些预处理(后面会讲)。
2. 提高识别效果:图片预处理技巧
有时候图片中的文字识别效果不佳,我们可以通过图片预处理来提高准确率。
常见的预处理方法
转换为灰度图像:去掉颜色信息,专注于文字区域。
二值化:将图片转换为黑白,提高对比度。
去噪点:清理图片中的杂点,减少干扰。
示例代码
import cv2
import numpy as np
from PIL import Image
# 使用 OpenCV 加载图片
image = cv2.imread("table_image.png")
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# 保存预处理后的图片
cv2.imwrite("processed_image.png", binary)
# 再用 Pytesseract 识别
processed_image = Image.open("processed_image.png")
text = pytesseract.image_to_string(processed_image)
print("优化后的识别结果:")
print(text)
小贴士:图片预处理尤其适合文字模糊、背景复杂的场景,动手试试效果吧!
3. 表格文字提取:用 Pytesseract 识别表格结构
如果你的图片中有表格结构(比如 Excel 截图),提取每个单元格的内容会稍复杂一些。
让 Pytesseract 输出表格结构
可以通过image_to_boxes或image_to_data方法获取每块文字的位置信息。
# 输出表格中的每个单元格内容和位置
data = pytesseract.image_to_data(image, output_type=pytesseract.Output.DICT)
# 遍历所有文字块
for i in range(len(data["text"])):
if data["text"][i].strip(): # 跳过空块
print(f"文字: {data['text'][i]},位置: ({data['left'][i]}, {data['top'][i]})")
实际应用:生成 Excel 文件
可以结合pandas把识别出的文字保存到 Excel:
import pandas as pd
# 提取表格内容
rows = []
for i in range(len(data["text"])):
if data["text"][i].strip():
rows.append(data["text"][i])
# 保存为 Excel
df = pd.DataFrame(rows, columns=["内容"])
df.to_excel("output.xlsx", index=False)
print("表格内容已保存到 output.xlsx!")
4. 高级应用:多语言识别
Tesseract 支持多语言,只需下载对应语言包并指定语言参数。
安装语言包
以中文为例:
sudo apt install tesseract-ocr-chi-sim
使用语言包
text = pytesseract.image_to_string(image, lang="chi_sim")
print("中文识别结果:")
print(text)
注意事项:如果同时处理多种语言,可以用lang="eng+chi_sim"的形式指定多个语言包。
5. 小练习:动手试一试
下载一张包含表格的图片,尝试提取表格中的所有文字并保存为 Excel 文件。
使用 OpenCV 对图片进行预处理,比较预处理前后的识别效果。
尝试用 Pytesseract 提取一张多语言图片中的文字内容。
结尾
小伙伴们,今天的Python学习之旅就到这里啦!祝大家学习愉快,Python学习节节高!
领取专属 10元无门槛券
私享最新 技术干货