Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Melaksanakan Pengecaman Digit Mudah dalam OpenCV-Python menggunakan set Data letter_recognition.data?

Bagaimana untuk Melaksanakan Pengecaman Digit Mudah dalam OpenCV-Python menggunakan set Data letter_recognition.data?

Barbara Streisand
Lepaskan: 2024-11-08 07:19:02
asal
423 orang telah melayarinya

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

OCR Pengecaman Digit Mudah dalam OpenCV-Python

Soalan 1

Fail letter_recognition.data ialah set data yang mengandungi 20,000 sampel huruf tulisan tangan dengan setiap huruf diwakili oleh 16 ciri. Untuk membina fail yang serupa daripada set data anda sendiri, anda boleh mengikuti langkah berikut:

  1. Ekstrak nilai piksel daripada setiap imej huruf.
  2. Simpan nilai piksel dalam tatasusunan.
  3. Buat tatasusunan sepadan yang mengandungi label untuk setiap huruf.
  4. Simpan kedua-dua tatasusunan ke fail teks menggunakan NumPy's fungsi savetxt().

Soalan 2

results.reval() ialah tatasusunan output yang dikembalikan oleh fungsi find_nearest() kelas KNearest OpenCV. Ia mengandungi label yang diramalkan untuk sampel yang diberikan.

Soalan 3

Untuk menulis alat pengecaman digit mudah menggunakan fail letter_recognition.data, anda boleh mengikuti langkah berikut:

Latihan:

  1. Muatkan letter_recognition.data file.
  2. Ekstrak sampel dan respons daripada fail.
  3. Buat contoh pengelas KNearest.
  4. Latih pengelas menggunakan sampel dan respons.

Pengujian:

  1. Muatkan imej yang mengandungi digit yang akan dikenali.
  2. Praproses imej untuk mengekstrak individu digit.
  3. Ekstrak nilai piksel daripada setiap digit dan simpannya dalam tatasusunan.
  4. Gunakan pengelas terlatih untuk meramalkan label bagi setiap digit.
  5. Paparkan digit yang dikenali pada imej.

Di bawah ialah contoh kod yang menunjukkan proses latihan dan ujian:

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)
Salin selepas log masuk

Dengan mengikuti langkah-langkah ini dan memanfaatkan pengelas KNearest dalam OpenCV, anda boleh mencipta alat pengecaman digit asas yang boleh dipertingkatkan lagi untuk tugas pengecaman digit yang lebih kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengecaman Digit Mudah dalam OpenCV-Python menggunakan set Data letter_recognition.data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan