Msống đầu

Có không ít thuật toán thù để thừa nhận diện chữ số viết tay (h& writen digit) như neural network,CNN cùng với độ đúng mực rất lớn lên tới 99%. Nhưng cũng tránh việc phủ nhận những thuật toán vận dụng theo kiểu truyền thống lịch sử mặc dù vẫn có nhiều ưu điểm là đơn giản với chi phí tính tân oán thâp.Trong nội dung bài viết này chúng ta thuộc tìm hiểu Hog(histogram of oriented gradient) cùng svm( support vector machine) để thừa nhận dạng văn bản số viết tay bên trên bộ tài liệu MNIST.

Bạn đang xem: Nhận diện chữ viết tay

Cấu trúc bài xích viết: Xây dựng mã sản phẩm nhấn diện digit. Predict bên trên hình họa có tương đối nhiều ditgit

Xây dựng Mã Sản Phẩm nhận diện digit.

Dữ liệu cơ mà chúng ta training Model là mnist. Đây hoàn toàn có thể coi là "hello word" vào machine learning. Trước không còn ta khám phá sơ qua về dữ liệu, mnist là tập phù hợp các hình ảnh xám về digit có chiều là 28x28 bao gồm 70.000 nđần hình họa, trong những số ấy có 60.000 hình ảnh để training với 10.000 ảnh để testing. Ý tưởng của mã sản phẩm là dùng HOG(histogram oriented of gradient) nhằm extract feature( các chúng ta cũng có thể coi các bài bác trước để biết thêm hog là gì). Sau Lúc bao gồm feature ta sẽ chuyển vào mã sản phẩm SVM nhằm phân nhiều loại. Cuối thuộc cần sử dụng opencv đế segmentation digit với sử dụng Model họ vừa build để predict. Bắt tay vào Mã Sản Phẩm làm sao. Trước tiên load dataphối và load những thư viện đề xuất dùng:

import cv2import numpy as npfrom skimage.feature import hogfrom sklearn.svm import LinearSVCfrom keras.datasets import mnistfrom sklearn.metrics import accuracy_score#load data(X_train,y_train),(X_kiểm tra,y_test) = mnist.load_data()
#đến x_trainX_train_feature = <>for i in range(len(X_train)): feature = hog(X_train,orientations=9,pixels_per_cell=(14,14),cells_per_block=(1,1),block_norm="L2") X_train_feature.append(feature)X_train_feature = np.array(X_train_feature,dtype = np.float32)#cho x_testX_test_feature = <>for i in range(len(X_test)): feature = hog(X_test,orientations=9,pixels_per_cell=(14,14),cells_per_block=(1,1),block_norm="L2") X_test_feature.append(feature)X_test_feature = np.array(X_test_feature,dtype=np.float32)
Model = LinearSVC(C=10)Model.fit(X_train_feature,y_train)y_pre = model.predict(X_test_feature)print(accuracy_score(y_demo,y_pre))
Accuracy là 88% không đảm bảo lắm. Ta rất có thể kiểm soát và điều chỉnh những ttê mê số để tăng cường mức độ chính xác của Mã Sản Phẩm.

Predict bên trên hình họa có rất nhiều ditgit

Đến công đoạn này ta vẫn cần sử dụng opencv, đầu tiên ta đã cách xử lý hình ảnh với tìm kiếm contours của digit bên trên image. Image này nhặt bên trên mạng ha.

Xem thêm: Kênh Nào Phát Trực Tiếp Bóng Đá U23 Việt Nam Vs U23 Hàn Quốc ?

*


image = cv2.imread("digit.jpg")im_gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)im_blur = cv2.GaussianBlur(im_gray,(5,5),0)im,thre = cv2.threshold(im_blur,90,255,cv2.THRESH_BINARY_INV)_,contours,hierachy = cv2.findContours(thre,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)rects =
Gải thích hợp code một tí hem: Trước tiên convert color quý phái gray color Tiếp theo bớt nhiễu bằng Gaussian( tùy ở trong image mà lại ta cách xử lý khác nhau) Tiếp theo sử dụng threshold đưa về hình họa binary Cuối cùng là tìm contour với vẽ bouding box Sau kia predict ditgit của từng box.
for i in contours: (x,y,w,h) = cv2.boundingRect(i) cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),3) roi = thre roi = np.pad(roi,(20,20),"constant",constant_values=(0,0)) roi = cv2.resize(roi, (28, 28), interpolation=cv2.INTER_AREA) roi = cv2.dilate(roi, (3, 3)) # Calculate the HOG features roi_hog_fd = hog(roi, orientations=9, pixels_per_cell=(14, 14), cells_per_block=(1, 1),block_norm="L2") nbr = mã sản phẩm.predict(np.array(, np.float32)) cv2.putText(image, str(int(nbr<0>)), (x, y),cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 255), 3) cv2.imshow("image",image)cv2.imwrite("image_pand.jpg",image)cv2.waitKey()cv2.destroyAllWindows()
Ta được kết quả nhỏng sau:

*

Một số để ý là : Ta đề xuất padding cho từng digit một khoảng chừng làm sao đó tránh vấn đề digit ko gồm background sẽ khó khăn predict. Tuy thuật toán hog + svm này có độ đúng đắn không cao bằng các thuật toán vào deep learning mà lại nó vẫn nhất thời đồng ý được.Mình viết bài bác này để gần như bạn hình dung được công việc tiến hành thuật toán thù và các predict lúc detection multi digit.

Tsay mê Khảo : http://hanzratech.in/, https://pyimagetìm kiếm.com, learnopencv.com