简介:本文通过3行Python代码实现OCR(光学字符识别),快速提取图片中的任意语言文字。文章详细介绍代码实现原理、依赖库安装及扩展应用场景,适合开发者快速上手。
OCR(Optical Character Recognition,光学字符识别)是通过计算机算法将图片中的文字转换为可编辑文本的技术。其核心原理包含图像预处理(降噪、二值化)、字符分割、特征提取与模式匹配四大步骤。传统实现需手动处理图像分割、特征工程等复杂环节,而现代深度学习框架(如Tesseract、EasyOCR)通过预训练模型封装了这些底层逻辑,开发者仅需调用API即可完成识别。
Python因其丰富的生态库(如Pillow、OpenCV、Pytesseract)成为OCR开发的理想语言。例如,Tesseract OCR由Google开发,支持100+种语言,通过Python的pytesseract库可无缝集成;EasyOCR则基于CRNN(卷积循环神经网络)架构,对复杂排版、多语言混合场景适应性更强。本文选择的3行代码方案,正是基于这些成熟库的简化封装,兼顾效率与易用性。
pip install pillow pytesseract easyocr
brew install tesseract安装)。方案一:Tesseract OCR(适合基础场景)
from PIL import Imageimport pytesseracttext = pytesseract.image_to_string(Image.open("image.png"), lang="chi_sim+eng") # 支持中英文混合print(text)
Image.open("image.png"):加载图片文件。lang="chi_sim+eng":指定识别语言为简体中文+英文(需下载对应语言包)。方案二:EasyOCR(适合复杂场景)
import easyocrreader = easyocr.Reader(['ch_sim', 'en']) # 初始化中英文读者text = reader.readtext("image.png", detail=0)[0] # detail=0仅返回文本,忽略坐标print(text)
handwritten=True)。PIL.Image或easyocr内置方法读取图片。
import osfrom PIL import Imageimport pytesseractfolder = "images/"for filename in os.listdir(folder):if filename.endswith((".png", ".jpg")):text = pytesseract.image_to_string(Image.open(folder + filename), lang="eng")with open(f"output/{filename}.txt", "w") as f:f.write(text)
import cv2img = cv2.imread("image.png")gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)text = pytesseract.image_to_string(binary, lang="chi_sim")
.traineddata文件,放入Tesseract安装目录的tessdata文件夹。通过Flask快速搭建OCR API:
from flask import Flask, request, jsonifyimport pytesseractfrom PIL import Imageapp = Flask(__name__)@app.route("/ocr", methods=["POST"])def ocr():file = request.files["image"]text = pytesseract.image_to_string(Image.open(file.stream), lang="eng")return jsonify({"text": text})if __name__ == "__main__":app.run(port=5000)
multipart/form-data请求,上传图片后返回JSON格式文本。Tesseract报错“Command not found”
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
中文识别乱码
chi_sim(简体中文)或chi_tra(繁体中文)。复杂背景干扰
contrast_ths参数调整对比度阈值:
reader = easyocr.Reader(['en'], contrast_ths=0.5)
本文通过3行Python代码实现了图片文字识别,覆盖了从环境配置到高级优化的全流程。对于开发者,建议优先测试EasyOCR的易用性,再根据需求选择Tesseract的定制化能力。未来,随着Transformer架构在OCR中的应用(如TrOCR),识别准确率与多语言支持将进一步提升。开发者可关注Hugging Face的transformers库,探索端到端OCR解决方案。