Heim >Backend-Entwicklung >Python-Tutorial >Wie implementiert man eine einfache Ziffernerkennung in OpenCV-Python mithilfe des Datensatzes „letter_recognition.data'?

Wie implementiert man eine einfache Ziffernerkennung in OpenCV-Python mithilfe des Datensatzes „letter_recognition.data'?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 07:19:02424Durchsuche

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

Einfache Ziffernerkennung (OCR) in OpenCV-Python

Frage 1

Die Datei „letter_recognition.data“ ist ein Datensatz, der 20.000 Beispiele handgeschriebener Briefe enthält. wobei jeder Buchstabe durch 16 Merkmale dargestellt wird. Um eine ähnliche Datei aus Ihrem eigenen Datensatz zu erstellen, können Sie die folgenden Schritte ausführen:

  1. Extrahieren Sie die Pixelwerte aus jedem Buchstabenbild.
  2. Speichern Sie die Pixelwerte in einem Array.
  3. Erstellen Sie ein entsprechendes Array mit den Beschriftungen für jeden Buchstaben.
  4. Speichern Sie beide Arrays mit savetxt() von NumPy in einer Textdatei. Funktion.

Frage 2

results.reval() ist das Ausgabearray, das von der Funktion find_nearest() der KNearest-Klasse von OpenCV zurückgegeben wird. Es enthält die vorhergesagten Beschriftungen für die angegebenen Beispiele.

Frage 3

Um ein einfaches Ziffernerkennungstool mit der Datei „letter_recognition.data“ zu schreiben, können Sie die folgenden Schritte ausführen:

Training:

  1. Letter_recognition.data laden Datei.
  2. Extrahieren Sie die Proben und Antworten aus der Datei.
  3. Erstellen Sie eine Instanz des KNearest-Klassifikators.
  4. Trainieren Sie den Klassifikator mithilfe der Proben und Antworten.

Testen:

  1. Laden Sie das Bild mit den zu erkennenden Ziffern.
  2. Verarbeiten Sie das Bild vor, um einzelne zu extrahieren Ziffern.
  3. Extrahieren Sie Pixelwerte aus jeder Ziffer und speichern Sie sie in einem Array.
  4. Verwenden Sie den trainierten Klassifikator, um die Bezeichnungen für jede Ziffer vorherzusagen.
  5. Zeigen Sie die erkannten Ziffern auf dem Bild an.

Unten finden Sie einen Beispielcode, der dies demonstriert der Trainings- und Testprozess:

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)

Indem Sie diese Schritte befolgen und den KNearest-Klassifikator in OpenCV nutzen, können Sie einen erstellen Grundlegendes Ziffernerkennungstool, das für komplexere Ziffernerkennungsaufgaben weiter verbessert werden kann.

Das obige ist der detaillierte Inhalt vonWie implementiert man eine einfache Ziffernerkennung in OpenCV-Python mithilfe des Datensatzes „letter_recognition.data'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn