You are on page 1of 27

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG CƠ KHÍ
KHOA CƠ ĐIỆN TỬ
*******************

BÁO CÁO MÔN HỌC


XỬ LÝ ẢNH
Phần mềm chấm điểm trắc nghiệm tự động

Sinh viên thực hiện MSSV


Nguyễn Xuân Hân 20195002
Phùng Quang Huy 20195050
Phạm Trung Kiên 20195062

GVHD: TS. Mạc Thị Thoa

Hà Nội, tháng 3 năm 2023


Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

PHÂN CÔNG CÔNG VIỆC

Họ và tên MSSV Nhiệm vụ


Nguyễn Xuân Hân 20195002 Áp dụng OpenCV vào việc xử lý ảnh bài
thi bằng ngôn ngữ Python
Phạm Trung Kiên 20195062 Xây dựng ý tưởng
Làm báo cáo
Phùng Quang Huy 20195050 Thiết kế giao diện bằng PyQt5
Làm powerpoint
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

MỤC LỤC

CHƯƠNG 1. TỔNG QUAN ......................................................................................................... 1


1.1 Đặt vấn đề........................................................................................................................... 1
1.2 Mục tiêu đề tài .................................................................................................................... 1
1.3 Nội dung nghiên cứu .......................................................................................................... 1
CHƯƠNG 2. Ý TƯỞNG THIẾT KẾ .......................................................................................... 3
2.1 Phát biểu bài toán ............................................................................................................... 3
2.2 Quy chuẩn các dữ liệu đầu vào .......................................................................................... 3
Danh sách thí sinh .............................................................................................. 3
Phiếu ghi kết quả trắc nghiệm ............................................................................ 4
. File đáp án ........................................................................................................ 4
2.3 Quy chuẩn dữ liệu đầu ra ................................................................................................... 5
Ảnh bài thi.......................................................................................................... 5
File Excel kết quả............................................................................................... 5
CHƯƠNG 3. THIẾT KẾ PHẦN MỀM....................................................................................... 6
3.1 Giao diện phần mềm .......................................................................................................... 6
Giới thiệu về QtDesigner ................................................................................... 6
Python là gì? ...................................................................................................... 6
PyQt là gì?.......................................................................................................... 7
Giao diện phần mềm .......................................................................................... 8
3.2 Thuật toán Xử lý ảnh .......................................................................................................... 8
Tiền xử lý ảnh .................................................................................................... 9
Phát hiện cạnh (Edge Detection)...................................................................... 10
Xác định Contours ........................................................................................... 12
Tìm Rectangle Contours, xác định các miền cần xử lý ................................... 13
Xử lý ảnh khu vực Đáp án ............................................................................... 14
Xử lý khu vực ID ............................................................................................. 16
Xử lý khu vực ghi Điểm .................................................................................. 16
3.3 Xử lý dữ liệu với file Excel .............................................................................................. 17
CHƯƠNG 4. VẬN HÀNH VÀ KIỂM THỬ ............................................................................. 18
CHƯƠNG 5. KẾT LUẬN ........................................................................................................... 22
5.1 Đánh giá ........................................................................................................................... 22
5.2 Khắc phục và đề xuất phương án cải tiến ........................................................................ 22
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

DANH MỤC HÌNH VẼ


