来自身份证明文件检测和 ocr 的模糊文本
Posted
技术标签:
【中文标题】来自身份证明文件检测和 ocr 的模糊文本【英文标题】:Blurry text from identification documents detection and ocr 【发布时间】:2018-11-07 00:03:39 【问题描述】:我有一个非常具体的场景文本检测和解析问题。我什至不确定您是否可以说这是一个实际的场景文本。
我从身份证照片中提取了一个姓名字段:
我可以立即开始对该图像应用一些 OCR,但我相信可以应用进一步的文本本地化。要实现这个图像: 你知道任何这样的文本本地化算法吗?我已经尝试过'Busta 的 FASText'、'argman 的 EAST',它们工作得很好。这个特定任务的任何算法?
在文本本地化之后,我认为现在是应用 OCR 的最佳时机。现在我感到迷失了。 您可以推荐使用哪种 OCR?我已经尝试过“Tesseract”,但效果不佳。使用例如为文档字符制作自己的 OCR 是否更好?张量流?
【问题讨论】:
您可以在使用上述 OCR 算法之前尝试执行一些图像增强技术! 有什么理由不使用专门的 ID 扫描 SDK? @ssasa 是的,它们不适用于低分辨率。 @LaimonasSutkus 那么你面临着一项非常具有挑战性的任务 :) 商业 ID 扫描 SDK 在开发包括低分辨率在内的强大扫描方面投入了大量资金。 我完全清楚这一点。谢谢! :)(在这漫长的旅程中,我并不孤单哈哈) 【参考方案1】:尝试增加图像的对比度。您可以使用:
import matplotlib.pyplot as plt
import cv2
import numpy as np
def cvt_BGR2RGB(img):
return cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
def contrast(img,show=False):
# CLAHE (Contrast Limited Adaptive Histogram Equalization)
clahe=cv2.createCLAHE(clipLimit=3., tileGridSize=(8,8))
lab=cv2.cvtColor(img, cv2.COLOR_BGR2LAB) # convert from BGR to LAB color space
l,a,b=cv2.split(lab) # split on 3 different channels
l2=clahe.apply(l) # apply CLAHE to the L-channel
lab=cv2.merge((l2,a,b)) # merge channels
img2=cv2.cvtColor(lab, cv2.COLOR_LAB2BGR) # convert from LAB to BGR
if show:
#plot the original and contrasted image
f=plt.figure(figsize=(15,15))
ax1=f.add_subplot(121)
img1_cvt=cvt_BGR2RGB(img)
plt.imshow(img1_cvt)
ax2=f.add_subplot(122)
img2_cvt=cvt_BGR2RGB(img2)
plt.imshow(img2_cvt)
plt.show()
return img,img2
也许你可以使用pyteserract
【讨论】:
以上是关于来自身份证明文件检测和 ocr 的模糊文本的主要内容,如果未能解决你的问题,请参考以下文章
愚公系列2022年12月 .NET CORE工具案例-.NET Core使用PaddleOCRSharp进行身份证和车牌识别