如何在R中提取PNG文件里的竖排韩汉混合文本
竖排中韩混合文本的OCR提取解决方案
针对你的两个问题,以下是基于R的tesseract和magick包的具体解决方法:
1. 提取竖排(从上到下、从右到左)文本
竖排文本的识别核心是让Tesseract正确识别文本方向,有两种可行方案:
方案一:旋转图片转换为横排后识别
通过旋转图片将竖排文本转为横排,再调整字符顺序还原正确阅读逻辑:
- 使用
magick将图片逆时针旋转90度,把竖排文本转为横排(此时每行字符顺序是反向的) - 识别旋转后的图片,再反转每行的字符顺序,得到正确的文本内容
方案二:直接配置Tesseract识别方向
无需旋转图片,通过设置Tesseract的页面分割模式(psm)和文本方向参数,让引擎直接识别竖排文本:
- 设置
psm=5(适配单个垂直文本块) - 设置
tessedit_orientation=4(对应垂直从上到下、从右到左的文本布局)
2. 同时提取韩语和中文文本
Tesseract支持多语言混合识别,只需在初始化引擎时传入多个语言代码,同时下载对应的语言包即可:
- 韩语代码:
kor - 繁体中文代码:
chi_tra(老旧海报多为繁体,优先选择) - 简体中文代码:
chi_sim
完整代码示例
方案一(旋转图片法)
library(tesseract) library(magick) library(pdftools) # 下载所需语言包 tesseract_download("kor") tesseract_download("chi_tra") # 初始化多语言引擎 bilingual_engine <- tesseract(c("kor", "chi_tra")) # 转换PDF为PNG(如果输入是PDF) pngfile <- pdftools::pdf_convert("/Users/R/USEFULRCODES/example2.pdf") # 读取图片并逆时针旋转90度 img <- image_read(pngfile) rotated_img <- image_rotate(img, 90) # 逆时针旋转90度 # 识别旋转后的图片 raw_text <- ocr(rotated_img, engine = bilingual_engine) # 分割文本为行,反转每行字符,再合并 processed_text <- paste(sapply(strsplit(raw_text, "\n"), function(line) { if(nchar(line) > 0) paste(rev(strsplit(line, "")[[1]]), collapse = "") else line }), collapse = "\n") # 输出结果 cat(processed_text)
方案二(直接配置引擎法)
library(tesseract) library(magick) library(pdftools) # 下载所需语言包 tesseract_download("kor") tesseract_download("chi_tra") # 初始化带竖排识别配置的多语言引擎 vertical_bilingual_engine <- tesseract( c("kor", "chi_tra"), options = list( tessedit_pageseg_mode = 5, # 单个垂直文本块模式 tessedit_orientation = 4 # 垂直从上到下、从右到左的文本方向 ) ) # 转换PDF为PNG pngfile <- pdftools::pdf_convert("/Users/R/USEFULRCODES/example2.pdf") # 直接识别竖排文本 text <- ocr(pngfile, engine = vertical_bilingual_engine) # 输出结果 cat(text)
注意事项
- 如果海报是简体中文,将
chi_tra替换为chi_sim即可 - 老旧海报可能存在模糊、噪点问题,可先用
magick的image_trim()、image_contrast()等函数预处理图片,提升识别准确率
内容的提问来源于stack exchange,提问作者LL J
相关产品推荐
相关产品推荐

