为何pytesseract.image_to_string无法保留词间空格?
问题:pytesseract中preserve_interword_spaces参数未生效
环境与命令行测试情况
使用的Tesseract版本:
PS C:\Program Files\Tesseract-OCR> .\tesseract --version tesseract v5.3.0.20221222 leptonica-1.78.0 libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0 Found AVX2 Found AVX Found FMA Found SSE4.1 Found libarchive 3.5.0 zlib/1.2.11 liblzma/5.2.3 bz2lib/1.0.6 liblz4/1.7.5 libzstd/1.4.5 Found libcurl/7.77.0-DEV Schannel zlib/1.2.11 zstd/1.4.5 libidn2/2.0.4 nghttp2/1.31.0
命令行下已成功测试,执行命令:
PS C:\Program Files\Tesseract-OCR> .\tesseract C:\ocr\target\31832_226140__0001-00002b.jpg C:\ocr\results\31832_226140__0001-00002bb6523dpi300fullest --dpi 300 --psm 6 -c preserve_interword_spaces=1 -c tessedit_char_whitelist='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. '
部分输出(词间空格正常保留):
269 Wellington Road Wainumomats Marned 101 ARNOLD. Frank Witham ...............................15 Rossiter Avenue.Lower Hutt. Butcher 002 ANKER. Doreen Akson .............................4 Bledisioe Crescent. Wamuiomata. Teacher 102 ARONA. Amosa ...............0000...........3 Donnelley Drve.Wasnuiomata.Pub. Servant 004 ANKER. Robert James ..........................269 Wellington Road.WainuiomataBank Off 104 ARPS. Velde Lucia ................ ..........53 Westminster Road Wamnuomata Resch Intvr 005 ANNESLEV. Boyne Evan .............................. 13 Manurewa GroveWainwomata Clerk 105 ARPS. Wilkem David ..........................53 Westmnster Road. Waimuomata.Foreman 006 ANNESLEY. Janet Maree ....................13 Manurewa Grove Wainuomats Housewite 106 ARROWSMITH. Margaret Bessie .... ... . 4 Isabel Grove. Wainuiomata. Mamed 007 ANSELL. Anme Ena Elizabeth .........................3 Lewghton Av. Lower Hutt. Homemaker 107 ARROWSMITH. Morns Anthony ................ . 4 Isabel Gr Wamuomata Fetry Magr O08 ANGELL. Eb se by oe ceeseceereeess 76 Bell Road. Lower Hutt. Housewrfe
pytesseract运行异常情况
为批量处理文件,已安装pytesseract并升级pip:
Successfully installed pytesseract-0.3.10
Successfully installed pip-23.0.1
执行tox结果正常:
PS C:\Program Files\Tesseract-OCR> tox ←[1m←[35mROOT:←[0m←[36m No tox.ini or setup.cfg or pyproject.toml found, assuming empty tox.ini at C:\Program Files\Tesseract-OCR←[0m py: OK (4.34 seconds) congratulations :) (4.67 seconds)
但运行Python脚本时,词间空格未被保留:
import pytesseract pytesseract.pytesseract.tesseract_cmd = r'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' image = 'C:\\ocr\\target\\31832_226140__0001-00002b.jpg' target = print(pytesseract.image_to_string(image, config='--dpi 96 --psm 6 -c preserve_interword_spaces=1 -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. '))
部分输出(词间空格丢失):
.269WellngtonRoadWainumomatsMarned 101ARNOLD.FrankWitham...............................15RossiterAvenue.LowerHutt.Butcher 002ANKER.DoreenAkson.............................4BledisioeCrescent.Wamuiomata.Teacher 102ARONA.Amosa...............0000...........3DonnelleyDrve.Wasnuiomata.Pub.Servant 004ANKER.RobertJames..........................269WellingtonRoad.WainuiomataBankOff 104ARPS.ValdaLucis..........................53WestminsterRoad.WamnuomataReschIntvr 005ANNESLEV.BoyneEvan..............................13ManurewaGroveWainwomataClerk 105ARPS.WilkemDavid..........................53WestmnsterRoad.Waimuomata.Foreman 006ANNESLEY.JanotMaree....................13ManurewaGroveWainuomatsHousewite 106ARROWSMITH.MargaretBessie........4IsabelGrove.Wainuiomata.Mamed 007ANSELL.AnmeEnaElizabeth.........................3LewghtonAv.LowerHutt.Homemaker 107ARROWSMITH.MornsAnthony.................4IsabelGrWamuomata.FetryMagr O008ANMGELL.Ebsebyyceeseceereeess76BellRoad.LowerHutt.Housewrfe 108ARTHUR.BruceJames....................65MoohanStreet.WainuomataApp.Mouider
原因及解决办法
核心差异点
- DPI参数不匹配:命令行使用
--dpi 300,但Python脚本用了--dpi 96。DPI设置会影响Tesseract对图像文本尺寸的判断,进而干扰空格识别逻辑。 - 白名单参数的引号缺失:命令行中
tessedit_char_whitelist的值用单引号包裹,脚本中未加引号,可能导致末尾的空格未被正确解析。 - 路径转义冗余:脚本中路径用了双反斜杠,虽然不报错,但用原始字符串(
r前缀)更稳妥,避免转义问题。
修正后的脚本
import pytesseract pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' image = r'C:\ocr\target\31832_226140__0001-00002b.jpg' # 对齐命令行参数,修正DPI,给白名单值加引号确保空格生效 config = r'--dpi 300 --psm 6 -c preserve_interword_spaces=1 -c tessedit_char_whitelist="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. "' result = pytesseract.image_to_string(image, config=config) print(result)
额外排查建议
- 确认pytesseract调用的Tesseract版本与命令行一致,可通过
print(pytesseract.get_tesseract_version())验证。 - 若问题仍存在,可开启pytesseract调试日志,查看实际传递给Tesseract的命令是否完整。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

