You are on page 1of 49

TRƯỜNG ĐẠI HỌC QUẢNG BÌNH

BÁO CÁO TỔNG KẾT


ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN

NGHIÊN CỨU XÂY DỰNG HỆ THỐNG CẢNH BÁO


DỰA TRÊN CAMERA GIÁM SÁT
Mã số đề tài:

Sinh viên chịu trách nhiệm chính: Phạm Xuân Hòa


Ngành học: Công nghệ thông tin Khóa học: 2020 – 2024
Khoa: Kỹ thuật – Công nghệ thông tin

Quảng Bình, năm 2023


Lời cảm ơn
Trong quá trình thực hiện đề tài nghiên cứu này tôi đã nhận được sự quan tâm
giúp đỡ tận tình của nhiều tập thể, cá nhân trong và ngoài trường.
Trước hết, tôi xin bày tỏ lòng biết ơn sâu sắc tới giảng viên TS. Hoàng Văn
Thành, thầy đã trực tiếp hướng dẫn trong suốt quá trình nghiên cứu và thực hiện đề tài.
Tôi xin chân thành cảm ơn các thầy giáo, cô giáo trong khoa Kỹ thuật - Công nghệ
thông tin Trường Đại học Quảng Bình đã tạo mọi điều kiện thuận lợi giúp đỡ tôi trong
suốt quá trình học tập và rèn luyện tại trường.
Tôi xin bày tỏ lòng biết ơn vô hạn tới gia đình, người thân và bạn bè đã hỗ trợ
trong quá trình nghiên cứu.
Mặc dù trong quá trình nghiên cứu đề tài, bản thân tôi có những cố gắng nhất
định, song do trình độ và thời gian có hạn nên đề tài không tránh khỏi những thiếu sót.
Vậy kính mong các thầy cô giáo và các bạn đóng góp ý kiến để đề tài của tôi được hoàn
thiện hơn và rất mong sản phẩm hiện thực của tôi sẽ trở thành một sản phẩm mang tính
xã hội và phục vụ được trong điều kiện phát triển của ngành công nghệ thông tin Việt
Nam.
Tôi xin chân thành cảm ơn!
Quảng Bình, ngày 1 tháng 04 năm 2023
Sinh viên thực hiện

Phạm Xuân Hòa


MỤC LỤC
PHẦN MỞ ĐẦU 1
1. 12.
24.
25.
26.
2PHẦN NỘI DUNG
4
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT 4
1.1. Giới thiệu môi trường phát triển web Django 5
1.1.1. Django là gì? 5
1.1.2. Tính chất của Django 5
1.1.3. Ưu điểm của Django 6
1.1.4. Tìm hiểu về MVT model của Django 8
1.1.5. Nguồn gốc của Django 9
1.2. Ngôn ngữ lập trình Python 10
1.2.1. Giới thiệu về Python 10
1.2.2. Các đặc điểm của Python 11
1.2.3. Lịch sử của Python 12
1.3. Các hệ thống Online Judge nổi tiếng 12
1.3.1. Uva Online Judge 13
1.3.2. Sphere Online Judge 13
1.3.3. Topcoder 13
1.3.4. Timus Online Judge 13
CHƯƠNG 2. GIỚI THIỆU VỀ DMOJ, PHÂN TÍCH THIẾT KẾ HỆ THỐNG 14
2.1. DMOJ: Modern Online Judge 14
2.1.1. Đặc trưng 14
2.1.2. Câu lệnh vấn đề dễ hiểu 14
2.1.3. Gửi bằng hơn 60 ngôn ngữ 15
2.1.4. Trạng thái gửi trực tiếp 15
2.1.5. Hệ thống cuộc thi mở rộng 16
2.1.6. Blog của trang chủ và luồng hoạt động 17
2.1.7. Giao diện quốc tế hóa 18
2.1.8. Giao diện quản trị nổi bật 19
2.2. Phân tích thiết kế hệ thống 20
2.2.1. Bài toán 20
2.2.2. Đối với người dùng 20
2.2.3. Đối với admin 21
2.3. Các biểu đồ hệ thống 21
2.3.1. Biểu đồ Use-case 21
2.3.2. Sơ đồ giao tiếp giữa các module trong hệ thống OPJ DMOJ 23
CHƯƠNG 3. CÀI ĐẶT, GIAO DIỆN VÀ THAO TÁC 24
3.1. Cài đặt 24
3.2. Sử dụng hệ thống và nhập dữ liệu 25
3.3. Giao diện ứng dụng được xây dựng 28
3.3.1. Màn hình trang chủ 28
3.3.2. Đăng kí, đăng nhập, đăng xuất 28
3.3.3. Danh sách các bài 31
3.3.4. Các bài nộp 31
3.3.5. Thành viên 32
3.3.6. Thông tin 34
3.3.7. Trang Admin 35
3.3.8. Các kì thi 35
3.3.9. Tài liệu 36
3.3.10. Màn hình máy chấm 37
PHẦN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 39
TÀI LIỆU THAM KHẢO 40
PHỤ LỤC 41
DANH MỤC HÌNH ẢNH
Hình 1.1. Mô hình MVT của Django 8
Hình 1.2. Logo Instagram 9
Hình 1.3. Logo Disqus 9
Hình 1.4. Logo Mozilla Firefox 10
Hình 1.5. Logo Sprotify 10
Hình 1.6. Logo Youtube 10
Hình 1.7. Logo ngôn ngữ Python 11
Hình 1.8. Guido van Rossum 12
Hình 2.1. Giao diện màn hình đề bài 15
Hình 2.2. Giao diện màn hình chọn ngôn ngữ nộp bài 15
Hình 2.3. Giao diện màn hình bài đã nộp 16
Hình 2.4. Giao diện màn hình trạng thái tất cả các bài nộp 16
Hình 2.5. Giao diện màn hình xếp hạng điểm của kì thi 17
Hình 2.6. Giao diện trang chủ 18
Hình 2.7. Giao diện quốc tế 18
Hình 2.8. Giao diện quản trị 19
Hình 2.9. Giao diện quản trị 19
Hình 2.10 Biểu đồ use-case người dùng 21
Hình 2.11 Biểu đồ use-case admin 22
Hình 2.12. Use-case thông tin người dùng 22
Hình 2.13. Sơ đồ giao tiếp giữa các module 23
Hình 3.1. Màn hình nhập các thông tin đề bài 26
Hình 3.2. Màn hình nhập các thông tin đề bài 26
Hình 3.3. Màn hình nhập các thông tin đề bài 27
Hình 3.4. Màn hình thêm kì thi 27
Hình 3.5. Giao diện màn hình trang chủ 28
Hình 3.6. Màn hình đăng kí 28
Hình 3.7. Màn hình đăng kí thành công 29
Hình 3.8. Email gửi về xác nhận tài khoản đăng kí 29
Hình 3.9. Màn hình đăng nhập 30
Hình 3.10. Màn hình đăng xuất thành công 30
Hình 3.11. Màn hình danh sách các bài tập 31
Hình 3.12. Chức năng tìm kiếm bài Error! Bookmark not defined.Hình 3.13. Màn hình
tất cả các bài nộp 32
Hình 3.14. Chức năng lọc các bài tập 32
Hình 3.15. Màn hình xếp hạng các thành viên 33
Hình 3.16. Màn hình đóng góp của các thành viên 33
Hình 3.17. Màn hình các tổ chức 34
Hình 3.18. Màn hình các thông tin về hệ thống 34
Hình 3.19. Màn hình trang admin 35
Hình 3.20. Màn hình các kì thi 35
Hình 3.21. Màn hình lịch các kì thi 36
Hình 3.22. Màn hình trang tài liệu 36
Hình 3.23. Màn hình thông tin các máy chấm 37
Hình 3.24. Màn hình các ngôn ngữ của máy chấm 37
Hình 3.25. Màn hình các phiên bản ngôn ngữ của máy chấm 38
TRƯỜNG ĐẠI HỌC QUẢNG BÌNH

THÔNG TIN KẾT QUẢ NGHIÊN CỨU ĐỀ TÀI NCKH CỦA SINH VIÊN
Năm học: 2022 - 2023
1. Thông tin chung:

− Tên đề tài: Nghiên cứu xây dựng hệ thống cảnh báo dựa trên camera giám sát

− Sinh viên thực hiện: Phạm Xuân Hòa

− Lớp: ĐH CNTT K62 Khoa: Kỹ thuật – Công nghệ thông tin Năm thứ: 03

− Người hướng dẫn: TS. Hoàng Văn Thành

2. Mục tiêu đề tài:


Mục tiêu chung:
 Nghiên cứu và xây dựng thành công hệ thống cảnh báo cháy dựa trên camera giám
sát.
Mục tiêu cụ thể:
 Xây dựng thành công hệ thống với giao diện đơn giản, dễ sử dụng.
 Xây dựng thành công các chức năng hệ thống như phát hiện cháy, xem các camera
hoạt động, gửi cảnh báo, xem lại hình ảnh các khu vực xảy ra sự cố.
 Xây dựng thành công hệ thống gửi được cảnh báo thông qua email, các ứng dụng
tin nhắn thời gian thực.
 Xây dựng thiết kế thành công hệ thống ghi được cảnh báo vào hệ thống để làm tư
liệu cho người giám sát.
3. Kết quả nghiên cứu:
Qua thời gian được học tập và tìm hiểu các công nghệ mới, sau thời gian thực tập, tôi đã
xây dựng hệ thống camera giám sát dưới dạng website với các chức năng phát hiện đám
cháy và gửi cảnh báo qua email và telegram. Hệ thống được xây dựng dựa trên môi
trường phát triển website Django và ngôn ngữ lập trình phổ biến python.
Hệ thống đạt được những kết quả nhất định:
- Xây dựng thiết kế thành công giao diện của hệ thống đảm bảo tính thẩm mỹ, thân
thiện, bố cục của hệ thống hợp lý trong trình bày các thông tin giúp cho người dùng dễ
tiếp cận.
- Xây dựng thành công các chức năng chính của hệ thống như: phát hiện đám cháy,
xem các camera hoạt động, gửi cảnh báo, xem lại hình ảnh các khu vực xảy ra sự cố.
4. Tính mới và sáng tạo:
Xây dựng hệ thống cảnh báo dựa trên camera giám sát đang là một xu hướng nghiên cứu
nhận được nhiều sự chú ý đặc biệt với sự phát triển của tri thức và khoa học công nghệ
trong thời gian qua. Trong đề tài này, đã xây dựng thành công hệ thống cảnh báo cháy
dựa trên camera giám sát. Một số khía cạnh thể hiện tính mới và sáng tạo của đề tài như:
- Đã áp dụng kỹ thuật xây dựng website dựa trên kỳ vọng trở thành một nền tảng
chính thức của thành phố Đồng Hới.
- Đề tài có khả năng ứng dụng cao trong thực tế, góp phần giải quyết và hỗ trợ
người học tiết kiệm thời gian và công sức để có thể phát hiện xử lý sự cố đám cháy một
cách nhanh chống và hiệu quả, giảm thiểu tối đa thiệt hại về người và của.
Giao diện dễ sử dụng, người dùng có thể phát hiện được các đám cháy ở nhiều khu vực
thông qua camera giám sát, đồng thời hệ thống cũng có gửi cảnh báo cho người chịu
trách nhiệm xử lý sự cố khi xảy ra vấn đề để kịp xử lí một cách nhanh chóng giảm thiểu
thiệt hại nhất.
5. Đóng góp về mặt kinh tế - xã hội, giáo dục và đào tạo, an ninh, quốc phòng và khả
năng áp dụng của đề tài:
- Góp phần giải quyết bài toán về tính chính xác trong quá trình đánh giá năng lực
của các thí sinh tham gia cũng như đáp ứng yêu cầu của đơn vị tổ chức một cách nhanh
chóng, từ đó giúp tiết kiệm về mặt nhân lực cũng như về thời gian so với cách tổ chức
truyền thống
- Đề tài có khả năng ứng dụng thực tế cao. Hệ thống tiết kiệm chi phí, thời gian, sức
lực trong việc phát hiện và xử lí các sự cố đám cháy.
6. Công bố khoa học của sinh viên từ kết quả nghiên cứu của đề tài (ghi rõ tên tạp
chí nếu có) hoặc nhận xét, đánh giá của cơ sở đã áp dụng các kết quả nghiên cứu
(nếu có):

Ngày tháng năm


Sinh viên chịu trách nhiệm chính
(ký, họ và tên)
Phạm Xuân Hòa
Nhận xét của giảng viên hướng dẫn về những đóng góp khoa học
của sinh viên thực hiện đề tài:

Ngày tháng năm

Trưởng khoa Giảng viên hướng dẫn


TRƯỜNG ĐẠI HỌC QUẢNG BÌNH
THÔNG TIN VỀ SINH VIÊN
CHỊU TRÁCH NHIỆM CHÍNH THỰC HIỆN ĐỀ TÀI

I. SƠ LƯỢC VỀ SINH VIÊN:


Họ và tên: Phạm Xuân Hòa
Sinh ngày: 01/05/1997
Nơi sinh: Mỹ Thủy – Lệ Thủy - Quảng Bình
Ngành học: Công nghệ thông tin
Lớp: ĐH Công nghệ thông tin
Khóa: 62
Khoa: Kỹ thuật - Công nghệ thông tin
Địa chỉ liên hệ: Mỹ Thủy – Lệ Thủy - Quảng Bình
Điện thoại: 0762169854
Email: tieucaca876@gmail.com
II. QUÁ TRÌNH HỌC TẬP (kê thành tích của sinh viên từ năm thứ 1 đến năm đang
học):
* Năm thứ 1:
Ngành học: Công nghệ thông tin
Khoa: Kỹ thuật - Công nghệ thông tin
Kết quả xếp loại học tập: Xuất Sắc
Sơ lược thành tích:
* Năm thứ 2:
Ngành học: Công nghệ thông tin
Khoa: Kỹ thuật - Công nghệ thông tin
Kết quả xếp loại học tập: Xuất sắc
Sơ lược thành tích:

Xác nhận của khoa Sinh viên chịu trách nhiệm chính
thực hiện đề tài
(ký, họ và tên)

Ngày 28 tháng 10 năm 2022


