首页 > 解决方案 > 如何区分护照和PAN卡在python中扫描的图像

问题描述

目标是使用 Opencv 识别输入的扫描图像是护照或 PAN 卡。

我使用了 skimage 的结构相似度(compare_ssim)方法将输入扫描图像与 Passport 和 PAN 卡模板的图像进行比较。

但在这两种情况下,我都得到了低分。

这是我尝试过的代码

from skimage.measure import compare_ssim as ssim
import matplotlib.pyplot as plt
import numpy as np
import cv2enter code here

img1 = cv2.imread('PAN_Template.jpg', 0)
img2 = cv2.imread('PAN_Sample1.jpg', 0)

def prepare_img(im):
    size = 300, 200
    im = cv2.resize(im, size)
    return im

img1 = prepare_img(img1)
img2 = prepare_img(img2)

def compare_images(imageA, imageB):
    s = ssim(imageA, imageB)
    return s

ssim = compare_images(img1, img2)

print(ssim)

将 PAN 卡模板与 Passport 进行比较,我的 ssim 得分为 0.12,将 PAN 卡模板与 PAN 卡进行比较,得分为 0.20

由于两个分数都非常接近,我无法通过代码区分它们。

如果有人有任何其他解决方案或方法,请提供帮助。

这是一个示例图像 PAN 扫描图像

标签: python-3.xopencvimage-processingcomputer-vision

解决方案


进行 OCR 可能是此类图像分类的解决方案,但对于模糊或未正确曝光的图像可能会失败。它可能比更新的深度学习方法慢。

您可以使用对象检测(Tensorflow 或任何其他库)来训练两个单独的图像类别,即 PAN 和 Passport。对于微调预训练模型,您也不需要太多数据。据我了解,PAN 和护照的背景颜色不同,所以我想它会非常准确。

TensorFlow 对象检测:链接

如今,OpenCV 也支持对象检测,无需安装任何新库(即 Tensorflow、caffee 等)。您可以参考这篇文章了解 OpenCV 中基于 YOLO 的对象检测。


推荐阅读