来自身份证明文件检测和 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 的模糊文本的主要内容,如果未能解决你的问题,请参考以下文章

证件识别,身份证识别,人脸校对,活体检测,OCR身份证识别

愚公系列2022年12月 .NET CORE工具案例-.NET Core使用PaddleOCRSharp进行身份证和车牌识别

基于PaddleLite的OCR识别身份证号码应用

用 OCR 识别的文本对图像进行去模糊处理

Java菜鸟浅谈OCR

使用 OpenCV,如何在执行 OCR 之前检测文本方向?