PHẦN 1: MỞ ĐẦU
1. Lý do chọn đề tài
Trong những năm gần đây, với sự phát triển của khoa học và kĩ thuật, việc sử dụng
camera giám sát đã không còn xa lạ với cuộc sống của mọi người. Những hệ thống, nền
tảng camera giám sát an ninh đang phát triển và hoàn thiện nhằm đáp ứng nhu cầu của
con người. Trong việc giám sát an ninh trước kia chúng ta phải bố trí con người để giám
sát theo dõi gửi cảnh báo khi có những sự cố xảy ra thì rất tốn nhân lực và thời gian.
Nhưng giờ đây, với sự phát triển mạnh mẽ của công nghệ nhằm đáp ứng đầy đủ nhu cầu
của người dùng và doanh nghiệp thì những loại hình công nghệ giám sát an ninh mới ra
đời. Con người được thay thế bằng các hệ thống camera giám sát đặt tại những vị trí chỉ
định để liên tục thu hình và gửi về hệ thống máy chủ cho người giám sát theo dõi. Nhờ
vậy mà tiết kiệm được thời gian và chi phí nhân lực, bên cạnh đó còn làm cho hình ảnh
của cá nhân, doanh nghiệp được chuyên nghiệp hiện đại hơn. Bên cạnh đó nếu có bất kì
sự cố nào xảy ra, hệ thống camera an ninh sẽ gi lại, từ đó làm tài liệu bằng chứng để tìm
ra được nguyên nhân và khắc phục hậu quả vấn đề. Hệ thống còn tăng cường công tác
bảo mật, an toàn-an ninh.
Có thể nói, việc giám sát an ninh là lĩnh vực quan trọng và được quan tâm đến nhiều
trong công chúng. Từ khi mà công nghệ thông tin ngày càng được phát triển kết hợp với
trí tuệ nhân tạo ra đời cùng với sự phát triển của xã hội thì việc giám sát an ninh ngày
càng vô cùng quan trọng. Tuy nhiên hệ thống camera giám sát hiện nay còn tồn tại một
số nhược điểm như: hệ thống tuy đã thực hiện giám sát một số chức năng cơ bản nhưng
chưa có chức năng tự động cảnh báo cho người giám sát. Bởi vậy, người giám sát vẫn
luôn phải theo dõi màn hình hệ thống 24/24h để phát hiện và chủ động phòng tránh các
rủi ro có thể xảy đến. Bên cạnh đó, hiện nay với sự phát triển của kĩ thuật học sâu, hiệu
năng giám sát cho các hệ thống camera an ninh có thể được cải thiện rất nhiều.
Thế nên khá là dễ hiểu cho sự cấp thiết của một nền tảng giám sát an ninh mới ra
đời với các chức năng hỗ trợ người dùng tiết kiệm thời gian và công sức, phát hiện các sự
cố một cách nhanh chóng. Là sinh viên công nghệ thông tin, chúng em nhận thấy sự cần
thiết phải tìm hiểu đề tài “Nghiên cứu xây dựng ứng dụng hệ thống cảnh báo dựa trên
camera giám sát”. Ngoài ra với sự phát triển của Internet thì việc giám sát bằng camera
qua mạng Internet đã giúp việc giám sát cảnh báo hiệu quả hơn, mọi lúc mọi nơi. Một
trong những dịch vụ phát triển mạnh mẽ trong thời gian gần đây là dịch vụ giám sát và
cảnh báo thông qua Internet. Đặc biệt với sự phổ thông của điện thoại thông minh thì việc
cảnh báo cho người dùng thông qua điện thoại thông minh ngày càng hiệu quả hơn bao
giờ hết. Và hệ thống này được xây dựng để nhằm nghiên cứu các phương pháp mới, được
sử dụng rộng rãi trong thực tế và kỳ vọng sẽ trở thành một nền tảng được phát triển để áp
dụng vào các khu vực phát triển của thành phố Đồng Hới. Đây là một cơ hội tốt cho sinh

1
viên chúng em áp dụng kiến thức đã học vào thực tế và đặc biệt là góp phần thúc đẩy sự
phát triển ứng dụng khoa học công nghệ vào giáo dục.
2. Mục tiêu
Mục tiêu chung: Nghiên cứu và xây dựng thành công hệ thống cảnh báo cháy dựa
trên camera giám sát
Mục tiêu cụ thể:
- Xây dựng thành công hệ thống với giao diện đơn giản, dễ sử dụng.
- Xây dựng thành công các chức năng hệ thống như phát hiện cháy, xem các camera
hoạt động, gửi cảnh báo, xem lại hình ảnh các khu vực xảy ra sự cố.
- Xây dựng thành công hệ thống gửi được cảnh báo thông qua email, các ứng dụng
tin nhắn thời gian thực.
- Xây dựng thiết kế thành công hệ thống ghi được cảnh báo vào hệ thống để làm tư
liệu cho người giám sát.
3. Đối tượng, phạm vi nghiên cứu
* Đối tượng nghiên cứu
 Hệ thống camera giám sát
 Các phương pháp gửi cảnh báo đến người dùng
 Các phương pháp phát hiện cháy
* Phạm vi nghiên cứu
 Các phương pháp phát hiện cháy.
 Các phương pháp có hiệu năng tốt trong giải quyết bài toán.
4. Nội dung nghiên cứu
- Nghiên cứu, tìm hiểu các ngôn ngữ lập trình web phù hợp và các công cụ bổ trợ
khác cho thiết kế web.
- Nghiên cứu, tìm hiểu các mô hình cảnh báo cháy dựa trên kĩ thuật học sâu.
- Mô tả chi tiết các chức năng cần có của trang web và xây dựng bố cục giao diện
cho trang web.
- Cài đặt trang web và hoàn thiện sản phẩm.
5. Phương pháp nghiên cứu
Để thực hiện nội dung nghiên cứu đã đề ra, đề tài sử dụng các phương pháp nghiên
cứu chính sau:
- Phương pháp nghiên cứu tài liệu lý thuyết liên quan tới vấn đề
- Nghiên cứu các công trình đã được công bố liên quan tới vấn đề
- Phương pháp lập trình, thử nghiệm
- Phương pháp phân tích, đánh giá
2
6. Bố cục
Đề tài được trình bày trong 3 phần:
Phần I. Mở đầu
Phần II. Nội dung
Chương 1. Cơ sở lý thuyết
Chương 2. Phân tích và thiết kế hệ thống
Chương 3. Cài đặt, giao diện và thao tác
Phần III. Kết luận

3
PHẦN 2: NỘI DUNG
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
Các hệ thống giám sát an ninh đã được nghiên cứu và ứng dụng nhiều trong các
thành phố ở Việt Nam và trên toàn thế giới. Các hệ thống đã tạo ra các môi trường và các
phần mềm nhằm đáp ứng nhu cầu của con người. Đặc biệt với sự phát triển của công
nghệ hình ảnh, con người đã tạo ra camera giúp giám sát bằng hình ảnh được áp dụng
mọi nơi, từ cơ quan, doanh nghiệp, trường học, gia đình đến phương tiện di chuyển và
những nơi công cộng. Công nghệ của camera đã phát triển hơn 50 năm, từ những camera
tương tự đến camera IP và hình ảnh được cải thiện với chất lượng cao. Minh chứng đó là
các hệ thống giám sát an ninh như là: hệ thống phát hiện người vi phạm khi tham
gia giao thông, hệ thống còi báo động, hệ thống kiểm soát vào ra,… Trong những năm
gần đây, ngày càng có nhiều phương pháp được đề xuất nhằm đạt được độ chính xác cao
cũng như có thể áp dụng để phát triển các hệ thống thực tế nhằm nâng cao chất lượng hệ
thống.
Đề tài tập trung nghiên cứu đề xuất các phương pháp nhằm giải quyết một vài vấn
đề như: Phát hiện sự cố, gửi cảnh báo, khoanh vùng sự cố. Phương pháp này có ưu điểm
là nhanh chóng xác định được các vùng có sự cố và gửi cảnh báo tới người dùng một
cách chính xác mà không cần người dùng phải giám sát và gọi điện.
Ngoài ra với sự phát triển của công nghệ thông tin và sự phát triển của xã hội. Qúa
trình phát triển và phát hiện các sự cố được thực hiện hoàn toàn thông qua môi trường
mạng máy tính. Việc sử dụng các hệ thống này sẽ giúp việc giám sát cảnh báo hiệu quả
chính xác hơn. Hiện nay một số nhà cung cấp đã triển khai các dịch vụ giám sát hình ảnh
bằng camera bằng Internet đến các doanh nghiệp, tổ chức lần hộ gia đình như dịch vụ
Megavnn của VNPT, dịch vụ IP Camera của Viettel hay dịch vụ Camera Cloud của FPT.
Tuy nhiên, vì còn nhiều hạn chế nên các dịch vụ hiện tại vẫn chưa phổ biến.
Hiện nay trên nhiều tỉnh thành trên toàn quốc đã chính thức áp dụng các hệ thống
camera giám sát để duy trì trật tự an ninh ví dụ như ở TP HCM đã vận hành hệ thống
giám sát trên quốc lộ 1A [1]. Ở khu vực Đồng Hới, hệ thống camera an ninh cũng đã
được lắp đặt và phát triển để giám sát và đáp ứng cơ bản một số mục tiêu cơ bản nhằm hỗ
trợ việc an ninh của khu vực thành phố. Tuy nhiên với sự phát triển của ngành công nghệ
thông tin tại thành phố thì hệ thống camera an ninh lại chưa đáp ứng được các nhu cầu về
cảnh báo sự cố như: cảnh báo cháy trong đô thị [2], cảnh báo có đánh nhau [3], truy vết
người ở các khu vực công cộng [4].

4
1.1. Giới thiệu môi trường phát triển web Django
1.1.1. Django là gì?
Django[5] là một nền tảng web framework sử dụng ngôn ngữ Python được phát triển
bởi Adrian Holovaty và Simon Willison từ năm 2003. Nó dựa trên python, nghĩa là mọi
người phải viết hầu hết mã của dự án bằng Python. Nhưng Django đi kèm với rất nhiều
mã soạn sẵn và do đó nó trở nên khá nhanh trong quá trình phát triển. Django được phát
triển dựa trên kiến trúc MVT (Model-View-Template) thay vì MVC (Model-View-
Controller). Django là một khuôn khổ mã nguồn mở, nó được duy trì bởi Tổ chức Quỹ
Phần mềm Django. Bởi vì Framework này được xây dựng bởi các nhà phát triển có kinh
nghiệm nên nó có khả năng xử lý hầu hết những phần phức tạp của việc phát triển web.
Do đó, mọi người có thể tập trung vào việc viết app mà không cần phải dừng lại để kiểm
tra. Django miễn phí và là open-source. Framework này có một cộng đồng người dùng
đông đảo và có nhiều tài liệu hỗ trợ.
1.1.2. Tính chất của Django
- Độ hoàn thành cao:
Django cung cấp hầu hết mọi thứ mà các developer có thể muốn để phát triển web
theo hướng mình muốn.
Tất cả các phần trong framework hoạt động liền mạch với nhau, tuân theo một
nguyên tắc thiết kế nhất quán và có tài liệu để mọi người tham khảo.
Nhờ đó, mọi người có thể vừa phát triển web theo phong cách riêng, vừa tiết kiệm được
thời gian
- Linh hoạt:
Django có thể sử dụng để xây dựng hầu hết mọi loại trang web- từ hệ thống quản lý
nội dung (như wiki), cho đến các trang mạng xã hội, tin tức.
Nó có thể hoạt động cùng với các framework bên ngoài và cũng có thể cung cấp nội
dung ở hầu hết mọi định dạng (bao gồm HTML, RSS feeds, JSON, XML,..v..v..).
Framework này còn cung cấp các tùy chọn khác nhau cho hầu hết các chức năng (như
công cụ tạo template, cơ sở dữ liệu phổ biến,..).
- Bảo mật:
Django giúp developer tránh được nhiều lỗi bảo mật phổ biến bằng cách cung cấp
framework có khả năng tự bảo vệ trang.
Ví dụ: Django cung cấp một giải pháp an toàn để quản lý tài khoản người dùng và
mật khẩu (password), tránh những lỗi phổ biến như đưa thông tin phiên vào ở nơi dễ bị
tấn công như cookie (thay vào đó cookie chỉ chứa key còn dữ liệu thực tế được lưu trữ
trong database) hoặc trực tiếp lưu trữ password chứ không phải lưu trữ password hash.
5
Django còn bảo vệ website khỏi những lỗ hổng khỏi những loại tấn công mạng như:
tấn công SQL injection, Cross-site Scripting, cross-site request forgery và clickjacking.
- Khả năng mở rộng:
Django sử dụng kiến trúc thành phần riêng nên mọi người có thể mở rộng quy mô
bằng cách thêm phần cứng vào các cấp độ (máy chủ bộ nhớ đệm, máy chủ cơ sở dữ liệu
hoặc máy chủ ứng dụng).
Instagram là ví dụ rõ ràng nhất cho khả năng mở rộng này.
- Khả năng duy trì:
Code của Django được viết bằng cách sử dụng các nguyên tắc và mẫu thiết kế
khuyến khích việc tạo mã có thể bảo trì và tái sử dụng.
Nó còn thúc đẩy việc nhóm các chức năng liên quan thành các “ứng dụng” có thể
tái sử dụng, từ đó giúp website có khả năng duy trì cao hơn.
1.1.3. Ưu điểm của Django
- Django đơn giản và nhanh chóng
Một trong những mục tiêu chính của Django là đơn giản hóa công việc cho
developer. Để làm điều đó, Django framework sử dụng:
+ Nguyên tắc phát triển nhanh chóng: tức là các nhà phát triển có thể thực hiện
nhiều iteration một lúc thay vì phải bắt đầu lại từ đầu.
+ Nguyên lý DRY (Don’t Repeat Yourself – không lặp lại)- có nghĩa là các nhà phát
triển có thể tái sử dụng các đoạn code hiện có và tập trung vào nó.
Các đoạn mã trùng lặp không cần thiết sẽ được framework này loại bỏ, từ đó giảm
số lượng code. Nhờ đó, bạn sẽ tiết kiệm được nhiều thời gian hơn.
- Bảo mật
Bảo mật cũng là ưu tiên hàng đầu của Django. Nó là một trong những framework có
hệ thống bảo mật tốt nhất hiện nay.
Nhờ hệ thống đó, các nhà phát triển có thể tránh các vấn đề về bảo mật phổ biến
như: Clickjacking; Cross-site scripting; Cross-site request forgery; SQL injection.
Framework này còn thường xuyên phát hành các bản vá bảo mật. Django được xem
là framework đi đầu trong việc phản hồi các lỗ hổng bảo mật và cách báo các framework
khác.
- Phù hợp với mọi dự án website
Với Django, Nó có thể giải quyết các dự án ở bất kỳ quy mô nào (từ trang web đơn
giản cho đến những ứng dụng web high-load).

6
+ Django có nhiều tính năng bổ sung và có thể mở rộng. Bạn có thể tạo các ứng
dụng xử lý lưu lượng truy cập lớn hoặc khối lượng lớn thông tin thông qua Django.
+ Django đa nền tảng (cross-platform). Bạn có thể chạy dự án trên Mac, Linux hoặc
PC đều được.
+ Django hoạt động với hầu hết các database chính và cho phép sử dụng cơ sở dữ
liệu khác nhau tùy thuộc vào dự án. Thậm chí, bạn có thể sử dụng nhiều cơ sở dữ liệu
cùng lúc.
- Cộng đồng người dùng và thiết lập hoàn thiện
Django set up khá tốt. Điều này đã được chứng nhận bởi thời gian và một số người
sử dụng khung công tác này.
Nó có một big user cộng đồng, được hỗ trợ truy cập thông qua nhiều diễn đàn, kênh
và các chuyên trang web.
Bạn sẽ dễ dàng nhận được sự trợ giúp khi các vấn đề liên quan đến Django cũng
như dễ dàng tìm thấy nhà phát triển chạy dự án cho công ty mình (nếu bạn có ý định chạy
dự án trên Django).
- Django có chi tiết tài liệu thư viện và được cập nhật liên tục.
Nhờ đó bạn hoàn toàn có thể thích ứng nhanh chóng với các thay đổi của khung này
(nếu có).
Các vấn đề liên quan sẽ luôn được giải quyết ngay khi chúng tôi phát sinh. Phần
mềm được cập nhật liên tục và các gói mới được phát hành để bạn làm việc với Django
ngày càng thuận lợi.
1.1.4. Tìm hiểu về MVT model của Django
Django giới thiệu rằng họ sử dụng MVC mô hình (Model View Control). Sự thật là
Django có đi theo MVC mô hình nhưng lại phát triển theo một hướng rất khác.
Django cho rằng khung chính là quyền kiểm soát. Và trên thực tế, các thành viên
lập trình lớn chỉ làm việc với View, Model, Template và View. Từ đó cho ra cái tên
Model View Template của Django, trong đó:
- Model: đóng vai trò tương tác với dữ liệu của ứng dụng. Chúng ta có thể coi
Model của Django là phần trung gian giữa cơ sở dữ liệu và View (Model giúp định nghĩa
cách thức lưu trữ, truyền nhận dữ liệu giữa database và View)
- View: có chức năng tiếp nhận dữ liệu cũng như các request từ người dùng và trả
về các response. View cũng tương tác với cơ sở dữ liệu để truyền dữ liệu sang Template
nhằm phục vụ mục đính hiển thị.
- Template: được viết dưới dạng .html file sử dụng HTML, CSS, Javascript…nhằm
cung cấp giao diện hiển thị cho người dùng.

