ocrmypdf识别PDF工程图直径符号出错,求OCR优化方案
解决OCR识别工程图直径符号⌀的问题
问题根源分析
- Tesseract参数格式错误:你把所有Tesseract参数塞在单个字符串里,ocrmypdf会将整个字符串当作单个参数传递给Tesseract,导致它误以为这是一个参数文件名,从而报错"Can't open --psm 6 -c tessedit_char_whitelist=...",同时白名单里的直径符号被截断,仅保留了数字。
- 符号不匹配:你白名单里加的是
ø(U+00F8),但实际需要识别的是⌀(U+2300),两个字符编码不同,导致白名单未生效。 - PSM模式不合适:PSM 6适用于连续文本块,工程图里的符号和数值通常分散排布,容易导致识别偏差。
具体优化方案
1. 修正Tesseract参数传递方式
ocrmypdf的tesseract_config需要传递字符串列表,每个参数单独作为列表元素:
import ocrmypdf input_file = "C:/input.PDF" output_file = "C:/output1.pdf" # 正确参数格式:每个Tesseract参数单独列为列表项 ocrmypdf.ocr( input_file, output_file, deskew=True, force_ocr=True, tesseract_config=[ '--psm', '7', # 假设文本为单行,适配工程图标注排版 '-c', 'tessedit_char_whitelist=0123456789⌀' # 加入正确的直径符号⌀ ] )
2. 选择适配的PSM模式
根据工程图排版,推荐尝试这些PSM模式:
--psm 7:假设输入为单行文本,适合识别标注式的数值+符号组合--psm 10:单独识别每个字符,适合分散的符号和数字--psm 3:全自动模式(默认),若上述模式效果差可换回
3. 图像预处理提升识别率
工程图可能存在模糊、低对比度问题,可通过以下方式优化:
- 启用ocrmypdf的阈值处理:添加
--threshold参数,自动将图像转为黑白,强化符号边缘 - 手动预处理:若PDF是扫描件,先将页面导出为图片,用图像工具(如GIMP)提高对比度、锐化后再进行OCR
4. 自定义Tesseract训练(进阶)
若上述方法仍不理想,可针对工程图字体训练Tesseract自定义字库:
- 提取工程图中的⌀和数字样本,生成训练用的
.tif和.box文件 - 使用Tesseract训练工具生成自定义语言包
- OCR时通过
--language参数指定自定义语言包
日志错误说明
之前日志中的read_params_file: Can't open --psm 6 -c tessedit_char_whitelist="0123456789",是因为参数格式错误导致Tesseract把整个参数字符串当成了要打开的配置文件,修正参数传递方式后该错误会消失。
内容的提问来源于stack exchange,提问作者Nick Stankat
相关产品推荐
相关产品推荐

