为何Pytesseract用PSM 12可识别图片文本,PSM 6却不行?
为什么PSM 12比PSM 6更适合你的图片?
先明确Tesseract两种PSM模式的核心定位差异:
- PSM 6:官方定义为「Assume a single uniform block of text」,它会强制将整个图像视作连续规整的单一文本块处理,不会识别分散的独立文本片段。如果图像文本不符合这个「单一整块」的假设,就会识别失败。
- PSM 12:官方定义为「Sparse text. Find as much text as possible in no particular order」,专门针对分散、无固定布局的稀疏文本设计,会遍历全图寻找所有独立文本元素,不要求文本有规整排列。
结合你的图片来看:
你的图片中的文本属于分散的稀疏文本(没有形成连续段落或规整块),完全不匹配PSM 6的「单一文本块」假设,所以调用image_to_data时无法检测到内容;而PSM 12正好适配这种场景,因此能完美识别所有文本。
另外你的代码中两种配置仅PSM参数不同(均使用--oem 3默认引擎、取消分页符),排除了其他干扰因素,所以差异完全来自PSM模式的逻辑不同。
你的代码片段:
custom_config_psm12 = r'--oem 3 --psm 12 -c page_separator=''' custom_config_psm6 = r'--oem 3 --psm 6 -c page_separator=''' image_data_table = pytesseract.image_to_data(im,config=custom_config_psm6) # Doesn't detect anything image_data_table = pytesseract.image_to_data(im,config=custom_config_psm12) # detects and recognizes text perfectly
内容的提问来源于stack exchange,提问作者Wai
相关产品推荐
相关产品推荐