7
Hình 1.1. Mô hình MVT của Django
1.1.5. Nguồn gốc của Django
- Năm 2003, Django được tạo ra khi các lập trình viên web của tờ báo Lawrence
Journal-World, Adrian Holovaty và Simon Willison, bắt đầu sử dụng Python để xây dựng
các ứng dụng. Jacob Kaplan-Moss đã sớm được thuê trong quá trình phát triển của
Django ngay trước khi kỳ thực tập của Simon Willison kết thúc.
- Vào tháng 7 năm 2005 Django được phát hành công khai theo giấy phép BSD và
được đặt theo tên của nghệ sĩ guitar Django Reinhardt Adrian Holovaty là một người
chơi guitar jazz người Roman.
- Vào tháng 6 năm 2008, có thông báo rằng Quỹ Phần mềm Django (DSF) mới
được thành lập sẽ duy trì Django trong tương lai.
- Có rất nhiều công ty đã phát triển các ứng dụng của mình bằng Django. Dưới đây
là một số công ty điển hình :
+ Instagram là một ứng dụng xã hội rất phổ biến. Django là cốt lõi của Instagram và
Django có khả năng tích hợp tuyệt vời với các công nghệ khác như ứng dụng iOS và
Android. Nó cho phép Instagram khởi chạy nhanh chóng và xử lý hàng triệu người dùng
hoạt động cùng lúc.

8
Hình 1.2. Logo Instagram
+ Disqus: Các nhà phát triển đã sử dụng Python và Django để xây dựng ứng dụng từ
đầu. Họ muốn trang web của họ được xử lý một số không lớn. của những người dùng
đang hoạt động cùng một lúc. Họ cũng tạo ra sentry, một ứng dụng kiểm tra lỗi và đây là
một công nghệ hiện đại cũng dựa trên Django.

Hình 1.3. Logo Disqus


+ Mozilla Firefox: Đa số tất cả mọi người chắc hẳn đã làm việc một chút trên
firefox. Vì vậy mozilla Firefox là một trình duyệt web mã nguồn mở và miễn phí được
phát triển bởi mozilla Foundation

Hình 1.4. Logo Mozilla Firefox


+ Spotify: Spotify đã thay đổi cách mọi người nghe nhạc bằng cách triển khai ML
thông qua Python. Để tích hợp mọi thứ, nó sử dụng Django cho các ứng dụng web của
mình và do đó, mọi người sẽ có được trải nghiệm python đầy đủ trên Spotify.

Hình 1.5. Logo Sprotify


+ YouTube: Họ đã sử dụng PHP trước đây, nhưng bây giờ họ đang chuyển sang
Django. Django là một trợ giúp lớn cho nhóm các nhà phát triển YouTube, cho phép họ
hành động nhanh chóng và hoàn hảo. Đồng thời duy trì tính bảo mật và tốc độ của trang
web.

9
Hình 1.6. Logo Youtube
1.2. Ngôn ngữ lập trình Python
1.2.1. Giới thiệu về Python
Python[6] là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng
(object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic
semantics). Python hỗ trợ các module và gói (packages), khuyến khích chương trình
module hóa và tái sử dụng mã. Trình thông dịch Python và thư viện chuẩn mở rộng có
sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có
thể được phân phối tự do.

Hình 1.7. Logo ngôn ngữ Python


1.2.2. Các đặc điểm của Python
- Ngữ pháp đơn giản, dễ đọc.
- Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented)
- Hỗ trợ module và hỗ trợ gói (package)
- Xử lý lỗi bằng ngoại lệ (Exception)
- Kiểu dữ liệu động ở mức cao.
- Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập
trình.
- Có khả năng tương tác với các module khác viết trên C/C+
+ (Hoặc Java cho Jython, hoặc .Net cho IronPython).
- Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface).
Python dễ dàng kết nối với các thành phần khác:

10
- Python có thể kết nối với các đối tượng COM, .NET (Ironpython, Python for .net),
và CORBA, Java… Python cũng được hỗ trợ bởi Internet Communications Engine
(ICE) và nhiều công nghệ kết nối khác.
- Có thể viết các thư viện trên C/C++ để nhúng vào Python và ngược lại.
Python là ngôn ngữ có khả năng chạy trên nhiều nền tảng.
- Python có cho mọi hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và
những hệ điều hành khác. Thậm chí có cả những phiên bản chạy trên .NET, máy ảo Java,
và điện thoại di động (Nokia Series 60). Với cùng một mã nguồn sẽ chạy giống nhau trên
mọi nền tảng.
Python rất đơn giản và dễ học
- Python có cộng đồng lập trình rất lớn, hệ thống thư viện chuẩn, và cả các thư viện
mã nguồn mở được chia sẻ trên mạng.
Python là ngôn ngữ mã nguồn mở
- Cài đặt Python dùng giấy phép nguồn mở nên được sử dụng và phân tối tự do,
ngay cả trong việc thương mại. Giấy phép Python được quản lý bởi Python Software
Foundation.
1.2.3. Lịch sử của Python
Python đã được hình thành vào cuối những năm 1980, và việc thực hiện nó vào
tháng 12 năm 1989 bởi Guido van Rossum tại Centrum Wiskunde & Informatica
(CWI) ở Hà Lan như là một kế thừa cho ngôn ngữ ABC (tự lấy cảm hứng từ SETL) có
khả năng xử lý ngoại lệ và giao tiếp với Hệ điều hành Amoeba. Van Rossum là tác giả
chính của Python, và vai trò trung tâm của ông trong việc quyết định hướng phát triển
của Python.
Về nguồn gốc của Python, Van Rossum đã viết vào năm 1996:
Hơn sáu năm trước, vào tháng 12 năm 1989, tôi đã tìm kiếm một dự án lập trình "sở
thích" mà nó đã chiếm đóng tâm trí tôi trong suốt tuần lễ Giáng sinh. Văn phòng của
tôi ... sẽ đóng cửa, nhưng tôi đã có một máy tính ở nhà, và không có nhiều thứ khác trên
tay. Tôi quyết định viết một bộ thông dịch (interprester) cho ngôn ngữ kịch bản mới mà
tôi đã từng nghĩ đến: một hậu duệ của ABC có thể hấp dẫn các hacker Unix/C. Tôi đã
chọn Python như là một tiêu đề làm việc cho dự án.

11
Hình 1.8. Guido van Rossum
Python 2.0 đã được phát hành vào ngày 16 tháng 10 năm 2000 và có nhiều tính
năng mới, bao gồm bộ thu gom rác theo chu kỳ (cycle-detecting garbage) và hỗ
trợ Unicode. Với việc phát hành này quá trình phát triển đã được thay đổi và trở nên
minh bạch hơn và cộng đồng hậu thuẫn
Python 3.0 được phát hành năm 2008, sau một thời gian dài thử nghiệm.
Cho tới nay, Python đang có phiên bản mới nhất 3.10.2
1.3. Kỹ thuật học sâu
Deep Learning là một chức năng của trí tuệ nhân tạo (AI), bắt chước cách bộ não
con người hoạt động để xử lí dữ liệu, tạo ra các mẫu để sử dụng cho việc đưa ra quyết
định.
1.3.1. Khái niệm
Deep Learning (học sâu) có thể được xem là một lĩnh vực con của Machine
Learning (học máy) – ở đó các máy tính sẽ học và cải thiện chính nó thông qua các thuật
toán. Deep Learning được xây dựng dựa trên các khái niệm phức tạp hơn rất nhiều, chủ
yếu hoạt động với các mạng nơ-ron nhân tạo để bắt chước khả năng tư duy và suy nghĩ
của bộ não con người.
Thật ra các khái niệm liên quan đến mạng nơ-ron nhân tạo và Deep Learning đã
xuất hiện từ khoảng những năm 1960, tuy nhiên nó lại bị giới hạn bởi khả năng tính toán
và số lượng dữ liệu lúc bấy giờ. Trong những năm gần đây, những tiến bộ trong phân tích
dữ liệu lớn (Big Data) đã cho phép ta tận dụng được tối đa khả năng của mạng nơ-ron
nhân tạo.

