How can I implement a basic digit recognition OCR system in OpenCV-Python using KNearest and SVM algorithms?

Linda Hamilton
Release: 2024-11-08 16:21:02
Original
942 people have browsed it

How can I implement a basic digit recognition OCR system in OpenCV-Python using KNearest and SVM algorithms?

Simple Digit Recognition OCR in OpenCV-Python

Introduction

This article aims to guide you through the implementation of a basic digit recognition OCR (Optical Character Recognition) system using OpenCV-Python. We'll explore two popular machine learning algorithms: KNearest and SVM.

Question 1: Letter_recognition.data File

Letter_recognition.data is a dataset included in OpenCV-Python samples. It contains a collection of handwritten letters along with 16 feature values for each letter. This file serves as training data for various character recognition tasks.

Building Your Own Letter_recognition.data:

You can create your own letter_recognition.data file by following these steps:

  1. Prepare your letter dataset with each letter represented as a 10x10 pixel image.
  2. Extract pixel values from each image to form a feature vector of 100 values.
  3. Manually assign a label (0-25, corresponding to A-Z) to each letter.
  4. Save the feature vectors and labels in a text file, with each row in the format:

Question 2: results.ravel() in KNearest

results.ravel() converts the array of recognized digits from a multi-dimensional array to a flat 1D array. This makes it easier to interpret and display the results.

Question 3: Simple Digit Recognition Tool

To create a simple digit recognition tool using letter_recognition.data, follow these steps:

Data Preparation:

  • Load your custom letter_recognition.data file or use the sample from OpenCV.

Training:

  • Create a KNearest or SVM classifier instance.
  • Train the classifier using the samples and responses from letter_recognition.data.

Testing:

  • Load an image containing digits to be recognized.
  • Preprocess the image to isolate individual digits.
  • Convert each digit into a feature vector (100 pixel values).
  • Use the trained classifier to find the nearest match for each feature vector and display the corresponding digit.

Example Code:

import numpy as np
import cv2

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

# Create classifier
model = cv2.KNearest()
model.train(samples, responses)

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

# Preprocess image
gray = cv2.cvtColor(test_img, 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)

# Recognize digits
results = []
for digit in digits:
    roismall = roismall.reshape((1, 100))
    roismall = np.float32(roismall)
    _, results, _, _ = model.find_nearest(roismall, k=1)
    results = results.ravel()
    results = [chr(int(res) + ord('A')) for res in results]

# Display results
output = cv2.cvtColor(test_img, cv2.COLOR_BGR2RGB)
for (digit, (x, y, w, h)) in zip(results, contours):
    cv2.rectangle(output, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(output, str(digit), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow('Output', output)
cv2.waitKey(0)
Copy after login

This example uses KNearest for digit recognition, but you can replace it with SVM by creating an SVM classifier instead.

The above is the detailed content of How can I implement a basic digit recognition OCR system in OpenCV-Python using KNearest and SVM algorithms?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template