文字是怎么识别出来的
识别分两步,用的都是开源项目 PaddleOCR 的模型。第一步是文字检测:PP-OCRv5 检测模型查看整张图片,标出每一行文字所在的区域。不管是一行标题、密密麻麻的一页文档,还是照片里零散的几处文字,都能找出来。如果图片拍歪了,会按找到的文字行的平均倾斜角度把图片转正。
第二步是文字识别:把每一行文字截出来,缩放到固定高度,交给 PP-OCRv6 识别模型。它的字库有约一万八千个字符,一次读完整行,而不是一个字一个字地认,所以能利用上下文:单看分不清的字符,比如数字 0 和字母 O,通常可以根据前后的字判断出来。只有一两个字符、而且置信度很低的识别结果会被丢掉,这样照片边缘、污点之类的干扰大多会被过滤。
怎样排出阅读顺序
识别出的文字行按阅读顺序排列:高度相同的文字属于同一行,从左到右连起来;各行从上到下排列。两行之间的距离明显比正常行距大,就当作新的一段。选择“合并成段落”时,被换行打断的句子会重新接起来:中文、日文直接相连,英文之间加一个空格,行尾用连字符断开的英文单词会恢复成完整的单词。
让识别更准确的小技巧
尽量用最清楚的图片:截图比拍屏幕清楚,正对着纸面、光线均匀的照片比斜着拍的好。文字很小的话,先放大再截图。图片里不需要的部分可以先用裁剪工具去掉,左右分栏的页面每一栏单独裁成一张图。微信里收到的图片如果已经被压缩得有点糊,可以请对方发原图。需要把原图和识别结果一起保存时,可以用图片转 PDF把图片合成一个文件。