12
Mạng nơ-ron nhân tạo chính là động lực chính để phát triển Deep Learning. Các
mạng nơ-ron sâu (DNN) bao gồm nhiều lớp nơ-ron khác nhau, có khả năng thực hiện các
tính toán có độ phức tạp rất cao. Deep Learning hiện đang phát triển rất nhanh và được
xem là một trong những bước đột phá lớn nhất trong Machine Learning.
1.3.2. Cách thức hoạt động
Deep Learning là một phương pháp của Machine Learning. Mạng nơ-ron nhân tạo
trong Deep Learning được xây dựng để mô phỏng khả năng tư duy của bộ não con người.
Một mạng nơ-ron bao gồm nhiều lớp (layer) khác nhau, số lượng layer càng nhiều
thì mạng sẽ càng “sâu”. Trong mỗi layer là các nút mạng (node) và được liên kết với
những lớp liền kề khác. Mỗi kết nối giữa các node sẽ có một trọng số tương ứng, trọng số
càng cao thì ảnh hưởng của kết nối này đến mạng nơ-ron càng lớn.
Mỗi nơ-ron sẽ có một hàm kích hoạt, về cơ bản thì có nhiệm vụ “chuẩn hoá” đầu ra
từ nơ-ron này. Dữ liệu được người dùng đưa vào mạng nơ-ron sẽ đi qua tất cả layer và trả
về kết quả ở layer cuối cùng, gọi là output layer.

Hình 2-1: Cách thức hoạt động kỹ thuật học sâu

Trong quá trình huấn luyện mô hình mạng nơ-ron, các trọng số sẽ được thay đổi và
nhiệm vụ của mô hình là tìm ra bộ giá trị của trọng số sao cho phán đoán là tốt nhất.
Các hệ thống Deep Learning yêu cầu phần cứng phải rất mạnh để có thể xử lý được
lượng dữ liệu lớn và thực hiện các phép tính phức tạp. Nhiều mô hình Deep Learning có
thể mất nhiều tuần, thậm chí nhiều tháng để triển khai trên những phần cứng tiên tiến
nhất hiện nay.
1.3.3. Ưu điểm
Deep Learning là một bước ngoặt to lớn trong lĩnh vực trí tuệ nhân tạo, cho phép
khác nhà khoa học dữ liệu xây dựng nhiều mô hình có độ chính xác rất cao trong lĩnh vực
13
nhận dạng ảnh, xử lý ngôn ngữ tự nhiên, xử lý giọng nói,… Một số ưu điểm vượt trội của
Deep Learning gồm có:
 Kiến trúc mạng nơ-ron linh hoạt, có thể dễ dàng thay đổi để phù hợp với nhiều vấn
đề khác nhau.
 Kiến trúc mạng nơ-ron linh hoạt, có thể dễ dàng thay đổi để phù hợp với nhiều vấn
đề khác nhau.
 Tính tự động hoá cao, có khả năng tự điều chỉnh và tự tối ưu.
 Có khả năng thực hiện tính toán song song, hiệu năng tốt, xử lý được lượng dữ
liệu lớn.
1.3.4. Nhược điểm
Bên cạnh những ưu điểm, mặt khác, hiện nay Deep Learning vẫn còn nhiều khó
khăn và hạn chế, chẳng hạn như:
 Cần có khối lượng dữ liệu rất lớn để tận dụng tối đa khả năng của Deep Learning.
 Chi phí tính toán cao vì phải xử lý nhiều mô hình phức tạp.
 Chưa có nền tảng lý thuyết mạnh mẽ để lựa chọn các công cụ tối ưu cho Deep
Learning.
1.3.5. Các kỹ thuật học sâu
Có rất nhiều kỹ thuật và thuật toán Deep Learning khác nhau, từ đơn giản đến vô
cùng phức tạp, có thể ứng dụng vào hầu hết các bài toán trong lĩnh vực trí tuệ nhân tạo
hiện nay:
 Mạng nơ-ron cổ điển
 Mạng nơ-ron tích chập (CNN)
 Mạng nơ-ron hồi quy (RNN)
 Mạng sinh đối nghịch (GAN)
 Học tăng cường sâu
1.4. Mạng nơ-ron tích chập (CNN)
Mạng nơ-ron tích chập (Convolutional Neural Network – CNN) là một kiến trúc
Neural Network nhân tạo nâng cao, được xây dựng để giải quyết các bài toán phức tạp,
đặc biệt là liên quan đến xử lý hình ảnh.
Tích chập là một khái niệm trong xử lý tín hiệu số nhằm biến đổi thông tin đầu
vào qua một phép tích chập với bộ lọc, nhằm trả về đầu ra là một tín hiệu mới. Tín hiệu
này sẽ giảm bớt những đặc trưng mà bộ lọc không quan tâm, giữ lại những đặc trưng
chính và quan trọng nhất.
Bên cạnh input layer và output layer, mô hình CNN còn có thêm một sampling
layer để giới hạn số lượng nơ-ron tham gia vào các layer tương ứng. Việc xây dựng mô
hình trải qua ba giai đoạn chính:

14
 Quá trình tích chập (convolution): Thông qua các tích chập giữa ma trận đầu vào
với bộ lọc để tạo thành các đơn vị trong một tầng mới. Quá trình này có thể diễn ra
liên tục ở phần đầu của mạng và thường sử dụng kèm với hàm kích hoạt ReLU.
Mục tiêu của tầng này là trích suất đặc trưng hai chiều.
 Quá trình tổng hợp (max pooling): Giảm kích thước khối ma trận đầu vào thông
qua việc tìm ra 1 giá trị đại diện cho mỗi một vùng không gian mà bộ lọc đi qua sẽ
không làm thay đổi các đường nét chính của bức ảnh nhưng lại giảm được kích
thước của ảnh.
 Quá trình kết nối hoàn toàn (fully connected): Sau khi đã giảm kích thước đến một
mức độ hợp lý, ma trận cần được trải phẳng (flatten) thành một vector và sử dụng
các kết nối hoàn toàn giữa các tầng. Tầng kết nối hoàn toàn cuối cùng (fully
connected layer) sẽ có số lượng đơn vị bằng với số lớp.
Dựa vào những đặc điểm của mình, các ứng dụng phổ biến nhất của mạng CNN gồm
có: Nhận diện, phân tích và phân khúc hình ảnh, phân tích video, xử lý ngôn ngữ tự
nhiên,…

Hình 2-2: Mô hình mạng nơ-ron tích chập (CNN)

