Tải bản đầy đủ (.docx) (15 trang)

Báo cáo thực tập nhận dạng chữ số viết tay

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.69 MB, 15 trang )

Nhận dạng chữ số viết tay với sklearn và
opencv bằng ngôn ngữ python
* Nhằm thực hiện đồ án môn xử lý ảnh cho những bạn khơng có kiến thức nền
tảng lập trình và các bạn đã có kiến thức về lập trình nhưng muốn tìm hiểu về
máy học (Machine learning) để có thể phát triển thêm cho đồ án tốt nghiệp sau
này.Chắc hẳn bạn đã từng nghe qua cụm từ máy học (Machine learning) từ bạn
bè ,thầy cô hay những người xung quanh thường hay nhắc tới ,liệu những người
nhắc tới họ đã hiểu rõ về cụm từ này . Vậy tại sao phải ứng dụng máy học
(Machine learning) vào đời sống như :
-Máy quét vân tay dùng để điểm danh trong các trường học , doanh nghiệp
-Thuật toán của Uber tính giá cho các chuyến đi cho các khách hàng của họ
-Tính năng Facebook tự đơng gắn thẻ và tên cho các khn mặt bạn bè trong
hình ảnh
-Thuật tốn dịch tự động trong google Translation
Trong các ngôn ngữ lập trình đều có lệnh if else để chúng ta xử lý , nếu gặp
trường hợp 1 thì thực hiện cách 1 , nếu gặp trường hợp 2 thì thực hiện cách 2 và
nếu có 10 trường hợp thì mình liệt kê rõ ràng hết 10 trường hợp bằng code cũng
rất ổn. Nhưng khi ứng dụng cho bài toán nhận dạng chữ số viết tay thì liệu có
ổn ? Mình thử tính xem có bao nhiêu trường hợp mình cần xử lý nhé .
Từ 0 -> 9 Là có 10 số tương ứng với 10 trường hợp .Giả sử rằng mình tạo app
này để nhận dạng chữ số viết tay cho người Việt Nam . Mình tra được là khoảng
99.8 triệu người (2023) đang sinh sống ,cho là 99 triệu người cho chẳn nhé ,
mỗi người có mỗi kiểu ghi khác nhau tương ứng với 99 triệu trường hợp.Vậy
tổng cộng mình có 10x99 triệu = 990 triệu trường hợp . Nếu mà dùng lệnh if
else để xử lý thì tốn khá nhiều thời gian và công sức để đi lấy từng mẫu rồi viết
code để xử lý cho từng mẫu ,thật khó khăn đúng khơng , nhưng đã có thuật tốn
Support Vector Machine (SVM) là một thuật tốn giám sát, nó có thể sử dụng
cho cả việc phân loại hoặc đệ quy.Bạn muốn biết cách hoạt động của nó thì tra
mạng để biết thêm nhé , trong tài liệu này mình chỉ nói những điều cần có để
thực hiện thuật tốn nhé:
* Đầu tiên ta cần có mẫu chữ số viết tay và nhãn dán.Mình lấy trong cơ sở dữ


liệu mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()


X_train : là hình ảnh 28x28 kiểu ndarray dùng để training
Y_train : là nhãn dán kiểu unit8 dùng để training
Y_train

X_train

Còn X_test,Y_test là dữ liệu cũng giống với X_train,Y_train , nhằm để đưa vào
thuật tốn để kiểm tra độ chính xác rồi đưa ra phương án điểu chỉnh
*Sau khi có mẫu chữ số viết tay ta tiến hành tính Hog cho từng mẫu
X_train_feature = [] # biến lưu trữ giá trị hog
for i in range(len(X_train)):
feature = hog(X_train[i],orientations=9,pixels_per_cell=(14,14),cells_per_block=(1,1),block_norm="L2")
X_train_feature.append(feature) # mỗi lần tính hog dữ liệu sẽ được đẩy vào biến này
X_train_feature = np.array(X_train_feature,dtype = np.float32) #sau khi tính xong biến này ép kiểu float để phù
hợp thuật tốn

*Sau khi có các giá trị hog của từng mẫu ta tiến hành training bằng thuật toán
SVM
model = LinearSVC(dual=True) # set giá trị thuật toán
model.fit(X_train_feature,y_train) # training bằng thuật tốn gồm có giá trị hog và nhãn dán

*Sau khi training bằng thuật toán SVM xong ta tiến hành nhận dạng
Đầu tiên ta cần hình ảnh cần nhận dạng vd : hình 1 có kích thước 100x100


-Ta cần chuyển ảnh về ảnh xám (ảnh nhị phân) để dễ dàng tính hog

- Resize ảnh về kích thước 28x28 bằng với hình ảnh mẫu X_train cho dễ so
sánh
- Ta tiến hành tính hog cho ảnh để thu giá trị hog vd: hinh 1_hog
- Ta tiến hành nhận dạng bằng predict
nbr = model.predict(np.array([hinh 1_hog], np.float32))
biến nbr sẽ trả về con số tương ứng với số trong hình

Hiện tại mình có tạo ra nhận dạng chữ số viết tay với sklearn và opencv bằng
ngôn ngữ python dựa trên những thứ mình đề cập ở trên các bạn cùng xem app
với mình nhé


Để tạo app này các bạn chỉ mất 30 phút, đầu tiên cần tải file của mình và làm
theo hướng nhé . máy tính mình win 7 nhé có thể áp dụng cho win 8 , 10 nhé

B1 : Tải python version 3.8.3


vào web : Python.org

Do phiên bản này hợp với win 7


B2 : Tải opencv 3.4.8



B3 : Sau khi tải opencv 3.4.8 xong vào file opencv click vào build



Click vào python

Click vào cv2


Click vào python 2.7 , copy cv2.pyd

Ban vào thư mục python38


Paste file cv2.pyd vào đây


B4: Bạn click vào biểu tượng window gõ run, sau đó gõ cmd

Sau đó gõ pip install opencv-python để cài opencv vào python


Nếu bị Lỗi
Thì gõ
python -m pip install --upgrade pip
để nâng cấp pip
sau đó tải lại
pip install opencv-python

Sau khi cài opencv vào python xong trong thư mục site-packages xuất hiện file
cv2 , bấm vào cv2 để copy cv2.pyd


Paste vào file NhanDangChuSoVietTay



Sau đó bạn nhấp vào cmd để tải các thư viện khác


pip install scikit-image
pip install -U scikit-learn
pip install --upgrade tensorflow
pip uninstall Pillow
pip install Pillow==9.5.0

B5: Bạn load dữ liệu bằng cách start file loaddulieu.py
Chờ Load dữ liệu nhé
B6: Sau khi load xong start file textapp.py



×