Python实现OCR识别提取图片文字
OCR(Optical Character Recognition,光学字符识别)技术可以从图片中提取文字信息。以下是使用Python实现OCR的几种方法:
方法1:使用Tesseract OCR(推荐)
Tesseract是一个开源的OCR引擎,由Google维护,支持多种语言。
安装步骤
- 首先安装Tesseract引擎:
- Windows: 下载安装包从 GitHub
- Mac:
brew install tesseract
- Linux:
sudo apt install tesseract-ocr
(Ubuntu/Debian)
- 安装Python封装库:
pip install pytesseract pillow
示例代码
from PIL import Image
import pytesseract
# 如果Tesseract不在系统PATH中,需要指定路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def ocr_with_tesseract(image_path, lang='eng'):
"""
使用Tesseract进行OCR识别
参数:
image_path: 图片路径
lang: 语言代码 (默认英语 'eng', 中文 'chi_sim' 或 'chi_tra')
返回:
识别出的文本
"""
try:
# 打开图片文件
img = Image.open(image_path)
# 使用Tesseract进行OCR识别
text = pytesseract.image_to_string(img, lang=lang)
return text.strip()
except Exception as e:
print(f"OCR处理出错: {e}")
return ""
# 使用示例
if __name__ == "__main__":
image_path = "example.png" # 替换为你的图片路径
result = ocr_with_tesseract(image_path, lang='chi_sim') # 中文简体
print("识别结果:")
print(result)
方法2:使用EasyOCR(基于深度学习)
EasyOCR是一个基于深度学习的OCR库,支持多种语言,识别准确率较高。
安装步骤
pip install easyocr
示例代码
import easyocr
def ocr_with_easyocr(image_path, langs=['ch_sim', 'en']):
"""
使用EasyOCR进行OCR识别
参数:
image_path: 图片路径
langs: 语言列表 (默认中文简体和英语)
返回:
识别出的文本
"""
try:
# 创建reader对象,指定语言
reader = easyocr.Reader(langs)
# 读取图片
result = reader.readtext(image_path)
# 提取文本
texts = [detection[1] for detection in result]
return '\n'.join(texts)
except Exception as e:
print(f"OCR处理出错: {e}")
return ""
# 使用示例
if __name__ == "__main__":
image_path = "example.png" # 替换为你的图片路径
result = ocr_with_easyocr(image_path)
print("识别结果:")
print(result)
方法3:使用PaddleOCR(百度开源OCR)
PaddleOCR是百度开源的OCR工具,支持多种语言和场景。
安装步骤
pip install paddlepaddle paddleocr
示例代码
from paddleocr import PaddleOCR
def ocr_with_paddleocr(image_path, lang='ch'):
"""
使用PaddleOCR进行OCR识别
参数:
image_path: 图片路径
lang: 语言 (默认中文 'ch', 英文 'en')
返回:
识别出的文本
"""
try:
# 初始化OCR
ocr = PaddleOCR(use_angle_cls=True, lang=lang)
# 读取图片
result = ocr.ocr(image_path, cls=True)
# 提取文本
texts = [line[1][0] for line in result[0]]
return '\n'.join(texts)
except Exception as e:
print(f"OCR处理出错: {e}")
return ""
# 使用示例
if __name__ == "__main__":
image_path = "example.png" # 替换为你的图片路径
result = ocr_with_paddleocr(image_path)
print("识别结果:")
print(result)
图像预处理提高识别率
对于质量较差的图片,可以先进行预处理:
from PIL import Image, ImageEnhance, ImageFilter
import numpy as np
import cv2
def preprocess_image(image_path):
"""
图像预处理
参数:
image_path: 图片路径
返回:
预处理后的PIL Image对象
"""
try:
# 打开图片
img = Image.open(image_path)
# 转换为灰度图
img = img.convert('L')
# 增强对比度
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2)
# 锐化
img = img.filter(ImageFilter.SHARPEN)
# 使用OpenCV进行二值化 (可选)
# img_cv = np.array(img)
# _, img_cv = cv2.threshold(img_cv, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# img = Image.fromarray(img_cv)
return img
except Exception as e:
print(f"图像预处理出错: {e}")
return None
# 使用预处理后的图片进行OCR
if __name__ == "__main__":
image_path = "example.png"
preprocessed_img = preprocess_image(image_path)
if preprocessed_img:
result = ocr_with_tesseract(preprocessed_img)
print("预处理后识别结果:")
print(result)
注意事项
-
对于中文识别,需要下载相应的语言包:
- Tesseract: 安装时选择中文包,或下载后放到
tessdata
目录 - EasyOCR/PaddleOCR: 自动下载所需语言模型
- Tesseract: 安装时选择中文包,或下载后放到
-
识别准确率受图片质量影响较大,建议:
- 确保文字清晰
- 适当调整对比度和亮度
- 对于复杂背景,可以先进行图像分割
-
对于大量图片处理,可以考虑使用GPU加速(如EasyOCR和PaddleOCR支持GPU)
-
商业应用可以考虑使用云服务OCR API(如百度OCR、阿里云OCR、腾讯云OCR等)
以上方法可以根据你的具体需求选择使用,Tesseract适合简单应用,EasyOCR和PaddleOCR在复杂场景下表现更好。
Python入门学习资料
1.Python系统学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
2.Python必备开发工具
3.看视频进行系统学习
先在网上康康达人分享的视频、干货,通俗易懂,形成初始概念;你会发现博主们在进阶成大神之前他们的学习途径有哪些,找到适合自己风格的课程;
不过这样学习技术比较杂乱,所以通过更加系统的视频来学习,效果更好,也更全面。
4.实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
最后
如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。
希望这篇文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。
————————————————
↓↓↓↓
资料获取:已打包,添加文末 Python笔记领取即可获取!