如何使用自定义字体训练Keras-OCR提取特定图像文本?
小众字体图像文本提取解决方案
一、搞定pytesseract识别失败的问题
- 补全Tesseract的字体训练数据:Tesseract默认只支持常见字体,像MultiTypePixel NarrowBold、Cave-Story-Regular这类小众字体,得自己训练专属模型:
- 用目标字体生成包含所有需识别字符的图像样本
- 用
tesstrain工具训练自定义字体模型,训练完成后把模型文件放到Tesseract的tessdata目录下 - 识别时指定自定义模型:
pytesseract.image_to_string(img, lang='你的模型名')
- 若图像有干扰,先做预处理:
- 用OpenCV的
cv2.threshold()把图像转成黑白,突出文本 - 用
cv2.medianBlur()或形态学操作去除噪声 - 字体过小的话,用
cv2.resize()放大后再识别
- 用OpenCV的
二、给Keras-OCR添加自定义字体训练
Keras-OCR默认拉取谷歌字体,要加入自定义字体,直接修改训练代码的字体加载逻辑:
- 找到训练脚本中加载字体的文件(通常是
data_generation.py) - 在原有字体列表后追加自定义字体路径:
# 手动添加自定义字体路径 custom_fonts = [ "/本地路径/MultiTypePixelNarrowBold.ttf", "/本地路径/Cave-Story-Regular.ttf" ] # 合并到原有字体列表 fonts = fonts + custom_fonts - 这样生成训练数据时,会随机使用这些自定义字体生成样本,模型就能学习目标字体的特征
- 重新运行训练脚本,用包含自定义字体的数据集训练新模型
三、其他可行替代方案
- 尝试EasyOCR:这个工具支持的字体和语言范围更广,不少小众字体无需额外训练就能识别,调用简单:
import easyocr reader = easyocr.Reader(['en']) # 根据文本语言调整 result = reader.readtext('你的图像文件.png') - 自建CNN文本识别模型:如果字体风格极特殊,可自己搭建CNN+CTC损失的简单模型,用PIL或OpenCV批量生成目标字体的文本图像作为训练集
- 使用商用OCR服务:比如百度智能云OCR、阿里云OCR,这类服务的训练数据量庞大,可能直接支持小众字体识别,适合批量处理图像
内容的提问来源于stack exchange,提问作者JAMSHAID
相关产品推荐
相关产品推荐

