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 :
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:
Latihan:
Pengujian:
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)
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!