一.环境准备
1.Leptonica 库安装与配置
Dart
# 解压安装(一定要注意版本!!)
tar -zxvf leptonica-1.78.0.tar.gz
# 进入包文件夹
cd 你解压后的文件名
# 依次执行以下命令,进行程序编译,安装
./autogen.sh
./configure
make
make install
# 配置
# 修改profile
vim /etc/profile
# 添加信息 i
export LD_LIBRARY_PATH=/usr/local/lib
export LIBLEPT_HEADERSDIR=/usr/local/include
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# 保存退出
# 刷新配置
source /etc/profile
2.tesseract 安装与配置
Dart
# 下载(一定要注意版本!!)
wget http://www.XXX/tesseract-4.0.0.tar.gz
tar -xzvf tesseract-4.0.0.tar.gz
cd tesseract-5.2.0
./autogen.sh
./configure
make
make install
# 添加到环境变量
vim /etc/profile
# 添加以下字段:
PATH=$PATH:/usr/local/tesseract/bin
export PATH
export TESSDATA_PREFIX=/root/tessdata
export PATH=$PATH:$TESSDATA_PREFIX
# 刷新配置
source /etc/profile
3.升级GCC
没有源怎么办?更换源,先备份,然后新建文件
Dart
yum install -y centos-release-scl
yum install devtoolset-8-gcc*
4.查看tesseract版本
Dart
tesseract --version
# 查看可执行文件路径:
which tesseract
/usr/local/bin/tesseract
# 语言包存放位置
/usr/local/share/tessdata/
语言包下载(linux版本语言包)
二.测试代码
1.初步测试
测试代码:
python
import pytesseract
from PIL import Image
import re
import cv2
import json
# 设置 Tesseract 路径(Windows需指定)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
pytesseract.pytesseract.tesseract_cmd = r'D:\softwares\Tesseract-OCR\tesseract.exe' # 替换成你自己的程序路径
def extract_info_from_image(image_path):
# 读取图片并预处理(灰度化、二值化)
img = cv2.imread(image_path)
# if img is None:
# print("错误:图像加载失败,请检查路径或文件格式")
# else:
# gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# _, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# OCR 识别文本
text = pytesseract.image_to_string(Image.fromarray(img), lang='chi_sim+eng')
lines = [line.strip() for line in text.split('\n') if line.strip()]
# 提取结构化数据,不同结果对应的处理不同,此处省略
######
######
data = {}
return data
# 调用函数并输出结果
result = extract_info_from_image("D:/pythonProjects/input_image/1.jpg")
测试结果:

2.测试精度低问题
数据增强,提高模型泛化性
3.解决Flask并发处理问题
方法一:使用gevent或eventlet库来在Flask中运行多线程
Dart
pip install gevent # 安装gevent
from gevent.pywsgi import WSGIServer # flask启动脚本中新增导入包
server = WSGIServer(('0.0.0.0', 5000), app) # 启动方式用WSGIServer
server.serve_forever()
方法二: 使用asyncio和aiohttp库来处理异步请求
Dart
pip install aiohttp # 安装包
# 示例代码
from aiohttp import web
from flask import Flask, jsonify
import asyncio
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
async def init(loop):
app_runner = web.AppRunner(app)
await app_runner.setup()
site = web.TCPSite(app_runner, '0.0.0.0', 5000)
await site.start()
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()