Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 120 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
120
Dung lượng
3,76 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO HỆ THỐNG CẢNH BÁO VA CHẠM SỚM TRÊN XE GVHD: NGUYỄN THÀNH TUYÊN SVTH: NGUYỄN THANH NHÀN LƯƠNG THÀNH LONG SKL009244 Tp Hồ Chí Minh, tháng 08/2022 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO HỆ THỐNG CẢNH BÁO VA CHẠM SỚM TRÊN XE SVTH: NGUYỄN THANH NHÀN MSSV: 18145191 SVTH: LƯƠNG THÀNH LONG MSSV: 18145170 KHĨA: 2018 NGÀNH: CƠNG NGHỆ KỸ THUẬT Ô TÔ GVHD: Th.S NGUYỄN THÀNH TUYÊN Tp Hồ Chí Minh, tháng năm 2022 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO HỆ THỐNG CẢNH BÁO VA CHẠM SỚM TRÊN XE SVTH: NGUYỄN THANH NHÀN MSSV: 18145191 SVTH: LƯƠNG THÀNH LONG MSSV: 18145170 KHĨA: 2018 NGÀNH: CƠNG NGHỆ KỸ THUẬT Ô TÔ GVHD: Th.S NGUYỄN THÀNH TUYÊN Tp Hồ Chí Minh, tháng năm 2022 CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc Tp Hồ Chí Minh, ngày…tháng…năm 2022 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP TÊN ĐỀ TÀI: NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO HỆ THỐNG CẢNH BÁO VA CHẠM SỚM TRÊN XE Sinh viên thực hiện: Họ tên SV1: Nguyễn Thanh Nhàn Họ tên SV2: Lương Thành Long I NỘI DUNG: Khảo sát, phân tích đề tài, cơng trình nghiên cứu liên quan ngồi nước Tìm hiểu nghiên cứu thị giác máy tính xử lí ảnh Nghiên cứu hệ thống phát cảnh báo chướng ngại vật Xây dựng thuật toán, hệ thống sau lắp đặt lên xe Kết luận, đánh giá ưu khuyết điểm hệ thống, đưa ý kiến cải thiện AI TRÌNH BÀY: thuyết minh đồ án Upload ấn phẩm lên Google Drive (Hồ sơ NCKH, file word, powerpoint ĐATN) BI THỜI GIAN THỰC HIỆN: Ngày bắt đầu: 21/02/2022 Ngày hoàn thành: 10/07/2022 Trưởng ngành Tp.HCM, ngày…tháng…năm 2022 Giáo viên hướng dẫn CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc Tp Hồ Chí Minh, ngày…tháng…năm 2022 PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên sinh viên: Nguyễn Thanh Nhàn Lương Thành Long Ngành: Công nghệ kỹ thuật ô tô Tên đề tài: Nghiên cứu thiết kế chế tạo hệ thống cảnh báo va chạm sớm xe Họ tên Giáo viên hướng dẫn: Ths Nguyễn Thành Tuyên NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: ……………………………………………………………………………………… Ưu điểm: ……………………………………………………………………………………… Khuyết điểm: ……………………………………………………………………………………… Đề nghị cho bảo vệ hay không? ……………………………………………………………………………………… Đánh giá loại ……………………………………………………………………………………… Điểm:…… (bằng chữ:…………………………… ………………………) Tp Hồ Chí Minh, ngày…tháng…năm 2022 Giáo viên hướng dẫn (Ký & ghi rõ họ tên) CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc Tp Hồ Chí Minh, ngày…tháng…năm 2022 PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên sinh viên: Nguyễn Thanh Nhàn MSSV: 18145191 MSSV: 18145170 Lương Thành Long Ngành: Công nghệ kỹ thuật ô tô Tên đề tài: Nghiên cứu thiết kế chế tạo hệ thống cảnh báo va chạm sớm xe Họ tên Giáo viên phản biện: …………………………………………………… NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: ……………………………………………………………………………………… Ưu điểm: ……………………………………………………………………………………… Khuyết điểm: ……………………………………………………………………………………… Đề nghị cho bảo vệ hay không? ……………………………………………………………………………………… Đánh giá loại ……………………………………………………………………………………… Điểm:………(bằng chữ:…………………………… ………………………) Tp Hồ Chí Minh, ngày…tháng…năm 2022 Giáo viên phản biện (Ký & ghi rõ họ tên) LỜI CẢM ƠN Lời nói xin chân thành gửi lời cảm ơn tới quý thầy cô Khoa Đào Tạo Chất Lượng Cao Trường Đại Học Phạm Kỹ Thuật Thành Phố Hồ Chí Minh Trong suốt khoảng thời gian từ bắt đầu học tập giảng đường đại học đến nay, thầy cô truyền đạt cho từ kiến thức tảng ngành ô tô đến mơn chun ngành, mà cịn bổ sung cho thêm cho kỹ thực tế, cần thiết cho công việc tương lai Đặc biệt, xin gửi lời cảm ơn sâu sắc đến Giảng viên hướng dẫn, Thạc Sĩ Nguyễn Thành Tuyên Trong suốt trình thực đồ án, thầy tận tâm hỗ trợ đưa nhận xét, góp ý kịp thời động viên tinh thần cho chúng tôi, tạo điều kiện cho không ngừng thách thức thân với kiến thức mới, để phát triển hồn thiện đề tài Với cố gắng nhóm giúp đỡ nhiệt tình từ thầy cô, kết nghiên cứu đạt thành tựu định Tuy nhiên, điều kiện thời gian kinh nghiệm cịn hạn chế, nên khơng thể tránh khỏi thiếu sót Chúng tơi mong có đóng góp chân thành cơng tâm quý thầy cô để đồ án hồn thiện Nhóm chúng tơi xin chân thành cảm ơn Nhóm sinh viên thực Nguyễn Thanh Nhàn Lương Thành Long i TÓM TẮT Đã gần 70 năm từ dây đai an toàn giới thiệu, với phát triển nhanh chóng cơng nghệ điện tử, biện pháp an tồn xe ngày cải tiến nâng cao Vì hệ thống cảnh báo can thiệp trước va chạm (Precollision System) đời với phát triển hãng xe lớn Đây công nghệ tân tiến, đại phức tạp hứa hẹn trở thành bước tiến lớn nhằm giảm thiểu vụ tai nạn chết người, đảm bảo an toàn cho người lái lưu thơng đường Do đó, chọn đề tài: “Nghiên cứu thiết kế chế tạo hệ thống cảnh báo va chạm sớm xe” làm đề tài nghiên cứu Trong đề tài này, chúng tơi tập trung nghiên cứu, thực thi mơ hình phát vật thể công nghệ xử lý ảnh, khảo sát lắp đặt xe Hệ thống sử dụng mạng MobileNet-SSD để nhận diện, ước tính khoảng cách từ đối tượng tham gia giao thông đến camera gắn tơ Từ đưa cảnh báo hỗ trợ người lái Tốc độ xử lý hệ thống gần đạt ngưỡng thời gian thực Kết đạt luận văn mở hội việc chế tạo sản phẩm thương mại có giá thành rẻ, hướng tới làm chủ công nghệ nhận diện vật thể dùng kỹ thuật học sâu Việt Nam Với thời gian tháng nghiên cứu thực hiện, tơi hồn thành nhiệm vụ đề tài đặt Nội dung thể rõ qua chương gồm: Chương Tổng quan: Nêu lên lý chọn đề tài; mục tiêu đề tài tập trung; nghiên cứu thực tế mà đề tài ứng dụng; tổng quan việc nghiên cứu xây dựng hệ thống Chương Cơ sở lý thuyết: Giới thiệu thuật toán SSD, YOLO, CNN mạng sở Mobilenet v2; giới thiệu ngôn ngữ Python số thư viện hỗ trợ Chương Thực nghiệm kết quả: Đưa kết xử lý nhận diện cảnh báo va chạm; thiết kế lắp đặt hệ thống, lấy kết thực nghiệm Chương Kết luận hướng phát triển đề tài: Tổng hợp đánh giá kết đạt được; đưa hạn chế đề tài đề xuất hướng phát triển đề tài ii MỤC LỤC LỜI CẢM ƠN i TÓM TẮT ii MỤC LỤC .iii DANH MỤC CÁC TỪ VIẾT TẮT vii DANH MỤC CÁC BẢNG BIỂU viii DANH SÁCH CÁC BIỂU ĐỒ VÀ HÌNH ẢNH ix CHƯƠNG 1: TỔNG QUAN 1.1 Đặt vấn đề 1.2 Đối tượng nghiên cứu 1.3 Một số nghiên cứu nước nước 1.3.1 Nghiên cứu nước 1.3.2 Nghiên cứu nước 1.4 Phạm vi đề tài 10 1.5 Phương pháp tiếp cận 10 1.6 Giá trị thực tiễn đề tài 10 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 11 2.1 Giới thiệu thị giác máy tính (Computer Vision) 11 2.1.1 Các thức hoạt động thị giác máy tính 11 2.1.2 Ứng dụng 12 2.2 Giới thiệu xử lí ảnh 14 2.2.1 Thu nhận ảnh (Image Acquisition) 15 2.2.2 Tiền xử lý (Image processing) 16 2.2.3 Phân đoạn (Segmentation) hay phân vùng ảnh 16 2.2.4 Biểu diễn ảnh (Image Representation) 16 2.2.5 Nhận dạng nội suy ảnh (Image Recognition and Interpretation) .16 2.2.6 Cơ sơ tri thức (Knowledge Base) 17 iii 2.2.7 Mô tả 17 2.3 Tổng quan nhận dạng đối tượng 17 2.3.1 Bài toán nhận dạng đối tượng 17 2.3.2 Kiến trúc toán nhận dạng đối tượng 19 2.4 Tổng quan số mô hình phát đối tượng 19 2.4.1 Tiêu chí đánh giá mơ hình nhận dạng đối tượng 20 2.4.2 Độ xác 21 2.4.3 Tốc độ xử lý 22 2.4.4 Kết luận 23 2.5 Giới thiệu mơ hình SSD 23 2.5.1 Mạng nơ-ron tích chập 25 2.5.2 Áp dụng convolutional filters 28 2.5.3 Kiến trúc mơ hình SSD 29 2.5.4 Nhiệm vụ Extra Layers 30 2.5.5 Phương thức hoạt động 31 2.5.6 Mobilenet v2 33 2.6 Giới thiệu mơ hình Yolo 38 2.6.1 Yêu cầu mạng YOLO 39 2.6.2 Cách thức hoạt động thuật toán 39 2.6.3 Kiến trúc mạng YOLO 41 2.6.4 Nhiệm vụ lớp Extra Layers 42 2.7 Mạng Neural Network 49 2.7.1 Giới thiệu mạng Neural Network 49 2.7.2 Kiến trúc mạng Neural Network 49 2.7.3 Sử dụng mạng neural nhân tạo 50 2.7.4 Mạng CNN 50 2.8 Giới thiệu ngôn ngữ Python thư viện OpenCV 52 iv PHỤ LỤC Code Python import cv2 import jetson.inference import jetson.utils import pyglet class Point: def init (self, x, y): self.x = x self.y = y def getPoint(self): return (self.x, self.y) def translate(self, dx, dy): return Point(self.x + dx, self.y + dy) class Zone: def init (self, top_left_point, bottom_right_point): # top-left point self.tl_point = top_left_point # bottom-right point self.br_point = bottom_right_point def getCenterPoint(self): return Point((self.tl_point.x + self.br_point.x) / , (self.tl_point.y + self.br_point.y) / 2) 86 def getWidth(self): return abs(self.tl_point.x - self.br_point.x) def getHeight(self): return abs(self.tl_point.y - self.br_point.y) def isOverlap(self, otherZone, adjustment = 0): center = self.getCenterPoint() otherZoneCenter = otherZone.getCenterPoint() # distance of center points distanceX = abs(otherZoneCenter.x - center.x) distanceY = abs(otherZoneCenter.y - center.y) return (distanceX < (self.getWidth() / + otherZone.getWidth() / 2) adjustment) and (distanceY < (self.getHeight() / + otherZone.getHeight() / adjustment)) def draw_warning_zone(warning_zone, img): FPS_string = "FPS {:.0f} FPS".format(net.GetNetworkFPS()) top_left = warning_zone.tl_point.getPoint() bottom_right = warning_zone.br_point.getPoint() cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2) cv2.putText(img, FPS_string, (30,30), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 0, 0), 2) def play_sound(sound_name): WarningSound = pyglet.resource.media(sound_name) 87 WarningSound.play() net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5) cap = cv2.VideoCapture('nvarguscamerasrc ! video/x-raw(memory:NVMM), width=940, height=480, format=(string)NV12, framerate=(fraction)60/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink', cv2.CAP_GSTREAMER) count1 = count2 = while True: success, img = cap.read() imgCuda = jetson.utils.cudaFromNumpy(img) detections = net.Detect(imgCuda) warning_zone = Zone(Point(240, 130), Point(660, 490)) draw_warning_zone(warning_zone, img) for d in detections: count2 = count2 +1 # draw_detections(img) # position of detected object top_left_point = Point(int(d.Left),int(d.Top)) bottom_right_point = Point(int(d.Right),int(d.Bottom)) object_zone = Zone(top_left_point, bottom_right_point) center_x = int(d.Center[0]) center_y = int(d.Center[1]) # center point of object objectCenter = object_zone.getCenterPoint() # Get object name from detected object object_name = net.GetClassDesc(d.ClassID) 88 objectTypeId = d.ClassID # Note: only warning if object name is people or car currently # Draw cross-line of object cv2.line(img, (top_left_point.x,center_y),(bottom_right_point.x, center_y) ,(255,0,255),1) cv2.line(img, (center_x,top_left_point.y), (center_x,bottom_right_point.y), (255, 0, 255), 1) # Draw center point (crossed point of above lines) cv2.circle(img, (center_x, center_y), 5, (255,0,255),2) # Draw bounding box of object cv2.rectangle(img, (int(d.Left),int(d.Top)), (int(d.Right),int(d.Bottom)), (255,0,255), 2) # Put the object name in bounding box cv2.putText(img, object_name, object_zone.tl_point.translate(5, 15).getPoint(), cv2.FONT_HERSHEY_DUPLEX, 0.75, (255, 0, 255), 2) # position of detected object object_zone = Zone(Point(int(d.Top),int(d.Left)), Point(int(d.Bottom), int(d.Right))) if count2 == 40: count2 = if objectTypeId == 10: play_sound('ngatu.wav') elif objectTypeId == 13: play_sound('stop.wav') if warning_zone.isOverlap(object_zone, 5): 89 count1 = count1 + cv2.putText(img, 'NGUY HIEM', warning_zone.tl_point.getPoint(), cv2.FONT_HERSHEY_SIMPLEX, 1, (5, 0, 255),3) if count1 == 50: count1 = if objectTypeId == 1: play_sound('nguoi.wav') elif objectTypeId == or objectTypeId == or objectTypeId = or objectTypeId == or objectTypeId == 10: # - bicycle || - car || - motorcycle || - bus || 10 - truck play_sound('xe.wav') cv2.imshow("Detection frame", img) if cv2.waitKey(1) == ord('q'): break cv2.destroyAllWindows() cap.release() Phát triển model nhận diện biển báo giao thông 2.1 Keras 2.1.1 Thư viện Keras Keras coi thư viện ‘high-level’ với phần ‘low-level’ (cịn gọi backend) TensorFlow Được cài đặt lệnh pip install keras terminal (cmd) Keras có cú pháp đơn giản TensorFlow nhiều Có thể chạy CPU GPU, viết mộn đoạn mã Keras detect ưu tiên chạy GPU trước máy có GPU, khơng có chạy CPU.[27] 90 Hình 1: Thư viện Keras 2.1.2 Các hàm Keras - Sequential (tuần tự): Nơi để chứa layer model xay dựng Keras - model = sequential([…….]) Sau add lớp layer vào sequence - Layer: lớp Keras, có nhiều lớp khác là: Dense ( xây dựng nơ ron bình thường), Convolution 2D (Conv2D), Flatten,… - Activation Function: Mỗi lớp Keras có các hàm activation khác nhau, có nhiều loại hàm là: reLU,Sigmoid, Maxout… Và tùy toán mà ta sử dụng hàm cho phù hợp - Fit: Là việc ta train model (đưa liệu train vào model) - Loss: Hàm mát, muốn train model ta phải điều chỉnh tham số Weight mạng để giảm tối đa loss xuống để model hoạt động tốt - Optimizer: Để tối ưu thuật toán training, hay dùng Adam, SDG,… - Evaluation: Đánh giá model, ta thử evaluation tập test để xem accuracy loss bao nhiêu,… Hình 2: Các lớp layer Keras 91 2.2 Xây dựng model nhận diện biển báo giao thơng với Keras, CNN Deep learning - Bài tốn ta tự đặt nhận diện phân loại biển báo giao thơng - Input: nhận hình ảnh chứa biển báo đầu vào - Output: kết biển báo biển báo gì? Ví dụ: giới hạn tốc độ, cấm rẽ trái, cấm quay đầu… - Dataset: Sử dụng liệu biển báo giao thông German Traffic Sign Hình 3: Thơng số liệu German Traffic Sign Bộ liệu gồm khoảng gần 50 nghìn ảnh chia thành 43 folder 43 loại biển báo khác Mỗi folder có file CSV chứa thông tin ảnh thư mục Ta ý vài thông tin sau: ROI: vùng ảnh chứa biển số với thông tin X1, Y1, X2, Y2.(tọa độ góc trái góc phải dứa hình biển báo giao thông) ClassID: nhãn biển số (từ đến 42) Ta train model để input ảnh nhận diện 43 class 2.2.1 Đọc xử lý liệu: Lặp qua thư mục con, đọc add vào list, có list là: - pixels: chứa tất ảnh liệu 92 - labels: chứa nhãn ảnh liệu Hình 4: Đọc xử lý liệu Vậy sau gọi hàm load_data() ta mảng pixels labels Hình 5: Load đường dẫn liệu Tiếp theo ta chia liệu train, test val, mơ tả ví dụ train model keras - Train: Để train model - Val: Để validation model trình train - Test: Để kiểm thử model sau train xong 93 Hình 6: Sơ đồ khối cách chia liệu Ở ta chia theo tỷ lệ 60% – 20% – 20%, nghĩa 60% liệu dùng để train, 20% cho validation 20% lại để test Việc chia liệu test riêng cần thiết để xem model với liệu mà chưa nhìn thấy Để thực việc ta xây dựng hàm chia sau: Hình 7: Hàm chia xáo trộn liệu ngẫu nhiên return giá trị X_train, y_train, X_val, y_val X_test, y_test theo tỉ lệ 60% – 20% – 20% 94 Sau ta gọi hàm để chia giá trị sau: Hình 8: Chia liệu 2.2.2 Xây dựng model Ta tiến hành viết hàm xây model với sau: Hình 9: Xây dựng hàm xây dựng model Model có input_shape ảnh 64 x 64, nghĩa ảnh đầu vào đề phảo resize 64 x 64 Và có output_size 43 – số class biển báo mà ta có filter_size = (3,3) : kích cỡ cửa sổ trượt Conv2D 95 activation=’relu’ : hàm khử tuyến tính đưa giá trị âm thành padding = ‘same’ : để feature map output giữ nguyên 64 x 64 Sau dùng MaxPooling với size x giảm size ảnh nửa 32 x 32 Ta sử dụng hàm Dropout() để tránh overfit – điều gây sụt giảm accuracy Sau ta dùng hàm summary() để tổng quan nhìn lại kiến trúc mạng trước thực xây dựng model: Hình 10: Tổng quan kiến trúc mạng trước xây dựng model Tổng tham số 10,698,555 2.2.3 Bắt đầu train model kiểm tra Hình 11: Train model Ta train model với 10 epochs với batch_size 16, lưu lại thành file để sử dụng lần sau mà khơng cần train lại 96 Hình 12: Quá trình tạo model lâu phải quét nhiều liệu Sau build xong model, ta load lại kiểm tra model sau: Hình 13: Lệnh load model sau kiểm tra loss accuracy Ta kết với Loss accuracy sau: Hình 14: Kết với Loss Accuracy Ta nhận thấy accuracy cao với số loss thấp Từ cho thấy model xây dựng thành công Đưa liệu test ngẫu nhiên vào để kiểm tra: 97 Hình 15: Lệnh Test model tập Test Biến at_predict (after predict) sau dự đoán Gán vector numpy vào biến X_input Ta nhận kết là: Hình 16: Kết dự đốn lần Ta thấy vị trí vị trí mà model dự đốn vị trí thứ 10 (Cấm xe tải vượt) Suy ra, model dự đoán biển báo Để rõ ràng hơn, ta so sánh với địa tạo sẵn để in kết cụ thể: Hình 17: Dự đốn hiển thị tên vật thể Với địa là: 98 Hình 18: Địa ClassID tên vật thể Kết thu là: Hình 19: Kết cuối Biển giới hạn tốc độ 50km/h (biển thứ tự thứ mảng) Link code xây dựng model: https://drive.google.com/file/d/1dsVO_PwKvcGXoENaqPccug9fM9gWd0Pz/view?usp =sharing 99