Professional Documents
Culture Documents
TRƯỜNG CƠ KHÍ
KHOA CƠ ĐIỆN TỬ
*******************
MỤC LỤC
Đối với ngành giáo dục, những năm gần đây với sự đổi mới cùa Bộ Giáo dục và Đào
tạo về chương trình học và giảng dạy các cấp đặc biệt là vấn đề thay đổi hình thức thi tốt
nghiệp THPT Quốc gia từ tự luận sang trắc nghiệm với hầu hết các môn thi. Điều đó dẫn
đến việc trong quá trình học tập, thi cử tại các trường cũng có sự đổi mới và hình thức kiểm
tra trắc nghiệm ngày càng xuất hiện phổ biến hơn. Do đó, đối với việc chấm điểm bài kiểm
tra, bài thi cũng thay đổi và việc ứng dụng tự động hóa là hoàn toàn cần thiết.
1.2 Mục tiêu đề tài
Đặc điểm của bài thi trắc nghiệm là gồm nhiều câu hỏi với 4 hay 5 phương án trả lời.
Điều này giúp cho bài kiểm tra có tính phong phú về mặt kiến thức đòi hỏi học sinh, sinh
viên phải nắm chắc kiến thức hiểu sâu rộng. Tuy nhiên có cũng sinh ra bài toán làm thế
nào để có thể chấm bài trắc nghiệm nhanh mà chuẩn xác. Đây là bài toán mà đề tài này
hướng đến. Đề tài sẽ đi tìm cách chấm bài tự động thông qua việc sử dụng camera chụp
ảnh lại bài thi, dựa vào đáp án cho trước sẽ đưa ra kết quả bài thi của thí sinh thay vì phải
chấm bài bằng tay.
1.3 Nội dung nghiên cứu
Hiện nay, xử lý ảnh và thị giác máy là lĩnh vực được nghiên cứu, ứng dụng phổ biến
trong nhiều lĩnh vực khác nhau nhờ vào tính đa nhiệm và sự phát triển mạnh mẽ của các
thuật toán, hệ thống máy tính. Ứng dụng của xử lý ảnh và thị giác máy rất đa dạng trong
các ngành công nghiệp, sản xuất, y tế như kiểm tra dược phẩm, đọc mã vạch, nhận diện
biển số xe, theo dõi khiếm khuyết sản phẩm và thành phần lắp ráp .v.v…
1
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Đề tài sẽ nghiên cứu áp dụng các thuật toán Xử lý ảnh (Image Processing) và áp dụng
thư viện OpenCV vào việc chấm bài để xây dựng một phần mềm có thể giúp thầy cô chấm
bài trắc nghiệm có hiệu quả, nhanh, độ chính xác cao. Trước mắt, nhóm sẽ tập trung vào
xây dựng thuật toán Xử lý ảnh với các bài thi được gọi là “hoàn hảo”, tức là đảm bảo các
yếu tố sau:
• Tờ bài thi đặt trên nền nhẵn
• Ảnh chụp đủ sáng, rõ nét, không bị outnet
• Tất cả các đáp án, STT được đánh đúng, không thiếu, không thừa. Các trường
hợp như khoanh nhiều đáp án, bỏ khoanh đáp án, khoanh sai STT sẽ được
xét đến sau.
2
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Các bài thi của thí sinh sẽ được chụp lại cẩn thận trong điều kiện đủ sáng, không bị
outnet, từ đó lưu vào một folder trong máy tính. Bên cạnh đó giao viên cũng cần phải chuẩn
bị 2 file Excel: file đáp án vào file danh sách thí sinh.
Sau khi chuẩn bị đủ các đầu vào cần thiết, phần mềm bắt đầu chạy. Kết quả sau khi
chạy phần mềm sẽ là folder ảnh các bài thi đã được chấm bài và được sửa lỗi và file Excel
thống kê lại điểm của các thí sinh.
2.2 Quy chuẩn các dữ liệu đầu vào
Danh sách thí sinh
Danh sách thí sinh được tạo bởi file Excel gồm hai cột. Cột thứ nhất là ID, cột thứ
hai là Họ và tên như hình dưới đây:
3
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
4
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
File đáp án là File Excel gồm 2 cột câu và đáp án. Đáp án nhập bởi các chữ cái A,
B, C, D, E hoặc a,b,c,d,e
2.3 Quy chuẩn dữ liệu đầu ra
Ảnh bài thi
Bài thi sau chấm được chữa cụ thể. Tên ảnh lưu dưới tên “STT” + “.jpg”. Ví dụ bạn
Nguyễn Văn A có STT 01 thì file bài thi được lưu là “01.jpg”
Tất cả các bài thi đều được lưu trữ trong một folder chung
File Excel kết quả
Bài thi sau chấm được tính điểm, tổng hợp lưu lại dưới file Excel như sau:
Hình 2.5 File Excel kết quả bài chấm trắc nghiệm
5
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Phần mềm chấm điểm trắc nghiệm tự động được viết bằng ngôn ngữ lập trình Python
3.9 kết hợp với việc sử dụng thư viện OpenCV trợ giúp công việc xử lý ảnh. Đồng thời
nhóm cũng sử dụng phần mềm QtDesigner kết hợp với liên kết PyQt5 đề viết giao diện
cho phần mềm
3.1 Giao diện phần mềm
Giới thiệu về QtDesigner
Qt Designer là một công cụ để nhanh chóng xây dựng giao diện người dùng đồ họa
với các widget từ khung Qt GUI . Nó cung cấp cho bạn một giao diện kéo và thả đơn giản
để bố trí các thành phần như nút, trường văn bản, hộp tổ hợp và hơn thế nữa. Đây là ảnh
chụp màn hình của Qt Designer trên Windows
Qt Designer tạo ra .ui các tệp. Đây là một định dạng dựa trên XML đặc biệt để lưu
trữ các widget của bạn dưới dạng cây. Ta có thể tải các tệp này trong thời gian chạy hoặc
dịch chúng sang ngôn ngữ lập trình như C ++ hoặc Python.
Python là gì?
Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do
Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991.
Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web,
phát triển phần mềm, khoa học dữ liệu và máy học (ML). Các nhà phát triển sử dụng Python
vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau. Phần mềm Python
được tải xuống miễn phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ phát triển.
6
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
PyQt là gì?
Qt là một Application framework đa nền tảng viết trên ngôn ngữ C++ , được dùng
để phát triển các ứng dụng trên desktop, hệ thống nhúng và mobile. Hỗ trợ cho các platform
bao gồm : Linux, OS X, Windows, VxWorks, QNX, Android, iOS, BlackBerry, Sailfish
OS và một số platform khác. PyQt là Python interface của Qt, kết hợp của ngôn ngữ lập
trình Python và thư viện Qt, là một thư viện bao gồm các thành phần giao diện điều khiển
(widgets , graphical control elements).
PyQt API bao gồm các module bao gồm số lượng lớn với các classes và functions
hỗ trợ cho việc thiết kế ra các giao diện giao tiếp với người dùng của các phần mềm chức
năng. Hỗ trợ với Python 2.x và 3.x.
Các class của PyQt5 được chia thành các module, bao gồm:
• QtCore : là module bao gồm phần lõi không thuộc chức năng GUI, ví dụ dùng để
làm việc với thời gian, file và thư mục, các loại dữ liệu, streams, URLs, mime type,
threads hoặc processes.
• QtGui : bao gồm các class dùng cho việc lập trình giao diện (windowing system
integration), event handling, 2D graphics, basic imaging, fonts và text.
• QtWidgets : bao gồm các class cho widget, ví dụ : button, hộp thoại, … được sử
dụng để tạo nên giao diện người dùng cơ bản nhất.
• QtMultimedia : thư viện cho việc sử dụng âm thanh, hình ảnh, camera,…
• QtBluetooth : bao gồm các class giúp tìm kiếm và kết nối với các thiết bị có giao
tiếp với phần mềm.
• QtNetwork : bao gồm các class dùng cho việc lập trình mạng, hỗ trợ lập trình
TCP/IP và UDP client , server hỗ trợ việc lập trình mạng.
• QtPositioning : bao gồm các class giúp việc hỗ trợ xác định vị.
• Enginio : module giúp các client truy cập các Cloud Services của Qt.
7
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
8
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Tiền xử lý ảnh
Sau khi nhận được ảnh, ta thực hiện các bước tiền xử lý với mục đích lọc nhiễu,
nâng cao chất lượng ảnh chụp. Với ảnh nhận được, bước đầu ta chuyển từ ảnh màu sang
ảnh xám. Trong OpenCV với Python, ta sử dụng lệnh
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Sau khi có ảnh xám, ta thực hiện việc làm mịn ảnh. Làm mịn hình ảnh là một kỹ
thuật giúp giảm nhiễu trong hình ảnh. Hình ảnh có thể có nhiều loại nhiễu khác nhau do
cảm biến máy ảnh. Về cơ bản, nó loại bỏ nội dung tần số cao (nhiễu, cạnh) khỏi hình ảnh
nên các cạnh hơi bị mờ trong thao tác này. OpenCV cung cấp hàm gaussianblur () để áp
dụng làm mịn hình ảnh. Cú pháp như sau:
Dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType
Thông số:
• src -Nó được sử dụng để nhập một Hình ảnh.
• dst -Nó là một biến lưu trữ Hình ảnh đầu ra.
9
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
• ksize -Nó định nghĩa Kích thước Kernel Gaussian [chiều rộng chiều cao]. Chiều cao
và chiều rộng phải là số lẻ (1,3,5,…) và có thể có các giá trị khác nhau. Nếu ksize
được đặt thành [0,0], thì ksize được tính từ giá trị sigma.
• sigmaX – Dẫn xuất tiêu chuẩn hạt nhân dọc theo trục X. (hướng nằm ngang).
• sigmaY – Dẫn xuất tiêu chuẩn hạt nhân dọc theo trục Y (hướng dọc). Nếu sigmaY
= 0 thì giá trị sigmaX được lấy cho sigmaY.
10
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Sau khi xử lý bước trên ta thấy ảnh có các đường biên dày hơn ảnh gốc, vì thế ta
cần áp dụng Non-maximum supression để làm đường biên trở nên sắc nét, loại bỏ các
Pixel thừa
Với một pixel A được xác định nằm trên một cạnh. Ta sẽ có vector gradient direction luôn
vuông góc với cạnh edge. Trên vector gradient direction ta có thể có nhiều pixel ví dụ ở
đây là B và C. Ba pixel A, B, C cùng miêu tả một pixel trên cạnh ban đầu nên ta phải so
sánh giá trị giữa A, B và C xác định đâu là pixel nào có giá trị lớn nhất. Sau đó loại bỏ hai
pixel còn lại bằng cách đặt chúng bằng 0.
Cuối cùng ta ta áp dụng Threshold. Bước này sẽ quyết định một cạnh ta dự đoán ở
các bước trên nó có phải là một cạnh thật sự hay không. Giá trị threshold ở đây có hai
ngưỡng Vmax và Vmin . Ta triển khai thuật toán dựa vào hai giá trị này như sau:
• Nếu cường độ của gradient(Magnitude) > Vmax thì đó là chắc chắn là một cạnh
(strong edge)
• Nếu Magnitude < low threshold < Vmin thì đó là noise
• Nếu Vmin < Magnitude < Vmax thì đó là một cạnh yếu chưa xác định được là cạnh
hay nhiễu (weak edge)
• Đối với những weak edge, nếu cạnh nào có kết nối với một strong edge thì weak
edge đó là cạnh, nếu không sẽ là noise
Ví dụ ở hình trên A nằm trên ngưỡng Vmax nên A chắc chắn là cạnh (strong edge). C nằm
giữa ngường Vmax và Vmin nên C là cạnh yếu (weak edge) nhưng C kết nối với strong
edge là A nên C cũng là một cạnh. Tuy nhiên B cũng nằm trong ngưỡng giống C nhưng
không kết nối với cạnh nào chắc chắn là cạnh (strong edge) nên B là nhiễu.
11
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Trong OpenCV có cung cấp hàm giúp ta sử dụng thuật toán Canny Edge Detection
nhanh chóng:
img_canny = cv2.Canny(img_gaussian,threshold1,threshold2)
Ta điểu chỉnh 2 tham số threshold1 và threshold2 sao cho thỏa mãn điều kiện đầu ra.
12
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
• Tham số thứ 3: Index của contour. Chẳng hạn chúng ta chỉ muốn lựa chọn ra một
contour ở những index nhất định thuộc list contours thì khai báo index tại đây. Muốn
vẽ toàn bộ các contours thì thiết lập giá trị cho tham số này bằng -1.
• Thành phần còn lại sẽ chính là tham số về màu sắc, độ dày của contour.
Ta áp dụng 2 câu lệnh sau để tìm Contours
Contours,hierarchy = cv2.findContours(imgCanny,
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(imgContours, Contours, -1, (0, 255, 0), 5)
13
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Hình 3.12 Ảnh sau khi xác định các miền cần xử lý
point1 = np.float32(biggest_recCon)
point2 = np.float32([[0, 0], [widthImg, 0], [0, heightImg], [widthImg, heightImg]])
matrix = cv2.getPerspectiveTransform(point1, point2)
imgWarpColored = cv2.warpPerspective(img, matrix, (widthImg, heightImg))
Tiếp theo ta chuyển sang ảnh xám để nhị phân hóa ảnh với tham số Threshold thỏa
mãn yêu cầu đầu ra bài toán:
14
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Sau khi phân ngưỡng ảnh, ta chia nhỏ imgThresh thành các hàng nằm ngang, sau đó
ta chia nhỏ thành các boxes
Nhận thấy rằng các ô được tô thì có số PIXEL Trắng lớn nhất. Do đó ta sẽ đếm tổng các
Pixel trắng mỗi ô và so sánh. Nếu ô nào có số PIXEL Trắng lớn nhất thì đó là đáp án mà
học sinh khoanh. Do đó ta xác định được vị trí tâm của ô cần được tô
15
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Dựa vào file Excel, ta so sánh và sẽ biết được đáp án nào đúng sai, cùng với vị trí
tâm các ô bước trên, ta vẽ lại kết quả bài thi và sửa bài thi trên một mặt nạ. Từ mặt nạ ta
Invert Alignment lại vị trí ban đầu khu vực đáp án
Khi đã có mặt nạ, ta sử dụng phép cộng ảnh để ra kết quả như sau:
Xử lý khu vực ID
Ta thực hiện tương tự giống khu vực Đáp án
Xử lý khu vực ghi Điểm
Từ kết quả sau khi xử lý khu vực đáp án, ta dễ dàng tính toán đc điểm của bài thi. Ta
vẽ lên một mặt nạ điểm của thí sinh rồi Invert Alignment
Hình 3.21 Phép cộng ảnh cho khu vực ghi Điểm
17
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
Hình 4.1 Giao diện phần mềm khi vừa khởi động
Lần lượt nhập các đường dẫn cần thiết. Ta có thể ấn nút Browser để mở File Explore
chọn đường dẫn cho dễ dàng
Sau khi nhập các đường dẫn đầy đủ, ta ấn start để chạy chương trình
18
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
19
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
20
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
21
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
22
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa
23