1
votes

Comment différencier les images numérisées Passport et PAN Card en python

Le but est d'identifier que l'image numérisée d'entrée est un passeport ou une carte PAN en utilisant Opencv.

J'ai utilisé la méthode structural_similarity (compare_ssim) de skimage pour comparer l'image numérisée d'entrée avec les images du modèle de carte Passport et PAN.

Mais dans les deux cas, mon score est faible.

Voici le code que j'ai essayé

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)

Comparaison de la carte PAN Modèle avec passeport, j'ai un score SSIM de 0,12 et en comparant le modèle de carte PAN avec une carte PAN, le score était de 0,20

Comme les deux scores étaient très proches, je n'ai pas pu les distinguer à travers le code.

toute autre solution ou approche, veuillez aider.

Voici un exemple d'image Image numérisée PAN


6 commentaires

Publiez une image d'exemple sur laquelle vous travaillez


Pourquoi ne comparez-vous pas les images en fonction de leur contenu textuel? Vous pouvez effectuer une opération de prétraitement sur les images et effectuer une OCR pour extraire les données de texte et en fonction d'un certain ensemble fixe de mots clés dans la chaîne de sortie ocr, vous pouvez les classer dans la carte Pan ou le passeport.


@flamelite merci d'avoir répondu. Le problème est d'utiliser tesseract (OCR), je reçois un caractère inégal. J'ai fait un peu de prétraitement sur l'image mais la précision ne s'améliore toujours pas beaucoup.


@sssm s'il vous plaît poster un exemple d'image, j'essaierai d'ocr et voir si je peux trouver une meilleure sortie.


@flamelite J'ai publié un exemple d'image ci-dessus pour votre référence.


@flamelite si vous avez des mises à jour à ce sujet, veuillez poster.


5 Réponses :


0
votes

Vous pouvez également comparer 2 images par l'erreur quadratique moyenne (MSE) de ces 2 images.

def mse(imageA, imageB):
    # the 'Mean Squared Error' between the two images is the
    # sum of the squared difference between the two images;
    # NOTE: the two images must have the same dimension
    err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
    err /= float(imageA.shape[0] * imageA.shape[1])

    # return the MSE, the lower the error, the more "similar"
    # the two images are
    return err


0 commentaires

0
votes

D'après ce que j'ai compris, les images de la carte panoramique et du passeport contiennent des données textuelles différentes, je pense donc que l'OCR peut résoudre ce problème. Tout ce que vous avez à faire est d'extraire les données texte des images en utilisant n'importe quelle bibliothèque OCR comme Tesseract et de rechercher quelques mots clés prédéfinis dans les données texte pour différencier les images.

Voici un simple script Python montrant l'image pré- traitement et OCR à l'aide du module pyteseract:

    img = cv2.imread("D:/pan.jpg")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret,th1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
    cv2.imwrite('filterImg.png', th1)
    pilImg = Image.open('filterimg.png')
    text = pytesseract.image_to_string(pilImg)
    print(text.encode("utf-8"))

Voici l'image binaire utilisée pour l'OCR:

 entrez la description de l'image ici

J'ai obtenu les données de chaîne ci-dessous après avoir effectué l'OCR sur l'image ci-dessus:

esraax fram EP aca ae ~ DÉPARTEMENT DE L'IMPÔT SUR LE REVENU Ld GOVT. DE L'INDE wrtterterad sg Numéro de compte permanent. Carte \ xe2 \ x80 \ x98yf KFWPS6061C PEF vom; ae Reviavs / Nom du père. e. SUDHIR SINGH:. ,

Bien que ces données textuelles contiennent des bruits, mais je pense que c'est plus que suffisant pour faire le travail.


2 commentaires

Merci mon pote. Pouvons-nous également localiser et extraire du texte à l'aide de réseaux de neurones.


Oui, bien sûr que nous pouvons. voici le lien pour cela arxiv.org/abs/1704.03155 . Bien que vous puissiez également détecter le texte de ces images à l'aide d'opérations de traitement d'image de base, voici le lien que j'ai essayé github.com/avi9839/panocr/blob/master/src/filter.py . Je testais cette approche uniquement sur votre image, elle est actuellement incomplète, je mettrai à jour les dépôts. bientôt.



0
votes

Une autre solution OCR consiste à utiliser le script TextCleaner ImageMagick à partir des scripts de Fred. Un tutoriel expliquant comment l'installer et l'utiliser (sous Windows) est disponible ici .

Script utilisé:

import cv2
from PIL import Image
import tesserocr as tr

number_ok = cv2.imread("C:\\Users\\Link\\Desktop\\id.png")

blur = cv2.medianBlur(number_ok, 1)
cv2.imshow('ocr', blur)

pil_img = Image.fromarray(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB))

api = tr.PyTessBaseAPI()

try:
    api.SetImage(pil_img)
    boxes = api.GetComponentImages(tr.RIL.TEXTLINE, True)
    text = api.GetUTF8Text()

finally:
    api.End()

print(text)

cv2.waitKey(0)

Résultat:

 res

J'ai appliqué l'OCR là-dessus avec Tesseract (j'utilise la version 4) et c'est le résultat:

fart
INCOME TAX DEPARTMENT : GOVT. OF INDIA
wort cra teat ears -
Permanent Account Number Card
KFWPS6061C





TT aa
MAYANK SUDHIR SINGH el

far aT ary /Father's Name
SUDHIR SINGH

Wa RT /Date of Birth den. +

06/01/1997 genge / Signature

Code pour l'OCR:

C:/cygwin64/bin/textcleaner -g -e normalize -f 20 -o 20 -s 20 C:/Users/Link/Desktop/id.png C:/Users/Link/Desktop/out.png


0 commentaires

0
votes

L'OCR peut être une solution pour ce type de classification d'image, mais cela peut échouer pour les images floues ou mal exposées. Et cela pourrait être plus lent que les nouvelles méthodes d'apprentissage en profondeur.

Vous pouvez utiliser la détection d'objets (Tensorflow ou toute autre bibliothèque) pour entraîner deux classes d'images distinctes, à savoir PAN et Passport. Pour affiner les modèles pré-entraînés, vous n'avez pas non plus besoin de beaucoup de données. Et selon ce que j'ai compris, PAN et passeport ont une couleur d'arrière-plan différente, donc je suppose que ce sera vraiment précis.

Détection d'objets Tensorflow: Lien

De nos jours, OpenCV prend également en charge la détection d'objets sans installer de nouvelles bibliothèques (par exemple, Tensorflow, caffee, etc.). Vous pouvez consulter cet article pour YOLO détection d'objets basée sur OpenCV.


0 commentaires

0
votes

Nous pouvons utiliser:

  • Comparaison d'histogrammes - Méthodes les plus simples et les plus rapides, en utilisant cela, nous obtiendrons la similitude entre les histogrammes.
  • Correspondance de modèle - Recherche et recherche de l'emplacement d'une image de modèle, en utilisant cela, nous pouvons trouver des parties d'image plus petites dans une plus grande. (comme certains modèles courants dans la carte PAN).
  • Correspondance des caractéristiques - Les caractéristiques extraites d'une image et la même caractéristique seront reconnues dans une autre image même si l'image pivote ou est inclinée.

0 commentaires