Mục tiêu của bài luận văn này là xây dựng hệ thống quản lý công tác thi học kỳ tại Trường CNTTTT – Đại học Cần Thơ. Bài luận văn này tập trung vào việc xây dựng mô hình đăng ký xếp lịch thi học kỳ và phát hiện hành vi trong phòng thi nhằm giải quyết những sai sót do yếu tố con người có thể ảnh hưởng đến việc đánh giá và xếp loại cho sinh viên. “Hệ thống quản lý công tác thi học kỳ tại Trường CNTTTT – Đại học Cần Thơ” được xây dựng trên công cụ Visual Studio Code (VS Code), Model sắp xếp lịch thi được viết trên ngôn ngữ PHP (Laravel Framework) áp dụng thuật toán tô màu đồ thị, ứng dụng lĩnh vực thị giác máy tính, Model phát hiện hành vi bất thường xây dựng bằng Flask Framework với thư viện Keras của Tensorflow và thuật toán YOLOv4 được viết trên ngôn ngữ Python.Hệ thống được xây dựng cho phép giảng viên có thể đăng kí lịch thi của các lớp học phần đang giảng dạy và sắp xếp lịch thi một cách tự động tránh việc sinh viên phải thi hai môn trong cùng một buổi thi. Song với đó cũng cho phép giảng viên kiểm tra hành vi bất thường của sinh viên nhằm giảm thiểu việc gian lận trong kỳ thi để có thể đánh giá đúng năng lực của sinh viên.
TRƯỜNG ĐẠI HỌC CẦN THƠ TRƯỜNG CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGÀNH HỆ THỐNG THÔNG TIN Đề tài XÂY DỰNG HỆ THỐNG QUẢN LÝ CÔNG TÁC THI HỌC KỲ TẠI TRƯỜNG CNTT&TT Sinh viên: Nguyễn Gia Phú Mã số: B1805709 Khóa: K44 Cần Thơ, 12/2022 TRƯỜNG ĐẠI HỌC CẦN THƠ TRƯỜNG CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGÀNH HỆ THỐNG THÔNG TIN Đề tài XÂY DỰNG HỆ THỐNG QUẢN LÝ CÔNG TÁC THI HỌC KỲ TẠI TRƯỜNG CNTT&TT Người hướng dẫn TS Phạm Thị Ngọc Diễm Sinh viên: Nguyễn Gia Phú Mã số: B1805709 Khóa: K44 Cần Thơ, 12/2022 Luận văn hệ thống thông tin HK1 – 2022 - 2023 TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG KHOA HỆ THỐNG THÔNG TIN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THEO YÊU CẦU CỦA HỘI ĐỒNG Tên luận văn (tiếng Việt tiếng Anh): Hệ Thống Quản Lý Công Tác Thi Học Kỳ Tại Trường CNTT&TT Management System for Semester Exams at School of Information and Communication Technology Họ tên sinh viên: NGUYỄN GIA PHÚ MASV: B1805709 Mã lớp: DI1895A2 Đã báo cáo hội đồng ngành: Hệ Thống Thông Tin Ngày báo cáo: 15/12/2022 Hội đồng báo cáo gồm: TS Nguyễn Thanh Hải TS Nguyễn Minh Khiêm TS Phạm Thị Ngọc Diễm Luận văn chỉnh sửa theo góp ý Hội đồng Cần Thơ, ngày 22 tháng 12 năm 2022 Giáo viên hướng dẫn (Ký ghi họ tên) Phạm Thị Ngọc Diễm Luận văn hệ thống thông tin HK1 – 2022 - 2023 Luận văn hệ thống thông tin HK1 – 2022 - 2023 LỜI CẢM ƠN Trong trình học tập rèn luyện Đại học Cần Thơ niềm vui niềm hạnh phúc to lớn cá nhân em vừa đặc ân mà em may mắn có đường học tập em mang theo kiến thức hữu ích mà em tích góp q trình học tập trường để bước vào hành trình đời Thực luận văn tốt nghiệp giai đoạn quan trọng sinh viên Vậy nên em chọn đề tài “Xây dựng hệ thống quản lý công tác thi học kỳ Trường CNTT&TT” để hồn thành luận văn tốt nghiệp Để nghiên cứu, thực hồn thành đề tài khơng có cố gắng nổ lực thân, mà nhiều giúp đỡ đến từ bạn bè, thầy gia đình Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến tất thầy cô Trường Công Nghệ Thông tin Truyền thông – Đại học Cần Thơ, người truyền cảm hứng cho em giảng dạy cung cấp kiến thức bổ ích thời gian qua để em có tảng vững Em xin chân thành gửi lời cảm ơn sâu sắc đến cô Phạm Thị Ngọc Diễm – người đồng hành hướng dẫn em làm đề tài Cô người tận tâm hỗ trợ, hướng dẫn chia sẻ khó khăn mắc phải trình thực luận văn em Cảm ơn tin tưởng hết lịng cung cấp kiến thức để em hoàn thiện luận văn Em xin gửi lời cảm ơn đến bạn bè giúp đỡ hỗ trợ tháng vừa qua Cuối cùng, em xin gửi lời cảm ơn đến gia đình – nguồn động lực to lớn hậu phương vững để em hoàn thành luận văn để trường tiến độ tạo điều kiện tốt đường học tập, phát triển thân Em hoàn thành luận văn tốt nghiệp mình, em cố gắng nghiên cứu nỗ lực để hồn thành đề tài thân Tuy nghiên, kiến thức kỹ cịn nhiều hạn chế khơng thể tránh khỏi thiếu sót Em kính mong q thầy thông cảm bỏ qua, em mong nhận đóng góp, bảo q thầy để em tích lũy thêm kinh nghiệm hồn thiện đường sau đại học Em xin chân thành cảm ơn! Cần Thơ, tháng 12 năm 2022 Sinh viên thực Luận văn hệ thống thông tin HK1 – 2022 - 2023 Nguyễn Gia Phú NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Cần Thơ,tháng 12 năm 2022 Giáo viên hướng dẫn TS Phạm Thị Ngọc Diễm Luận văn hệ thống thông tin HK1 – 2022 - 2023 NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Cần Thơ, tháng 12 năm 2022 Giảng viên phản biện Luận văn hệ thống thông tin HK1 – 2022 - 2023 TÓM TẮT Mục tiêu luận văn xây dựng hệ thống quản lý công tác thi học kỳ Trường CNTT&TT – Đại học Cần Thơ Bài luận văn tập trung vào việc xây dựng mơ hình đăng ký xếp lịch thi học kỳ phát hành vi phòng thi nhằm giải sai sót yếu tố người ảnh hưởng đến việc đánh giá xếp loại cho sinh viên “Hệ thống quản lý công tác thi học kỳ Trường CNTT&TT – Đại học Cần Thơ” xây dựng công cụ Visual Studio Code (VS Code), Model xếp lịch thi viết ngơn ngữ PHP (Laravel Framework) áp dụng thuật tốn tô màu đồ thị, ứng dụng lĩnh vực thị giác máy tính, Model phát hành vi bất thường xây dựng Flask Framework với thư viện Keras Tensorflow thuật tốn YOLOv4 viết ngơn ngữ Python Hệ thống xây dựng cho phép giảng viên đăng kí lịch thi lớp học phần giảng dạy xếp lịch thi cách tự động tránh việc sinh viên phải thi hai môn buổi thi Song với cho phép giảng viên kiểm tra hành vi bất thường sinh viên nhằm giảm thiểu việc gian lận kỳ thi để đánh giá lực sinh viên Từ khóa: Yolo, Học sâu, Phát hành vi bất thường, Sắp xếp lịch thi Luận văn hệ thống thông tin HK1 – 2022 - 2023 ABSTRACT The goal of this dissertation is to build a semester exam management system at College of Information and Communication Technology, Can Tho University This thesis focuses on building a semester exam scheduling registration model and detecting behavior in the exam room to address human factors that can affect student assessment and grading "Semester exam management system at College of Information and Communication Technology – Can Tho University" is built on Visual Studio Code (VS Code), Exam scheduling model written on PHP language (Laravel Framework) applying graph coloring algorithm, computer vision field application, the unusual behavior detection model is built using the Flask Framework with Tensorflow's Keras library and the YOLOv4 algorithm written on the Python language The system is designed to allow lecturers to register for the exam schedule of the classes that they instruct and to automatically arrange the exam schedule so that students not have to take two subjects in the same exam session At the same time, it enables lecturers to monitor students' abnormal behavior in order to reduce cheating in exams and properly assess students' abilities Key words: Yolo, Deep Learning, Detecting Abnormal Behavior, Exam Scheduling Luận văn hệ thống thông tin HK1 – 2022 - 2023 Bảng 10 Mơ hình liệu mức vật lý lịch thi Tên thuộc tính K i ể u d ữ li ệ u Thoi Gian Thi S M A L L I N T Ngay Thi C H A R ( ) GioT hi C H A R ( ) MaP hong Kh óa chí nh Kh óa ngo ại 93 I d e n ti t y NN Di ễn giả i Th ời gia n thi Ng ày thi Gi thi C H A R ( Giá trị mặ c địn h Ph ịn g thi Luận văn hệ thống thơng tin HK1 – 2022 - 2023 ) MaL opHo cPha n C H A R ( ) MaVi deo C H A R ( ) M ã lớ p họ c ph ần M ã vi de o Bảng 11 Mơ hình liệu mức vật lý bảng video Tên thu ộc tính K i ể u d ữ l i ệ u Ma Vid eo C H A R ( ) UR L Kh óa chí nh Kh óa ng oại Giá trị mặc định I d e n ti t y NN D i ễ n g i ả i M ã V i d e o N V A 94 Đ ị a Luận văn hệ thống thông tin HK1 – 2022 - 2023 c h ỉ c h ứ a v i d e o R C H A R ( 0 ) Bảng 12 Mơ hình liệu mức vật lý bảng mơn Tên thuộc tính K i ể u d ữ li ệ u MaB oMo n C H A R ( ) TenB oMo n Kh óa chí nh Kh óa ngo ại Giá trị mặc định I d e n ti t y NN D i ễ n g i ả i M ã b ộ m ô n N V A R C H A R ( 95 T ê n b ộ m ô n Luận văn hệ thống thông tin HK1 – 2022 - 2023 0 ) Bảng 13 Mơ hình liệu mức vật lý bảng ngày thi K i ể u Tên thuộc tính Kh óa chí nh d ữ l i ệ u D A T E Ngay Thi K hó a ng oạ i Giá trị mặc địn h I d e n ti t y NN Di ễn gi ải N gà y thi NN Di ễn giả i Gi thi Bảng 14 Mơ hình liệu mức vật lý bảng Tê n thu ộc tín h Ki ểu liệ u Gi oT hi S M A L LI N T Kh óa chí nh 96 Kh óa ng oại Giá trị mặ c địn h I d e n t i t y Luận văn hệ thống thông tin HK1 – 2022 - 2023 97 Luận văn hệ thống thông tin HK1 – 2022 - 2023 MÃ THỰC THI TRONG QUÁ TRÌNH HUẤN LUYỆN MƠ HÌNH TRÊN MƠI TRƯỜNG COLAB Q trình huấn luyện toán phát hành vi bất thường thi học kỳ ta có: Faster R-CNN Bước 1: Truy cập địa https://colab.research.google.com chọn New Notebook thức colab Chọn Runtime cho Notebook, có lựa chọn Runtime Type cho Notebook, ta chọn option GPU để huấn luyện Bước 2: Kết nối Google Drive: Lưu ý với Notebook Colab sau 10 tiếng bị xóa nên khơng nên để file Notebook Giải pháp ta liên kết Google Drive from google.colab import drive drive.mount('/content/gdrive') %cd /content/gdrive/MyDrive/TrainRCNN Bước 3: Tải tập liệu hình ảnh kèm nhãn xml chuẩn bị lên thư mục data Bước 4: Phân chia Train Test: import os import glob import random import shutil raw_data_path "/content/gdrive/MyDrive/TrainRCNN/data/raw_data/images" = train_data_path "/content/gdrive/MyDrive/TrainRCNN/data/split_data/train" = test_data_path = "/content/gdrive/MyDrive/TrainRCNN/data/split_data/test" if os.path.exists("/content/gdrive/MyDrive/TrainRCNN/data/split_data/"): os.mkdir("/content/gdrive/MyDrive/TrainRCNN/data/split_data/") try: shutil.rmtree(train_data_path) shutil.rmtree(test_data_path) except: 98 not Luận văn hệ thống thông tin HK1 – 2022 - 2023 pass os.mkdir(train_data_path) os.mkdir(test_data_path) total_files = glob.glob(raw_data_path + "/*.png") print("Sample file = ", total_files[0]) print("Total file = ", len(total_files)) indices = list(range(len(total_files))) train_indices = random.sample(indices, k = int(len(total_files)*0.8)) print("Total train file = ", len(train_indices)) for i in indices: if (i in train_indices): # Copy to train shutil.copy(total_files[i], total_files[i].replace(raw_data_path,"")) train_data_path + shutil.copy(total_files[i].replace("images","labels").replace(".png",".xml "), train_data_path + total_files[i].replace(raw_data_path, "").replace(".png",".xml")) else: # Copy to test shutil.copy(total_files[i], total_files[i].replace(raw_data_path, "")) test_data_path + shutil.copy(total_files[i].replace("images", "labels").replace(".png", ".xml"), test_data_path + total_files[i].replace(raw_data_path, "").replace(".png",".xml")) Bước 5: Chuyển đổi file nhãn XML sang CSV: import os import glob import pandas as pd import xml.etree.ElementTree as ET def xml_to_csv(path): xml_list = [] for xml_file in glob.glob(path + '/*.xml'): tree = ET.parse(xml_file) root = tree.getroot() for member in root.findall('object'): 99 Luận văn hệ thống thông tin HK1 – 2022 - 2023 value = (root.find('filename').text, int(root.find('size')[0].text), int(root.find('size')[1].text), member[0].text, int(member[4][0].text), int(member[4][1].text), int(member[4][2].text), int(member[4][3].text) ) xml_list.append(value) column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax'] xml_df = pd.DataFrame(xml_list, columns=column_name) return xml_df for directory in ['train','test']: image_path os.path.join('/content/gdrive/MyDrive/TrainRCNN/data/split_data/ {}'.format(directory)) = xml_df = xml_to_csv(image_path) xml_df.to_csv('/content/gdrive/MyDrive/TrainRCNN/data/split_data/ {}_labels.csv'.format(directory), index=None) print('Successfully converted xml to csv.') Bước 6: Tải TF Object Detection API từ github: %cd /content/gdrive/MyDrive/TrainRCNN !git clone https://github.com/tensorflow/models.git Bước 7: Biên dịch mã nguồn: %cd /content/gdrive/MyDrive/TrainRCNN/models/research !protoc object_detection/protos/*.proto python_out= Bước 8: Cài đặt API: %cd /content/gdrive/MyDrive/TrainRCNN/models/research !cp object_detection/packages/tf2/setup.py !python -m pip install Bước 9: Tải pretrain cấu hình config điều chỉnh đường dẫn: if not os.path.exists("/content/gdrive/MyDrive/TrainRCNN/pretrained"): os.mkdir("/content/gdrive/MyDrive/TrainRCNN/pretrained") %cd /content/gdrive/MyDrive/TrainRCNN/pretrained 100 Luận văn hệ thống thông tin HK1 – 2022 - 2023 !wget http://download.tensorflow.org/models/object_detection/tf2/20200711/faster_rcnn_r esnet50_v1_640x640_coco17_tpu-8.tar.gz !tar -xzvf faster_rcnn_resnet50_v1_640x640_coco17_tpu-8.tar.gz Bước 10: Train model: %cd /content/gdrive/MyDrive/TrainRCNN/models/research %cp /content/gdrive/MyDrive/TrainRCNN/models/research/object_detection/model_mai n_tf2.py !python model_main_tf2.py \ -pipeline_config_path=/content/gdrive/MyDrive/TrainRCNN/pretrained/faster_rcnn_ resnet50_v1_640x640_coco17_tpu-8/pipeline.config \ model_dir=/content/gdrive/MyDrive/TrainRCNN/output_model_1 alsologtostderr num_train_steps=50000 YOLOv4 Bước 1: Truy cập địa https://colab.research.google.com chọn New Notebook thức colab Chọn Runtime cho Notebook, có lựa chọn Runtime Type cho Notebook, ta chọn option GPU để huấn luyện Bước 2: Kết nối Google Drive: Lưu ý với Notebook Colab sau 10 tiếng bị xóa nên khơng nên để file Notebook Giải pháp ta liên kết Google Drive from google.colab import drive drive.mount('/content/gdrive') Bước 3: Tải mã nguồn Darknet Drive: Mã nguồn YOLOv4 public github tác giả AlexeyAB Ta tải mã nguồn Drive mà Notebook kết nối trước !rm -rf darknet %cd /content/gdrive/My\ Drive/Yolov4 !git clone https://github.com/AlexeyAB/darknet %cd /content/gdrive/My\ Drive/Yolov4/darknet !rm -rf data !mkdir data Bước 4: Chỉnh sửa cấu hình YOLOv4: 101 Luận văn hệ thống thông tin HK1 – 2022 - 2023 - Sau tải mã nguồn YOLOv4 Drive ta tìm đến file yolov4custom.cfg thư mục darknet/cfg - Đầu tiên cần xác định với tốn ta có class - Tìm đến dịng 20 sửa max_bathches = 12000 - Đến dòng 22 sửa thành step = 9600,10800 - Đến dòng 970, 1058, 1146 sửa classes = (theo số class tốn) - Đến dịng 963, 1051, 1139 sửa filters = theo tốn 33 - Đến dịng sửa subdivisions thành 32 để tương tích cấu hình với tốn, đến dòng 8, sửa width, height thành 416 để tránh bị tràn nhớ - Tìm đến file Makefile thư mục gốc darknet sửa dòng thành GPU = 1, dòng thành CUDNN = dòng thành OPENCV = - Lưu lại file chỉnh sửa chuẩn bị cho bước Bước 5: Tải tập liệu chuẩn bị lên Drive: - Nén thư mục data chứa file hình ảnh nhãn txt chuẩn bị trước - Tải lên Google Drive - Giải nén thư mục data vào darknet/data !apt install p7zip-full %cd /content/gdrive/My\ Drive/Yolov4/darknet/data !7z x data.zip Bước 6: Tạo file yolo.names: File yolo.names chứa tên nhãn gán cho tập liệu %cd /content/gdrive/My\ Drive/Yolov4/darknet !echo "Look Around" > yolo.names !echo "Bend Over The Desk" >> yolo.names !echo "Hand Under Table" >> yolo.names !echo "Wave" >> yolo.names !echo "Stand Up" >> yolo.names !echo "Normal" >> yolo.names Bước 7: Tạo file train.txt val.txt: File train.txt val.txt file chứa đường dẫn đến file hình ảnh chia với tỉ lên 90% train 10% val với tập liệu 2639 file hình ảnh %cd /content/gdrive/My\ Drive/Yolov4/darknet 102 Luận văn hệ thống thông tin HK1 – 2022 - 2023 import glob2 import math import os import numpy as np files = [] for ext in ["*.png", "*.jpeg", "*.jpg"]: image_files = glob2.glob(os.path.join("data/data/", ext)) files += image_files nb_val = math.floor(len(files)*0.1) rand_idx = np.random.randint(0, len(files), nb_val) # Tạo file train.txt with open("train.txt", "w") as f: for idx in np.arange(len(files)): if (os.path.exists(files[idx][:-3] + "txt")): f.write(files[idx]+'\n') # Tạo file val.txt with open("val.txt", "w") as f: for idx in np.arange(len(files)): if (idx in rand_idx) and (os.path.exists(files[idx][:-3] + "txt")): f.write(files[idx]+'\n') Bước 8: Tạo file yolo.data: File yolo.data chứa thơng tin file cần thiết cho q trình train model %cd /content/gdrive/My\ Drive/Yolov4/darknet !mkdir backup !echo classes=6 > yolo.data !echo train=train.txt >> yolo.data !echo valid=val.txt >> yolo.data !echo names=yolo.names >> yolo.data !echo backup=backup >> yolo.data Bước 9: Biên dịch mã nguồn darknet: %cd /content/gdrive/My\ Drive/Yolov4/darknet !rm darknet !make 103 Luận văn hệ thống thông tin HK1 – 2022 - 2023 Bước 10: Tải file pretrain weight: %cd /content/gdrive/My\ Drive/Yolov4/darknet !wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/ yolov4.conv.137 Bước 11: Tiến hành train model: %cd /content/gdrive/My\ Drive/Yolov4/darknet !./darknet detector train yolo.data cfg/yolov4-custom.cfg backup/yolov4custom_last.weights -dont_show -map MÃ THỰC THI NHẬN DẠNG HÀNH VI Qua trình tìm hiểu xây dựng chức phát hành vi bất thường đoạn mã python sau để nhận diện phát từ video phòng thi: import numpy as np import cv2 def TestVideo(f): confidenceThreshold = 0.5 NMSThreshold = 0.4 modelConfiguration = 'yolov4-custom-final.cfg' modelWeights = 'yolov4-custom_best.weights' labelsPath = 'coco.names' labels = open(labelsPath).read().strip().split('\n') np.random.seed(10) COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8") net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights) outputLayer = net.getLayerNames() outputLayer = [outputLayer[i - 1] for i in net.getUnconnectedOutLayers()] 104 Luận văn hệ thống thông tin HK1 – 2022 - 2023 video = cv2.VideoCapture(f) video.set(cv2.CAP_PROP_POS_MSEC, 100) writer = None (W, H) = (None, None) try: prop = cv2.CAP_PROP_FRAME_COUNT total = int(video.get(prop)) print("[INFO] {} total frames in video".format(total)) except: print("Could not determine no of frames in video") count = while True: (ret, frame) = video.read() if not ret: break if W is None or H is None: (H, W) = frame.shape[:2] blob = cv2.dnn.blobFromImage( frame, / 255.0, (416, 416), swapRB=True, crop=False) net.setInput(blob) layersOutputs = net.forward(outputLayer) boxes = [] confidences = [] classIDs = [] for output in layersOutputs: for detection in output: 105 Luận văn hệ thống thông tin HK1 – 2022 - 2023 scores = detection[5:] classID = np.argmax(scores) confidence = scores[classID] if confidence > confidenceThreshold: box = detection[0:4] * np.array([W, H, W, H]) (centerX, centerY, width, height) = box.astype('int') x = int(centerX - (width/2)) y = int(centerY - (height/2)) boxes.append([x, y, int(width), int(height)]) confidences.append(float(confidence)) classIDs.append(classID) # Apply Non Maxima Suppression detectionNMS = cv2.dnn.NMSBoxes( boxes, confidences, confidenceThreshold, NMSThreshold) if (len(detectionNMS) > 0): for i in detectionNMS.flatten(): (x, y) = (boxes[i][0], boxes[i][1]) (w, h) = (boxes[i][2], boxes[i][3]) color = [int(c) for c in COLORS[classIDs[i]]] cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2) text = '{}: {:.4f}'.format(labels[classIDs[i]], confidences[i]) cv2.putText(frame, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) if writer is None: folder = 'D:\laragon\www\Demo-LV\Luanvan\public\\videos' name = folder + '\detection-' + f[45:-4]+'.mp4' 106 Luận văn hệ thống thông tin HK1 – 2022 - 2023 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') writer = cv2.VideoWriter( name, fourcc, 30, (frame.shape[1], frame.shape[0]), True) if writer is not None: writer.write(frame) print("Writing frame", count+1) count = count + video.release() res = {'success': True} return res 107 ... liệu phịng thi Quản lý kế hoạch Đăng kí thi học kỳ Sắp xếp lịch thi tự động Phát hành vi bất thường phòng thi Xem lịch thi 1.7 Bố cục luận văn Bố cục luận văn gồm chương: Chương 1: Giới thi? ??u: Trình... phải thi hai môn buổi thi Song với cho phép giảng vi? ?n kiểm tra hành vi bất thường sinh vi? ?n nhằm giảm thi? ??u vi? ??c gian lận kỳ thi để đánh giá lực sinh vi? ?n Từ khóa: Yolo, Học sâu, Phát hành vi. .. hoạch thi học kỳ Đăng kí thi học kỳ Sắp xếp lịch thi học kỳ Cập nhật liệu phòng thi Xem lịch thi In lịch thi Nhận diện hành vi bất thường Sau xây dựng “hệ thống quản lý thi học kỳ Trường CNTT&TT”