Bagaimanakah saya boleh melaksanakan sistem OCR pengecaman digit asas dalam OpenCV-Python menggunakan algoritma KNearest dan SVM?

Linda Hamilton
Lepaskan: 2024-11-08 16:21:02
asal
957 orang telah melayarinya

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

OCR Pengecaman Digit Mudah dalam OpenCV-Python

Pengenalan

Artikel ini bertujuan untuk membimbing anda melalui pelaksanaan sistem pengecaman digit asas OCR (Optical Character Recognition) menggunakan OpenCV-Python. Kami akan meneroka dua algoritma pembelajaran mesin yang popular: KNearest dan SVM.

Soalan 1: Letter_recognition.data File

Letter_recognition.data ialah set data yang disertakan dalam OpenCV-Python sampel. Ia mengandungi koleksi huruf tulisan tangan bersama-sama dengan 16 nilai ciri untuk setiap huruf. Fail ini berfungsi sebagai data latihan untuk pelbagai tugas pengecaman aksara.

Membina data_pengenalan_surat Anda Sendiri:

Anda boleh mencipta fail data_pengenal_surat anda sendiri dengan mengikuti langkah-langkah ini :

  1. Sediakan set data huruf anda dengan setiap huruf diwakili sebagai imej 10x10 piksel.
  2. Ekstrak nilai piksel daripada setiap imej untuk membentuk vektor ciri sebanyak 100 nilai.
  3. Tetapkan label (0-25, sepadan dengan A-Z) secara manual pada setiap huruf.
  4. Simpan vektor ciri dan label dalam fail teks, dengan setiap baris dalam format:

Soalan 2: results.ravel() dalam KNearest

results.ravel( ) menukar tatasusunan digit yang dikenali daripada tatasusunan berbilang dimensi kepada tatasusunan 1D rata. Ini menjadikannya lebih mudah untuk mentafsir dan memaparkan hasil.

Soalan 3: Alat Pengecaman Digit Mudah

Untuk mencipta alat pengecaman digit mudah menggunakan letter_recognition.data, ikut ini langkah:

Penyediaan Data:

  • Muat fail letter_recognition.data tersuai anda atau gunakan sampel daripada OpenCV.

Latihan:

  • Buat contoh pengelas KNearest atau SVM.
  • Latih pengelas menggunakan sampel dan respons daripada letter_recognition.data.

Pengujian:

  • Muatkan imej yang mengandungi digit untuk dikenali.
  • Praproses imej untuk mengasingkan digit individu.
  • Tukar setiap satu digit ke dalam vektor ciri (nilai 100 piksel).
  • Gunakan pengelas terlatih untuk mencari padanan terdekat bagi setiap vektor ciri dan paparkan digit yang sepadan.

Kod Contoh :

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

Contoh ini menggunakan KNearest untuk pengecaman digit, tetapi anda boleh menggantikannya dengan SVM dengan mencipta pengelas SVM sebaliknya.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan sistem OCR pengecaman digit asas dalam OpenCV-Python menggunakan algoritma KNearest dan SVM?. 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