Hình 1.1 Tự động hóa trong công nghiệp ...........................................................................1
Hình 2.1. Input – Output bài toán ........................................................................................3
Hình 2.2 Danh sách sinh viên ..............................................................................................3
Hình 2.3 Phiếu trả lời câu hỏi trắc nghiệm ..........................................................................4
Hình 2.4 File đáp án .............................................................................................................5
Hình 2.5 File Excel kết quả bài chấm trắc nghiệm ..............................................................5
Hình 3.1 Giao diện chính của QtDesigner ...........................................................................6
Hình 3.2 Logo Python ..........................................................................................................7
Hình 3.3 Logo PyQt .............................................................................................................7
Hình 3.4 Giao diện phần mềm .............................................................................................8
Hình 3.5 File ảnh đạt tiêu chuẩn ..........................................................................................9
Hình 3.6 Chuyển từ ảnh màu sang ảnh xám ........................................................................9
Hình 3.7 Làm mở ảnh giảm thiểu nhiễu ............................................................................10
Hình 3.8 Non-maximum supression ..................................................................................11
Hình 3.9 Thresholding .......................................................................................................11
Hình 3.10 Ảnh sau khi áp dụng Canny Edge Detection ....................................................12
Hình 3.11 Find Contours ...................................................................................................13
Hình 3.12 Ảnh sau khi xác định các miền cần xử lý .........................................................14
Hình 3.13 Căn chỉnh vùng ảnh ..........................................................................................14
Hình 3.14 Chuyển ảnh xám khu vực Đáp án .....................................................................15
Hình 3.15 Phân ngưỡng ảnh ..............................................................................................15
Hình 3.16 Chia từng dòng cho imgThresh ........................................................................15
Hình 3.17 Chia thành từng ô cho imgThresh.....................................................................15
Hình 3.18 Tạo mặt nạ cho khu vực Đáp án .......................................................................16
Hình 3.19 Phép cộng ảnh cho khu vực Đáp án ..................................................................16
Hình 3.20 Tạo mặt nạ cho khu vực ghi Điểm ....................................................................16
Hình 3.21 Phép cộng ảnh cho khu vực ghi Điểm ..............................................................17
Hình 4.1 Giao diện phần mềm khi vừa khởi động .............................................................18
Hình 4.2 Chọn đường dẫn từ button Browse .....................................................................18
Hình 4.3 Ấn Start chạy chương trình .................................................................................19
Hình 4.4 Thông báo thành công.........................................................................................19
Hình 4.5 Thông báo mở thư mục chứa bài thi ...................................................................20
Hình 4.6 Kết quả sau khi chấm ..........................................................................................20
Hình 4.7 Ảnh sau chấm bài ................................................................................................21
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

CHƯƠNG 1. TỔNG QUAN

1.1 Đặt vấn đề


Trong thế giới hiên đại ngày nay, công nghê, khoa học- kỹ thuật luôn phát triển không
ngừng nghỉ đưa cuộc sống con người chúng ta ngày càng tiến bộ, văn minh. Với xu thế
thời đại số 4.0, nước ta cũng đang dần thay thế các phương pháp thủ công mà thay vào đó
là ứng dụng các phần mềm tự động, các trang thiết bị hiện đại trong nhiều lĩnh vực khác
nhau như các hoạt động nghiên cứu, sản xuất góp phần giảm thiểu sức người và tăng hiệu
quả lao động, làm việc.

Hình 1.1 Tự động hóa trong công nghiệp

Đố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

CHƯƠNG 2. Ý TƯỞNG THIẾT KẾ

2.1 Phát biểu bài toán

Hình 2.1. Input – Output bài toán

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:

Hình 2.2 Danh sách sinh viên

3
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Phiếu ghi kết quả trắc nghiệm

Hình 2.3 Phiếu trả lời câu hỏi trắc nghiệm

Phiếu gồm 3 phần chính:


• Phần ghi điểm của bài thi
• Phần tô STT của bài thi từ 01 cho đến 99
• Phần tô đáp án câu hỏi trả lời A, B, C, D, E với 10 câu hỏi
. File đáp án

4
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Hình 2.4 File đáp án

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

CHƯƠNG 3. THIẾT KẾ PHẦN MỀM

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

Hình 3.1 Giao diện chính của QtDesigner

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

Hình 3.2 Logo Python

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.

Hình 3.3 Logo PyQt

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

• QtWebSockets : cung cấp các công cụ cho WebSocket protocol.


• QtWebKit : cung cấp các class dùng cho làm việc với các trình duyệt Web , dựa
trên thư viện WebKit2.
• QtWebKitWidgets : các widget cho WebKit.
• QtXml : các class dùng cho làm việc với XML file.
• QtSvg : dùng cho hiển thị các thành phần của SVG file.
• QtSql : cung cấp các class dùng cho việc làm việc với dữ liệu.
• QtTest : cung cấp các công cụ cho phép test các đơn vị của ứng dụng với PyQt5.
Giao diện phần mềm

Hình 3.4 Giao diện phần mềm

Gồm các chức năng chính như sau:


• Button “Browse”: Mở cửa sổ File Explore của Windows để chọn Folder hoặc File
• LineEdit: Lưu các đường dẫn của Folder hoặc File cần thiết cho việc chạy chương
trình
• Button “Start”: Sau khi đầy đủ đường dẫn, click để chương trình hoạt động
3.2 Thuật toán Xử lý ảnh
Xét bài toán một cách tổng quát, để đơn giản bài toán ta giả sử:
• 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
• Các đường dẫn Folder, File được chuẩn bị và dẫn chính xác.

8
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Hình 3.5 File ảnh đạt tiêu chuẩn

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)

Hình 3.6 Chuyển từ ảnh màu sang ảnh xám

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.

Hình 3.7 Làm mở ảnh giảm thiểu nhiễu

Phát hiện cạnh (Edge Detection)


Edge Detection hay bài toán phát hiện cạnh được ứng dụng rất nhiều trong các bài
toán về thị giác máy tính. Ví dụ như trong các bài toán như extract information, recognize
object, .... Cạnh là nơi mã hóa nhiều thông tin ngữ nghĩa(semantics information) và hình
dạng(shape) trong một bức ảnh. Một trong những thuật toán phổ biến để phát hiện cạnh
thường được sử dụng là Canny edge detection.
Một cách tổng quát, thuật toán Canny Edge Detection gồm có 4 bước:
• Lấy đạo hàm của ảnh theo chiều ngang và dọc theo phân phối Gaussian
• Tính cường độ và hướng của gradient
• Non-maximum supression (tìm pixel có giá trị lớn nhất trên một cạnh)
• Sử dụng threshold để tạo loại bỏ cạnh gỉa, xác định cạnh thực sự (real edge)
Đầu tiên, ta lấy đạo hàm theo chiều ngang x (Gx) và chiều dọc y (Gy) . Do hướng
của gradient luôn vuông góc với các cạnh nên ảnh lấy đạo hàm theo chiềng ngang x (Gx)
sẽ thu được các nét dọc còn ảnh lấy đạo hàm theo chiều dọc (Gy) sẽ thu được các nét ngang
của bức ảnh
Từ kết quả tính đạo hàm theo hướng x và y trên ảnh đầu vào, ta tính cường độ
gradient và hướng của mỗi pixel theo công thức :
Cường độ gradient = �𝐺𝐺𝑥𝑥2 + 𝐺𝐺𝑦𝑦2
𝐺𝐺𝑦𝑦
Hướng của gradient: 𝜃𝜃 = 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎2( )
𝐺𝐺𝑥𝑥

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

Hình 3.8 Non-maximum supression

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

Hình 3.9 Thresholding

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.

Hình 3.10 Ảnh sau khi áp dụng Canny Edge Detection

Xác định Contours


Contour được hiểu đơn giản là một đường cong liên kết toàn bộ các điểm liên tục
(dọc theo đường biên) mà có cùng màu sắc hoặc giá trị cường độ. Contour rất hữu ích trong
phân tích hình dạng, phát hiện vật thể và nhận diện vật thể. Một số lưu ý khi sử dụng
contour.
• Để độ chính xác cao hơn thì nên sử dụng hình ảnh nhị phân (chỉ gồm 2 màu đen và
trắng). Do đó trước khi phát hiện contour thì nên áp dụng threshold hoặc thuật toán
canny để chuyển sang ảnh nhị phân.
• Hàm findContour và drawContour sẽ thay đổi hình ảnh gốc. Do đó nếu bạn muốn
hình ảnh gốc sau khi tìm được contour, hãy lưu nó vào một biến khác.
• Trong openCV, tìm các contours như là tìm các vật thể màu trắng từ nền màu đen.
Trong OpenCV đã cung cấp hàm cv2.findCountours. Có 3 tham số trong hàm
cv2.findContours(), đầu tiên là hình ảnh gốc, thứ 2 là phương pháp trích xuất contours, thứ
3 là phương pháp xấp xỉ contour. Kết quả trả ra là hình ảnh và contours. Trong đó contours
là một list của toàn bộ các contours xác định trong hình ảnh. Mỗi một contour là một numpy
array của các tọa độ của các điểm biên trong object.
Sau khi Sau khi trích xuất được các contour thì chúng ta sẽ vẽ các contour đó thông
qua hàm cv2.drawContours(). Nó có thể được sử dụng để vẽ bất kì hình dạng nào mà bạn
có các tọa độ điểm biên của nó. Các tham số chính của hàm số này:
• Tham số đầu tiên: Hình ảnh gốc.
• Tham số thứ 2: List các contours cần vẽ. Mỗi một phần tử của list là array tọa độ
các điểm biên của một contour.

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)

Hình 3.11 Find Contours

Tìm Rectangle Contours, xác định các miền cần xử lý