15
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1. Phân tích thiết kế hệ thống
2.1.1. Bài toán
Ngôn ngữ lập trình là một trong những môn học nền tảng của ngành công nghệ
thông tin, rất khó để một giảng viên có thể truyền tải nội dung của các bài toán, kiểm tra
và sửa lỗi cho tất cả học viên trong một lớp. Đặc biệt trong giai đoạn sinh viên mới học
lập trình, một chương trình cần được giảng viên kiểm tra và sửa chữa nhiều lần. Vì vậy,
kỹ năng lập trình là một trở ngại lớn đối với hầu hết các bạn sinh viên khi học lập trình.
Đặc biệt đối với sinh viên chuyên ngành công nghệ thông tin, việc đánh giá chất lượng
thuật toán về thời gian chạy chương trình, hiệu quả, khả năng bao quát khó có thể đánh
giá toàn diện thông qua phân tích chương trình.
Hệ thống Kiểm tra và Đánh giá Kỹ năng Lập trình được thiết kế nhằm đáp ứng nhu
cầu rèn luyện kỹ năng, tự học, nâng cao kỹ năng lập trình, học thuật toán. Đảm bảo chất
lượng, kiến thức tốt cho học sinh khi làm bài. Sinh viên khi sử dụng hệ thống phải giải
quyết các bài toán với nhiều thể loại và các mức độ khó khác nhau. Việc xây dựng một
hệ thống đánh giá kỹ năng lập trình vừa giúp học sinh không phải tìm sách, vừa có thể
giúp học sinh ít tốn tiền mua tài liệu ôn tập và truy cập vào thư viện bài tập lớn các cấp.
Tuy nhiên vẫn phải đảm bảo vừa đủ kiến thức sách vở, rút ngắn thời gian tìm tài liệu, giải
bài tập. Kiến thức đủ rộng nên một phong trào tích cực để tìm ý tưởng đòi hỏi người học
phải suy nghĩ, động não, sau đó thảo luận, lựa chọn và sắp xếp các ý một cách hợp lý để
làm rõ và làm nổi bật vấn đề cần giải quyết. Như vậy, sinh viên sẽ rút ra kiến thức khóa
học, ý tưởng và kỹ năng giao tiếp khi họ tạo chương trình.
2.1.2. Đối với người dùng
- Đăng ký người: Người dùng đăng ký trực tiếp trên hệ thống bằng cách nhập vào
thông tin email và password và password confirm. Hệ thống sẽ kiểm tra thông tin nhập
vào có hợp lệ hay không. Nếu hợp lệ thì thông tin sẽ được gửi lên server để thực hiện
đăng ký. Dữ liệu người dùng sẽ được lưu lại hệ thống.
- Đăng nhập: Người dùng thực hiện nhập email và password. Hệ thống tiến hành
kiểm tra thông tin nhập vào có hợp lệ hay không. Nếu hợp lệ thì thông tin sẽ được gửi lên
server để truy vấn và server sẽ trả lại thông tin của người dùng, sau đó báo đăng nhập
thành công.
- Các kỳ thi: Hiển thị các kì thi, lịch của các kì thi sắp tới. Chức năng tìm kiếm các
kì thi, chọn kì thi muốn tham gia và tham gia vào kì thi.
- Danh sách bài: Hiển thị danh sách bài của các kì thi diễn ra, được sắp xếp theo
nhóm.Chức năng tìm kiếm các bài theo dạng đề và theo nhóm.

16
- Các bài nộp: Hiển thị danh sách các bài toán đã được nộp của tất cả và cá nhân
người dùng. Chức năng lọc các bài nộp, lọc theo ngôn ngữ, tổ chức, trạng thái, thống kê
trạng thái.
- Thành viên: Hiển thị Bảng xếp hạng các thành viên và tổ chức trên hệ thống,
- Thông tin: Hiển thị thông tin về hệ thống, máy chấm, các ngôn ngữ, phiên bản
trình chấm, custom checkers, Tips.
- Thư viện đề thi: Hiển thị các đề thi của các trường qua các năm
- Chỉnh sửa hồ sơ: Người dùng có thể đổi mật khẩu, bật xác thực hai yếu tố, đổi ảnh
đại diện.
2.1.3. Đối với admin
- Đăng nhập: admin thực hiện nhập email và password. Hệ thống tiến hành kiểm tra
thông tin nhập vào có hợp lệ hay không. Nếu hợp lệ thì thông tin sẽ được gửi lên server
để truy vấn và server sẽ trả lại thông tin của người dùng, sau đó báo đăng nhập thành
công.
- Bài: Admin quản lý tất cả các bài toán đã đăng, thêm bài và xóa bài với các thông
tin đầy đủ
- Bài đăng blog: Admin quản lý các bài đăng blog, thêm bài, khôi phục và xóa các
bài blog
- Nhận xét: Admin quản lý các nhận xét, thêm nhận xét, khôi phục và xóa các nhận
xét
- Hồ sơ người dùng: Admin quản lý hồ sơ tất cả các người dùng đăng kí vào hệ
thống, thêm, khôi phục và xóa người dùng
- Bài nộp: Admin quản lý tất cả các bài đã nộp. Thêm, khôi phục và xóa các máy
chấm.
- Kì thi: Quản lý các kì thi, thêm, khôi phục và xóa các kì thi, xếp hạng các kì thi.
2.2. Các biểu đồ hệ thống
2.2.1. Biểu đồ Use-case
- Use-case người dùng

17
Hình 2.10. Biểu đồ use-case người dùng
- Use-case admin

Hình 2.11. Biểu đồ use-case admin


- Use-case thông tin người dùng

18
Hình 2.12. Use-case thông tin người dùng
2.2.2. Sơ đồ hệ thống cảnh báo thông qua camera giám sát

Hình 2-3: Mô hình tổng thể hệ thống

19
Hình 2-4: Mô hình kiến trúc vật lý hệ thống

20
CHƯƠNG 3. CÀI ĐẶT, GIAO DIỆN VÀ THAO TÁC
3.1. Cài đặt
Hệ thống chạy trên nền Linux. Do điều kiện nghiên cứu, chúng tôi chọn Ubuntu
server làm nền tảng cài đặt.
- Tạo cơ sở dữ liệu: Chúng ta sẽ thiết lập cơ sở dữ liệu bằng MariaDB. DMOJ chỉ
được thử nghiệm để hoạt động với MySQL và nó không có khả năng hoạt động với bất
kỳ thứ gì khác. Vui lòng truy cập trang MariaDB và làm theo hướng dẫn tải xuống. Tiếp
theo, chúng ta nên thiết lập cơ sở dữ liệu. Bạn sẽ được yêu cầu nhập mật khẩu gốc mà
bạn vừa đặt, sau đó bạn nên thực hiện các lệnh dưới đây để tạo cơ sở dữ liệu cần thiết.
- Chuẩn bị môi trường:
+ Đầu tiên, tạo một môi trường ảo.
+ Sau đó kích hoạt nó.
- Cài đặt QBUOJ:
Chúng tôi dựa vào DMOJ và VNOJ được cung cấp trên thư viện mã nguồn mở để
chỉnh sửa các chức năng cũng như giao diện phù hợp hơn để phục vụ cho việc sử dụng
đặc thù trong Trường đại học Quảng Bình. Từ đó, xây dựng được hệ thống mã nguồn
riêng của QBUOJ được cung cấp tại địa chỉ https://github.com/qbuailab/QBUOJ.
Tiến hành tải và cài đặt các module liên quan bằng các dòng lệnh sử dụng các cú
pháp git và cài đặt python từ shell của hệ thống:
+ Cài đặt các thư viện của Python và môi trường ảo và cấu hình cho file
dmoj/local_settings.py. Chúng ta nên tạo một bản sao tệp cài đặt mẫu từ đây và đọc qua
nó, thực hiện các thay đổi nếu cần.
+ Tổng hợp các nội dung: QBUOJ sử dụng sass và autoprefixer để tạo các
bảng định kiểu trang web. QBUOJ đi kèm với một make_style.sh tập lệnh có thể được
chạy để biên dịch và tối ưu hóa các bảng định kiểu.Thu thập các tệp tĩnh như được chỉ
định và tạo các tệp quốc tế hóa.
+ Thiết lập bảng cơ sơ dữ liệu và tải một số dữ liệu ban đầu để cài đặt.
+ Thiết lập Celery, QBUOJ sử dụng Celery worker để thực hiện các công
việc nặng nhọc như đánh điểm số cho 1 tập các bài nộp.
+ Thiết lập uWSGI làm module kết nối python.
+ Thiết lập supervisord và cấu hình nó dùng để giám sát, kết nối site, bridge
và celery đã chạy hay chưa.
+ Cài đặt nginx làm môi trường giao diện của hệ thống, chỉnh sửa và đặt file
“nginx.conf” ở bất cứ nơi nào được cho để cài đặt nginx. Thông thường nginx các tệp
trang web được đặt tại “/etc/nginx/conf.d”. Tiếp theo kiểm tra xem có bất kì vấn đề nào
với nginx và tải lại cấu hình nginx. Sau đó, truy cập trang web ở nơi mà chúng ta đã thiết
lập để thực hiện bước xác minh.
21
- Cài đặt máy chấm Judge: Cài đặt judge trên cùng máy chủ hoặc trên các máy tính
riêng biệt tùy theo số lượng người dùng đồng thời.
+ Đầu tiên hãy thêm giáo khảo ở trên trang quản trị nằm trong
https://example.com/admin/judge. Cung cấp tên của máy chấm và khóa xác thực cho máy
chấm. Bạn có thể sử dụng nút “Tạo lại” để tạo lại khóa xác thực.
+ QBUOJ hỗ trợ cài đặt máy chấm thông qua Docker và gói PyPi. Ở đây
chúng tôi cài đặt với gói PyPi.
+ Cài đặt judge-server tại https://github.com/qbuailab/judge-server, sau đó
cấu hình judge bắt đầu bằng cách lấy khối “runtime” từ lệnh “dmoj-autoconf” và đặt nó ở
file mới judge.yml
+ Kết nối judge với hệ thống qua IP được chỉ định trong
BRIDGED_JUDGE_ADDRESS và port là 9999.
+ Cập nhật thư viện bài thi và test case thông qua các folder của máy chủ.
Nếu máy chấm và giao diện được chạy trên các máy khác nhau thì phải có cơ chế đồng
bộ dữ liệu giữa thư mục dữ liệu của hai máy.
Các thông tin cấu hình về cổng kết nối và thư mục chứa test case phải được khai báo
trong file cấu hình của hệ thống.
- Cài đặt các gói chương trình dịch. Một số gói chương trình dịch phổ biến: C, C++,
Python, Java, Pascal… được cài đặt thông qua các lệnh cài đặt và cấu hình để các chương
trình chạy bình thường. Sau đó tiến hành khai báo đường dẫn thông số thông qua các
chương trình dịch thông qua tệp cấu hình của hệ thống.
3.2. Sử dụng hệ thống và nhập dữ liệu
- Nhập đầu bài và số liệu của test case
+ Vào trang web đăng nhập tài khoản admin, từ bên phải phía dưới tên tài
khoản kích chọn “Quản trị” xuất hiện cửa sổ mới.
+ Chọn tab “Bài” sau đó chọn “Thêm” rồi điền các thông tin: Mã bài, Tên bài
toán, người đăng, hiển thị công khai, ngày đăng…. Tại ô soạn thảo để soạn nội dung đề
bài (hình 2.1).

