1. Trang chủ
  2. » Giáo Dục - Đào Tạo

FINAL NCKH 2019

77 101 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 77
Dung lượng 3,35 MB

Nội dung

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NĂM 2019 ĐỀ TÀI: XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Sinh viên thực hiện: Nguyễn Minh Tiến Lớp: Kỹ thuật điện tử tin học công nghiệp K57 Lê Trung Phương Lớp: Kỹ thuật điện tử tin học công nghiệp K57 Khoa : Điện- Điện Tử Người hướng dẫn: ThS Võ Thiện Lĩnh TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NĂM 2019 XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Sinh viên thực hiện: Nguyễn Minh Tiến Nam, Nữ: Nam Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Dân tộc: Kinh Khoa: Điện-Điện Tử Năm thứ: Ngành học: Kĩ thuật điện tử tin học công nghiệp Lê Trung Phương Nam, Nữ: Nam Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Năm thứ: Ngành học: Kĩ thuật điện tử tin học công nghiệp Người hướng dẫn: ThS Võ Thiện Lĩnh Dân tộc: Kinh Khoa: Điện-Điện Tử MỤC LỤC DANH MỤC TỪ VIẾT TẮT DANH MỤC HÌNH ẢNH LỜI GIỚI THIỆU MỞ ĐẦU Tổng quan tình hình nghiên cứu Lý lựa chọn đề tài Mục tiêu đề tài 10 Phạm vi giới hạn đề tài 10 Phương pháp nghiên cứu 10 CHƯƠNG I : CƠ SỞ LÝ THUYẾT 12 1.1 Cơ sở xử lý ảnh số 12 1.1.1 Các khái niệm xử lý ảnh 12 1.1.2 Các phương pháp nhận dạng biên ảnh 13 1.1.3 Không gian màu biểu diễn ảnh 19 1.1.4 Các kỹ thuật lọc ảnh số 20 1.2 Các phương pháp nhận dạng khuôn mặt 28 1.2.2 Haar cascade 28 1.2.3 HOG kết hợp với máy phân lớp SVM 32 1.2.4 So sánh HOG Haar 38 1.3 Nghiên cứu hành vi ngủ gật người lái xe 39 1.3.1 Hành vi gây tập trung tài xế lái xe 40 1.3.2 Các dấu hiệu nhận biết trình trạng ngủ gật, không tập trung lái xe 40 1.3.3 Các phương pháp phát ngủ gật xe ô tô 41 CHƯƠNG II : GIỚI THIỆU KIT RASPBERRY 43 2.1 Giới thiệu Kit Raspberry 43 2.1.1 Raspberry ? 43 2.1.2 Thơng số cấu hình 43 2.1.3 Raspberry Pi Camera Module V2 44 2.1.4 Hệ điều hành sử dụng 45 2.2 Cài đặt cho Raspberry Pi 46 2.2.1 Cài đặt hệ điều hành 46 2.2.2 Kết nối với Raspberry Pi từ PC 48 2.2.3 Thiết lập IP cho Raspberry Pi 49 2.3 Các ứng dụng Kit Raspberry thực tiễn 49 2.4 Ứng dụng Raspberry nhận diện tình trạng ngủ gật tài xế 51 CHƯƠNG III : XÂY DỰNG HỆ THỐNG NHẬN DẠNG VÀ CẢNH BÁO 52 3.1 Thư viện OpenCV 52 3.1.1 Giới thiệu thư viện OpenCV 52 3.1.2 Chức OpenCV 52 3.1.1 Ứng dụng thư viện OpenCV 52 3.2 Ngơn ngữ lập trình Python 53 3.3 Lựa chọn phương pháp đề tài nghiên cứu 53 3.3.1 Thư viện Dlib + Facial Landmark 53 3.3.2 Các bước giải thuật 54 3.4 Lưu đồ thuật toán 57 Chương IV: KẾT QUẢ MÔ PHỎNG 58 4.1 Kết mô Kit Raspberry 58 4.2 Đánh giá hệ thống 63 KẾT LUẬN VÀ KIẾN NGHỊ 66 Kết luận 66 Kiến nghị 66 TÀI LIỆU THAM KHẢO 67 PHỤ LỤC 68 DANH MỤC TỪ VIẾT TẮT CMYK C: Cyan, M: Magenta), Y: Yellow, K: Key HOG Histogram of Oriented Gradients HSV H: Hue, S: Saturation, B:Bright OpenCV Open Computer Vision RGB Red- Green- Blue SVM Support Vector Machine WHO World Health Organization DANH MỤC HÌNH ẢNH Hình 1.1 Ảnh màu Lena 12 Hình 1.2 Ảnh xám Lena 13 Hình 1.3 Ảnh nhị phân Lena 13 Hình 1.4 Các loại biên ảnh số 14 Hình 1.5 Tính nhân chập 16 Hình 1.6 Kết phép lọc Sobel theo phương x, phương y 16 Hình 1.7 So sánh lọc 18 Hình 1.8 Khơng gian màu RGB 19 Hình 1.9 Khơng gian màu HSV 19 Hình 1.10 Khơng gian màu CMYK 20 Hình 1.11 Lọc trung bình 25 Hình 1.12 Lọc gaussian 26 Hình 1.13 Lọc trung vị ( Median Blurring ) 26 Hình 1.14 Lọc song song ( Bilateral Filtering ) 27 Hình 1.15 So sánh kĩ thuật lọc OpenCV 27 Hình 1.16 Negative images 28 Hình 1.17 Positive images 29 Hình 1.18 Haar-like features 29 Hình 1.19 So khớp để tạo đặc trưng 30 Hình 1.20 AdaBoost Classifier Di chuyển qua window lỗi thay qua pixel 31 Hình 1.21 Summed-area table 31 Hình 1.22 Mặt phẳng chứa đặc trưng 33 Hình 1.23 Kết sau hân lớp cho đường tròn 33 Hình 1.24 Sliding window 34 Hình 1.25 Hình thái khác đối tượng không gian vector 34 Hình 1.26 Điểm ảnh trích xuất HOG vector 36 Hình 1.27 Kết 64 điểm ảnh 37 Hình 1.28 giá trị góc (Direction) từ 0-180 độ 37 Hình 1.29 Cell 8x8 thu histogram tương ứng 38 Hình 1.30 So sánh tốc độ xử lý HOG Haar 38 Hình 1.31 Số Liệu: Theo WHO 39 Hình 1.32 Nhắm mắt 40 Hình 1.33 Ngáp 41 Hình 1.34 Ngã người 41 Hình 2.1 Kit Raspberry 43 Hình 2.2 Thơng số cấu hình Kit Raspberry 43 Hình 2.3 Module Pi Camera 44 Hình 2.4 Giao diện hệ điều hành raspbian 46 Hình 2.5 Giao diện phần mềm Win32DiskImage 47 Hình 2.6: Màn hình thiết lập cho Raspberry Pi 47 Hình 2.7 Giao diện đồ họa hệ điều hành Raspbian 48 Hình 2.8 Phần mềm Putty 48 Hình 2.9 Phần mềm Remote Desktop Connection 49 Hình 2.10 Giao diện dòng lệnh Putty 49 Hình 2.11 Đặt IP tĩnh cho Raspberry Pi 50 Hình 3.1 Đánh dấu 68 điểm 54 Hình 3.2 Xác định điểm mắt 55 Hình 3.3 Xác định điểm miệng 56 Hình 3.4 Sơ đồ khối hoạt động 57 Hình 4.1 Mắt miệng bình thường 58 Hình 4.2 Mắt nhắm 59 Hình 4.3 Ngáp 59 Hình 4.4 Mang kính 60 Hình 4.5 Nhắm mắt mang kính 60 Hình 4.6 Mang trang 61 TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH THƠNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI Thông tin chung: - Tên đề tài: Xây dựng hệ thống cảnh báo ngủ gật kit Raspberry Pi - Sinh viên thực hiện: Nguyễn Minh Tiến Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Khoa: Điện-Điện Tử Năm thứ: Số năm đào tạo:4.5 Ngành học: Kĩ thuật điện tử tin học công nghiệp Lê Trung Phương Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Khoa: Điện-Điện Tử Năm thứ: Số năm đào tạo:4.5 - Người hướng dẫn: ThS Võ Thiện Lĩnh Mục tiêu đề tài: - Nghiên cứu phương pháp xử lý ảnh - Nghiên cứu phương pháp nhận biết ngủ gật - Thiết kế hệ thống cảnh báo ngủ gật - Xây dựng chương trình phần mềm Tính sáng tạo: Về tính mới: ý tưởng mới, chưa có giải pháp đề cập tới việc triển khai hệ thống phát ngủ gật kit nhúng Raspberry PI Tính sáng tạo nằm mơ hình thực nghiệm: đề tài thực mơ hình nhỏ, mơ hành vi ngồi lái xe Kết nghiên cứu: - Hoàn thành báo cáo nghiên cứu khoa học - Thiết kế hệ thống cảnh báo ngủ gật - Xây dựng chương trình phần mềm - Xây dựng mơ hình phần cứng - Đánh giá kết nghiên cứu thực nghiệm Đóng góp mặt kinh tế - xã hội, giáo dục đào tạo, an ninh, quốc phòng khả áp dụng đề tài: Kết nghiên cứu đề tài cót thể triển khai áp dụng thức tế Đề tài triển khai kit Raspberry PI nên giá thành không cao phù hợp với thu nhập người Việt Nam Đề tài góp phần giảm số lượng vụ tai nạn giao thông liên quan đến việc ngủ gật tài xế cảnh báo trực tiếp buồng lái để có cách giải kịp thời truyền liệu liên tục đơn vị quản lý để xử lý vi phạm tài xế Công bố khoa học sinh viên từ kết nghiên cứu đề tài (ghi rõ họ tên tác giả, nhan đề yếu tố xuất có) nhận xét, đánh giá sở áp dụng kết nghiên cứu (nếu có): Ngày tháng năm Sinh viên chịu trách nhiệm thực đề tài (ký, họ tên) Nhận xét người hướng dẫn đóng góp khoa học sinh viên thực đề tài (phần người hướng dẫn ghi): Ngày tháng năm Người hướng dẫn (ký, họ tên) LỜI GIỚI THIỆU Xử lý ảnh thị giác máy lĩnh vực mà ngày phát triển ứng dụng rộng rãi nhiều lĩnh vực khác nhờ vào phát triển ngày mạnh mẽ hệ thống máy tính, thuật tốn cơng trình nghiên cứu khác nhiều nhà khoa học giới Ở Việt Nam, ứng dụng xử ảnh bước đầu triển khai số lĩnh vực lắp đặt hệ thống nhận dạng biển biển số xe bãi đổ xe, hệ thống nhận dạng vân tay chấm công cơng sở,… Tuy nhiên nhìn cách khách quan số lượng ứng dụng triển khai thực tế ít, lĩnh vực phát triển mạnh mẽ tương lai quan tâm cách nghiêm túc Bài báo cáo trình bày việc xác định trạng thái tập trung tài xế hướng phát triển cho đề tài “Nhận dạng khuôn mặt người để xác định trạng thái ngủ gật tài xế ” Nội dung báo cáo gồm chương : Chương I Cơ sở lý thuyết Chương II Giới thiệu kit Raspberry Chương III Xây dựng hệ thống nhận dạng cảnh báo Chương IV Kết mơ 61 Hình 4.6 Mang trang Mơ hình thực tế hệ thống 62 63 4.2 Đánh giá hệ thống Kết thực nghiệm: Thử nghiệm với người Việt Nam ngồi vào vị trí mặt hướng vào camera, vị trí đầu nằm vừa khung hình vng 400x400pixel Tiến hành chạy chương trình 10 lần liên tiếp 64 o Khi hoạt động điều kiện nhà với ánh sáng đầy đủ Lần Thử 10 Độ định hệ thống Kết Quả Nhận Diện Đúng Đúng Đúng Đúng Đúng Đúng Đúng Đúng Sai Đúng 9/10 o Khi hoạt động trời lúc 20h00 Lần Thử 10 Tổng Kết Kết Quả Nhận Diện Sai Sai Sai Đúng Sai Đúng Sai Sai Sai Đúng 3/10 Ưu điểm: • • • • Xác định nhanh chóng xác thời gian thực Khơng ảnh hưởng trực tiếp đến người lái xe Hoạt động liên tục 24/24 Giá thành cho hệ thống tương đối rẻ Hạn chế: • • Hoạt động khơng ổn định môi trường ánh sáng yếu sử dụng camera thường, đề xuất sử dụng camera hồng ngoại để sử dụng tốt vào ban đêm Không nhận dạng mang trang hay kính đen ( giới hạn đề tài ) 65 • • Cấu hình Kit Raspberry yếu để xử lý lượng lớn phép tính lĩnh vực xử lý ảnh số, đề xuất sử dụng máy tính nhúng cơng nghiệp với cấu hình mạnh cho kết nhanh xác Thuật tốn phức tạp nên hệ thống đơi lúc bị giật 66 KẾT LUẬN VÀ KIẾN NGHỊ Kết luận Bằng cách thiết kế điều khiển nhận dạng trạng thái ngủ gật tài xế, đề tài góp phần giảm số lượng vụ tai nạn giao thông liên quan đến việc ngủ gật tài xế cảnh báo trực tiếp buồng lái để có cách giải kịp thời truyền liệu liên tục đơn vị quản lý để xử lý vi phạm tài xế Đề tài hoàn thành mục tiêu đề ra: − Hoàn thành báo cáo nghiên cứu khoa học − Thiết kế hệ thống cảnh báo ngủ gật − Xây dựng chương trình phần mềm − Xây dựng mơ hình phần cứng − Đánh giá kết nghiên cứu thực nghiệm Kiến nghị Do thời gian nghiên cứu có hạn nên đề tài chắn nhiều thiếu sót, đề tài tiếp tục phát triển, nhóm mong muốn nhà trường, Ban giám hiệu trường quan tâm, tạo điều kiện giúp đỡ cho nhóm kinh phí tiếp cận, trao đổi với chuyên gia lĩnh vực giao thông, triển khai xe thực tế để đề tài nhóm hồn thiện ứng dụng rộng rãi hiệu Hướng nghiên cứu - Xây dựng hệ thống hoàn chỉnh triển khai thực tế 67 TÀI LIỆU THAM KHẢO [1] Viola, Paul; Jones, Michael (2002) "Robust Real-time Object Detection" (PDF) International Journal of Computer Vision [2] Crow, Franklin (1984) "Summed-area tables for texture mapping" (PDF) SIGGRAPH '84: Proceedings of the 11th annual conference on Computer graphics and interactive techniques pp 207–212 [3] Paul Viola and Michael Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features" in 2001 [4] One Millisecond Face Alignment with an Ensemble of Regression Trees paper by Kazemi and Sullivan (2014) [5] Báo cáo “Rối loạn giấc ngủ tai nạn giao thông” hội nghị khoa học thường niên Hội Hơ hấp Việt Nam Chương trình đào tạo y khoa liên tục 2015, giáo sư Telfilo Lee Chiong (Trung tâm Nationnal Jewish Health, Mỹ) [6] Dalal and Triggs in their seminal 2005 paper, Histogram of Oriented Gradients for Human Detection [7] Support-Vector Networks 1995, Cortes and Vapnik [8] Driver Drowsiness Alert System with EffectiveFeature Extraction (2018) by Ashlesha Singh, Chandrakant Chandewar, and Pranav Pattarkine 68 PHỤ LỤC Code Chương Trình: from scipy.spatial import distance as dist from imutils import face_utils from threading import Thread from pyimagesearch.tempimage import TempImage import numpy as np import dropbox import imutils import time import dlib import cv2 import playsound import datetime def sound_alarm(): playsound.playsound('alarm.wav') def sound_focus(): playsound.playsound('focus.wav') def eye_aspect_ratio(eye): # tính euclide điểm không gian A = dist.euclidean(eye[1], eye[5]) B = dist.euclidean(eye[2], eye[4]) C = dist.euclidean(eye[0], eye[3]) # tính tiết diện trung bình mí mắt avr_eye = (A + B) / (2.0 * C) return avr_eye 69 def mouth_ratio(mouth): AB = dist.euclidean(mouth[12],mouth[16]) CD = dist.euclidean(mouth[13],mouth[19]) EF = dist.euclidean(mouth[14],mouth[18]) GH = dist.euclidean(mouth[15],mouth[17]) # tính tiết diện trung bình khn miệng mouth = (CD+EF+GH)/(3.0*AB) return mouth # số EYE_AR_THRESH = 0.3 EYE_AR_CONSEC_FRAMES = 48 MOUTH_AR_THRESH = 0.27 MOUTH_AR_CONSEC_FRAMES = 48 COUNTER = COUNTER_MOUTH = ALARM_ON = False RECORD=False FOCUS = True checkType=None countType=0 client = dropbox.Dropbox("unQ5Wyy9mgAAAAAAAAAACiWorvEgb7ytXApRtaMWb5 BNdk1gSVCdv3XGclHnnzC6") print("[SUCCESS] dropbox account linked") fourcc = cv2.VideoWriter_fourcc(*'XVID') print("[INFO] loading facial landmark predictor ") 70 # import thư viện dlib HOG face detector detector = dlib.get_frontal_face_detector() # load file SVM train 68 điểm predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] (mouthStart, mouthEnd) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"] # stream video từ PiCam Raspberry print("[INFO] starting video stream thread ") cap=cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*'XVID') time.sleep(1.0) # cập nhật thời gian lastUploaded = datetime.datetime.now() while True: # lấy frame từ video _,frame=cap.read() timestamp = datetime.datetime.now() ts = timestamp.strftime("%A %d %B %Y %I:%M:%S%p") # chuyển không gian BGR sang Gray gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # face detect trả vector chứa toạ độ vị trí gương mặt frame rects = detector(gray, 0) if checkType is 1: countType=countType+1 if (countType == 50): 71 countType=0 FOCUS=False tt = Thread(target=sound_focus) tt.setDaemon(True) tt.start() if not FOCUS: cv2.putText(frame, "FOCUS!", (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) checkType = # loop over the face detections for rect in rects: # từ toạ độ gương mặt >> tìm toạ độ vị trí 68 đặc trưng shape = predictor(gray, rect) shape = face_utils.shape_to_np(shape) checkType = type(shape) if checkType is np.ndarray: FOCUS=True countType=0 leftEye = shape[lStart:lEnd] rightEye = shape[rStart:rEnd] leftavr_eye = eye_aspect_ratio(leftEye) rightavr_eye = eye_aspect_ratio(rightEye) avr_eye = (leftavr_eye + rightavr_eye) / 2.0 mouth = shape[mouthStart:mouthEnd] avr_mouth = mouth_ratio(mouth) # vẽ đường bao mắt miệng lên video đầu leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye) 72 cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) mouthHull = cv2.convexHull(mouth) cv2.drawContours(frame, [mouthHull], -1, (255,0,0), 1) # tiết diện mắt trung bình < ngưỡng cho trước if avr_eye < EYE_AR_THRESH: COUNTER += if not RECORD: RECORD=True tt = TempImage() out = cv2.VideoWriter(tt.path,fourcc,20.0,(640,480)) # start recording each frame out.write(frame) # nhắm mắt liên tục sau EYE_AR_CONSEC_FRAMES frame báo động if COUNTER >= EYE_AR_CONSEC_FRAMES: if not ALARM_ON: ALARM_ON = True # play âm đa luồng if 'alarm.wav' != "": t = Thread(target=sound_alarm) t.setDaemon(True) t.start() # vẽ ký tự lên frame ảnh cv2.putText(frame, "DROWSINESS ALERT!", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) # render frame liền trước hụ còi 73 elif ALARM_ON: ALARM_ON = False COUNTER = # rendering video RECORD=False out.release() if (timestamp - lastUploaded).seconds >= 8: # upload lên dropbox try: path = "/{base_path}/{timestamp}.avi".format(base_path="Drowsiness", timestamp=ts) client.files_upload(open(tt.path,"rb").read(), path) tt.cleanup() print("UPLOAD COMPLETE") except: print('check your connection') cv2.putText(frame, "DROWSINESS ALERT!", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) else: COUNTER = if avr_mouth < MOUTH_AR_THRESH: COUNTER_MOUTH += if not RECORD: RECORD=True tt = TempImage() out = cv2.VideoWriter(tt.path,fourcc,20.0,(640,480)) out.write(frame) 74 if COUNTER_MOUTH >= MOUTH_AR_CONSEC_FRAMES: if not ALARM_ON: ALARM_ON = True if 'alarm.wav' != "": t = Thread(target=sound_alarm) t.setDaemon(True) t.start() cv2.putText(frame, "YAWNING ALERT!", (50, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) elif ALARM_ON: ALARM_ON = False COUNTER_MOUTH = # rendering video RECORD=False out.release() if (timestamp - lastUploaded).seconds >= 8: try: path = "/{base_path}/{timestamp}.avi".format(base_path="Drowsiness", timestamp=ts) client.files_upload(open(tt.path,"rb").read(), path) tt.cleanup() print("UPLOAD COMPLETE") except: print('check your connection') cv2.putText(frame, "YAWNING ALERT!", (50, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) else: COUNTER_MOUTH = 75 cv2.putText(frame, "avr_eye: {:.2f}".format(avr_eye), (300, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, "MOUTH: {:.2f}".format(avr_mouth), (100, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) # hiển thị stream output cv2.imshow("Frame",frame) key=cv2.waitKey(1) & 0xFF # nhấn phím 'q' để if key == ord("q"): break cap.release() cv2.destroyAllWindows() ... PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NĂM 2019 XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Sinh viên thực hiện: Nguyễn Minh Tiến

Ngày đăng: 03/11/2019, 19:31

TỪ KHÓA LIÊN QUAN