Home  >  Article  >  Backend Development  >  How to Implement Simple Digit Recognition in OpenCV-Python using the letter_recognition.data Dataset?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 07:19:02357browse

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

Simple Digit Recognition OCR in OpenCV-Python

Question 1

The letter_recognition.data file is a dataset that contains 20,000 samples of handwritten letters, with each letter represented by 16 features. To build a similar file from your own dataset, you can follow these steps:

  1. Extract the pixel values from each letter image.
  2. Store the pixel values in an array.
  3. Create a corresponding array containing the labels for each letter.
  4. Save both arrays to a text file using NumPy's savetxt() function.

Question 2

results.reval() is the output array returned by the find_nearest() function of OpenCV's KNearest class. It contains the predicted labels for the given samples.

Question 3

To write a simple digit recognition tool using the letter_recognition.data file, you can follow these steps:

Training:

  1. Load the letter_recognition.data file.
  2. Extract the samples and responses from the file.
  3. Create an instance of the KNearest classifier.
  4. Train the classifier using the samples and responses.

Testing:

  1. Load the image containing the digits to be recognized.
  2. Preprocess the image to extract individual digits.
  3. Extract pixel values from each digit and store them in an array.
  4. Use the trained classifier to predict the labels for each digit.
  5. Display the recognized digits on the image.

Below is an example code that demonstrates the training and testing process:

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)

By following these steps and leveraging the KNearest classifier in OpenCV, you can create a basic digit recognition tool that can be further improved upon for more complex digit recognition tasks.

The above is the detailed content of How to Implement Simple Digit Recognition in OpenCV-Python using the letter_recognition.data Dataset?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn