You are on page 1of 103

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI


KHOA CƠ KHÍ

ĐỒ ÁN TỐT NGHIỆP

Đề tài: Nghiên cứu, thiết kế hệ thống chấm bài thi


trắc nghiệm tự động, ứng dụng công nghệ xử lý ảnh
Giáo viên hướng dẫn: T.S Phan Đình Hiếu

Lớp: DHCODT03 – K14

Họ và tên sinh viên: Vũ Văn Phong 2019604791

Nguyễn Trung Hiếu 2019605383

Đỗ Quang Tài 2019604259

Khoa : Cơ Khí

Hà Nội, 2022
BỘ CÔNG THƯƠNG CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNGĐẠI HỌC CÔNG NGHIỆPHÀNỘI Độc lập - Tự do - Hạnh phúc

PHIẾU GIAO ĐỀ TÀI ĐỒ ÁN TỐT NGHIỆP


CHUYÊN NGÀNH CÔNG NGHỆ KỸ THUẬT CƠ ĐIỆN TỬ

Họ tên sinh viên:

1. Vũ Văn Phong Mã SV: 2019604792 Lớp: Cơ điện tử 3 Khóa: 14


2. Đỗ Quang Tài Mã SV: 2019604259 Lớp: Cơ điện tử 3 Khóa: 14
3. Nguyễn Trung Hiếu Mã SV: 2019605383 Lớp: Cơ điện tử 3 Khóa: 14

Tên đề tài: Nghiên cứu, thiết kế và chế tạo hệ thống chấm bài thi trắc nghiệm tự động ứng
dụng công nghệ xử lý ảnh.
Mục tiêu đề tài:
• Nghiên cứu, thiết kế và chế tạo hệ thống chấm bài thi trắc nghiệm tự động ứng dụng
công nghệ xử lý ảnh OpenCV.
• Xây dựng mô hình tổng quan của thiết bị chấm thi trắc nghiêm tự động, nghiên cứu
các thành phần của thiết bị chấm bài thi tự động.
• Tính toán lựa chọn và thiết kế các thành phần trong mô hình hệ thống chấm bài thi
trắc nghiệm tự động.
• Chế tạo mô hình và vận hành chính xác hệ thống chấm bài thi trắc nghiệm tự động.
Kết quả dự kiến
• Quyển báo cáo nghiên cứu, thiết kế và chế tạo thiết bị chấm bài thi trắc nghiệm tự
động.
• Các bộ bản vẽ chế tạo cơ khí, bản vẽ sơ đồ nguyên lý, sơ đồ đi dây hệ thống điều
khiển.
• Bản vẽ lưu đồ thuật toán và chương trình điều khiển hệ thống chấm bài thi trắc
nghiệm và Module tieps giấy vào khay.
• Mô hình thực của thiết bị chấm bài thi trắc nghiệm tự động.
Thời gian thực hiện: từ 24/10/2022 đến 25/12/2022.
GIÁO VIÊN HƯỚNG DẪN TRƯỞNG KHOA
(Ký và ghi rõ họ tên)

TS Nguyễn Văn Thiện


NỘI DUNG THỰC HIỆN
1. Bố cục thuyết minh đề tài:
Nội dung nghiên cứu SV thực hiện
Chương 1: Tổng quan về hệ thống
1.1. Tổng quan chung hệ thống Vũ Văn Phong
1.2. Mục tiêu của đề tài Đỗ Quang Tài
1.3. Phương pháp nghiên cứu Nguyễn Trung Hiếu
1.4. Phạm vi và giới hạn đề tài Nguyễn Trung Hiếu
1.5. Ý nghĩa khoa học và thực tiễn đề tài Đỗ Quang Tài
Chương 2: Cơ sở lý thuyết
2.1. Nguyên lý hoạt động Vũ Văn Phong
2.2. Hệ thống điều khiển Nguyễn Trung Hiếu
2.3. Mô hình hóa động cơ bước Nguyễn Trung Hiếu
2.4. Xử lý ảnh và khái niệm cơ bản về ảnh số Đỗ Quang Tài
2.5. Các khối nguồn Vũ Văn Phong
Chương 3: Thiết kế hệ thống
3.1. Thiết kế hệ thống mô hình hệ thống cơ khí Vũ Văn Phong
3.2. Thiết kế hệ thống chấm bài thi bằng OpenCV Đỗ Quang Tài
3.3. Thiết kế hệ thống điều khiển Nguyễn Trung Hiếu
Chương 4: Chế tạo hệ thống chấm bài thi trắc nghiệm tự
động
Vũ Văn Phong
4.1. Chế tạo hệ thống cơ khí Đỗ Quang Tài
Nguyễn Trung Hiếu
Vũ Văn Phong
4.2. Chế tạo hệ thống điện điều khiển Đỗ Quang Tài
Nguyễn Trung Hiếu
Vũ Văn Phong
4.3. Lập trình hệ thống chấm bài thi Đỗ Quang Tài
Nguyễn Trung Hiếu
Chương 5: Kết quả và đánh giá
5.1. Kết quả đạt được Đỗ Quang Tài
5.2. Đánh giá Nguyễn Trung Hiếu
5.3. Hạn chế, phương pháp giải quyết và ý tưởng phát triển Vũ Văn Phong

2. Bản vẽ:
Khổ Số
TT Tên bản vẽ SV thực hiện
giấy lượng
1 Bản vẽ lắp hệ thống cơ khí A0 1 Vũ Văn Phong
2 Bản vẽ hệ thống điều khiển A1 1 Nguyễn Trung Hiếu
3 Lưu đồ thuật toán điều khiển A1 1 Đỗ Quang Tài

3. Mô hình/ sản phẩm (nếu có)


Trình bày ngắn gọn thông số kỹ thuật cơ bản của mô hình/ sản phẩm.

Nội dung công việc SV thực hiện


Vũ Văn Phong
Chế tạo, lắp ráp hệ thống truyền động Đỗ Quang Tài
Nguyễn Trung Hiếu
Vũ Văn Phong
Lắp ráp mạch điều khiển Đỗ Quang Tài
Nguyễn Trung Hiếu
Vũ Văn Phong
Lắp ráp hệ thống camera Đỗ Quang Tài
Nguyễn Trung Hiếu
MỤC LỤC
MỤC LỤC .................................................................................................................. 5
DANH MỤC HÌNH ẢNH ......................................................................................... 7
DANH MỤC BẢNG BIỂU ....................................................................................... 8
LỜI NÓI ĐẦU ........................................................................................................... 9
CHƯƠNG I : TỔNG QUAN VỀ HỆ THỐNG........................................................ 10
1.1. Tổng quan chung về hệ thống .................................................................. 10
1.1.1. Giới thiệu đề tài nghiên cứu ............................................................... 10
1.1.2. Mô tả nhiệm vụ công nghệ ................................................................. 10
1.1.3. Cấu trúc thiết bị .................................................................................. 11
1.2. Mục tiêu của đề tài ................................................................................... 11
1.3. Phương pháp nghiên cứu .......................................................................... 12
1.4. Phạm vi và giới hạn đề tài ........................................................................ 12
1.5. Ý nghĩa khoa học và thực tiễn đề tài ........................................................ 13
CHƯƠNG II: CƠ SỞ LÝ THUYẾT ........................................................................ 14
2.1. Nguyên lý hoạt động ..................................................................................... 14
2.1.1. Sơ đồ khối hệ thống chấm bài thi trắc nghiệm tự động ......................... 14
2.1.2. Cơ chế làm việc ...................................................................................... 14
2.2. Hệ thống điều khiển ...................................................................................... 15
2.2.1. Vi điều khiển Arduino ............................................................................ 15
2.2.2. Tổng quan về Module L298 ................................................................... 21
2.3. Mô hình hóa động cơ bước ........................................................................... 23
2.4. Xử lý ảnh và những khái niệm cơ bản về ảnh số .......................................... 25
2.4.1. Pixel ........................................................................................................ 25
2.4.2. Độ xám ................................................................................................... 25
2.2.3. Cấu trúc ảnh ........................................................................................... 26
2.2.4. Nhiễu ảnh .............................................................................................. 28
2.2.5. Các kỹ thuật xử lý ảnh ........................................................................... 28
2.2.6. Nhận dạng kí tự quang học – thư viện Tesseract – OCR....................... 33
2.5. Các khối nguồn.............................................................................................. 38
2.5.1. Nguồn cấp cho board mạch Arduino ..................................................... 38
5
2.5.2. Nguồn cấp cho LED ............................................................................... 39
CHƯƠNG III: THIẾT KẾ HỆ THỐNG .................................................................. 40
3.1. Thiết kế mô hình hệ thống cơ khí ................................................................. 40
3.1.1. Mục tiêu và yêu cầu thiết kế .................................................................. 40
3.1.2. Thân máy và đế máy .............................................................................. 40
3.1.3. Các trục truyền chuyển động ................................................................. 41
3.1.4. Lựa chọn vật liệu chế tạo khung máy .................................................... 42
3.1.5. Thiết kế truyền chuyển động và gá lắp trục động cơ vít-me chuyển động
ngang ................................................................................................................ 43
3.2. Thiết kế hệ thống chấm bài thi bằng OpenCV .............................................. 46
3.2.1. Thuật toán nhận dạng phiếu thi .............................................................. 46
3.2.2. Nhận dạng thông tin bài thi .................................................................... 50
3.2.3. Nhận dạng thông tin thí sinh bằng tesseract – OCR .............................. 53
3.3. Thiết kế hệ thống điều khiển ......................................................................... 55
3.3.1. Yêu cầu về điện của hệ thống chấm bài thi trắc nghiệm tự động .......... 55
3.3.2. Thiết kế lựa chọn động cơ truyền động ................................................. 55
3.3.3. Thiết kế lựa chọn hệ thống điều khiển ................................................... 59
3.3.4. Tính toán độ chính xác khi truyền chuyển động .................................... 61
3.3.5. Lựa chọn và điều khiển hệ thống camera .............................................. 61
CHƯƠNG IV: CHẾ TẠO HỆ THỐNG CHẤM BÀI THI TỰ ĐỘNG................... 63
4.1. Chế tạo hệ thống cơ khí................................................................................. 63
4.1.1. Căn chỉnh mặt phẳng để lắp đường dẫn hướng (Liner guide way) ....... 63
4.1.2. Lắp trục vitsme và thanh trượt ............................................................... 63
4.1.3. Lắp ráp khoang chấm bài thi .................................................................. 65
4.1.4. Lắp đặt khay chưa giấy và Module trượt cấp giấy................................. 66
4.2. Chế tạo hệ thống điện điều khiển .................................................................. 67
4.2.1. Mạch điều khiên trung tâm .................................................................... 67
4.2.2. Tính toán cấp xung cho động cơ bước di chuyển hành trình trục vistsme
.......................................................................................................................... 68
4.3. Lập trình hệ thống chấm bài thi .................................................................... 69
4.3.1. Kỹ thuât chụp ảnh và lưu ảnh ................................................................ 70
4.3.2. Kỹ thuật nhận diện số báo danh và tên thí sinh ..................................... 71
6
4.3.3. Kỹ thuật Threshold ................................................................................. 72
4.3.4. Tìm vùng chứa đáp án ............................................................................ 73
4.3.5. Kỹ thuật tính điểm và hiện điểm ra màn hình ........................................ 74
CHƯƠNG V: KẾT QUẢ VÀ ĐÁNH GIÁ ............................................................. 77
5.1. Kết quả đạt được ........................................................................................... 77
5.2. Đánh giá ........................................................................................................ 80
5.3. Hạn chế, phương pháp giải quyết và ý tưởng phát triển ............................... 81
5.3.1. Hạn chế và phương pháp ........................................................................ 81
5.3.2. Ý tưởng phát triển đề tài ........................................................................ 82
KẾT LUẬN .............................................................................................................. 84
TÀI LIỆU THAM KHẢO ........................................................................................ 85
PHỤ LỤC ................................................................................................................. 86

DANH MỤC HÌNH ẢNH


Hình 2.1 Sơ đồ nguyên lý hoạt động của hệ thống chấm bài thi trắc nghiệm tự động
.................................................................................................................................. 14
Hình 2.2 Cấu trúc booard mạch Arduino ................................................................ 16
Hình 2.3 Giao diện phần mềm Arduino IDE .......................................................... 19
Hình 2.4 Module L298 ............................................................................................ 22
Hình 2.5 Mạch mô hình động cơ bước ................................................................... 23
Hình 2.6 Cấu trúc dữ liệu ảnh ................................................................................. 27
Hình 2.7 Kết quả tìm biên của Canny ..................................................................... 31
Hình 2.8 Nguồn Adapter HUAWEI 12V 2A .......................................................... 38
Hình 3.1 Trục truyền chuyển động ......................................................................... 41
Hình 3.2 Truyền động trục Vít me M8 ................................................................... 41
Hình 3.3 Lắp ráp trục động cơ Vitsme .................................................................... 43
Hình 3.4 Trục Vitsme + đai ốc T8 .......................................................................... 44
Hình 3.5 Khay chưa giấy......................................................................................... 45
Hình 3.6 Module trượt cấp bài thi vào khay ........................................................... 46
Hình 3.7 Lưu đồ tiến trình nhận dạng phiếu thi ...................................................... 47
Hình 3.8 Hình ảnh bài thi sau khi được Canny ảnh ................................................ 49
Hình 3.9 Lưu đồ tiến trình nhận dạng thông tin bài thi .......................................... 50
Hình 3.10 In số điểm lên bài thi .............................................................................. 52
Hình 3.11 Nhận dạng câu đúng/sai trong bài thi..................................................... 53
Hình 3.12 Lưu đồ tiến trình nhận dạng thông tin thí sinh....................................... 54
Hình 3.13 Ảnh cắt phần thông tin sinh viên trên bài thi ......................................... 55
7
Hình 3.14 Động cơ bước Stepmotor 42 x 48 .......................................................... 58
Hình 3.15 Cấu trúc Board Arduino UNO R3.......................................................... 60
Hình 3.16 Cấu trúc mạch cầu H .............................................................................. 60
Hình 3.17 Sơ đồ đi dây mô phỏng .......................................................................... 61
Hình 4.1 Căn chỉnh kích thước lắp đặt trục động cơ Vitsme .................................. 64
Hình 4.2 Lắp đặt thanh trượt song song với trục Vitsme........................................ 65
Hình 4.3 Lắp đặt khung, led và Camera ................................................................. 66
Hình 4.4 Sản phẩm cơ khí hoàn thiện ..................................................................... 67
Hình 4.5 Đấu nối bộ điều khiển động cơ bước thực tế bằng arduino và L298 ....... 68
Hình 4.6 Ảnh được chụp từ camera ........................................................................ 71
Hình 4.7 Phần thông tin được cắt ra để nhận diện .................................................. 72
Hình 4.8 Tách vùng chứa đáp án và khoanh đáp án đúng sai ................................. 74
Hình 4.9 Tính toán và hiện ra màn hình dữ liệu ..................................................... 76
Hình 5.1 Ảnh được chuyển từ file word sang JPG ................................................. 78
Hình 5.2 Ảnh được chụp từ Smart Phone ............................................................... 79
Hình 5.3 Ảnh được chụp từ Wedcam ..................................................................... 80

DANH MỤC BẢNG BIỂU


Bảng 1.1 Thành phần của hệ thống .......................................................................... 11
Bảng 2.1 Thông số kỹ thuật mạch cầu H – L298..................................................... 21
Bảng 2.2 Thông số kĩ thuật nguồn chuyển đổi ........................................................ 38
Bảng 3.1 Thông số kỹ thuật camera ......................................................................... 62

8
LỜI NÓI ĐẦU
Trong xu hướng phát triển không ngừng của nền công nghệ hiện đại tiên tiến
ngày càng phát triển trong những thập kỷ qua , công nghệ kỹ thuật chính xác càng
ngày phát triển vượt bậc theo. Đồng nghĩa với việc đó là nền giáo dục ngày càng
được nâng cao. Máy móc dần thay thế sức lao động của con người, giúp con người
có thể làm việc chuẩn xác hơn hết trong mọi lĩnh vực: công nghiệp, nông nghiệp, y
tế, …... Ban đầu, các bộ được chế tạo với những chức năng chuyên dụng , dần dần
một linh kiện đa năng ra đời. Tiếp theo đó là nền tảng AI, trí tuệ nhân tạo ra đời, giúp
chúng ta có thể phân tích được mọi tình huống và điều khiển chuẩn xác mọi công
việc, hướng đến công nghệ 4.0 trong hiện tại và tương lai, được ứng dụng trong rất
nhiều lĩnh vực.
Đời sống xã hội ngày một thay đổi, bên cạnh những tiến bộ thì các vấn đề cũng
nảy sinh càng nhiều, đặc biệt là khi quy mô hoạt động của tổ chức nền giáo dục đang
ngày được mở rộng . Trong nhiều trường hợp , việc chính xác trong kết quả học tập
ngày càng được đề cao, làm cho các giảng viên mất khá nhiều thời gian để có được
độ tập trung chấm bài thi một cách chính xác nhất. Do đó, các hệ thống AI , trí tuệ
nhân tạo hiện nay có thể giúp cho con người dễ dàng hơn trong việc chính xác trong
quá trình đánh giá học sinh, sinh viên qua các bài thi để đảm bảo tính công bằng ,
xác thực, đặc biệt đó là sự tiến bộ vượt bậc của nền giáo dục nước nhà.
Bằng một ý tưởng có tính chất ứng dụng cao trong thực tế của nền giáo dục
Nước nhà, chúng em lựa chọn đề tài:” NGHIÊN CỨU, THIẾT KẾ HỆ THỐNG
CHẤM BÀI THI TRẮC NGHIỆM TỰ ĐỘNG” trực tiếp do giảng viên T.S Phan
Đình Hiếu hướng dẫn. Hệ thống có khả năng chấm bài thi trắc nghiệm tự động theo
khuôn mẫu của giấy thi trắc nghiệm được bộ giáo dục đưa ra. Dưới sự điều khiển và
xử lý của hệ thống này giúp các giáo viên, giảng viên có thể ứng dụng chấm bài thi
chính xác, quá trình chấm thi trắc nghiệm sẽ được diễn ra nhanh hơn, chính xác hơn,
đảm bảo và hiệu quả hơn.

9
CHƯƠNG I : TỔNG QUAN VỀ HỆ THỐNG
1.1. Tổng quan chung về hệ thống
1.1.1. Giới thiệu đề tài nghiên cứu
Như chúng ta đã biết, trong những năm gần đây, bắt đầu từ năm 2017, các môn
Toán, Tổ hợp Khoa học tự nhiên (Vật lý, Hóa học, Sinh học), Tổ hợp Khoa học xã
hội ( Lịch sử, Địa lý, Giáo dục công dân), Ngoại ngữ đều thi theo hình thức trắc
nghiệm trên mẫu giấy thi do bộ Giáo Dục và Đào Tạo Việt Nam ban hành để tiến
hành xét tuyển lấy điểm thi vào các trường Cao Đẳng , Đại Học…. Nếu như không
được sự hỗ trợ của máy móc thì sẽ gây rất nhiều khó khăn cho các giáo viên, giảng
viên trong quá trình chấm thi có thể mất rất nhiều thời gian và rất dễ gây nhầm lẫn
trong kết quả, ảnh hưởng rất lớn đến năng lực và điểm thi của học sinh, sinh viên.
Để khắc phục tình trạng trên thì người ta đã sử dụng chấm bài thi quét bằng tia hồng
ngoại, tuy nhiên biện pháp đó không được tối ưu hóa.
Từ những yêu cầu thực tế đó, những đòi hỏi sự chính xác ngày càng cao trong
cuộc sống, cộng với sự hợp tác phát triển mạnh mẽ của trí tuệ nhân tạo AI nên chúng
em đã chọn đề tài :” Nghiên cứu, thiết kế hệ thống chấm bài thi tự động ứng dụng
công nghệ xử lý ảnh” nhằm đáp ứng nhu cầu của nền giáo dục nước nhà để có thể
chuẩn xác hơn trong khi chấm các bài thi và dễ dàng hơn đối với giáo viên, giảng
viên sử dụng, góp phần phát triển khoa học kĩ thuật, nền văn minh tiên tiến, hướng
đến công nghệ hiện đại 4.0 hiện nay.
1.1.2. Mô tả nhiệm vụ công nghệ
Hệ thống có khả năng:
• Module tiếp giấy bằng mặt trượt nghiêng để đưa bài thi được xếp vào khay
• Đọc được số báo danh trong bài thi
• Nhận dạng được bài thi trắc nghiệm bằng Python - OpenCV
• Nhận dạng ra những câu đúng và sai để tính ra số điểm trên thang điểm 10
• Sau khi chấm xong bài thi có thể tự động chuyển qua bài thi khác

10
1.1.3. Cấu trúc thiết bị
- Hệ thống có mô hình tương tự như hình ảnh dưới đây:
• Cấu trúc hệ thống bao gồm:
Camera wedcam 1080P 2MP HD 30fps Camera Noise-
Reduction Microphone Web Cam HD Laptop
Computer.
Python Python 3.11
OpenCV Thư viện OpenCV 2022
ARDUINO Arduino UNO R3
Động cơ Động cơ bước – Step motor 42 x 48
Module điều khiển động cơ Module L298
Khung nhôm định hình Nhôm định hình 2020 EU
Trục Vít-me Trục + Đai ốc Vít me 8mm
Gối đỡ thanh trượt Kẹp trục SK8
Thanh trượt Thanh trượt mạ Crom Ø 8mm
Đầu khớp nối trục động cơ Đầu khớp nối trục động cơ 5x8 mm
Đèn chiếu sáng Led thanh 220V – 300 mm
Bảng 1.1 Thành phần của hệ thống

1.2. Mục tiêu của đề tài


Thiết bị chấm bài thi trắc nghiệm tự động là hệ thống có thể được sử dụng rộng
rãi trong môi tường học đường trong thời gian sắp tới. Giải pháp thông minh nhờ trí
tuệ nhân tạo thực hiện giúp con người phân tích chuẩn xác và nhanh hơn. Giải pháp
này đã được nước ngoài thực hiện rất nhiều và rộng rãi, nhưng ở Việt Nam vẫn còn
hạn chế do vẫn còn nhiều sai số trong hệ thống xử lý và thực hiện chưa được tối ưu
hóa 1 cách tối đa nhất.
Đây là hệ thống hoàn toàn tự động, nhưng vẫn phải có sự giám sát của người
thực hiện. Từ ý tưởng ban đầu, dựa vào những kiến thức đã được học, nhóm bắt đầu

11
tiến hành tìm hiểu những lý thuyết liên quan đến xử lý ảnh và sau đó bắt tay vào thiết
kế và lập trình thực tế với các yêu cầu cơ bản như sau:
• Tìm hiểu công nghệ xử lý ảnh:
+ Tổng quan xử lý ảnh.
+ Phân tích và lựa chọn các phương pháp xử lý ảnh.
+ Tìm hiểu ứng dụng xử lý ảnh trong thực tế.
• Tìm hiểu thuật toán điều khiển động cơ bằng arduino.
• Tính toán thiết kế hệ thống di chuyển giấy bằng trực vitsme – con trượt
• Thiết kế phần mềm.
• Tính toán thiết kế khung thiết bị.
1.3. Phương pháp nghiên cứu
Đây là một đề tài khá hay và ứng dụng thực tế, nhưng trong thời gian thực hiện
đồ án nhóm thực hiện đề tài gặp rất nhiều khó khăn trong việc thu thập nguồn tài liệu
Nhóm thực hiện theo 2 phương pháp chủ yếu như sau:
a) Phương pháp tham khảo tài liệu
• Nguồn tài liệu chủ yếu bằng tiếng Anh và tiếng Việt được tìm kiếm trên
Internet và thư viện trường.
• Tham khảo tài liệu nghiên cứu khoa học do các thầy hướng dẫn soạn thảo.
• Các bài viết và video trên Internet
b) Phương pháp thực hành
• Lập trình giải quyết bài toán nhận biết lỗi đúng sai trên bài thi trắc nghiệm
• Tính toán và thiết kế cho hệ thống cơ khí để dễ dàng nắm bắt được lý thuyết
so với thực tế.
1.4. Phạm vi và giới hạn đề tài
Thiết bị chấm bài thi trắc nghiệm tự động chỉ được ứng dụng rộng rãi trong môi
trường giáo dục nên thực tế cũng chưa thể tìm hiểu hết được chức năng. Trong phạm
vi là đề tài nghiên cứu tốt nghiệp, với những giới hạn về thời gian, tài chính và tầm
12
hiểu biết. Nhóm xây dựng, tính toán và thiết kế mô hình với những chức năng như
sau:
• Nhận diện lỗi đúng/sai trong bài thi trắc nghiệm đã được tô đáp án.
• Tính toán thiết kế hệ thống di chuyển bài thi ra vào.
• Tính toán, thiết kế module cấp giấy vào khay.
• Hiển thị điểm, thông tin thí sinh ra màn hình.
1.5. Ý nghĩa khoa học và thực tiễn đề tài
• Thông tin về điểm số của từng bài thi ứng với từng số báo danh được cập nhật
và chính xác
• Giảm bớt thời gian chấm bài thi của giáo viên hoàn toàn được tự động hóa,
nhanh chóng và chính xác.
• Nhờ công nghệ cao mà trí tuệ nhân tạo đem lại giúp chúng ta có thể đánh giá
tốt hơn về năng lực của sinh viên trong nền giáo dục nước nhà.
• Tiết kiệm thời gian, coogn sức của giáo viên, đồng thời khó xảy ra sai sót, gian
lận khi chấm bài thi.
• Tiện nghi, dễ sử dụng với mọi người.
• Giảm thiểu khiếu nại do sai số về điểm khi đánh giá năng lực mỗi học sinh,
sinh viên qua bài thi trắc nghiệm.
• Thiết bị chất lượng cao, hệ thống haotj động bền bỉ, lâu dài và liên tục.
• Xuất báo cáo về điểm khi cần thiết
• Dễ dàng quản lý, điều khiển hoàn toàn tự động
• Hệ thống bảo mật tuyệt đối do dùng dùng đến mạng lưới Internet, chống thất
thoát dữ liệu mật truyền ra ngoài.

13
CHƯƠNG II: CƠ SỞ LÝ THUYẾT
2.1. Nguyên lý hoạt động

Hình 2.1 Sơ đồ nguyên lý hoạt động của hệ thống chấm bài thi trắc nghiệm tự động

2.1.1. Sơ đồ khối hệ thống chấm bài thi trắc nghiệm tự động


Sơ đồ khối hệ thống chấm thi trắc nghiệm tự động do nhóm đề xuất đượcgiới
thiệu như Hình 1.1, trong đó có những khối chức năng cơ bản như sau:
• Phần cứng
Hệ thống cấp giấy được nhóm thiết kế tích hợp với Camera và đèn trợ sáng
phía trên. Đây là một hệ thống cơ khí tự động được điều khiển bằng Board mạch
Arduino từ khay đựng phiếu thi tới vị trí xác định để camera thu nhận hình ảnh.
Camera sẽ được kết nối với máy vi tính có cài đặt phần mềm Python – OpenCV.
Phần cứng này sẽ được điều khiển bằng các phần mềm driver (Arduino IDE) trên
máy tính.
• Phần mềm
Nhận dạng vùng chưa phiếu thi trong ảnh được thu nhận bởi camera. Vùng
chứa thông tin trên phiếu thi bao gồm: mã đề, số báo danh và phần trả lời). Do thời
gian và được tìm hiểu chưa được chuyên sâu, nhóm chỉ nhận dạng vùng làm bài thi
và mã đề trên giấy thi sau đó hệ thống sẽ xử lý thông tin sẽ đề ra kết quả. Kết quả sẽ
được hiện ra màn hình để được dúng ta nhìn thấy, mở rộng hơn nữa là có thể được
lưu vào file hoặc cơ sở dữ liệu để in ấn, thống kê.
2.1.2. Cơ chế làm việc
Cơ chế làm việc của hệ thống được chia làm 3 quá trình:

14
a) Quá trình thu nhận ảnh
Tập phiếu trả lời trắc nghiệm được đưa vào khay module cấp giấy. Thông
qua hệ thống trượt, phiếu trả lời trắc nghiệm được đưa đến vị trí xác định để camera
thu nhận ảnh. Khi phiếu trả lời trắc nghiệm tới vị trí chụp, tín hiệu chỉ thị chụp được
gửi tới camera để camera thu nhận ảnh. Kết thúc quá trình thu nhận ảnh, tín hiệu chỉ
thị tời được gửi tới hệ thống tời giấy. Hệ thống tời giấy sẽ đưa phiếu trả lời trắc
nghiệm từ vị trí chụp ra ngoài, đồng thời đưa phiếu trả lời trắc nghiệm mới vào vị trí
chụp.
b) Quá trình đọc thông tin trên ảnh
Dữ liệu ảnh từ quá trình 1 được tiền xử lý nhằm mục đích lọc nhiễu và nâng
cao chất lượng ảnh. Sau đó, thông qua việc xác định 4 đỉnh của phiếu trả lời trắc
nghiệm trong ảnh, góc nghiêng của phiếu trả lời trắc nghiệm sẽ được tính toán, tự
động điều chỉnh góc nghiêng và chuẩn hóa ảnh theo một tỉ lệ xác định. Ảnh sau chuẩn
hóa được trích chọn các vùng thông tin: vùng số báo danh, vùng mã đề, vùng trả lời.
Việc sử dụng thuật toán nhận dạng dấu tích trên từng vùng sẽ cho ta thông tin bài thi.
c) Quá trình đánh giá và xuất kết quả
Thông tin từ quá trình trên sẽ được xem xét và tính toán theo phần trăm số
câu được tô đúng trên bài thi. Tiến hành so sánh thông tin thu thập được với cơ sở
dữ liệu với đáp án tương ứng. Ta sẽ nhận được kết quả bài thi. Kết quả này sẽ được
đưa ra màn hình hiển thị để hỗ trợ giáo viên có thể chấm điểm trực tiếp vào bài thi.
2.2. Hệ thống điều khiển
Để điều khiển động cơ bước thì nhóm đã lựa chọn Board mạch Arduino để
điều khiển tốc độ động cơ, đi kèm với đó là Module L298.
2.2.1. Vi điều khiển Arduino
a) Arduino là gì?
• Arduino Uno là một board mạch vi điều khiển được phát triển bởi Arduino.cc,
một nền tảng điện tử mã nguồn mở chủ yếu dựa trên vi điều khiển AVR

15
Atmega328P. Với Arduino chúng ta có thể xây dựng các ứng dụng điện tử
tương tác với nhau thông qua phần mềm và phần cứng hỗ trợ.
• Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi
xử lý AVR Atmel 8bit, hoặc ARM, Atmel 32-bit,… Tuy nhiên phiên bản
thường được sử dụng nhiều nhất là Arduino Uno và Arduino Mega.
• Phần mềm để lập trình cho mạch Arduino là phần mềm IDE
b) Cấu tạo của Arduino

Hình 2.2 Cấu trúc booard mạch Arduino

c) Giới thiệu các loại Board Arduino phổ biến


Không giống như hầu hết các board mạch lập trình trước đó, Arduino không
yêu cầu một phần cứng riêng để lập trình mã mới lên board mà bạn chỉ cần sử dụng
cáp USB. Đồng thời, phần mềm Arduino IDE sử dụng phiên bản cơ bản của C++,
giúp việc học chương trình trở nên đơn giản hơn. Chúng ta có thể tổng hợp một số
loại Arduino phổ biến như sau:

16
• Arduino Uno: Đây chính là loại board đơn giản nhất nên rất phù hợp với
những người mới bắt đầu tìm hiểu về lĩnh vực này. Dữ liệu số bao gồm 14 chân, đầu
vào gồm 6 chân 5V, khả năng phân giải là 1024 mức, tốc độ 16MHz, điện áp từ 7V
đến 12V. Kích thước của Board này là 5,5x7cm.
• Arduino Micro: Bao gồm có đến 20 chân, trong đó có 7 chân có thể phát
PWM. Loại này có thiết kế khá nhỏ gọn, kích thước chỉ 5x2cm.
• Arduino Nano: Có thể nói đây chính là loại board có kích thước nhỏ nhất chỉ
2x4cm, việc lắp đặt được thực hiện dễ dàng.
• Arduino Pro: Đây là một thiết kế mới mẻ khi chân số không có sẵn, tùy vào
số chân bạn sử dụng để gắn trực tiếp và giúp tiết kiệm được khoảng không lớn, ta
thường thấy hai loại có nguồn 3.3V và 5V.
• Arduino Mega: Chân số lên đến 64, 14 chân có thể phát PWM, 4 cổng truyền
tiếp cùng kích thước khá lớn 5x10cm.
• Arduino Leonardo: Là board không có cổng nối USB dùng lập trình. Được
thiết kế tại một chip nhỏ điều khiển. Kết nối qua COM ảo và có thể kết nối với chuột
và bàn phím.
• Arduino LilyPad: Board mạch Lily Pad Arduino là một công nghệ dệt điện tử
có thể đeo được được mở rộng bởi Leah Sang Buechley, và được thiết kế một cách
cẩn thận bởi dòng Lea Leah và SparkFun. Mỗi board được thiết kế một cách tưởng
tượng với các miếng kết nối khổng lồ & một mặt sau mịn màng để cho chúng được
khâu vào quần áo bằng chỉ . Arduino này cũng bao gồm I / O, nguồn và cả board
cảm biến được chế tạo đặc biệt cho hàng dệt may điện tử.
• Arduino RedBoard: Board mạch RedBoard Arduino có thể được lập trình
bằng cáp USB Mini-B bằng Arduino IDE. Nó sẽ hoạt động trên Windows 8 mà
không phải sửa đổi cài đặt bảo mật của bạn. Nó không đổi do chip USB hoặc FTDI
chúng tôi sử dụng và nó hoàn toàn phẳng ở mặt sau. Tạo nó rất đơn giản để sử dụng
trong thiết kế dự án. Chỉ cần cắm board, chọn tùy chọn menu để chọn Arduino UNO

17
và bạn đã sẵn sàng để tải lên chương trình. Bạn có thể điều khiển RedBoard qua cáp
USB bằng giắc cắm thùng.
d) Thông số cơ bản của Arduino
+ Vi điều khiển Atmega 328 (họ 8 bit)
+ Điện áp hoạt động 5V – DC (cấp qua cổng USB)
+ Tần số hoạt động 16 MHz
+ Dòng tiêu thụ 30mA
+ Điện áp vào khuyên dùng7 – 12V – DC
+ Điện áp vào giới hạn 6 – 20V – DC
+ Số chân Digital I/O 14 (6 chân PWM)
+ Số chân Analog 6 (độ phân giải 10 bit)
+ Dòng tối đa trên mỗi chân I/O 30 mA
+ Dòng ra tối đa (5V) 500 mA
+ Dòng ra tối đa (3.3V) 50 mA
+ Bộ nhớ flash32 KB (Atmega328) với 0.5KB dùng bởi bootloader
+ SRAM 2KB (Atmega328)
+ EEPROM 1KB (Atmega328)
e) Phần mềm lập trình Arduino IDE
• Viết code cho board mạch Arduino
• Hỗ trợ nhiều loại board mạch arduino.
• Giao diện được sắp xếp hợp lý.
• Bộ sưu tập các ví dụ mẫu.
• Mảng thư viện phong phú..v.v.v…..
Giao điện phần mềm IDE

18
Hình 2.3 Giao diện phần mềm Arduino IDE

Những lệnh IDE cơ bản

• Setup(): Mỗi khi sketch bắt đầu, lệnh setup sẽ giúp bạn khởi tạo các biến
và bắt đầu sử dụng các thư viện.
• Loop():Một vòng lặp theo sau setup, khiến nó phản hồi vô hạn với bất kỳ
logic nào.
• Break: Nếu bạn muốn thoát khỏi một lệnh, nhấn break.
• If or else: Các lệnh logic khởi tạo một hành động mỗi khi một điều kiện
được thỏa mãn.
• return: Trả về một giá trị nhất định.
• while: Một vòng lặp khác diễn ra liên tục trong một điều kiện nhất định.
• goto: Lệnh này cho phép bạn đi đến một dòng nhất định trong code.

Boolean và các toán tử số học


Bên cạnh sketch và các lệnh kiểm soát, bạn phải biết một số Boolean và toán
tử số học để chỉ huy các chương trình.

• Các toán hạng: Bằng (=), phép cộng (+), phép trừ (-), phép nhân (*) và
phép chia (/).
• Các toán hạng nâng cao: Không bằng (!=), Nhỏ hơn hoặc bằng (<=), lớn
19
hơn hoặc bằng (>=), phần dư (%).
Các biến quan trọng
Trong một số trường hợp, bạn cần đưa ra một vài biến để xử lý những phép
toán logic khác nhau. Những biến quan trọng là:

• HIGH|LOW: Điều này mang lại giá trị cuối cùng cao và thấp cho các
hằng số.
• LED_BUILTIN: Đưa ra số lượng chân LED (LED pin).

Các biến quan trọng khác cần nhớ bao gồm True/false, sizeof(), void, int và
string. Chúng cũng giống như bất kỳ chương trình thông thường nào khác bao
gồm Python, C++, v.v...

Các hàm Arduino tích hợp sẵn :


- digitalRead(): Đọc giá trị từ một pin kỹ thuật số nhất định. Ngoài ra còn có
digitalWrite().
- pinMode(PIN_NUMBER, INPUT/OUTPUT): Thiết lập pin tại vị trí
PIN_NUMBER thành INPUT hoặc OUTPUT.
- pinMode(PIN_NUMBER, INPUT_PULLUP): Thiết lập pin tại vị trí
PIN_NUMBER trở thành đầu vào bằng cách sử dụng điện trở kéo lên (pull-up
resistor) tích hợp của bo mạch Arduino.

- analogRead(PIN_NUMBER): Đọc số chân analog PIN_NUMBER và trả


về một số nguyên từ 0 đến 1023.

- analogWrite(PIN_NUMBER, VALUE): Giả lập analog output VALUE


bằng cách sử dụng PWM trên PIN_NUMBER (Lưu ý: Chỉ khả dụng trên các
chân 3, 5, 6, 9, 10 và 11).

- analogReference(DEFAULT): Sử dụng điện áp tham chiếu mặc định (5V


hoặc 3.3V tùy thuộc vào điện áp bo mạch).
- analogReference(INTERNAL): Sử dụng điện áp tham chiếu bên trong
(1.1v cho ATmega168/328p, 2.56 cho ATmega 32U4/8).

- analogReference(EXTERNAL): Sử dụng điện áp được áp dụng cho chân


AREF làm điện áp tham chiếu (Lưu ý: chỉ 0-5V).

20
Các hàm liên quan đến thời gian

- Delay(): Hãy nhớ lại ví dụ về đèn LED nhấp nháy. Bạn có thể thêm độ trễ
vào đó.

- millis(): Trả về thời gian tính bằng mili giây kể từ khi Arduino sketch bắt
đầu chạy dưới dạng một số nguyên dài không dấu.
- micros(): Trả về thời gian tính bằng micro giây kể từ khi Arduino sketch
bắt đầu chạy dưới dạng một số nguyên dài không dấu.

- delayMicroseconds (số nguyên): Trì hoãn thực thi chương trình trong (số
nguyên) micro giây.1
2.2.2. Tổng quan về Module L298
a. Giới thiệu sơ lược về Module L298
Module cầu H sử dụng IC L298 là một Module phổ biến và thông dụng, được
ứng dụng rất nhiều vào các sản phẩm: điều khiển xe robot, điều khiển cánh tay robot,
điều khiển động cơ bước, động cơ DC. Cung cấp điện áp cho hoạt động của động cơ
DC hay động cơ bước loại vừa. Trong đề tài này Module L298 được Arduino điều
khiển cho việc đóng/mở cổng tại bãi đỗ xe thông minh.
b. Thông số kĩ thuật
Điện áp điều khiển +5V ~ 12V
Dòng tối đa cho mỗi cầu H 2A (=> 2A cho mỗi motor )
Điện áp của tín hiệu điều khiển +5V ~ 7V
Dòng tín hiệu điều khiển 0 ~ 36 mA
Công suất hao phí 20W (khi nhiệt độ T = 75 độ C)
Nhiệt độ cho phép -25 đến 130 độ C
Bảng 2.1 Thông số kỹ thuật mạch cầu H – L298

Sơ đồ chân và chức năng của Module L298

1
Theo giáo trình Điều khiển và lập trình với Arduino UNO, Nhà xuất bản Giáo Dục Việt Nam, 2021
21
Hình 2.4 Module L298

• + 5V: cấp nguồn VDC


• + 12V: cấp nguồn VDC
• GND: chân âm hoặc nối đất
• Output A, Output B: chân kết nối với động cơ
• Enable A: Chân cho phép động cơ hoạt động hoặc dùng chân này để điều khiển
tốc độ động cơ bằng cách điều xung PWM, A Enable cho ngõ ra Output , B
Enable cho ngõ ra Output B.
• Logic Input: gồm các chân IN1, IN2, IN3, IN4 cặp IN1 và IN2 dùng để điều
khiển Output A, tương tự cho cặp IN3, IN4 cho Output B.
c. Nguyên lý hoạt động

22
Bốn chân INPUT: IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5, 7, 10,
12 của IC L298. Đây là các chân nhận tín hiệu điều khiển.
Bốn chân OUTPUT : OUT 1, OUT2, OUT3, OUT4 ( tương ứng với các chân
INPUT) được nối với các chân 2, 3, 13, 14 của IC L298.
Hai chân ENA và ENB dùng để điều khiển mạch cầu H trong IC L298. Nếu ở
mức logic “1”( đối với nguồn 5V) cho phép mạch cầu H hoạt động, nếu ở mức logic
“0” thì mạch cầu H không hoạt động.
➢ Khi ENA = 0: Động cơ không quay với mọi đầu vào.
➢ Khi ENA = 1: + INT1 = 1; INT2 = 0: Động cơ quay thuận.
➢ Khi ENA = 1: + INT1 = 0; INT2 = 1: Động cơ quay nghịch.
➢ Khi ENA = 1: + INT1 = 0; INT2 = 0: Động cơ dùng ngay tức thì
2.3. Mô hình hóa động cơ bước
Chọn động cơ bước là động cơ có momen lớn và ổn định, điều khiển đơn
giản chiều quay , tốc độ. Hoạt động bền bỉ, tin cậy do ít bị hỏng do quá tải. Có khả
năng điều chỉnh chính xác vịt rí với chế độ vi bước (1/2 , 1/4 , 1/8 , 1/16 góc bước),
có khả năng điều khiển tốc độ linh hoạt dựa trên tần số cấp xung vào driver, có
khả năng hãm lại khi sự cố mất điện => thích hợp với yêu cầu điều khiển chính
xác, điều khiển tốc độ và chiều quay, momen lớn ở mọi tốc độ.

Hình 2.5 Mạch mô hình động cơ bước

Động cơ bước được mô tả bởi phương trình vi phân:

23
𝐿𝑑𝑖𝑎
Va = Ria + – KmWmsin(Nrθm) (2.1)
𝑑𝑡

𝐿𝑑𝑖𝑎
Va = Ria + – KmWmsin(Nrθm) (2.2)
𝑑𝑡

𝐿𝑑𝑖𝑏
Vb = Rib + – (KmWmsin(Nrθm +90) (2.3)
𝑑𝑡

Laplace ta được:
𝑁𝑟θ(s)
Va(s) = RIa(s) + LSIa(s) – KmSθ(s)
𝑆 2 +𝑁𝑟θ(s)2

𝑁𝑟θ(s)
Vb(s) = RIb(s) + LSIb(s) – KmSθ(s)
𝑆 2 +𝑁𝑟θ(s)2

𝑁𝑟θ(s)
𝑉𝑎(𝑠)+𝐾𝑚𝑆θ(s) 2
𝑆2 +(𝑁𝑟θ(s))
 Ia(s) = (2.4)
𝑅+𝐿𝑆

𝑆
𝑉𝑏(𝑠)+𝐾𝑚𝑆θ(s) 2
2
𝑆 +(𝑁𝑟θ(s))
Ib(s) = (2.5)
𝑅+𝐿𝑆

Trong đó:
Ia và Ib là dòng điện của pha a và pha b (A).
Va và Vb là điện áp của pha a và pha b (V)
R là điện trở trong mỗi pha của động cơ(Ω).
L là cảm kháng trong mỗi pha của động cơ
H) Nr là số cực stator của động cơ,
Km là momen xoắn của động cơ,
Wm là tốc độ góc của rotor (rad/s)
θm là góc quay của rotor (rad),
TL là momen tải (Nm),
J là momen quán tính (kg.m2),

24
B là hệ số ma sát nhớt của giảm trấn (Nms/R).
2.4. Xử lý ảnh và những khái niệm cơ bản về ảnh số
2.4.1. Pixel
Một bức ảnh hay một bức tranh ta nhìn thấy bằng mắt thường là một sự liên
tục về không gian cũng như độ sáng. Khi kỹ thuật số được ứng dụng vào lĩnh vực
nhiếp ảnh, rất nhiều khái niệm mới đã được ra đời.
Kỹ thuật số là một kỹ thuật xử lý rời rạc trên máy tính, kỹ thuật này chỉ áp
dụng đối với các bit (các con số), chính vì vậy các bức ảnh liên tục về không gian và
độ sáng cần phải được “số hóa”. Số hoá ảnh thực chất là sự biến đổi gần đúng một
ảnh liên tục thành một tập điểm rời rạc phù hợp với ảnh thật về vị trí (không gian) và
độ sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt
người không thể phân biệt được ranh giới giữa chúng. Chính vì vậy, khi chúng ta
nhìn một bức tranh là tập hợp của rất nhiều điểm rời rạc, chúng ta sẽ có cảm giác đó
là một bức ảnh liên tục. Mỗi một điểm như vậy gọi là một điểm ảnh (PEL: Picture
Element) hay gọi tắt là Pixel [3]. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với
cặp tọa độ (x, y).
Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc
màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích
hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu)
của ảnh số gần như ảnh thật.
2.4.2. Độ xám
Mỗi một điểm ảnh (Pixel) sẽ được đặc trưng bởi hai tham số chính về không
gian và độ xám. Trong khuôn khổ ảnh hai chiều, tham số không gian được xác định
bởi tọa độ Đề-các (x,y) của điểm ảnh đó. Tham số độ xám được xác định là giá trị
cường độ sáng tại điểm đó. Máy tính thường sử dụng đơn vị byte (8bit) để biểu diễn
giá trị số. Chính vì vậy, giá trị lớn nhất của độ xám thường được sử dụng rộng rãi
nhất là 2^8 = 256 tương đương với việc cường độ sáng của các điểm sẽ nằm trong

25
dải từ 0 đến 256, khi đó, máy tính sẽ dùng 8bit = 1byte để biểu diễn giá trị cường độ
sáng. Ngoài ra, còn có các giá trị cường độ sáng lớn nhất khác: 16,32,64,128,…
Thông thường, ta sẽ làm quen với 3 loại ảnh sau dựa vào cấu trúc cũng như độ
xám điểm ảnh:
- Ảnh màu: là ảnh mà màu của các điểm ảnh được tạo nên bởi sự pha trộn 3
màu cơ bản (Red, Blue, Green) với các tỉ lệ cường độ sáng khác nhau. Với mỗi một
màu cơ bản, người ta sẽ sử dụng một byte để biểu diễn cường độ sáng, chính vì vậy
cần 3 byte (24bit) để biểu diễn một điểm ảnh. Khi đó giá trị màu sẽ nhận giá trị từ 0
cho đến 2^24 (vào khoảng ≈16,7 triệu màu).
- Ảnh đen trắng: là ảnh mà mỗi điểm ảnh chỉ có hai màu đen, trắng (không
chứa màu khác) với cường độ sáng (mức xám) ở các điểm ảnh có thể sử dụng nhiều
bit để biểu diễn các giá trị khác nhau.
- Ảnh nhị phân: là ảnh chỉ có hai màu đen, trắng (không chứa màu khác) với
cường độ sáng chỉ có 2 giá trị duy nhất 0 và 255. Người ta dùng duy nhất 2 bit để
biểu diễn độ xám, bit “1” tương ứng điểm ảnh đen (0), bit “0” tương ứng điểm ảnh
trắng (255).
2.2.3. Cấu trúc ảnh
Cấu trúc của một ảnh IplImage [4] trong OpenCV bao gồm các thông số
chính:
| -- nChannels; số kênh ảnh (1,2,3,4)
| -- depth; độ sâu ảnh (bits):
| // IPL_DEPTH_8U, IPL_DEPTH_8S,
| // IPL_DEPTH_16U,IPL_DEPTH_16S,
| // IPL_DEPTH_32S,IPL_DEPTH_32F,
| // IPL_DEPTH_64F
| -- width; chiều rộng ảnh
| -- height; chiều dài ảnh

26
| -- imageData; con trỏ truy nhập dữ liệu ảnh
|
| -- dataOrder; 0 – các kênh màu đan xen
| 1 – các kênh màu độc lập
|
| -- origin; 0 – gốc ảnh tại vị trí trên cùng bên trái
| 1 – gốc ảnh dưới cùng bên trái
| -- widthStep; kích thước sắp xếp hàng (bytes)
| -- imageSize; kích thước ảnh = height*widthStep
| -- roi; vùng ảnh xét
| -- imageDataOrigin; con trỏ tới vùng ảnh không được sắp xếp
| -- align ; sắp xếp cột 4-8 byte
| --colorModel[4]; kiểu màu
Khi sử dụng bộ thư viện OpenCV, các ảnh được lưu trữ và truy nhập các phần
tử điểm ảnh dưới dạng ma trận:

Hình1 cấu
Hình 2.6 Cấu
trúc trúc
dữ liệu liệu ảnh
dữ ảnh

27
2.2.4. Nhiễu ảnh
Trước khi xem xét chi tiết các kỹ thuật xử lý ảnh cơ bản, chúng ta cần phân biệt
các loại nhiễu hay can thiệp trong quá trình xử lý ảnh. Trên thực tế tồn tại nhiều
loại nhiễu, tuy nhiên người ta thường xem xét 3 loại nhiễu chính: nhiễu cộng, nhiễu
nhân và nhiễu xung:
• Nhiễu cộng
Nhiễu cộng thường phân bố khắp ảnh. Nếu gọi ảnh quan sát (ảnh thu được) là
Xqs, ảnh gốc là Xgốc, nhiễu là η, ảnh thu được có thể biểu diễn bởi:
Xqs = Xgốc + η (2.1)
• Nhiễu nhân
Nhiễu nhân cũng thường phân bố khắp ảnh. Nếu gọi ảnh quan sát (ảnh thu được)
là Xqs, ảnh gốc là Xgốc, nhiễu là η, ảnh thu được có thể biểu diễn bởi:
Xqs = Xgốc * η (2.2)
• Nhiễu xung
Khác với nhiễu nhân và nhiễu cộng, nhiễu xung thường chỉ gây đột biến tại một số
điểm ảnh. Nhiễu xung là một loại nhiễu khá đặc biệt có thể sinh ra bởi nhiều lý do
khác nhau chẳng hạn: lỗi truyền tín hiệu, lỗi bộ nhớ, hay lỗi định thời trong quá
trình lượng tử hóa.
2.2.5. Các kỹ thuật xử lý ảnh
a. Khái niệm về góc nghiêng
Một bức ảnh chụp thông thường có kích thước dưới dạng hình chữ nhật, chủ
thể của bức ảnh thường được coi là thẳng đứng khi hướng chính của chủ thể song
song với cạnh đứng của bức ảnh. Tuy nhiên không phải lúc nào, ta cũng có thể chụp
được những bức ảnh "thẳng" như mong muốn. Chính vì vậy, khái niệm góc nghiêng
đã ra đời.

28
Góc nghiêng của bức ảnh là góc hợp bởi hướng chính của chủ thể trong bức
ảnh với cạnh thẳng đứng của bức ảnh. Khi chủ thể trong bức ảnh hướng theo một
phương khác phương thẳng đứng thì lúc đó chúng ta gọi là bức ảnh tồn tại góc
nghiêng. Góc nghiêng là một khái niệm khá phổ biến trong toán học và những môn
khoa học khác. Góc nghiêng sẽ gây sai lệch khi chúng ta tiến hành định vị và nhận
dạng thông tin trên bức ảnh. Chính vì vậy, việc hiệu chỉnh góc nghiêng của bức ảnh
sẽ nâng cao độ chính xác và hiệu quả của hệ thống.
Trước khi tiến hành hiệu chỉnh ảnh, chúng ta cần tìm hiểu các thuật toán quan
trọng sẽ được sử dụng để hiệu chỉnh ảnh.
b. Thuật toán Otsu
Lấy ngưỡng là một phương pháp được sử dụng rất nhiều trong kỹ thuật xử lý
ảnh. Tác dụng chính của lấy ngưỡng là giúp biến đổi ảnh xám trở thành nhị phân. Có
rất nhiều phương pháp lấy ngưỡng được áp dụng giúp việc lấy ngưỡng hiệu quả,
trong đó, thuật toán Otsu được sử dụng rộng rãi nhất do sự chính xác, hiệu quả do
thuật toán tính ngưỡng T một cách tự động (adaptive) dựa vào giá trị điểm ảnh của
ảnh đầu vào, nhằm thay thế cho việc sử dụng ngưỡng cố định (fixed hay const). Đối
với các ảnh đầu vào khác nhau, thuật toán sẽ tính toán được các giá trị ngưỡng T
khác nhau.
Thuật toán Otsu [16] đầu tiên sẽ tính toán tần suất và xác suất xuất hiện của
mỗi một giá trị độ xám của điểm ảnh. Với mỗi giá trị ngưỡng T, thuật toán tiến hành
phân hoạch ảnh thành 2 nhóm điểm ảnh:
N1: các điểm ảnh có độ xám bé hơn T
N2: các điểm ảnh có độ xám lớn hơn T
Tổng xác suất xuất hiện của mỗi giá trị độ xám (xác suất tích lũy) trong mỗi
nhóm điểm ảnh được tính toán bởi công thức:
qN1(T) = ∑𝑇𝑖=1 𝑃(𝑖) (2.6)
qN2(T) = ∑𝑇𝑖=𝑇+1 𝑃(𝑖) (2.7)

29
Và giá trị trung bình của chúng được cho bởi:
𝑖 𝑃(𝑖)
μ1 (T) = ∑𝑇𝑖=1 (2.8)
𝑞𝑁1(𝑇)
𝑖 𝑃(𝑖)
μ2 (T) = ∑𝑁𝐺
𝑖=𝑇+1 (2.9)
𝑞𝑁2(𝑇)

Trong đó:
T là mức ngưỡng của giá trị độ xám
P(i) là xác suất xuất hiện của độ xám i
NG là độ xám giới hạn của ảnh (ảnh 3bit => 256)
Từ giá trị tủng bình và xác suất tích lũy trong mỗi nhóm, thuật toán tính toán
giá trị phương sai riêng từng nhóm:
σN12 (T) (2.10)

σN22 (T) = (2.11)


The weighted within-class variance (tạm dịch: phương sai có trọng số trong nhóm
điểm ảnh) được xác định bởi tổng của các tích số xác suất tích lũy với phương sai
riêng của từng nhóm điểm ảnh:
σw2(T) = [qN1(T) * σN12(T)] + [ qN2(T) * σN22(T)] (2.12)
The between-class variance (tạm dịch: phương sai giữa các nhóm điểm ảnh) dễ dàng
được tính bởi công thức:
σb2(T) = σ2 – σw2(T) (2.13)
σb2(T) = qN1(T) * [ μ1(T) - μ ]2 + qN2(T) * [ μ2(T) - μ ]2 (2.14)
hay: σb2(T) = qN1(T) * qN1(T) * [ μ1(T) – μ2(T) ]2 (2.15)
Thuật toán sẽ chạy trên toàn dải của giá trị ngưỡng [1-NG], mức ngưỡng tối
ưu nhất là mức ngưỡng cho giá trị The weighted within-class variance σw2(T) nhỏ
nhất, hay giá trị The between-class variance σb2(T) lớn nhất.
c. Thuật toán Canny

30
Đây là một thuật toán được phát triển khá sớm nhưng cho đến nay vẫn là một trong
những kỹ thuật được sử dụng rộng rãi, cho các kết quả tương đối tốt, có khả năng đưa
ra đường biên mảnh, phân biệt được điểm biên với điểm nhiễu.

Hình 2.7 Kết quả tìm biên của Canny

Thuật toán Canny gồm năm bước:


+ Bước 1: Làm trơn ảnh. Chúng ta sử dụng
Tính I  H, với:
2 4 5 4 2
4 9 12 9 4
1
H=
159
5 12 15 12 5
4 9 12 9 4
[2 4 5 4 2]
Gọi G là kết quả lọc nhiễu: G = I x H
+ Bước 2: Tính gradient của ảnh, kết quả đặt vào Gx , Gy

31
+ Bước 3: Tính độ lớn và hướng của gradient tại mỗi điểm (i,j) của ảnh. Độ lớn G(i,j)
tại điểm (i,j) được tính dựa vào định lý pytago

Ngoài ra, hướng của vecto gradient được tính theo công thức:

Với atan2 là hàm arctan với 2 biến nhằm nhận thêm thông tin hướng và xác định góc
ở khoảng 360o , hàm atan2 có thể được định nghĩa như sau:

Sau đó hướng gradient được làm tròn thành bốn góc 0˚, 45˚, 90˚ và 135˚ đại diện cho
chiều dọc, ngang và hai chiều chéo.

+ Bước 4: Bước này loại bỏ những điểm không phải là cực đại địa phương để xóa bỏ
những điểm không thực sự là biên, bước này sẽ giúp biên mỏng hơn. Xét (i,j), (i,j) là
hướng gradient tại (i,j). I1, I2 là hai điểm lân cận của (i,j) theo hướng . Theo định nghĩa
điểm biên cục bộ thì (i,j) là biên nếu I(i,j) cực đại địa phương theo hướng gradient nghĩa
là nếu I(i,j) > I1 và I(i,j) > I2 thì mới giữ lại I(i,j) để xét tiếp trong bước sau.
+ Bước 5: Tại bước này, Canny sử dụng hai ngưỡng cao và thấp. Đầu tiên, Canny lọc
các điểm được giữ lại sử dụng ngưỡng cao, chỉ những điểm có độ lớn gradient cao hơn
ngưỡng này mới được chọn. Từ những điểm được chọn Canny dò theo biên sử dụng
32
hướng của gradient tại các điểm. Khi thực hiện việc dò theo biên, Canny sử dụng ngưỡng
thấp để xác định điểm dừng của biên (nếu giá trị điểm tiếp theo thấp hơn ngưỡng này,
việc dò theo biên này sẽ kết thúc)
Các kỹ thuật thông thường để có được ảnh biên thường sử dụng một ngưỡng, điểm
ảnh có độ lớn gradien lớn hơn ngưỡng này sẽ được chọn làm biên. Tuy nhiên các kỹ
thuật sử dụng một ngưỡng không thể vừa chọn biên chính xác và mảnh như Canny, và
thông thường sẽ có quá nhiều biên giả hoặc xác định thiếu biên. Đây chính là một trong
những điều khiến Canny vẫn là kỹ thuật dò biên tốt nhất hiện nay.
2.2.6. Nhận dạng kí tự quang học – thư viện Tesseract – OCR
Nhận dạng ký tự quang học hoặc trình đọc ký tự quang học ( OCR ) là chuyển
đổi điện tử hoặc cơ học của hình ảnh của văn bản được đánh máy, viết tay hoặc in
thành văn bản được mã hóa bằng máy, cho dù từ tài liệu được quét, ảnh tài liệu, ảnh
cảnh (ví dụ: văn bản trên các biển hiệu và biển quảng cáo trong một bức ảnh phong
cảnh) hoặc từ văn bản phụ đề được đặt chồng lên một hình ảnh (ví dụ: từ một chương
trình truyền hình).
Được sử dụng rộng rãi như một hình thức nhập dữ liệu từ các bản ghi dữ liệu
giấy in - cho dù là tài liệu hộ chiếu, hóa đơn, sao kê ngân hàng , biên lai vi tính hóa,
danh thiếp, thư, bản in dữ liệu tĩnh hoặc bất kỳ tài liệu phù hợp nào - đó là một
phương pháp phổ biến để số hóa tài liệu in văn bản để chúng có thể được chỉnh sửa,
tìm kiếm, lưu trữ bằng điện tử, hiển thị trực tuyến và được sử dụng trong các quy
trình máy như điện toán nhận thức , dịch máy , chuyển văn bản thành giọng nói (trích
xuất) , dữ liệu chính và khai thác văn bản . OCR là một lĩnh vực nghiên cứu về nhận
dạng mẫu , trí tuệ nhân tạo và thị giác máy tính .
Các phiên bản đầu tiên cần được đào tạo với hình ảnh của từng ký tự và làm
việc trên một phông chữ tại một thời điểm. Các hệ thống tiên tiến có khả năng tạo ra
độ chính xác nhận dạng cao cho hầu hết các phông chữ hiện đã phổ biến và có hỗ trợ
nhiều đầu vào định dạng tệp hình ảnh kỹ thuật số. Một số hệ thống có khả năng tái

33
tạo đầu ra có định dạng gần giống với trang gốc bao gồm hình ảnh, cột và các thành
phần phi văn bản khác.
Sau đây là các bước nhận dạng kí tự quang học:
a) Tiền xử lý
Phần mềm OCR thường "xử lý trước" hình ảnh để cải thiện cơ hội nhận dạng
thành công. Các kỹ thuật bao gồm:
- Bàn nghiêng – Nếu tài liệu không được căn chỉnh đúng cách khi quét, tài liệu
có thể cần được nghiêng một vài độ theo chiều kim đồng hồ hoặc ngược chiều
kim đồng hồ để làm cho các dòng văn bản nằm ngang hoặc dọc hoàn hảo.
- Despeckle – loại bỏ các điểm tích cực và tiêu cực, làm mịn các cạnh
- Nhị phân hóa – Chuyển đổi hình ảnh từ màu hoặc thang độ xám thành đen
trắng (được gọi là " hình ảnh nhị phân " vì có hai màu). Nhiệm vụ nhị phân
hóa được thực hiện như một cách đơn giản để tách văn bản (hoặc bất kỳ thành
phần hình ảnh mong muốn nào khác) khỏi nền. Bản thân nhiệm vụ nhị phân
hóa là cần thiết vì hầu hết các thuật toán nhận dạng thương mại chỉ hoạt động
trên các hình ảnh nhị phân vì nó được chứng minh là đơn giản hơn để làm như
vậy. Ngoài ra, hiệu quả của bước nhị phân hóa ảnh hưởng đáng kể đến chất
lượng của giai đoạn nhận dạng ký tự và các quyết định cẩn thận được đưa ra
trong việc lựa chọn nhị phân hóa được sử dụng cho một loại hình ảnh đầu vào
nhất định; vì chất lượng của phương pháp nhị phân hóa được sử dụng để thu
được kết quả nhị phân phụ thuộc vào loại hình ảnh đầu vào (tài liệu được quét,
hình ảnh văn bản cảnh , tài liệu lịch sử xuống cấp, v.v.).
- Loại bỏ dòng - Dọn dẹp các hộp và dòng không phải glyph
- Phân tích bố cục hoặc "phân vùng" – Xác định các cột, đoạn văn, chú thích,
v.v. dưới dạng các khối riêng biệt. Đặc biệt quan trọng trong bố cục nhiều cột
và bảng .

34
- Phát hiện dòng và từ – Thiết lập đường cơ sở cho từ và hình dạng ký tự, tách
các từ nếu cần.
- Nhận dạng tập lệnh – Trong các tài liệu đa ngôn ngữ, tập lệnh có thể thay đổi
ở cấp độ từ và do đó, việc xác định tập lệnh là cần thiết trước khi có thể gọi
OCR phù hợp để xử lý tập lệnh cụ thể.
- Cách ly ký tự hoặc "phân đoạn" – Đối với OCR cho mỗi ký tự, nhiều ký tự
được kết nối do tạo tác hình ảnh phải được tách biệt; các ký tự đơn lẻ bị chia
thành nhiều phần do tạo tác phải được kết nối.
- Bình thường hóa tỷ lệ khung hình và tỷ lệ
- Việc phân đoạn các phông chữ có độ cao cố định được thực hiện tương đối
đơn giản bằng cách căn chỉnh hình ảnh thành một lưới thống nhất dựa trên nơi
mà các đường lưới dọc sẽ ít giao nhau nhất với các vùng màu đen. Đối với
phông chữ tỷ lệ , cần có các kỹ thuật phức tạp hơn vì khoảng trắng giữa các
chữ cái đôi khi có thể lớn hơn khoảng trắng giữa các từ và các đường thẳng
đứng có thể giao nhau nhiều hơn một ký tự.
b) Nhận dạng văn bản
Có hai loại thuật toán OCR cốt lõi cơ bản, có thể tạo ra một danh sách xếp
hạng các ký tự ứng cử viên.