22
Hình 3.1. Màn hình nhập các thông tin đề bài
+ Phía dưới ô soạn thảo đề bài tiếp tục điền thông tin như: phân loại, “dạng
đề” và “nhóm đề” bài phù hợp.
+ Tại mục “Điểm” số điểm đạt được khi hoàn thành bài tập sau đó tích vào ô
“cho phép điểm từng phần”.
+ Tại mục “Giới hạn”: “Giới hạn thời gian” là thời gian hoàn thành bài tập và
“Giới hạn bộ nhớ”.
+ Tại mục “Ngôn ngữ” chọn loại ngôn ngữ hoặc chọn tất cả (hình 2.2)

Hình 3.2. Màn hình nhập các thông tin đề bài


+ Tại mục “Giới hạn theo ngôn ngữ” điền các trường thông tin nếu có.
+ Thêm “Lời giải” cho đề bài nếu có.
+ Đóng góp bản dịch cho đầu bài bằng cách chọn “DỊCH ĐẦU BÀI”.

23
Khi đã hoàn thành tất cả các trường thông tin trên người dùng chọn các chế độ phù
hợp để lưu lại: “Lưu”, “Lưu và thêm mới”, “Lưu và tiếp tục chỉnh sửa”.

Hình 3.3. Màn hình nhập các thông tin đề bài


- Tổ chức kì thi
+ Tại giao diện trang chủ chọn “Kì thi” mở ra tab mới chọn “Thêm” điền
thông tin các trường “Mã kỳ thi”, “Tên kì thi”, tích chọn hiển thị công khai đưa thông tin
lên web (hình 2.4)

Hình 3.4. Màn hình thêm kì thi


+ Điền các trường tiếp theo của giao diện: “Lịch”, “Chi tiết”, “Format”,
“Rating”, “Truy cập, “Problems”… chọn các thông tin cuộc thi.

24
3.3. Giao diện ứng dụng được xây dựng
3.3.1. Màn hình trang chủ

Hình 3.5. Giao diện màn hình trang chủ


3.3.2. Đăng kí, đăng nhập, đăng xuất
- Nhập các thông tin ở trên màn hình và sau đó nhấn nút đăng kí
- Sau khi nhấn nút đăng kí
- Đăng kí thành công

Hình 3.6. Màn hình đăng kí


25
Hình 3.7. Màn hình đăng kí thành công

Hình 3.8. Email gửi về xác nhận tài khoản đăng kí


- Đăng nhập

26
Hình 3.9. Màn hình đăng nhập
- Đăng xuất

Hình 3.10. Màn hình đăng xuất thành công

27
3.3.3. Danh sách các bài

Hình 3.11. Màn hình danh sách các bài tập


- Chức năng Tìm kiếm các bài

3.3.4. Các bài nộp


- Chức năng lọc các bài nộp, thống kê
28
Hình 3.13. Màn hình tất cả các bài nộp

Hình 3.14. Chức năng lọc các bài tập


3.3.5. Thành viên
- Bảng xếp hạng theo tên, đóng góp, tổ chức

29
Hình 3.15. Màn hình xếp hạng các thành viên

Hình 3.16. Màn hình đóng góp của các thành viên

30
Hình 3.17. Màn hình các tổ chức
3.3.6. Thông tin

Hình 3.18. Màn hình các thông tin về hệ thống

31
3.3.7. Trang Admin

Hình 3.19. Màn hình trang admin


3.3.8. Các kì thi

Hình 3.20. Màn hình các kì thi

32
Hình 3.21. Màn hình lịch các kì thi
3.3.9. Tài liệu

Hình 3.22. Màn hình trang tài liệu

33
3.3.10.Màn hình máy chấm

Hình 3.23. Màn hình thông tin các máy chấm

Hình 3.24. Màn hình các ngôn ngữ của máy chấm

34
Hình 3.25. Màn hình các phiên bản ngôn ngữ của máy chấm

35
PHẦN 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Qua thời gian được học tập và tìm hiểu các công nghệ mới, sau thời gian thực tập,
tôi đã xây dựng hệ thống camera giám sát dưới dạng website với các chức năng phát hiện
đám cháy và gửi cảnh báo qua email và telegram. Hệ thống được xây dựng dựa trên môi
trường phát triển website Django và ngôn ngữ lập trình phổ biến python. Hệ thống đạt
được những kết quả nhất định:
- Xây dựng thiết kế thành công giao diện của hệ thống đảm bảo tính thẩm mỹ, thân
thiện, bố cục của hệ thống hợp lý trong trình bày các thông tin giúp cho người
dùng dễ tiếp cận.
- Xây dựng thành công các chức năng chính của hệ thống như: phát hiện đám cháy,
xem các camera hoạt động, gửi cảnh báo, xem lại hình ảnh các khu vực xảy ra sự
cố.
- Với thời gian và kỹ năng có hạn, đồng thời chưa có nhiều thời gian để kiểm thử hệ
thống và chưa rộng về lượng người dùng nên hệ thống còn thiếu sót rất nhiều tính
năng nên hướng phát triển và nghiên cứu thêm là:
- Có thể cảnh báo thêm ngoài cảnh báo cháy như cảnh báo có người lạ xâm nhập,
cảnh báo có xảy ra đánh nhau...
- Phát triển hệ thống đa quản lý.
- Vấn đề bảo mật an toàn thông tin cho hệ thống.
- Cải thiện mã nguồn tối ưu.

36
- TÀI LIỆU THAM KHẢO
[1]https://congly.vn/tp-hcm-chinh-thuc-van-hanh-he-thong-camera-giam-sat-tren-quoc-
lo-1a-206248.html, xem 12/03/2022.
[2] https://github.com/tobybreckon/fire-detection-cnn, xem 12/03/2022.
[3] https://gitlab.com/Shinobi-Systems/Shinobi, xem 12/03/2022.
[4] https://github.com/ArjunInventor/CogniTrack, xem 12/03/2022.
[5] Django, <https://www.djangoproject.com/>, xem 12/03/2022.
[6] Python, < https://www.python.org/>, xem 12/03/2022.

37

You might also like