TrinhThiCuc TH3

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÁO CÁO THỰC HÀNH 3


Môn: Xử lý ảnh và thị giác robot
Ngành: Kỹ thuật Robot

Họ & Tên: Trịnh Thị Cúc


MSV: 20020
Lớp: QH2020-I/CQ R

Hà Nội – 2022
Đề bài: Thực hiện bài toán nhận dạng chữ số bằng thuật toán KNN với dữ liệu cho
trước.
Thông tin về dữ liệu:
a. trainingSet: Thư mục này chứa mười thư mục con được gán nhãn từ 0 đến
9. Mỗi thư mục con chứa hình ảnh tương ứng với nhãn của nó. Tổng cộng,
có 100 hình ảnh trong bộ đào tạo.
b. testingSet: Thư mục này chứa các hình ảnh kiểm thử. Tổng cộng, có 350
hình ảnh trong bộ kiểm thử

Bài làm:
Bước 1: Import các thư viện sẽ sử dụng
# %reset
import cv2
import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors
from sklearn.metrics import accuracy_score
import time
import os
import cv2 as cv
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

Bước 2: Load tập dữ liệu training và chia tập test


Vì tập test trong phần dataset chưa được dán nhãn nên không thể test trực tiếp trên đó,
nên em chia tập test từ tập train

pathTrain ='dataset\\trainingSet'
filename = os.listdir(pathTrain)
dataTrain = []
labelTrain = []

for i in filename:
labelPathTrain = pathTrain + "\\" + i
listPathIm = os.listdir(labelPathTrain)
for k in listPathIm:
files = labelPathTrain + "\\" + k
image = cv2.imread(files, 0)
image = image.reshape(-1).tolist()
dataTrain.append(image)
labelTrain.append(int(i))
dataTrain = np.array(dataTrain)
labelTrain = np.array(labelTrain)

(dataTrain, dataTest, labelTrain, labelTest) = train_test_split(dataTrain,


labelTrain, test_size = 200, random_state= 0)

Bước 3: Xây dựng mô hình KNN


1. Tính khoảng cách giữa vector và ma trận
def distance(dataTest: np, dataTrain):
dataTest = (np.array(dataTest)).reshape(1,-1)
dist = np.sqrt(np.sum((dataTest - dataTrain)**2, axis =1))
return dist.reshape(1, -1)

2. Tính khoảng cách giữa 2 ma trận


def distance2Matrix(dataTest: np, dataTrain):
dist = distance(dataTest[0], dataTrain)
for i in range(1, (np.array(dataTest.shape[0]))):
d = distance(dataTest[i], np.array(dataTrain))
dist = np.concatenate((dist, d), axis=0)
return dist
3. Dự đoán
def predict(dataTrain: np, labelTrain: np, dataTest: np, k = 5):
dist = distance2Matrix(dataTest, dataTrain)
ID = np.argsort(dist, axis=1)
Knearest = labelTrain[ID[:,: k]]
predictY = np.zeros(dataTest.shape[0])
for i in range(predictY.shape[0]):
counts = np.bincount(Knearest[i])
predictY[i] = np.argmax(counts)
return predictY

Kết quả
k = 5
predictY = predict(np.array(dataTrain), np.array(labelTrain), np.array(dataTest),
k)
acc = accuracy_score(y_true= labelTest, y_pred = predictY)
print(" Accurency score is: ", acc)

Accurency score is: 0.86

Bước 4: Kiểm tra bằng việc sử dụng model KNN trong thư viện sklearn
model = KNeighborsClassifier(n_neighbors= 5)
model.fit(dataTrain, labelTrain)
Y_predict = model.predict(dataTest)
acc = accuracy_score(y_true=labelTest, y_pred= Y_predict)
print("Accurency score is: ", acc)

Accurency score is: 0.86

Toàn bộ link code:


https://colab.research.google.com/drive/1rc72vnrf9PxtvBJSOy0JJx6zRff3sqoU?usp=shar
ing

You might also like