- Đối sánh ma trận liên quan đến việc so sánh hình ảnh với hình tượng được lưu
trữ trên cơ sở từng pixel; nó còn được gọi là "so khớp mẫu", " nhận dạng mẫu
" hoặc " tương quan hình ảnh ". Điều này phụ thuộc vào hình tượng đầu vào
được tách biệt chính xác khỏi phần còn lại của hình ảnh và trên hình tượng
được lưu trữ ở phông chữ tương tự và ở cùng tỷ lệ. Kỹ thuật này hoạt động tốt
nhất với văn bản đánh máy và không hoạt động tốt khi gặp phông chữ mới.
Đây là kỹ thuật mà OCR dựa trên tế bào quang điện vật lý ban đầu được triển
khai, thay vì trực tiếp.

35
- Tính năng trích xuất tính năng phân tách glyphs thành các "tính năng" như
đường, vòng khép kín, hướng đường và giao điểm đường. Các tính năng trích
xuất làm giảm kích thước của biểu diễn và làm cho quá trình nhận dạng tính
toán hiệu quả. Các tính năng này được so sánh với một đại diện giống như
vectơ trừu tượng của một ký tự, có thể giảm xuống một hoặc nhiều nguyên
mẫu glyph. Các kỹ thuật chung về phát hiện tính năng trong thị giác máy tính
có thể áp dụng cho loại OCR này, thường thấy trong nhận dạng chữ viết tay
"thông minh" và thực sự là phần mềm OCR hiện đại nhất. [24] Các bộ phân
loại hàng xóm gần nhất như thuật toán k-hàng xóm gần nhấtđược sử dụng để
so sánh các tính năng hình ảnh với các tính năng glyph được lưu trữ và chọn
kết quả phù hợp nhất.
Phần mềm như Cuneiform và Tesseract sử dụng cách tiếp cận hai lượt để nhận
dạng ký tự. Lượt thứ hai được gọi là "nhận dạng thích ứng" và sử dụng các hình
dạng chữ cái được nhận dạng với độ tin cậy cao ở lượt đầu tiên để nhận dạng tốt
hơn các chữ cái còn lại ở lượt thứ hai. Điều này thuận lợi cho các phông chữ khác
thường hoặc bản quét chất lượng thấp trong đó phông chữ bị biến dạng (ví dụ:
mờ hoặc mờ).
Phần mềm OCR hiện đại bao gồm Google Docs OCR, ABBYY FineReader
và Transym. Những công ty khác như OCRopus và Tesseract sử dụng mạng thần
kinh được đào tạo để nhận dạng toàn bộ dòng văn bản thay vì tập trung vào các
ký tự đơn lẻ.
Một kỹ thuật mới được gọi là OCR lặp lại tự động cắt tài liệu thành các phần
dựa trên bố cục trang. OCR được thực hiện trên các phần riêng lẻ bằng cách sử
dụng các ngưỡng cấp độ tin cậy của ký tự thay đổi để tối đa hóa độ chính xác của
OCR cấp trang. Bằng sáng chế từ Văn phòng Bằng sáng chế Hoa Kỳ đã được cấp
cho phương pháp này

36
Kết quả OCR có thể được lưu trữ ở định dạng ALTO được tiêu chuẩn hóa ,
một lược đồ XML chuyên dụng do Thư viện Quốc hội Hoa Kỳ duy trì . Các định
dạng phổ biến khác bao gồm hOCR và PAGE XML.
Để biết danh sách phần mềm nhận dạng ký tự quang học, hãy xem So sánh
phần mềm nhận dạng ký tự quang học .
c) Hậu xử lý
Độ chính xác của OCR có thể tăng lên nếu đầu ra bị hạn chế bởi một từ vựng
– danh sách các từ được phép xuất hiện trong tài liệu. Ví dụ, đây có thể là tất cả
các từ trong tiếng Anh hoặc một từ vựng kỹ thuật hơn cho một lĩnh vực cụ thể.
Kỹ thuật này có thể gặp vấn đề nếu tài liệu chứa các từ không có trong từ điển,
chẳng hạn như danh từ riêng . Tesseract sử dụng từ điển của nó để tác động đến
bước phân đoạn ký tự nhằm cải thiện độ chính xác.
Luồng đầu ra có thể là luồng văn bản thuần túy hoặc tệp ký tự, nhưng các hệ
thống OCR tinh vi hơn có thể giữ nguyên bố cục ban đầu của trang và tạo ra,
chẳng hạn như tệp PDF có chú thích bao gồm cả hình ảnh gốc của trang và biểu
diễn văn bản có thể tìm kiếm .
"Phân tích lân cận" có thể sử dụng tần suất xuất hiện đồng thời để sửa lỗi, bằng
cách lưu ý rằng một số từ thường được nhìn thấy cùng nhau. Ví dụ: "Washington,
DC" thường phổ biến hơn nhiều trong tiếng Anh so với "Washington DOC".
Kiến thức về ngữ pháp của ngôn ngữ đang được quét cũng có thể giúp xác
định xem một từ có khả năng là động từ hay danh từ, chẳng hạn, cho phép độ
chính xác cao hơn.
Thuật toán Khoảng cách Levenshtein cũng đã được sử dụng trong xử lý hậu
kỳ OCR để tiếp tục tối ưu hóa kết quả từ API OCR.
d) Tối ưu hóa
Trong những năm gần đây, các nhà cung cấp công nghệ OCR lớn đã bắt đầu tinh
chỉnh các hệ thống OCR để xử lý hiệu quả hơn các loại đầu vào cụ thể. Ngoài từ

37
vựng dành riêng cho ứng dụng, có thể có hiệu suất tốt hơn bằng cách tính đến các
quy tắc kinh doanh, biểu thức chuẩn hoặc thông tin phong phú có trong hình ảnh
màu. Chiến lược này được gọi là "OCR hướng ứng dụng" hoặc "OCR tùy chỉnh" và
đã được áp dụng cho OCR của biển số xe , hóa đơn , ảnh chụp màn hình , thẻ ID ,
giấy phép lái xe và sản xuất ô tô .

2.5. Các khối nguồn


2.5.1. Nguồn cấp cho board mạch Arduino
Do động cơ bước và mạch cầu H sử dụng nguồn từ 5 ~ 12 V nên nhóm đã lựa
chọn đầu chuyển nguồn Adapter HUAWEI 12V 2A

Hình 2.8 Nguồn Adapter HUAWEI 12V 2A

Thông số kĩ thuật
Đầu vào 100-240V. 50/60HZ 0.5MAX
Đầu ra 12V = = 2A
Cổng giao tiếp DC 5.5 x 2.1mm
Chiều dài 150CM
Bảng 2.2 Thông số kĩ thuật nguồn chuyển đổi
38
2.5.2. Nguồn cấp cho LED
Nguồn cấp cho LED được lấy trực tiếp từ nguồn điện 220V – 50Hz

39
CHƯƠNG III: THIẾT KẾ HỆ THỐNG
3.1. Thiết kế mô hình hệ thống cơ khí
3.1.1. Mục tiêu và yêu cầu thiết kế
Mụ đích của máy chấm bài thi tự động này là phải cấp từng bài thi xuống khay,
di chuyển khya đến các vị trí cần thiết như trước camera và ra ngoài sau khi chấm
bài thi xong. Máy có khả năng tự động hóa cao trong quá trình hoạt động , cụ thể là
vừa chấm xong bài thi có thể đưa bài thi ra ngoài buồng máy, các tính năng tốt, làm
việc ổn định, môi trường sạch đảm bảo sạch sẽ cho các bài thi sau khi hoàn thành
chấm điểm. Vận hành bằng nút nhấn và có tính tự động hóa cao.
Yêu cầu của máy là có kết cấu vững chắc, bền, đẹp, làm việc thuận tiện, sạch
sẽ.
Kết cấu chung về phần cơ khí của thiết bị chấm bài thi tự động bao gồm: Thân
máy và đế máy, các trục truyền chuyển động
3.1.2. Thân máy và đế máy
Thân máy và đế máy thường được chế tạo bằng chi tiết cứng cáp nhưng vẫn
giữ được tính thẩm mỹ như nhôm định hình kết hợp với mica trong suốt và đều được
kiểm tra sau khi đúc để đả bảo không có khuyết tật nào khi đúc.
Bên thân máy có chưa hệ thống điều khiển, động cơ của trục chính và rất nhiều
hệ thống khác.
Yêu cầu của thân máy bao gồm:
• Phải có độ vững cao khi máy hoạt động.
• Hoạt động trơn tru, không bị rung động .
• Phải có nhiệt độ ổn định khi máy chạy thời gian dài.
Mục đích phải đạt được khi chế tạo thân máy:
• Phải đảm bảo độ chính xác khi chế tạo, đúng với bản vẽ.
• Quy trình hoạt động chuẩn xác để không xảy ra lỗi khi vận hành và điều chỉnh.
• Đế máy đỡ toàn bộ phần máy bên trên , tạo sự ổn định và cân bằng cho máy.
40
3.1.3. Các trục truyền chuyển động
Băng dẫn hướng: Hệ thống thanh trượt dẫn hướng có nhiệm vụ dẫn hướng
huyển động theo phương ngang của trục chính khi đưa bài thi đến các vị trí cần thiết
như trước camera và đưa ra ngoài sau khi hoàn thành chấm điểm trong buồn máy.
Yêu cầu của hệ thống thanh trượt phải thẳng, có khả năng tải ca, độ cứng vững
tốt, không có hiện tượng dính, trơn khi trượt và máy hoạt động.

Hình 3.1 Trục truyền chuyển động

Trục vít me, đai ốc:


• Trong máy công cụ điều khiển số, người ta thường sử dụng hai dạng vít me cơ
bản đó là: Vít me đai ốc thường và vít me đai ốc bi. Ở đây, nhóm đã chọn trục
vít me đai ốc thường

Hình 3.2 Truyền động trục Vít me M8

Vít me đai ốc thường này là dạng tiếp xúc trực tiếp mặt với đai ốc có dnagj
tiếp xúc trượt

41
Các xích động: Tất cả các truyền động đến từng cơ cấu chấp hành của máy
điều khiển đều dùng nguồn động lực riêng biệt của các động cơ được phân bổ làm
nhiệm vụ đó
Thông thường các bước của trục vít me được tính toán với độ chính xác cao
khi di chuyển và hoạt động
3.1.4. Lựa chọn vật liệu chế tạo khung máy
Để đáp ứng yêu cầu khung máy vững chắc và cân đối nhưng cần mang tính
thẩm mỹ và sạch sẽ khi làm việc. Nhóm em chọn nguyên vật liệu để chế tạo máy là
khung nhôm định hình 2020 và mica trong suốt để làm vỏ máy.
Nhôm định hình 2020 có những đặc tính sau:
• Bền , nhẹ được ứng dụng nhiều trong ngành công nghiệp xây dựng.
• Khả năng chịu lực tốt: Thanh nhôm định hình được sản xuất trên dây chuyền
và công nghệ hiện đại đạt tiêu chuẩn quốc tế, chính vì vậy nên thanh nhôm
định hình có khả năng chịu lực cực lớn. Sản phẩm có thể chịu được sức ép của
bão , gió, tác động mạnh mà không gây biến dạng cấu trúc như cong vênh, co
ngót… Đặc biệt vì được làm bằng chất liệu nhôm cao cấp nên thanh nhôm
định hình sẽ không bị han gỉ hoặc bị ăn mòn, bị oxy hóa … phù hợp với điều
kiện khí hậu khắc nghiệt của Việt Nam.
• Cách âm, cách nhiệt tốt: khả năng bền bỉ và công năng sử dụng đa dạng giúp
sản phẩm có thể kết hợp với các sản phẩm đặc thù để ngăn cản âm thanh tiếng
ồn hay cách nhiệt khi sử dụng trong mục đích đặc thù.
• Nhiều kiểu dáng, mẫu mã và màu sắc: Để phục phụ cho những nhu cầu khác
nhau của khách hàng nên thanh nhôm định hình công nghiệp được sản xuất
với rất nhiều kích thước nhau. Bên cạnh đó, màu sắc của nhôm cũng được đa
dạng để phù hợp cho các thiết bị và mang tính đồng bộ.
• Trọng lượng sản phẩm nhẹ: Mặc dù sản phẩm thanh nhôm định hình có khả
năng chịu lực tốt nhưng trọng lượng của sản phẩm cũng khá nhẹ, độ bền cao

42
bởi thiết kế của sản phẩm với những khoang rỗng cùng sống gia cố hợp lý nên
sử dụng vật liệu sẽ giảm tải được trọng lượng của toàn bộ sản phẩm.
• Tính thẩm mỹ cao: Thanh nhôm định hình được làm bằng chất liệu nhôm nên
mang đến cho sản phẩm bề mặt sáng bóng, sạch sẽ.
• Không cháy và không có khí độc: Nếu như đối với các sản phẩm khác rất có
thể sẽ dễ xảy ra tình trạng dễ chảy và sinh ra chất độc hại tác động xấu đến sức
khỏe. Ví dụ như các sản phẩm bằng nhựa khi trời nắng nóng sẽ xảy ra tình
trạng nóng chảy thì với sản phẩm thanh nhôm điều này hoàn toàn không xảy
ra, an toàn sản xuất, cho người tiêu dùng.
• Bảo vệ môi trường: Thanh nhôm định hình được sản xuất bằng nhôm tái sinh
nên sản phẩm có giá thành phù hợp. Bởi thanh nhôm dù tái sinh nhiều lần
nhưng sản phẩm sẽ vẫn giữ nguyên những đặc tính nổi bật của sản phẩm do
đó sản phẩm luôn đảm bảo thân thiện với môi trường.
• Có thể tái sử dụng, do đó tiết kiệm tối đa được chi phí.
3.1.5. Thiết kế truyền chuyển động và gá lắp trục động cơ vít-me chuyển động ngang

Hình 3.3 Lắp ráp trục động cơ Vitsme

43
Chọn băng dẫn hướng: Hệ thống thanh trượt dẫn hướng có nhiệm vụ dẫn ướng
cho các chuyển động. Yêu cầu của hệ thống thanh trượt phải thẳng, có khả năng tải
cao, độ cứng vững tốt, không có hiện tượng dính, trơn khi trượt.
Trên cơ sở lý thuyết, nhóm đã chọn gối đỡ 2 đầu, thanh dẫn hướng trục tròn
và trượt trong. Để hướng di chuyển được cố đinh, ta cần đặt thanh dẫn hướng và trục
vít me song song với nhau.
Đây là nhiệm vụ dẫn chuyển động cho bài thi di chuyển trong phạm vi 45 cm
nên thanh dẫn phải dài hơn 45 cm. Nên thanh dẫn hướng và trục vít me được chọn
có độ dài 50cm có sẵn trên thị trường.
Truyền chuyển động: để truyền chuyển động và chuyển động quay thành
chuyển động tịnh tiến theo phương ngang, ta sử dụng cơ cấu trục vít me, đai ốc.

Hình 3.4 Trục Vitsme + đai ốc T8

3.1.6. Thiết kế khay chứa giấy và hệ thống Module cấp bài thi
a) Khay chứa giấy
Khay chứa giấy được làm thủ công bằng các tấm mica trong suốt, tạo độ sạch
sẽ khi làm việc và có tính thẩm mỹ cao.
44
Máy bao gồm 2 khay chứa giấy: Khay chưa giấy trên (khay tiếp giấy) và khay
chứa giấy dưới để trên đường chạy của Vít me đai ốc, có thể hướng thẳng bài thi vào
camera phía trên.

Hình 3.5 Khay chưa giấy

b) Module cấp bài thi cho khay


Module này được thiết kế là một máng trượt có độ nghiêng 68 độ, mặt xốp
fomex ít ma sát giúp cho giấy trượt xuống dễ dàng hơn khi chúng ta bỏ giấy vào.
Đồng thời phía sau là phần để bộ điều khiển sao cho gọn gàng và máy có tính
thẩm mỹ, không bị rối mắt.

45
Hình 3.6 Module trượt cấp bài thi vào khay

3.2. Thiết kế hệ thống chấm bài thi bằng OpenCV


3.2.1. Thuật toán nhận dạng phiếu thi

46
Hình 3.7 Lưu đồ tiến trình nhận dạng phiếu thi

Tiền xử lý: Chuyển ảnh phiếu thi đã xử lý từ bước tìm phiếu thi sang ảnh xám.
Để nâng cao chất lượng ảnh, ta tiếp tục thực hiện lọc trung vị, lọc nhiễu Guassian
cho ảnh xám.
Cân bằng độ sáng của ảnh: việc bố trí nguồn sáng trong hệ thống tời giấy tích
hợp camera có vai trò rất quan trọng trong việc lấy mẫu. Để có thể nhận dạng phiếu
thi, các vùng chứa thông tin trên phiếu thi thì mẫu cần phải đảm bảo:
• Phiếu thi và nền phải có độ tương phản cao

47
• Nguồn sáng phải đặt ở vị trí thích hợp. Vì các vùng thí sinh tô bằng chì rất dễ
bị phản xạ ánh sáng, nếu ánh sáng đến các vùng này phản xạ vào camera thì
ảnh thu được tại các điểm này sẽ có màu trắng, việc nhận dạng sẽ không còn
chính xác nữa.
Với hệ thống tời giấy đơn giản, ánh sáng phân bố trên ảnh thường không đồng
đều, do đó nếu lấy ngưỡng tự động thì sẽ gây ra sai lệch thông tin, dẫn đến việc nhận
dạng các vùng chứa thông tin không chính xác, các vùng tối do thiếu ánh sáng có thể
bị hiểu nhầm là vùng thí sinh tô đen.
Vì vậy việc áp dụng thuật toán cân bằng độ sáng của phiếu thi có vai trò rất quan
trọng để thực hiện các bước tiếp theo. Thuật toán này được thực hiện bằng cách:
• Chia ảnh gốc cho ảnh của phép đóng (closing operator) của ảnh đó. Kết quả
của phép chia này là một ảnh với giá trị các điểm ảnh có giá trị thực.
• Chuẩn hóa (normalize) ma trận ảnh thực trên. Để hiển thị và xử lý ảnh ở các
bước tiếp theo, ta cần phải lượng tử hóa giá trị của các điểm ảnh về mức 0 – 255
(mức 0 tương ứng với giá trị nhỏ nhất, 255 ứng với giá trị lớn nhất).
Lấy ngưỡng tự động bằng thuật toán Threshold từ ảnh qua bước tiền xử lý trên

48
Hình 3.8 Hình ảnh bài thi sau khi được Canny ảnh

Tìm vùng chưa thông tin trên phiếu thi: các vùng chứa thông tin trên phiếu thi
là mã đề, số báo danh, trả lời có đặc điểm chung là nằm trong các khung hình chữ

49
nhật. Với kích thước phiếu thi chuẩn hóa ở độ phân giải 840x1188, các vùng này
phải cách biên trên của phiếu thi ít nhất là 150 pixel
Khoanh vùng chưa thông tin trên bài thi bằng lệnh Draw
3.2.2. Nhận dạng thông tin bài thi

Hình 3.9 Lưu đồ tiến trình nhận dạng thông tin bài thi

Từ ảnh nhị phân ở trên, chúng ta dùng lệnh FindContours để khi máy tính được
tạo để phát hiện các cạnh của hình ảnh đầu vào, nó sẽ tìm các điểm cụ thể là có thông
báo khác biệt đáng kể về cường độ màu, sau đó chỉ cần bật các pixel đó. Một sự khác
biệt rõ rệt được nhận thấy khi hệ thống được hướng dẫn thực hiện đường viền.

50
Đường viền về cơ bản là một tập hợp trừu tượng gồm các phân đoạn và điểm
tương ứng với hình dạng phản chiếu của các đối tượng có trong ảnh đã được xử lý
qua hệ thống. như là kết quả của việc này; chúng tôi có khả năng điều khiển đường
viền trong các chương trình mà chúng đang được truy cập.
Điều này có thể được thực hiện theo nhiều cách, chẳng hạn như đếm số lượng
đường viền trong một hình ảnh và sau đó sử dụng số đó để phân loại hình dạng đối
tượng, để phân đoạn hình ảnh hoặc cắt đối tượng khỏi hình ảnh đang được xử lý, v.v.
chức năng.
Sau khi đã nhận được các điểm được tô đen trên bài thi chúng ta sẽ so sánh
được kết quả và thực tế trên bài thi để tính ra được số câu sai, câu đúng. Dùng lệnh
draw để vẽ màu xanh với câu đúng và màu đỏ với câu sai
Tổng số điểm của bài thi được tính dựa trên câu đúng / tổng số câu hỏi thang
điểm 10 được đưa ra màn hình với lệnh putTEXT.

51
Hình 3.10 In số điểm lên bài thi

52
Hình 3.11 Nhận dạng câu đúng/sai trong bài thi

3.2.3. Nhận dạng thông tin thí sinh bằng tesseract – OCR

53
Hình 3.12 Lưu đồ tiến trình nhận dạng thông tin thí sinh

Từ ảnh bài thi được đưa và đầu vào bằng camera, chúng ta sử dụng thao tác
cắt được thực hiện để loại bỏ tất cả các đối tượng hoặc khu vực không mong muốn
khỏi hình ảnh. Hoặc thậm chí để làm nổi bật một tính năng cụ thể của hình ảnh.
Không có hàm cụ thể nào để cắt ảnh trong OpenCV mà được thực hiện thông qua
tính chất của mảng NumPy. Mọi hình ảnh được đọc vào sẽ được lưu trữ trong một
mảng 2D (cho mỗi kênh màu). Sau đó chỉ định chiều cao và chiều rộng (tính bằng
pixel) của khu vực sẽ được cắt. Cụ thể là sử dụng hàm Cropped
Sau khi cắt xong phần chứa thông tin của thí sinh, chúng ta sẽ có phần thoogn
tin ủa thí sinh như sau:

54
Hình 3.13 Ảnh cắt phần thông tin sinh viên trên bài thi

Sử dụng thư viện Tesseract – OCR để nhận diện kí tự của họ và tên và mã sinh
viên của người làm bài thi sẽ được hiện ra màn hình.
3.3. Thiết kế hệ thống điều khiển
3.3.1. Yêu cầu về điện của hệ thống chấm bài thi trắc nghiệm tự động
Hệ thống điện của máy chấm bài thi trắc nghiệm tự động phải đảm bảo được
các tính năng sau:
• Về mạch động lực: cần phải chọn được các động cơ đảm bảo hoạt động truyền
động chính xác tới vị trí cần điề khiển đến, có khả năng thay đổi tốc độ, khởi
động nhanh, momen lớn.
• Về hệ thống điều khiển đảm bảo:
+ Điều khiển động cơ bước với tần số tối đa 25kHz.
+ Điều khiển 2 động cơ bước.
+ Độ xung nhỏ nhất là 12 μs.
+ Nhận biết các giới hạn của các trục để đảm bảo an toàn.
+ Có thể ổn định khi làm việc, không xảy ra chập cháy hoặc dò rỉ điện khi hoạt
động
3.3.2. Thiết kế lựa chọn động cơ truyền động

55
• Nhiệm vụ chính của các hệ truyền động di chuyển vị trí bài thi là chuyển đổi
các lệnh rong bộ điều khiển thành các truyền động quay tròn thành chuyển động
tịnh tiến.
• Chuyển động tịnh tiến phải theo phương ngang , còn các chuyển động quay
tròn là các chuyển động quay quanh trục Vít – me.
• Chuyển động phải đảm bảo tính ổn định, êm, sạch sẽ .
• Các hệ thống động cơ và điều khiển được sử dụng trong chuyển động là hệ
thống điều khiển (Arduino UNO R3, module L298) và động cơ bước.
• Lựa chọn động cơ bước thay thì động cơ DC và động cơ bước có nhiều ưu
điểm ưu điểm nổi bật như điều khiển thuận lợi chính xác vị trí theo nhịp bước và
mạch điều khiển đơn giản.
a) Tính toán tỷ số truyền và chọn động cơ
• Tỷ số truyền cần đáp ứng ba yêu cầu sau:
• Độ phân giải về góc và tốc độ quay Trừ trường hợp đặc biệt điều khiển theo
vi bước, độ phân giải về góc của động cơ bước cố định là α hoặc α/2 đối với
điều khiển cả bước và nửa bước. (Ở đó α là góc bước cho theo catalog, ví dụ
α = 1,80). Độ phân giải của đối tượng điều khiển yêu cầu cao hơn nhiều, chẳng
hạn 0,060 (tương ứng với 6000 bước trong một vòng quay).
• Gọi tỷ số truyền là Z, độ phân giải của đối tượng là θ, ta phải chọn sao cho:

Z ≥ (3.1)
20

Với ví dụ trên ta phải có:


1.8
Z ≥ = 15 (3.2)
0.2

• Bộ giảm tốc sẽ làm giảm tốc độ quay của đối tượng so với tốc độ
quay cảu động cơ. Gọi tốc độ quay của đối tượng là VT, tốc độ quay của động
cơ là VM, ta phải có:
VM ≥ Z.VT (3.3)

56
- Điều kiện về momen
• Trong trường hợp tải quay trong mặt phẳng thẳng đứng (trục quay nằm ngang)
mà mật độ trọng lực không phân bố đều và đối xứng qua tâm (có nghĩa là trọng
lực của tải có cánh tay đòn so với tâm trục quay luôn thay đổi) thì phải lấy
momen tải (MC) ở giá trị cực đại để tính toán.
• Nếu trục quay thẳng đứng, cần cố gắng cân bằng tải ở mọi phía theo phương
nằm ngang. Khi đã cân bằng thì momen tải tương đối đều, trừ khi khởi động
phải thêm momen do ma sát nghỉ sinh ra.
• Trong mọi trường hợp quan hệ momen đều phải thỏa mãn:
Mmax < Z.M0 (3.4)
Trong đó:
Mmax là giá trị lớn nhất của momen tải;
M0 là giá trị momen của động cơ ứng với tốc độ quay lớn nhất mà động cơ cần phải
đạt trong hệ truyền động.
- Điều kiện về quán tính quay
• Quán tính quay không phụ thuộc vào trạng thái của trục quay trong không
gian (thẳng đứng, nằm ngang hay nghiêng bao nhiêu độ) mà chỉ phụ thuộc vào
khối lượng và sự phân bố mật độ khối lượng so với trục quay.
• Quán tính quay của động cơ tính theo công thức gần đúng. Quán tính quay
của tải nhìn chung phải tính theo công thức (3.4), nếu không dựa vào kinh
nghiệm và thử nghiệm.
• Mối quan hệ về quán tính quay cần thỏa mãn điều kiện:
JT ≤ 4.JM.Z2 (3.5)
(JT và JM lần lượt là quán tính quay của tải và của động cơ)
• Từ các phân tích ở trên, khi tính toán tỷ số truyền và chọn động cơ
cần làm các bước sau:
Từ công thức (3.1) Tính Zmin.

57
Thay Zmin vào (3.5) để chọn Z, nếu Zmin thỏa mãn (3.5) thì lấy Z0 = Zmin, nếu
không buộc phải lấy Z0 > Zmin thỏa mãn (3.5).
Từ Z0 thay vào để tính min (VM) sau đó chọn VM0 và min (M0) tìm động cơ có đặc
tuyến momen - tốc độ thỏa mãn (tra theo Catalog).
• Tính toán độ dự trữ thật cao và chọn module điều khiển thật chính xác để chắc
chắn rằng động cơ và hệ cơ khí đáp ứng trung thành các lệnh điều khiển.
• Chọn quán tính tải từ 4 đến 10 lần quán tính của rotor động cơ.
Với hệ chất lượng cao (chắng hạn quay nhanh), tỷ số này ≤ 4.
Với hệ chất lượng vừa phải, chọn tỷ số từ 4 đến 10.
- Chọn kích thước động cơ:
Kích thước động cơ có ảnh hưởng đến đặc tuyến động của cả hệ. Các yếu tố cần
tính đến là ma sát của hệ, quán tính tải và hiện tượng cộng hưởng lớn. Việc cân nhắc
này nhìn chung khá phức tạp, chủ yếu dựa vào kinh nghiệm
b) Thông số động cơ bước lựa chọn
- Dựa trên lý thuyết đã trình bày ở mục a, nhóm em đã lựa cọng động cơ bước
để điều khiển trục ngang là động cơ bước Step Motor 42x48. Hình ảnh của
động cơ được thể hiện ở hình dưới đây.

Hình 3.14 Động cơ bước Stepmotor 42 x 48

Thông số cụ thể của động cơ bước 42 x 48 là :


58
- Kích thước: 42x42x47.5
- Đường kính trục: 5mm hình chữ D, trục dài 20mm
- Dòng: 2.0A
- Điện áp: 12V / 24V
- Bước: 1.8°
- Phase: 2 Phase
- Moment xoắn: 480Nm .m Min (2 phase)
- Quán tính: 82 g-cm2
- Trọng lượng: 380gr
3.3.3. Thiết kế lựa chọn hệ thống điều khiển
Trục của máy được chuyển động bởi các đông cơ bước được cấp nguồn 12V
– 2A từ ngòai, động cơ bước được điều khiển bằng module mạch cầu H L298
Mạch điều khiển này giao tiếp với máy tính thông qua cổng USB . Toàn bộ
chương trình, mẫu điều khiển và hệ thống điều khiển được lưu trữ trên thiết bị
Thiết kế lựa chọn mạch điều khiển trung tâm
Mạch điều khiển trung tâm có chức năng nhận lệnh từ máy tính để điều khiển
toàn bộ hoạt động của hệ thống, do vậy, mạch phải có khả năng giao tiếp với máy
tính thông qua công USB, thực hiện điều khiển các hoạt động tiến lùi của trục máy,
tốc độ động cơ phù hợp
Phần tử điều khiển hệ thống trung tâm hệ thống là Arduino Uno R3.Bố trí các
chân cụa thể như sau:

59
Hình 3.15 Cấu trúc Board Arduino UNO R3

Các thông số của Aduino UNO R3 đã được nêu rõ ở mục 2.2


Tốc độ động cơ được điều khiển bằng mạch cầu H của module L298

Hình 3.16 Cấu trúc mạch cầu H

Nguyên lý hoạt động của mạch cầu H: Theo như sơ đồ trên, ta có A và B là 2


cực điều khiển được mắc nối tiếp với 2 điện trở hạn dòng, Tùy vào loại transistor bạn
đang dùng mà trị số điện trở này khác nhau. Phải đảm bảo rằng dòng điện qua cực
Base của các transistor không quá lớn để làm hỏng chúng. Trung bình thì dùng điện
trở 1k Ohm.

60
3.3.4. Tính toán độ chính xác khi truyền chuyển động
Trục ngang được lựa chọn là trục Vitsme đai ốc và cùng loại động cơ bước
nên động cơ được phân ra các bước dịch chuyển được tính toán như sau:
- Do trục vít me có bước ren là 8mm, nên nếu động cơ bước quay hết 1 vòng thì
sẽ di chuyển được 1 quãng đường là a= 8 mm.
- Động cơ bước được lựa chọn là loại động cơ với góc dịch chuyển 1 bước là
1.80 nên để quay hết một vòng thì số xung điều khiển đưa vào động cơ bước
là 360/1.8=200 bước (với chế độ cả bước). Trong thực tế, ta điều khiển động
cơ ở chế độ nửa bước, nên mỗi lần cấp xung dịch chuyển là động cơ quay 0.90.
Từ đây ta tính được quãng được dịch chuyển ở các trục tọa độ mỗi khi cấp
xung là l=a/400= 8/400=0.02mm.

Hình 3.17 Sơ đồ đi dây mô phỏng

3.3.5. Lựa chọn và điều khiển hệ thống camera


Camera được lựa chọn là loại wedcam 1080P 2MP HD 30fps Camera Noise-
Reduction Microphone Web Cam HD Laptop Computer.
Thông số kĩ thuật :

61
Loại hình kết nối USB
Độ phân giải 1080p
Trọng lượng 149.5g
Kích thước 9x9x6.5 cm
Bảng 3.1 Thông số kỹ thuật camera

62
CHƯƠNG IV: CHẾ TẠO HỆ THỐNG CHẤM BÀI THI TỰ ĐỘNG
4.1. Chế tạo hệ thống cơ khí
Trên cơ sở các thiết kế và bản vẽ cơ khí máy ở chương III, nhóm thực hiện
quy trình thi công lắp ráp, căn chỉnh các kết cấu cơ khí như sau:
4.1.1. Căn chỉnh mặt phẳng để lắp đường dẫn hướng (Liner guide way)
Mục đích của phần tùy chỉnh này để cho phần trên máy có thể thăng bằng hơn,
kiểm tra độ phẳng của bề mặt đảm bảo yêu cầu kĩ thuật được đề ra.
4.1.2. Lắp trục vitsme và thanh trượt
a) Chuẩn bị linh kiện
- 1 sống trượt M8 - 600mm
- 2 gối đỡ 2 đầu M8
- Bulong M2.5 gắn trên 2 gối đỡ để cố định thanh trượt.
- Bulong , đai ốc M4 để cố định 2 gối đỡ với đế máy.
- Trục Vistme M8 60mm
- Gối đỡ vòng bi M8
b) Quy trình lắp thanh trượt
Mục đích: Lắp sống trượt sao cho mặt trên của con trượt di chuyển đồng phẳng
với đế máy, các mặt bên di chuyển song song với trục Vitsme
Cách lắp:
- Coi trục vít me là sự di chuyển chính của máy. Ta sẽ lắp sống trượt phải theo
trục Vitsme và song song với trục. Gồm các bước sau:
+ Bước 1: Đặt động cơ bước lên giá đỡ, cố định động cơ bước với giá bằng 4
bulong M2,5. Đặt giá đỡ lên đế máy, cố định bằng Bulong + đai ốc M4
+ Bước 2: Nối trục vitsme với đầu trục động cơ bước bằng đầu nối 5x8, cuối
hành trình của trục vistme được cố định bằng gối đỡ trục có vòng bi M8, gắn
vào đế máy.

63
Hình 4.1 Căn chỉnh kích thước lắp đặt trục động cơ Vitsme

+ Bước 3: Đặt song song thanh trượt có chưa con trượt với trục Vistme , cố
định 2 đầu gối đỡ lên đế máy
+ Bước 4: Vặn chặt các phiến tỳ đảm bảo cho sông trượt tỳ vào bệ máy, vặn
chặt các bulong tuần tự như trên
+ Bước 5: đặt thước căn chỉnh mặt phẳng lên khay chứa giấy căn chỉnh sao
cho đảm bảo được sự cân bằng cần thiết để thanh trượt không bị lỗi khi hoạt
động

64
Hình 4.2 Lắp đặt thanh trượt song song với trục Vitsme

4.1.3. Lắp ráp khoang chấm bài thi


Khoang chấm bài thi được thiết kế bằng nhân định hình có kích thước 360 x
290 x 300 mm hình hộp chữ nhật.
Khoang chấm thi được cố định với đế bởi các ke góc vuông của nhôm định
hình.
Các thanh nhôm được liên kết với nhau cũng bởi các ke góc nhôm định hình
20x20 mm. Chúng được cố định bằng bulong và đai ốc M4.
Khoang chấm bài thi bao gồm hệ thống đèn LED và hệ thống Camera được
lắp đặt phía trên của khung.
Hai thanh led được đấu trực tiếp với nguồn điện 220V để hỗ trợ ánh sáng cho
camera được hoạt động sắc nét và ổn định
Camera được gắn ngay giữa 2 thanh Led để có thể dễ dàng chụp chiếu lại bài
thi trong quá trình vận hành máy.

65
Hình 4.3 Lắp đặt khung, led và Camera

4.1.4. Lắp đặt khay chưa giấy và Module trượt cấp giấy
Khay chứa giấy có thiết kế dạng hình hộp không nắp, vát 1 đầu để tiếp hận
giấy từ module trượt phía trên
Module được thiết kế với mặt phẳng nghiêm 75 độ được thiết kế bằng xốp fomex
đểkhi cấp giấy, giấy có thể dễ dàng trượt vào khay chứa giấy phía dưới hiển thị dưới
ống kính của camera.
Phía sau module trượt cấp giấy là hộp để mạch trung tâm điều khiển động cơ
bước(arduino, L298) để có thể làm cho mô hình thêm gọn gàng và không bị lộ quá
nhiều chi tiết.

66
Hình 4.4 Sản phẩm cơ khí hoàn thiện

4.2. Chế tạo hệ thống điện điều khiển


4.2.1. Mạch điều khiên trung tâm
Mạch điều khiển trung tâm có chức năng nhận lệnh từ máy tính để điều khiển
toàn bộ hoạt động của hệ thống như điều khiển các mạch driver động cơ bước. Mạch
điều khiển trung tâm ở đây được chọn là board Arduino UNO R3 rất thông dụng trên
thị trường linh kiện điện tử hiện nay
Mạch điều khiển được lắp sơ bộ như sau:

67
Hình 4.5 Đấu nối bộ điều khiển động cơ bước thực tế bằng arduino và L298

- Các công kết nối gồm:


+ Nguồn nuôi cho bộ điều khiển Arduino UNO R3 và mạch L298 là bộ chuyển
nguồn từ 220V xuống còn 12VDC với chân cắm là chân tròn
+ Chân 8, 9, 10, 11 là các chân OUTPUT của arduino được lần lượt kết nối
với các chân INPUT IN1, IN2, IN3, IN4 của Module L298 để nhận tín hiệu
điều khiển cấp xung điều khiển động cơ
+ Bốn dây động cơ được kết nối tương ứng với bốn đầu ra OUTPUT của
module L298 OUT1, OUT2, OUT3, OUT4
+ Chân 6~ của Board ARDUINO được kết nối với cực dương của nút nhấn,
và cực âm được nối với GND sử dụng trên BOARD điều khiển với chế độ
được cài đặt là tín hiệu đầu vào INPUT
4.2.2. Tính toán cấp xung cho động cơ bước di chuyển hành trình trục vistsme

68
Trục Vitsme được lựa chọn là trục có đường kính ren là 8mm tương ứng với
trục khi quay được 1 vòng, đai ốc sẽ di chuyển được 1 khoảng là 8mm
Động cơ bước điều khiển trục Vitsme được chọn là động cơ bước 42x48 với
bước là 1,8 độ. Để quay hết 1 vòng quanh trục 1 động cơ bước chúng ta cần:
360
= 200 (xung)
1.8

 Để động trục di chuyển được quang đường là 340mm cần :


200 𝑥 340
= 8500 (Xung)
8

Độ delay của khay chứa giấy khi ở trong khoang chấm thi để thao tác hoàn
thành là 20 giây tương ứng với 20000 ms
Độ delay của khay chứa giấy khi đưa bài thi ra ngoài sau khi hoàn thành chấm
thi là khoảng 3 giây tương ứng với 3000 ms
Vận tốc động bước:
- Chọn vận tốc cần đặt là 1000 (vòng/phút) hoặc (rpm)
- 1 bước của motor đã chọn là 1,8 độ, vậy để xoay hết 1 vòng cần 200 step
 Số Step quang được trong 1 phút là: 1000*200 = 200.000 (Step)
 Thời gian delay cho 1 step là: T_Dealy = 600.000 / 200.000 = 3
4.3. Lập trình hệ thống chấm bài thi
Dựa trên các cơ sở lý thuyết của các thuật toán đã trình bày, hàm chức năng
được thiết kế bằng ngôn ngữ lập trình Python trên môi trường phát triển của Window
sử dụng bộ thư viện OpenCV.
Các thư viện được sử dụng:
- import cv2
- import math
- import numpy as np
- import random
- import argparse
- import pytesseract
69
- import os
4.3.1. Kỹ thuât chụp ảnh và lưu ảnh
Cấu trúc:
cam = cv2.VideoCapture(0)
cv2.namedWindow("test")
img_counter = 0
while True:
ret, frame = cam.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("test", frame)
k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Escape hit, closing...")
break
elif k%256 == 32:
img_name = "000.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1

cam.release()

70
Đầu vào là một camera đã được kết nối với máy tính. Trong trường hợp không
có camera hoặc camera không thể sử dụng thì có thể thay thế bằng camera điện thoại
thông qua phần mềm Droidcam
Đầu ra là một ảnh được chụp trên tổ hợp phím Space và ESC, ảnh được lưu tự
động với tên file là “000.png”.
Từ biến khai báo số lượng hình ảnh bằng 0 “ img_counter = 0” sau khi chụp
ảnh biến đếm sẽ +1 “img_counter += 1”
Ảnh được lưu vào thiết bị để phục vụ cho quá trình xử lý của các bước sau

Hình 4.6 Ảnh được chụp từ camera

4.3.2. Kỹ thuật nhận diện số báo danh và tên thí sinh


Cấu trúc
img = cv2.imread('000.png')
71
print(img.shape)
cropped_image = img[1:430, 1:1165]
cv2.imshow("cropped", cropped_image)
cv2.imwrite("Cropped Image.jpg", cropped_image)
cv2.waitKey(0)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-
OCR\tesseract.exe"
Đầu vào là một ảnh được chụp từ camera đã được lưu lại với tên file
“000.png”. Ảnh được đọc và cắt ra phần phía trên để nhận diện thông tin thí sinh
bằng lệnh Cropped

Hình 4.7 Phần thông tin được cắt ra để nhận diện

Đầu ra là các kí tự được nhận diện bằng thư viện Tesseract-OCR dduocj train
sẵn lưu tại vị trí ổ C đã có đường dẫn đến được gắn trên chương trình.
4.3.3. Kỹ thuật Threshold
Cấu trúc:
image = cv2.imread("000.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)

72
thresh =
cv2.adaptiveThreshold(blurred,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV,31,3)
cv2.waitKey()
Chức năng chính của hàm là thực hiện thuật toán Canny nhằm mục đích tính
toán và trả lại giái trị mức xám ngưỡng của ảnh đầu vào. Việc tính toán giá trị mức
ngưỡng đóng vai trò rất quan trọng trong việc chuyển đổi từ ảnh xám sang anh nhị
phân.
4.3.4. Tìm vùng chứa đáp án
Cấu trúc:
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=lambda x: cv2.contourArea(x),reverse=True)
approx = cv2.approxPolyDP(contours[1], 0.01 * cv2.arcLength(contours[1],
True), True)
rect = cv2.minAreaRect(contours[1])
box = cv2.boxPoints(rect);

corner = find_corner_by_rotated_rect(box,approx)
image = four_point_transform(image,corner)
wrap = four_point_transform(thresh,corner)
cv2.waitKey()
Chức năng của phần này là tách được vùng chứa đáp án ra khỏi nền và xoay
văn bản để thành vùng chứa trên các tọa độ được in trên bài thi
4.3.5. Tìm các đáp án trong hình và so sánh đáp án được thiết lập sẵn
Cấu trúc:
contours, _ = cv2.findContours

73

current_right == choice[1]:

Các hàm được thiết lập để thực hiện yêu cầu là tìm ra các phần đáp án được tô
kín trong bài thi và đem chúng ra so sánh đúng/sai với đáp án được định nghĩa sẵn
bằng hàm Counter thông quan từng dòng tương ứng với số câu hỏi trong bài thi được
in sẵn
Giả trử trong trường hợp này đáp án được định nghĩa: 1A, 2D, 3A, 4C, 5D,
6B, 7A, 8B, 9A, 10A

Hình 4.8 Tách vùng chứa đáp án và khoanh đáp án đúng sai

4.3.5. Kỹ thuật tính điểm và hiện điểm ra màn hình


Cấu trúc:
image2 = cv2.imread("haui.jpg")
image2 = cv2.resize(image2, (525, 700))
cv2.drawContours(image, [cnts[current_right]], -1, color, 3)
score = (10/( incorrect + correct )) * correct
print("[INFO] score: {:.2f} diem".format(score))

74
cv2.putText(image2, "so diem la: {:.2f} diem".format(score), (40, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
print("[INFO] correct: {:.2f}".format(correct))
cv2.putText(image, "so cau dung la: {:.0f} cau".format(correct), (40, 60),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
print("[INFO] incorrect: {:.2f}".format(incorrect))
cv2.putText(image, "so cau sai la: {:.0f} cau".format(incorrect), (40, 90),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
image = cv2.resize(image, (525, 700))
cv2.imshow("Ket qua dap an",image)
cv2.imshow("diem",image2)

cv2.waitKey()
Đây là phần tính toán điểm thông qua số câu đúng và câu sai trong tổng số câu
của cả bài thi sau đó viết số điểm, số câu đúng, số câu sai ra màn hình bằng lệnh
Draw

75
Hình 4.9 Tính toán và hiện ra màn hình dữ liệu

76
CHƯƠNG V: KẾT QUẢ VÀ ĐÁNH GIÁ
5.1. Kết quả đạt được
Mục đích chính của đề tài là xây dựng hệ thống tự động chấm điểm phiếu trả
lời trắc nghiệm sử dụng camera. Để thuận tiện trong việc tiến hành cũng như đảm
bảo tiến độ công việc, đặc biệt là nâng cao khả năng đánh giá và nâng cấp
Để có thể đạt được kết quả tốt nhất cho cả đề tài, mỗi việc làm dù là nhỏ nhất
cũng được em lên kế hoạch định hướng và thực hiện theo từng bước đã vạch ra.
Không chỉ hướng đến kết quả tốt nhất, việc đảm bảo tiến độ cũng có ý nghĩa vô cùng
quan trọng, chính vì vậy trong quá trình thực hiện, em thường xuyên đề ra các mục
tiêu và luôn luôn cố gắng đạt được điều đó theo đúng kế hoạch đề ra. Bên cạnh đó,
thông qua việc tìm hiểu thêm các nguồn tài liệu và tham khảo ý kiến thầy giáo hướng
dẫn, em không ngừng tối ưu hóa các thuật toán, phương pháp, giúp cho module gọn
gàng, đơn giản nhưng vẫn đảm bảo hiệu quả.
Máy hoạt động bình thường, có ây ra tiếng ồn nhẹ khi quay trục Vitsme để vận
chuyển bài thi ra vào. Phần mềm hoạt động bình thường hi thử nghiệm, nhưng gặp
khó khăn khi kết nối phần cứng và phần mềm với nhau do Camera chụp ảnh chất
lượng không cao. Phần nhận dạng kí tự trong phần thông tin thí sinh đôi lúc có thể
nhận dnagj không chuẩn xác 100%.
Từ thực nghiệm cho thấy, nhóm em đã tiến hành xử lý ảnh với chất lượng
không cao nhưng vẫn đạt độ chính xác với yêu cầu đề ra. Sử dụng các lệnh lọc nhiễu,
làm bóng ảnh để có một chất lượng ảnh tốt nhất dẫn đến độ chính xác cao. Rất nhiều
giai đoạn và phương pháp được thực hiện với nhau trong khi hình thành và xử lý bài
thi.
Kết quả thực nghiệm đạt được:
• Mẫu ảnh 1: Ảnh được chuyển qua từ file Word sang JPG

77
Hình 5.1 Ảnh được chuyển từ file word sang JPG

Với mẫu này thì ảnh rất sắc nét, rất dễ xử lý và nhận dạng chuẩn xác. Đây là
mẫu có điều kiện tiêu chuẩn. Bài thi được chấm với độ chuẩn xác 100%. Các kí tự
thông tin trong bài thi được đọc chuẩn xác khi hiện ra màn hình.
• Mẫu ảnh 2: Ảnh được chụp từ điện thoại Smart

78
Hình 5.2 Ảnh được chụp từ Smart Phone

Mẫu ảnh này thì cũng có độ sắc nét khá ca do camera của điện thoại smart
được nâng cao với bộ xử lý và độ phân giải của ảnh rất cao. Bài thi được chấm điểm
với thử nghiệm là 7 bài thi, độ chính xác của phần chấm bài thi lên đến 100%, độ
chính xác khi đọc thông tin sinh viên bằng Tesseract – OCR là khoảng 90%
• Mẫu ảnh 3: Ảnh được chụp từ Wedcam Camera Noise-Reduction

79
Hình 5.3 Ảnh được chụp từ Wedcam

Mẫu ảnh này có chất lượng khá thấp nhưng vẫn có thể nhận ra được các điểm
tô đen và số câu đã được làm trong bài thi. Bài thi được chấm điểm cũng với kết quả
chính xác khá cao. Trong 7 bài thi được thử nghiệm thì độ chính xác lên đến 85%.
5.2. Đánh giá
Từ kết quả thu được ở phần 5.1 em thấy bài toán Nghiên cứu thiết kế mô hình
máy chấm bài thi trắc ngiệm tự động có những ưu và nhược điểm như sau:
Ưu điểm: Thuật toán cài đặt nhanh . Tìm và cắt vùng chưa bài thi, vùng chưa
thông tin của học sinh chuẩn xác .Ngay cả khi ảnh nghiêng cũng có thể nhận dạng
được và xoay lại sao cho vuông góc. Bài thi được chấm với chất lượng tin cậy cao

80
sau khi đã được tinh chỉnh hết sức cẩn thận để không bị sai sót và nhầm lẫn trong
quá trình chấm bài thi có thể xảy ra.
Nhược điểm: Nhận dạng và xử lý khá kém với những biên của phần tô bài làm
có độ dày thấp, nền bị mờ nên rất khó đọc được thông tin thí sinh trên bài thi. Tô đáp
án không kín có thể dẫn đến sai sót khá lớn trong khi máy hoạt động chấm thi. Phần
tô đáp án có thể bị lóa khi đèn Led trợ sáng chiếu vào. Chấm điểm với một mã đề do
phả tự nhập cơ sở dữ liệu kết quả bài thi. Do là mô hình nên số câu thử nghiệm khá
ít, khung giấy nhỏ (A5). Module điều khiển động cơ L298 chạy lấu có thể sinh ra
lương nhiệt rất lớn ảnh hưởng đến mạch điều khiển động cơ bước.
Vì vậy để bài toán có thẻ phát huy hiệu quả tốt nhất thì thiết bị chụp ảnh phải
có yêu cầu cao, sắc nét trong các đường tinh chỉnh. Để những ảnh không bị bóng
sáng và hiển thị toàn bộ bài thi trong khung ảnh được xử lý đẹp và rõ ràng nhất có
thể. Phương pháp này có độ chính xác khá cao, có thể thay thế con người chấm bài
thi mất thời gian rất lâu.
Bài toán điều khiển động cơ của máy cũng cần sự chính xác khi di chuyển,
tính toán đúng với vị trí cần di chuyển đến tránh bị va chạm khi di chuyển không có
công tắc hành trình.
Đây là một chủ đề khá mới và lạ lẫm với sinh viên cơ điện tử. Nhưng bằng sự
cố gắng và nỗ tực tìm tòi nghiên cứu phát triển. Nhóm em đã hoàn thành được khoảng
90% yêu cầu đã được đặt ra từ khi bắt đầu lên ý tưởng và làm việc.
5.3. Hạn chế, phương pháp giải quyết và ý tưởng phát triển
5.3.1. Hạn chế và phương pháp
Với những hạn chế là nhược điểm đã nêu ở phần trên, nhóm có đưa ra 1 số
phương pháp giải quyết những hạn chế đó như sau:
- Với camera thì cần nâng cấp lên đời cao hơn, có chất lượng và xử lý ảnh tốt
hơn.

81
- Số câu hỏi khá ít và mô hình khá nhỏ nên có thể phát triển mô hình lớn hơn và
kích thước giấy có thể lớn hơn, nhiều câu hỏi hơn và xử lý với độ nhanh và
chính xác hơn
- Phần mềm cần nghiên cứu mở rộng thêm kiến thức lập trình khi còn hạn chế
rất nhiều từ đó gặp khó khăn rất lớn trong khi thực hiện
- Phần module L298 bị nóng nguyên nhân có thể là do đầu vào 12V có thể không
ổn định , nên có thể thêm thiết bị vi mạch ổn định 12V cho đầu cấp nguồn
L298 hoặc có thể thêm quạt tản nhiệt để làm lạnh khi máy hoạt động
5.3.2. Ý tưởng phát triển đề tài
Thiết bị chấm bài thi trắc nghiệm tự động xây dựng lên nhằm thay thế con
người thực hiện chấm thi trên phiếu một cách nhanh và chuẩn xác nhất có thể. Dưới
đây là một số ý tưởng phát triển đề tài này:
- Thiết bị có thể phát triển để quét những bài thi với kích thước lớn hơn trên nền
tảng giấy A4, nhiều câu hỏi hon và chính xác hơn.
- Sử dụng công tắc hành trình để lập trình vào ra cho bài trong khoang tránh bị
va chạm không đáng có gây ra hỏng hóc máy.
- Thiết kế và sử dụng thêm kệ thống kéo giấy tự động bằng ion +/- để chấm
điểm hàng loạt bài thi không phải cấp từng bài thi một vào khay bằng module
trượt
- Lưu trữ lại tất cả các thông tin của bài thi đã được chấm vào hệ thống để sau
khi chấm xong có thể mở ra và check lại từng bài thi xem lại điểm số ứng với
từng sinh viên. Có thể xem lại dễ dàng sau khi thí sinh yêu cầu phúc khảo
- Tạo cơ sở dữ liệu, hình thành hội đồng thi, phòng thi, in điểm tự động lên giấy
sau khi chấm bài.
- Phát triển bài toán lên nhiều mã đề thi , trộn và tạo đề thi.
- Tìm kiếm , tạo và xuất báo cáo

82
Nhóm em mong rằng đây là tài liệu nền móng để có thể phát triển thiết bị này tự
động hóa hơn.

83
KẾT LUẬN
Trên đây, nhóm đã trình bày toàn bộ luận án tốt nghiệp: “ Nghiên cứu, thiết
kế hệ thống chấm bài thi trắc nghiệm tự động, ứng dụng công nghệ xử lý ảnh” . Luận
án đã đề cập tới một số kỹ thuật xử lý ảnh cơ bản và nâng cao nhằn nâng cao chất
lượng, xử lý và nhận dạng các đặc trưng ảnh, ứng dụng trong việc chấm thi trắc
nghiệm. Thuật toán đề xuất và phần mềm chấm điểm chính xác trên các mấu khác
nhau về kích thước , góc nghiêng và sự ảnh hưởng bới nhiễu ảnh. Từ kết quả thực
nghiệm có thể thấy rằng hệ thống thống thực nghiệm sẽ đạt độ chính xác 100% khi
trong điều kiện lấy mẫu tốt.
Tuy nhiên , trong điều kiện thười gian rất hạn chế và khối lượng công việc lớn,
nên hệ thống vẫn còn khá nhiều tính năng chưa phát triển được.
Mẫu phiếu thi sử dụng trong thuật toán đề xuất là mẫu phiếu thi nhóm đã tự
tạo lên . các mẫu khác có đặc điểm tương tự nhưng mấu to hơn và nhiều câu hỏi trong
phần làm bài thi hơn. Tuy nhiên, với các mấu phiếu thi như mẫu thi THPT quốc gia,
TOELF, TOEIC,…. Thì không thẻ nhận dạng bằng thuật toán trên được, phải ứng
dụng bằng công nghệ CNN mới có thể phát triển. Hiện nay một số phần mềm OMR
cho phép tạo mẫu chấm thi bất kỳ bằng cách định nghĩa các vùng thông tin trên phiếu
thi trước( dựa vào vị trí, diện tích), sau đó sẽ áp dụng hàng loạt các phiếu thi khác.
Tuy nhiên cách này chỉ hoạt động với điều kiện tiêu chuẩn như: Độ chính xác khi in
gần như là tuyệt đối, lấy mẫu phiếu thi ở điều kiện tốt, phân giải cao, ít nhiễu…. Với
điều kiện như vậy thì giá thành ở khâu in ấn, hệ thống giấy kéo giấy tích hợp camera
sẽ rất cao. Vì vậy phương pháp tốt nhất vẫn là phát triển thuật toán dựa trên từng
mẫu.
Một cách làm khác đơn giản hơn là tạo ra các mẫu thi tương tự có khung hình
chữ nhật, các vùng tô kín có kích thước bằng nhau, phân bố đều trong các vùng đó.
Với cách này chỉ việc thay đỏi khoảng cách tương quan giữa các dòng in trên phiếu
thi để nhận dạng. Như vậy vẫn sử dụng được hệ thống chấm điểm tự động.

84
TÀI LIỆU THAM KHẢO
[1] Abdul J.Jerri, “The Shannon Sampling Theorem - Its Various Extensions and
Applications: A Tutorial review”, November 11, 1977
[2] Markus Kuhn, “Digital Signal processing”, University of Cambridge,
September 09, 2009
[3] PGS.TS. Nguyễn Linh Giang, Giáo trình xử lý ảnh, Đại học Bách Khoa Hà Nội,
2008
[4] Lê Thanh Hà, Xử lý ảnh, Nhà xuất bản Đại học Quốc Gia Hà Nội, 2016
[5]https://viblo.asia/p/xay-dung-he-thong-tu-dong-cham-bai-thi-trac-nghiem-voi-
opencv-phan-1-07LKXY84ZV4 Truy cập lần cuối ngày 5/12/2022
[6] https://stackoverflow.com/questions/13639336/threshold-of-blurry-image-part-
2?lq=1 Truy cập lần cuối ngày 6/12/2022
[7] http://www.dientuvietnam.net/forums/ Truy cập lần cuối ngày 29/11/2022
[8] https://www.python.org/ Truy cập lần cuối 7/12/2022
[9] http://opencv.willowgarage.com/documentation/c/index.html Truy cập lần cuối
6/12/2022
[10]https://viblo.asia/p/android-su-dung-thu-vien-tesseract-ocr-cho-nhan-dang-chu-
viet-ByEZk7YyZQ0 Truy cập lần cuối 3/12/2022.

85
PHỤ LỤC
Phụ lục 1: Các bản vẽ lưu đồ thuật toán điều khiển, hệ thống điều khiển và bản
vẽ lắp hệ thống cơ khí

86
Phụ lục 2: Code điều khiển và hệ thống chấm bài thi tự động ứng dụng công
nghệ xử lý ảnh Python
1. Code điều khiển động cơ bằng Arduino IDE
2. #include <Stepper.h>
3. const int stepsPerRevolution = 200;
4. //Khai báo các chân để điều khiển Step...tạo đối tượng myStepper
5. Stepper myStepper(stepsPerRevolution, 8,9,10,11);
6. int button = 6;
7. void setup() {
8. // Tốc độ 1000rpm
9. myStepper.setSpeed(1000);
10. // initialize the serial port:
11. Serial.begin(9600);
12. pinMode(button, INPUT);
13. }
14. void loop() {
15. int buttonStatus = digitalRead(button); //Đọc trạng thái button
16. if (buttonStatus == HIGH) { // Nếu mà button bị nhấn
17. // step one revolution in one direction:
18. Serial.println("Khay chua di vao");
19. myStepper.step(-7500);
20. delay(20000);
21.
22. // step one revolution in the other direction:
23. Serial.println("Khay chua di ra");
24. myStepper.step(7500);
25. delay(5000);
26. }
27. else
28. {
29. Serial.println("Dung chuong trinh");
30. myStepper.step(0);
31. }
32. }
2. Code Python – OpenCV
import cv2
import math
import numpy as np
import random
import argparse
import pytesseract
import os
import matplotlib.pyplot as plt
from utils import *

cam = cv2.VideoCapture(0)

cv2.namedWindow("test")

img_counter = 0

while True:
ret, frame = cam.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("test", frame)

k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Escape hit, closing...")
break
elif k%256 == 32:
# SPACE pressed
img_name = "000.jpg".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
cam.release()
#phần nhận diện sbd
img2 = cv2.imread('000.jpg')
print(img2.shape) # Print image shape

# Cropping an image
cropped_image2 = img2[0:150, 70:520] # Save the cropped image
cv2.imwrite("anh cat2.jpg", cropped_image2)
cv2.waitKey(0)
image2 = cv2.resize(cropped_image2, (1125, 375))
cv2.imshow("thong tin", image2)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-
OCR\tesseract.exe"
gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV +
cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
invert = 255 - opening
data = pytesseract.image_to_string(invert, lang='vie', config='--psm 6')
print("THONG TIN :")
print(data)

#phần nhận điểm


#0 cat anh de doc truoc khi nhan diem
img = cv2.imread('000.jpg')
print(img.shape) # Print image shape
#Cắt ảnh lấy phần chứa bài thi
cropped_image = img[0:640, 100:500]
# lưu ảnh cắt
cv2.imwrite("anh cat.jpg", cropped_image)
cv2.waitKey(0)
# Đọc ảnh chuyển ảnh xám
image = cv2.imread("anh cat.jpg")
image = cv2.resize(image, (1166, 1654))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Threshold ảnh
thresh =
cv2.adaptiveThreshold(blurred,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C
, cv2.THRESH_BINARY_INV,31,3)
cv2.waitKey()

# Tìm khung bên ngoài để tách văn bản khỏi nền


contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=lambda x: cv2.contourArea(x),reverse=True)
approx = cv2.approxPolyDP(contours[1], 0.01 * cv2.arcLength(contours[1],
True), True)
rect = cv2.minAreaRect(contours[1])
box = cv2.boxPoints(rect);

# Thực hiện transform để xoay văn bản


corner = find_corner_by_rotated_rect(box,approx)
image = four_point_transform(image,corner)
wrap = four_point_transform(thresh,corner)
cv2.waitKey()
# Tìm các ô tích trong hình
contours, _ = cv2.findContours(wrap, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
tickcontours = []

for c in contours:
(x, y, w, h) = cv2.boundingRect(c)
ar = w / float(h)
if w >= 30 and h >= 30 and 0.8 <= ar <= 1.2:
tickcontours.append(c)

# So sánh các ô tích với đáp án

# Định nghĩa đáp án 10 câu hỏi tương ứng


right_anser = {0: 1, 1: 3, 2: 0, 3: 3, 4: 1, 5: 1, 6: 0, 7: 2, 8: 0, 9: 2}

# Sắp xếp các câu hỏi được nhận diện theo hàng
tickcontours = sort_contours(tickcontours, method="top-to-bottom")[0]

correct = 0
incorrect = 0

for (q, i) in enumerate(np.arange(0, len(tickcontours), 4)):

# Định nghĩa mẫu riêng cho từng câu hỏi


color = (random.randint(0, 255),random.randint(0, 255),random.randint(0,
255))
# Sắp xếp các đáp án theo cột
cnts = sort_contours(tickcontours[i:i + 4])[0]
#cv2.drawContours(image, cnts, -1, color, 3)

choice = (0,0)
total = 0
# Duyệt qua các COntour trong hàng
for (j, c) in enumerate(cnts):

# Tạo mặt nạ để xem mức độ màu của contour


mask = np.zeros(wrap.shape, dtype="uint8")
cv2.drawContours(mask, [c], -1, 255, -1)
mask = cv2.bitwise_and(wrap, wrap, mask=mask)
total = cv2.countNonZero(mask)

# chọn contour tô màu đậm nhạt


if total > choice[0]:
choice = (total, j)

# Lấy đáp án của câu hiện tại


current_right = right_anser[q]
# Kiểm tra với sự lựa chọn của người dùng
if current_right == choice[1]:
# Nếu đúng thì tô xanh
color = (0, 255, 0)
correct += 1
else:
# Nếu sai thì tô màu đỏ
color = (0, 0, 255)
incorrect +=1
# Vẽ kết quả lên ảnh
image2 = cv2.imread("anh cat.jpg")
image2 = cv2.resize(image2, (525, 700))
cv2.drawContours(image, [cnts[current_right]], -1, color, 3)
score = (10/( incorrect + correct )) * correct
print("[INFO] score: {:.2f} diem".format(score))
cv2.putText(image2, "so diem la: {:.2f} diem".format(score), (40, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
print("[INFO] correct: {:.2f}".format(correct))
cv2.putText(image, "so cau dung la: {:.0f} cau".format(correct), (40, 60),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
print("[INFO] incorrect: {:.2f}".format(incorrect))
cv2.putText(image, "so cau sai la: {:.0f} cau".format(incorrect), (40, 90),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0) , 2)
image = cv2.resize(image, (525, 700))
cv2.imshow("Ket qua dap an",image)
cv2.imshow("diem",image2)
cv2.waitKey()

You might also like