Ta thực hiện theo 3 bước sau:
• Bước 1: Tính diện tích các Countours, dựa vào kích thước ảnh ta ước lượng khoảng
giá trị của diện tích, giữ lại các Contours có thể là bao khu vực Đáp án, Điểm, ID
• Bước 2: Sau khi lọc, Xấp xỉ các Contours, tìm ra các Contours có số Corner = 4,
lưu lại vị trí các góc (Corner), sắp xếp lại các Contours được chọn theo diện tích từ
lớn về bé.
• Bước 3: Theo thiết kế của bảng trắc nghiệm phần Contours (chọn ở bước 2) có diện
tích lớn nhất là phần Đáp án, thứ 2là Phần ID, thứ 3 là Điểm

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ý

Xử lý ảnh khu vực Đáp án


Từ các vị trí điểm của các Corner, ta sẽ căn chỉnh vùng đó sử dụng Wrap –
Perspective trong OpenCV để căn chỉnh ảnh

Hình 3.13 Căn chỉnh vùng ảnh

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

Hình 3.14 Chuyển ảnh xám khu vực Đáp án

Hình 3.15 Phân ngưỡng ảnh

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

Hình 3.16 Chia từng dòng cho imgThresh

Hình 3.17 Chia thành từng ô cho imgThresh

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

Hình 3.18 Tạo mặt nạ cho 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:

Hình 3.19 Phép cộng ảnh cho khu vực Đáp án

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.20 Tạo mặt nạ cho khu vực ghi Điểm


16
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Sau đó ra sử dụng phép cộng ảnh

Hình 3.21 Phép cộng ảnh cho khu vực ghi Điểm

3.3 Xử lý dữ liệu với file Excel


Để thao tác được giữa ngôn ngữ lập trình Python với Excel ta sử dụng thư viện Pandas
trong Python.
Pandas là một thư viện Python cung cấp các cấu trúc dữ liệu nhanh, mạnh mẽ, linh
hoạt và mang hàm ý. Tên thư viện được bắt nguồn từ panel data (bảng dữ liệu). Pandas
được thiết kế để làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều,
có tiềm năng không đồng nhất) và dữ liệu chuỗi thời gian.
Với dữ liệu đầu vào là 2 file Excel danh sách sinh viên và đáp án bài thi, ta sử dụng
thư viên Pandas để chuyển dữ liệu từ Excel và data frame của python để xử lý các bước
tiếp theo.
Tương tự thế khi xử lý ảnh xong có kết quả, ta cũng sử dụng Pandas để xuất dữ liệu
điểm sang file Excel để lưu trữ đánh giá.

17
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

CHƯƠNG 4. VẬN HÀNH VÀ KIỂM THỬ

Khởi động phần mềm ta được giao diện

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

Hình 4.2 Chọn đường dẫn từ button Browse

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

Hình 4.3 Ấn Start chạy chương trình

Hình 4.4 Thông báo thành công

19
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Hình 4.5 Thông báo mở thư mục chứa bài thi

Hình 4.6 Kết quả sau khi chấm

20
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

Hình 4.7 Ảnh sau chấm bài

21
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

CHƯƠNG 5. KẾT LUẬN

5.1 Đánh giá


Với điều kiện được giả sử như trên, phần mềm chạy ổn định có thể chấm bài trắc
nghiệm với tốc độ rất cao, độ chính xác tuyệt đối
Tuy nhiên phần mềm cũng có nhiều hạn chế như:
• Chưa xử lý được những trường hợp tô nhiều đáp án, tô sai STT
• Ảnh hưởng của môi trường đến chất lượng ảnh dẫn đến chấm không chính xác,
chương trình bị crash
• Phần mềm thiếu đi xử lý ngoại lệ, truy bắt lỗi
5.2 Khắc phục và đề xuất phương án cải tiến
Để khắc phục các nhược điểm trên, ta áp dụng một số cách sau:
• Thiết kế hệ thống cơ khí để cố định camera, vị trí đặt bài thi, nguồn sáng để đạt chất
lượng ảnh cao, đồng đều nhất
• Xử lý thêm các trường hợp chấm multi choices bằng cách thay vì chọn box có số
pixel trắng lớn nhất, ta đi chọn các ô có số pixel trắng > trung bình tổng các pixel
trắng của các ô
• Thêm chức năng phân tích điểm số qua các bài kiểm tra giúp giáo viên có thể biết
được tình trạng học sinh

22
Phần mềm chấm điểm trắc nghiệm tự động GVHD: TS. Mạc Thị Thoa

TÀI LIỆU THAM KHẢO


[1]. Slide Xử lý ảnh – ĐHBK Hà Nội
[2]. https://docs.opencv.org/4.x/d9/df8/tutorial_root.html

23

You might also like