Maison  >  Article  >  développement back-end  >  Comment implémenter la reconnaissance simple des chiffres dans OpenCV-Python à l'aide de l'ensemble de données letter_recognition.data ?

Comment implémenter la reconnaissance simple des chiffres dans OpenCV-Python à l'aide de l'ensemble de données letter_recognition.data ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 07:19:02415parcourir

How to Implement Simple Digit Recognition in OpenCV-Python using the letter_recognition.data Dataset?

OCR de reconnaissance de chiffres simple dans OpenCV-Python

Question 1

Le fichier letter_recognition.data est un ensemble de données qui contient 20 000 échantillons de lettres manuscrites, avec chaque lettre représentée par 16 caractéristiques. Pour créer un fichier similaire à partir de votre propre ensemble de données, vous pouvez suivre ces étapes :

  1. Extraire les valeurs de pixels de chaque image de lettre.
  2. Stocker les valeurs de pixels dans un tableau.
  3. Créez un tableau correspondant contenant les étiquettes de chaque lettre.
  4. Enregistrez les deux tableaux dans un fichier texte à l'aide de la fonction savetxt() de NumPy.

Question 2

results.reval() est le tableau de sortie renvoyé par la fonction find_nearest() de la classe KNearest d'OpenCV. Il contient les étiquettes prédites pour les échantillons donnés.

Question 3

Pour écrire un outil simple de reconnaissance de chiffres à l'aide du fichier letter_recognition.data, vous pouvez suivre ces étapes :

Formation :

  1. Chargez le fichier letter_recognition.data.
  2. Extrayez les échantillons et les réponses du fichier.
  3. Créez une instance du Classificateur le plus proche.
  4. Formez le classificateur à l'aide des échantillons et des réponses.

Test :

  1. Chargez l'image contenant les chiffres pour être reconnu.
  2. Prétraitez l'image pour extraire des chiffres individuels.
  3. Extrayez les valeurs de pixels de chaque chiffre et stockez-les dans un tableau.
  4. Utilisez le classificateur entraîné pour prédire le étiquettes pour chaque chiffre.
  5. Affichez les chiffres reconnus sur l'image.

Vous trouverez ci-dessous un exemple de code qui démontre le processus de formation et de test :

import numpy as np
import cv2

# Load training data
samples = np.loadtxt('letter_recognition.data', np.float32, delimiter=',', converters={0: lambda ch: ord(ch) - ord('A')})
responses = samples[:, 0]
samples = samples[:, 1:]

# Create KNearest classifier
model = cv2.KNearest()

# Train the classifier
model.train(samples, responses)

# Load test image
test_image = cv2.imread('test_image.png')

# Preprocess the image
gray = cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, 1, 1, 11, 2)

# Extract digits
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

digits = []

for cnt in contours:
    if cv2.contourArea(cnt) > 50:
        [x, y, w, h] = cv2.boundingRect(cnt)
        roi = thresh[y:y + h, x:x + w]
        roismall = cv2.resize(roi, (10, 10))
        digits.append(roismall)

# Predict labels for digits
results = model.find_nearest(np.array(digits), 10)
labels = [chr(ch + ord('A')) for ch in results[0]]

# Display recognized digits on the image
for i, label in enumerate(labels):
    cv2.putText(test_image, str(label), (digits[i][0], digits[i][1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))

cv2.imshow('Recognized Digits', test_image)
cv2.waitKey(0)

En suivant ces étapes et en tirant parti du classificateur KNearest dans OpenCV, vous pouvez créer un outil de reconnaissance de chiffres de base qui peut être encore amélioré pour des tâches de reconnaissance de chiffres plus complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn