Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

99 6 0
Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG CẢNH BÁO TÀI XẾ NGỦ GẬT TRÊN Ô TÔ – THI CÔNG, LẮP ĐẶT VÀ THỰC NGHIỆM HỆ THỐNG NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ GIẢNG VIÊN HƯỚNG DẪN TS NGUYỄN VĂN NHANH Sinh viên thực hiện MSSV Lớp Nguyễn Trung Hiếu 1711251926 17DOTC3 Cao Gia Bảo 1711251942 17DOTC3 Nguyễn Kế Thức 1711251939 17DOTC3 TP Hồ Chí Minh, tháng 9 năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ.

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG CẢNH BÁO TÀI XẾ NGỦ GẬT TRÊN Ô TÔ – THI CÔNG, LẮP ĐẶT VÀ THỰC NGHIỆM HỆ THỐNG NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô TÔ GIẢNG VIÊN HƯỚNG DẪN: TS NGUYỄN VĂN NHANH Sinh viên thực hiện: MSSV: Lớp: Nguyễn Trung Hiếu 1711251926 17DOTC3 Cao Gia Bảo 1711251942 17DOTC3 Nguyễn Kế Thức 1711251939 17DOTC3 TP Hồ Chí Minh, tháng năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CƠNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG CẢNH BÁO TÀI XẾ NGỦ GẬT TRÊN Ô TÔ – THI CÔNG, LẮP ĐẶT VÀ THỰC NGHIỆM HỆ THỐNG NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô TÔ GIẢNG VIÊN HƯỚNG DẪN: TS NGUYỄN VĂN NHANH Sinh viên thực hiện: MSSV: Lớp: Nguyễn Trung Hiếu 1711251926 17DOTC3 Cao Gia Bảo 1711251942 17DOTC3 Nguyễn Kế Thức 1711251939 17DOTC3 TP Hồ Chí Minh, tháng năm 2021 MỤC LỤC TRANG LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC CÁC TỪ VIẾT TẮT vi DANH MỤC CÁC BẢNG vii DANH MỤC CÁC HÌNH ẢNH viii LỜI MỞ ĐẦU Chương 1: GIỚI THIỆU ĐỀ TÀI 1.1 Đặt vấn đề 1.2 Mục tiêu đề tài 1.3 Nhiệm vụ đề tài 1.4 Phương pháp nghiên cứu 1.5 Đối tượng nghiên cứu .3 1.6 Ý nghĩa đề tài 1.7 Bố cục đề tài .4 Chương 2: TỔNG QUAN GIẢI PHÁP 2.1 Ưu nhược điểm hệ thống cảnh báo tài xế ngủ gật 2.2 Các phương án thực cảnh báo tài xế ngủ gật ô tô 2.2.1 Phương pháp dựa vào sinh lý người lái xe 2.2.2 Phương pháp dựa vào HĐ phản ứng điều khiển xe người lái xe 2.3 Các hệ thống cảnh báo tài xế ngủ gật .6 2.3.1 Dạng đeo lên tai người lái xe 2.3.2 Dạng lắp đặt xe ô tô 2.4 Hệ thống cảnh báo ngủ gật hãng xe .7 2.4.1 Hãng Mercedes - Benz: thiết bị Attention 2.4.2 Hãng Hyundai: hệ thống chống ngủ gật DDREM cho tài xế iii 2.4.3 Hãng Honda: Hệ thống cảnh báo chống buồn ngủ Driver Attention Monitor .9 2.5 Các nghiên cứu hệ thống cảnh báo tài xế ngủ gật Việt Nam .10 2.5.1 Nghiên cứu thiết kế, chế tạo thiết bị nhúng kiểm soát trạng thái ngủ gật lái xe 10 2.5.2 Thiết kế hệ thống cảnh báo lái xe ngủ gật phương pháp xây dựng ứng dụng với thư viện mã nguồn OpenCV 13 2.6 Hướng phát triển đề tài 16 2.7 Kết luận 16 Chương 3: PHƯƠNG PHÁP GIẢI QUYẾT 17 3.1 Xác định biểu rút trích đặc trưng xác định trạng thái ngủ gật 17 3.2 Xác định thông số kỹ thuật cho thiết bị giám sát trạng thái buồn ngủ lái xe điều kiện giao thông thời tiết Việt Nam 18 3.2.1 Xác định tư đầu dựa vào phát khuôn mặt trường hợp đầu chuyển động 18 3.2.2 Tìm từ khuôn mặt để xác định mắt nhắm hay mở 21 3.2.3 Xác định thông số kỹ thuật cho thiết bị giám sát trạng thái buồn ngủ lái xe 23 3.3 Phần mềm xử lý ảnh .24 3.3.1 Thư viện OpenCV 24 3.3.2 Cách tổ chức thư viện OpenCV .24 3.3.3 Tổng quan phương pháp Haar-like 26 3.4 Kết luận 34 Chương 4: QUY TRÌNH THIẾT KẾ HỆ THỐNG CẢNH BÁO TÀI XẾ NGỦ GẬT 35 4.1 Mô hình hệ thống cảnh báo ngủ gật tài xế cần thiết kế 35 4.1.1 Yêu cầu mơ hình hệ thống 35 4.1.2 Mô tả hệ thống cảnh báo ngủ gật tài xế cần thiết kế 35 iv 4.2 Thiết kế tính tốn phần điện mơ hình .37 4.2.1 Tín hiệu đầu vào 37 4.2.2 Khối nguồn cho hệ thống 38 4.2.3 Bộ xử lý trung tâm 39 4.2.4 Khối cảnh báo 43 4.2.5 Khối hiển thị 44 4.3 Thiết kế thuật toán phần mềm phát ngủ gật .45 4.3.1 Thiết kế thuật toán xác định trạng thái buồn ngủ lái xe .45 4.3.2 Thiết kế phần mềm phát ngủ gật thuật toán đề xuất 51 4.4 Cài đặt phần mềm vào xử lý trung tâm 57 4.5 Kết luận 59 Chương 5: THI CÔNG, LẮP RÁP VÀ THỰC NGHIỆM 60 5.1 Thi công lắp ráp hệ thống cảnh báo tài xế ngủ gật lên xe ô tô .60 5.1.1 Lắp camera hồng ngoại 60 5.1.2 Lắp LCD theo dõi hoạt động hệ thống .60 5.1.3 Lắp khối cảnh báo âm 60 5.1.4 Lắp xử lý trung tâm 61 5.1.5 Vị trí lấy nguồn 61 5.1.6 Mơ hình sau lắp hồn thiện .61 5.2 Xây dựng trường hợp thực nghiệm 62 5.2.1 Điều kiện thực nghiệm 62 5.2.2 Các trường hợp đo đạc 63 5.2.3 Bảng số liệu .64 Chương 6: ĐÁNH GIÁ KẾT QUẢ VÀ KẾT LUẬN 65 6.1 Đánh giá kết thực nghiệm 65 6.2 Kết luận 66 6.3 Kiến nghị .67 TÀI LIỆU THAM KHẢO 68 PHỤ LỤC 69 v DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt DDREM AI GPS Chú thích Departed Driver Rescue & Exit Maneuver Artificial Intelligence Global Positioning System GPRS General Packet Radio Service LED Light Emitting Diode API Application Programming Interface GIS Geographic Information System GUI Graphical User Interface XML eXtensible Markup Language CPU Central Processing Unit USB Universal Serial Bus LCD Liquid-Crystal Display LAN Local Area Network LPDDR Low-Power Double Data Rate Synchronous Dynamic Random Access Memory HDMI High-Definition Multimedia Interface RAM Random Access Memory vi DANH MỤC CÁC BẢNG BẢNG TRANG Bảng 3.1: Các thông số kỹ thuật cho thiết bị giám sát trạng thái buồn ngủ lái xe 23 Bảng 4.1: Cấu hình Chip BCM2837 40 Bảng 4.2: Thông số kỹ thuật khối xử lý trung tâm 41 Bảng 5.1: Bảng ghi tổng hợp kết thực nghiệm .64 Bảng 6.1: Bảng tổng hợp kết đo xe KIA MORNING 66 vii DANH MỤC CÁC HÌNH ẢNH HÌNH TRANG Hình 2.1: Hệ thống chống ngủ gật DDREM (Nguồn Internet) Hình 2.2: Mức cảnh báo ý hiển thị theo cấp độ (Nguồn Internet) .9 Hình 2.3: Các mức cảnh báo buồn ngủ hiển thị theo cấp độ (Nguồn Internet) 10 Hình 2.4: Nhận dạng khuôn mặt đôi mắt (Nguồn Internet) 15 Hình 3.1: Các phương pháp phát trạng thái buồn ngủ (Nguồn Internet) 17 Hình 3.2: Gốc tọa độ frame ảnh hệ trục tọa độ 19 Hình 3.3: Trạng thái khn mặt vị trí chuẩn 19 Hình 3.4: Khn mặt quay sang bên phải .20 Hình 3.5: Khn mặt quay sang trái 20 Hình 3.6: Khuôn mặt ngửa sau 21 Hình 3.7: Khn mặt cúi xuống .21 Hình 3.8: Vị trí trường hợp mắt mở 21 Hình 3.9: Vị trí trường hợp mắt đóng 22 Hình 3.10: Giám sát trạng thái mắt 23 Hình 3.11: Tổ chức thư viện OpenCV (Nguồn Internet) 25 Hình 3.12: Tổng quan phương pháp phát mặt người Haar-like 26 Hình 3.13: Giá trị ảnh tích hợp vị trí (x, y) (Nguồn Internet) 28 Hình 3.14: Mơ tả cách tính tốn ảnh tích hợp từ ảnh ban đầu (Nguồn Internet) .29 Hình 3.15: Ví dụ điểm ảnh vùng hình chữ nhật (Nguồn Internet) 29 Hình 3.16: Đặc trưng thứ thứ hai lựa chọn AdaBoost 30 Hình 3.17: Các đặc trưng Haar-like (Nguồn Internet) 31 Hình 3.18: Một số đặc trưng cạnh (Nguồn Internet) 31 Hình 3.19: Một số đặc trưng đường (Nguồn Internet) .31 Hình 3.20: Đặc trưng xung quanh tâm (Nguồn Internet) 32 viii Hình 4.1: Sơ đồ khối thiết bị phát cảnh báo trạng thái ngủ gật 35 Hình 4.2: Bộ xử lý trung tâm CPU 36 Hình 4.3: Màn hình LCD 36 Hình 4.4: Hệ thống hoàn thiện 36 Hình 4.5: Camera hồng ngoại 38 Hình 4.6: Khối nguồn hệ thống 38 Hình 4.7: Sơ đồ kết nối chip BCM2837 Board Raspberry Pi 40 Hình 4.8: Khối xử lý trung tâm 43 Hình 4.9: Khối cảnh báo âm 43 Hình 4.10: Khối cảnh báo ánh sáng 44 Hình 4.11: Màn hình LCD theo dõi hoạt động hệ thống 44 Hình 4.12: Gốc tọa độ frame ảnh hệ trục tọa độ 45 Hình 4.13: Trạng thái khn mặt vị trí chuẩn .45 Hình 4.14: Khn mặt quay sang trái 46 Hình 4.15: Khn mặt quay sang bên phải .47 Hình 4.16: Khuôn mặt ngửa sau 47 Hình 4.17: Khn mặt cúi xuống 48 Hình 4.18: Cách tính diện tích khn mặt phát 48 Hình 4.19: Vị trí trường hợp mắt mở 49 Hình 4.20: Vị trí trường hợp mắt đóng 49 Hình 4.21: Xác định trạng thái mắt 50 Hình 4.22: Lưu đồ chương trình tổng quát phát buồn ngủ lái xe 53 Hình 4.23: Lưu đồ chương trình xác định vị trí đầu người lái xe 54 Hình 4.24: Lưu đồ chương trình xác định vùng mặt theo phát vùng mũi 55 Hình 4.25: Lưu đồ thuật tốn xác định vùng mắt 56 Hình 4.26: Cài đặt chương trình .57 Hình 4.27: Xây dựng code .57 Hình 4.28: Nạp code xuống thiết bị 58 ix Hình 4.29: Chạy chương trình 58 Hình 4.30: Hình ảnh Code xác định trạng thái tài xế 59 Hình 5.1: Lắp camera hồng ngoại 60 Hình 5.2: Lắp hình LCD 60 Hình 5.3: Lắp loa cảnh báo 60 Hình 5.4: Lắp xử lý trung tâm .61 Hình 5.5: Vị trí lấy nguồn hệ thống 61 Hình 5.6: Mơ hình hệ thống sau lắp đặt hồn thiện 61 Hình 5.7: Thiết bị hoạt động điều kiện ban ngày 62 Hình 5.8: Thiết bị hoạt động điều kiện ban đêm 63 Hình 6.1: Biểu đồ tổng hợp kết đo xe chỗ đơn vị .65 x /* type_register_custom API now removed, but leave a pointer here to not * break ABI */ void *_type_register_custom; gboolean (*gerror_exception_check) (GError **error); PyObject* (*option_group_new) (GOptionGroup *group); GType (* type_from_object_strict) (PyObject *obj, gboolean strict); PyObject *(* newgobj_full)(GObject *obj, gboolean steal, gpointer g_class); PyTypeObject *object_type; int (* value_from_pyobject_with_error)(GValue *value, PyObject *obj); }; /* Deprecated, only available for API compatibility */ #define pyg_threads_enabled TRUE #define pyg_gil_state_ensure PyGILState_Ensure #define pyg_gil_state_release PyGILState_Release #define pyg_begin_allow_threads Py_BEGIN_ALLOW_THREADS #define pyg_end_allow_threads Py_END_ALLOW_THREADS #define pyg_enable_threads() #define pyg_set_thread_block_funcs(a, b) #define pyg_block_threads() #define pyg_unblock_threads() #ifndef _INSIDE_PYGOBJECT_ #if defined(NO_IMPORT) || defined(NO_IMPORT_PYGOBJECT) extern struct _PyGObject_Functions *_PyGObject_API; #else struct _PyGObject_Functions *_PyGObject_API; #endif #define pygobject_register_class (_PyGObject_API->register_class) #define pygobject_register_wrapper (_PyGObject_API->register_wrapper) 75 #define pygobject_lookup_class #define pygobject_new (_PyGObject_API->lookup_class) (_PyGObject_API->newgobj) #define pygobject_new_full (_PyGObject_API->newgobj_full) #define PyGObject_Type (*_PyGObject_API->object_type) #define pyg_closure_new (_PyGObject_API->closure_new) #define pygobject_watch_closure #define (_PyGObject_API->object_watch_closure) pyg_closure_set_exception_handler (_PyGObject_API- >closure_set_exception_handler) #define pyg_destroy_notify (_PyGObject_API->destroy_notify) #define pyg_type_from_object_strict (_PyGObject_API->type_from_object_strict) #define pyg_type_from_object (_PyGObject_API->type_from_object) #define pyg_type_wrapper_new (_PyGObject_API->type_wrapper_new) #define pyg_enum_get_value (_PyGObject_API->enum_get_value) #define pyg_flags_get_value (_PyGObject_API->flags_get_value) #define pyg_register_gtype_custom (_PyGObject_API->register_gtype_custom) #define pyg_value_from_pyobject #define (_PyGObject_API->value_from_pyobject) pyg_value_from_pyobject_with_error (_PyGObject_API- >value_from_pyobject_with_error) #define pyg_value_as_pyobject (_PyGObject_API->value_as_pyobject) #define pyg_register_interface (_PyGObject_API->register_interface) #define PyGBoxed_Type (*_PyGObject_API->boxed_type) #define pyg_register_boxed (_PyGObject_API->register_boxed) #define pyg_boxed_new (_PyGObject_API->boxed_new) #define PyGPointer_Type (*_PyGObject_API->pointer_type) #define pyg_register_pointer (_PyGObject_API->register_pointer) #define pyg_pointer_new (_PyGObject_API->pointer_new) #define pyg_enum_add_constants #define pyg_flags_add_constants (_PyGObject_API->enum_add_constants) (_PyGObject_API->flags_add_constants) #define pyg_constant_strip_prefix (_PyGObject_API->constant_strip_prefix) 76 #define pyg_error_check (_PyGObject_API->error_check) #define PyGParamSpec_Type (*_PyGObject_API->paramspec_type) #define pyg_param_spec_new (_PyGObject_API->paramspec_new) #define pyg_param_spec_from_object (_PyGObject_API->paramspec_get) #define pyg_pyobj_to_unichar_conv (_PyGObject_API->pyobj_to_unichar_conv) #define pyg_parse_constructor_args (_PyGObject_API->parse_constructor_args) #define pyg_param_gvalue_as_pyobject (_PyGObject_API->value_as_pyobject) #define pyg_param_gvalue_from_pyobject (_PyGObject_API- >gvalue_from_param_pyobject) #define PyGEnum_Type #define pyg_enum_add #define pyg_enum_from_gtype #define PyGFlags_Type #define pyg_flags_add #define pyg_flags_from_gtype #define pyg_register_class_init (*_PyGObject_API->enum_type) (_PyGObject_API->enum_add) (_PyGObject_API->enum_from_gtype) (*_PyGObject_API->flags_type) (_PyGObject_API->flags_add) (_PyGObject_API->flags_from_gtype) (_PyGObject_API->register_class_init) #define pyg_register_interface_info (_PyGObject_API->register_interface_info) #define pyg_add_warning_redirection (_PyGObject_API- >add_warning_redirection) #define pyg_disable_warning_redirections (_PyGObject_API- >disable_warning_redirections) #define pyg_gerror_exception_check (_PyGObject_API->gerror_exception_check) #define pyg_option_group_new (_PyGObject_API->option_group_new) /** * pygobject_init: * @req_major: minimum version major number, or -1 * @req_minor: minimum version minor number, or -1 * @req_micro: minimum version micro number, or -1 * 77 * Imports and initializes the 'gobject' python module Can * optionally check for a required minimum version if @req_major, * @req_minor, and @req_micro are all different from -1 * * Returns: a new reference to the gobject module on success, NULL in * case of failure (and raises ImportError) **/ static inline PyObject * pygobject_init(int req_major, int req_minor, int req_micro) { PyObject *gobject, *cobject; gobject = PyImport_ImportModule("gi._gobject"); if (!gobject) { if (PyErr_Occurred()) { PyObject *type, *value, *traceback; PyObject *py_orig_exc; PyErr_Fetch(&type, &value, &traceback); py_orig_exc = PyObject_Repr(value); Py_XDECREF(type); Py_XDECREF(value); Py_XDECREF(traceback); #if PY_VERSION_HEX < 0x03000000 PyErr_Format(PyExc_ImportError, "could not import gobject (error was: %s)", PyString_AsString(py_orig_exc)); #else { 78 /* Can not use PyErr_Format because it doesn't have * a format string for dealing with PyUnicode objects * like PyUnicode_FromFormat has */ PyObject *errmsg = PyUnicode_FromFormat("could not import gobject (error was: %U)", py_orig_exc); if (errmsg) { PyErr_SetObject(PyExc_ImportError, errmsg); Py_DECREF(errmsg); } /* if errmsg is NULL then we might have OOM * PyErr should already be set and trying to * return our own error would be futile */ } #endif Py_DECREF(py_orig_exc); } else { PyErr_SetString(PyExc_ImportError, "could not import gobject (no error given)"); } return NULL; } cobject = PyObject_GetAttrString(gobject, "_PyGObject_API"); if (cobject && PyCapsule_CheckExact(cobject)) { 79 _PyGObject_API = (struct _PyGObject_Functions *) PyCapsule_GetPointer(cobject, "gobject._PyGObject_API"); Py_DECREF (cobject); } else { PyErr_SetString(PyExc_ImportError, "could not import gobject (could not find _PyGObject_API object)"); Py_XDECREF (cobject); Py_DECREF(gobject); return NULL; } if (req_major != -1) { int found_major, found_minor, found_micro; PyObject *version; version = PyObject_GetAttrString(gobject, "pygobject_version"); if (!version) { PyErr_SetString(PyExc_ImportError, "could not import gobject (version too old)"); Py_DECREF(gobject); return NULL; } if (!PyArg_ParseTuple(version, "iii", &found_major, &found_minor, &found_micro)) { PyErr_SetString(PyExc_ImportError, "could not import gobject (version has invalid format)"); Py_DECREF(version); Py_DECREF(gobject); 80 return NULL; } Py_DECREF(version); if (req_major != found_major || req_minor > found_minor || (req_minor == found_minor && req_micro > found_micro)) { PyErr_Format(PyExc_ImportError, "could not import gobject (version mismatch, %d.%d.%d is required, " "found %d.%d.%d)", req_major, req_minor, req_micro, found_major, found_minor, found_micro); Py_DECREF(gobject); return NULL; } } return gobject; } /** * PYLIST_FROMGLIBLIST: * @type: the type of the GLib list e.g #GList or #GSList * @prefix: the prefix of functions that manipulate a list of the type * given by type * * A macro that creates a type specific code block which converts a GLib * list (#GSList or #GList) to a Python list The first two args of the macro * are used to specify the type and list function prefix so that the type * specific macros can be generated * 81 * The rest of the args are for the standard args for the type specific * macro(s) created from this macro */ #define PYLIST_FROMGLIBLIST(type,prefix,py_list,list,item_convert_func,\ list_free,list_item_free) \ G_STMT_START \ {\ gint i, len; \ PyObject *item; \ void (*glib_list_free)(type*) = list_free; \ GFunc glib_list_item_free = (GFunc)list_item_free; \ \ len = prefix##_length(list); \ py_list = PyList_New(len); \ for (i = 0; i < len; i++) { \ gpointer list_item = prefix##_nth_data(list, i); \ \ item = item_convert_func; \ PyList_SetItem(py_list, i, item); \ }\ if (glib_list_item_free != NULL) \ prefix##_foreach(list, glib_list_item_free, NULL); \ if (glib_list_free != NULL) \ glib_list_free(list); \ } G_STMT_END /** * PYLIST_FROMGLIST: * @py_list: the name of the Python list 82 * * @list: the #GList to be converted to a Python list * * @item_convert_func: the function that converts a list item to a Python * object The function must refer to the list item using "@list_item" and * must return a #PyObject* object An example conversion function is: * [[ * PyString_FromString(list_item) * ]] * A more elaborate function is: * [[ * pyg_boxed_new(GTK_TYPE_RECENT_INFO, list_item, TRUE, TRUE) * ]] * @list_free: the name of a function that takes a single arg (the list) and * frees its memory Can be NULL if the list should not be freed An example * is: * [[ * g_list_free * ]] * @list_item_free: the name of a #GFunc function that frees the memory used * by the items in the list or %NULL if the list items not have to be * freed A simple example is: * [[ * g_free * ]] * * A macro that adds code that converts a #GList to a Python list * */ 83 #define PYLIST_FROMGLIST(py_list,list,item_convert_func,list_free,\ list_item_free) \ PYLIST_FROMGLIBLIST(GList,g_list,py_list,list,item_convert_func,\ list_free,list_item_free) /** * PYLIST_FROMGSLIST: * @py_list: the name of the Python list * * @list: the #GSList to be converted to a Python list * * @item_convert_func: the function that converts a list item to a Python * object The function must refer to the list item using "@list_item" and * must return a #PyObject* object An example conversion function is: * [[ * PyString_FromString(list_item) * ]] * A more elaborate function is: * [[ * pyg_boxed_new(GTK_TYPE_RECENT_INFO, list_item, TRUE, TRUE) * ]] * @list_free: the name of a function that takes a single arg (the list) and * frees its memory Can be %NULL if the list should not be freed An example * is: * [[ * g_list_free * ]] * @list_item_free: the name of a #GFunc function that frees the memory used * by the items in the list or %NULL if the list items not have to be * freed A simple example is: 84 * [[ * g_free * ]] * * A macro that adds code that converts a #GSList to a Python list * */ #define PYLIST_FROMGSLIST(py_list,list,item_convert_func,list_free,\ list_item_free) \ PYLIST_FROMGLIBLIST(GSList,g_slist,py_list,list,item_convert_func,\ list_free,list_item_free) /** * PYLIST_ASGLIBLIST * @type: the type of the GLib list e.g GList or GSList * @prefix: the prefix of functions that manipulate a list of the type * given by type e.g g_list or g_slist * * A macro that creates a type specific code block to be used to convert a * Python list to a GLib list (GList or GSList) The first two args of the * macro are used to specify the type and list function prefix so that the * type specific macros can be generated * * The rest of the args are for the standard args for the type specific * macro(s) created from this macro */ #define PYLIST_ASGLIBLIST(type,prefix,py_list,list,check_func,\ convert_func,child_free_func,errormsg,errorreturn) \ G_STMT_START \ {\ 85 Py_ssize_t i, n_list; \ GFunc glib_child_free_func = (GFunc)child_free_func; \ \ if (!(py_list = PySequence_Fast(py_list, ""))) { \ errormsg; \ return errorreturn; \ }\ n_list = PySequence_Fast_GET_SIZE(py_list); \ for (i = 0; i < n_list; i++) { \ PyObject *py_item = PySequence_Fast_GET_ITEM(py_list, i); \ \ if (!check_func) { \ if (glib_child_free_func) \ prefix##_foreach(list, glib_child_free_func, NULL); \ prefix##_free(list); \ Py_DECREF(py_list); \ errormsg; \ return errorreturn; \ }\ list = prefix##_prepend(list, convert_func); \ }; \ Py_DECREF(py_list); \ list = prefix##_reverse(list); \ }\ G_STMT_END /** * PYLIST_ASGLIST * @py_list: the Python list to be converted * @list: the #GList list to be converted 86 * @check_func: the expression that takes a #PyObject* arg (must be named * @py_item) and returns an int value indicating if the Python object matches * the required list item type (0 - %False or - %True) An example is: * [[ * (PyString_Check(py_item)||PyUnicode_Check(py_item)) * ]] * @convert_func: the function that takes a #PyObject* arg (must be named * py_item) and returns a pointer to the converted list object An example * is: * [[ * pygobject_get(py_item) * ]] * @child_free_func: the name of a #GFunc function that frees a GLib list * item or %NULL if the list item does not have to be freed This function is * used to help free the items in a partially created list if there is an * error An example is: * [[ * g_free * ]] * @errormsg: a function that sets up a Python error message An example is: * [[ * PyErr_SetString(PyExc_TypeError, "strings must be a sequence of" "strings * or unicode objects") * ]] * @errorreturn: the value to return if an error occurs, e.g.: * [[ * %NULL * ]] * 87 * A macro that creates code that converts a Python list to a #GList The * returned list must be freed using the appropriate list free function when * it's no longer needed If an error occurs the child_free_func is used to * release the memory used by the list items and then the list memory is * freed */ #define PYLIST_ASGLIST(py_list,list,check_func,convert_func,child_free_func,\ errormsg,errorreturn) \ PYLIST_ASGLIBLIST(GList,g_list,py_list,list,check_func,convert_func,\ child_free_func,errormsg,errorreturn) /** * PYLIST_ASGSLIST * @py_list: the Python list to be converted * @list: the #GSList list to be converted * @check_func: the expression that takes a #PyObject* arg (must be named * @py_item) and returns an int value indicating if the Python object matches * the required list item type (0 - %False or - %True) An example is: * [[ * (PyString_Check(py_item)||PyUnicode_Check(py_item)) * ]] * @convert_func: the function that takes a #PyObject* arg (must be named * py_item) and returns a pointer to the converted list object An example * is: * [[ * pygobject_get(py_item) * ]] * @child_free_func: the name of a #GFunc function that frees a GLib list * item or %NULL if the list item does not have to be freed This function is * used to help free the items in a partially created list if there is an 88 * error An example is: * [[ * g_free * ]] * @errormsg: a function that sets up a Python error message An example is: * [[ * PyErr_SetString(PyExc_TypeError, "strings must be a sequence of" "strings * or unicode objects") * ]] * @errorreturn: the value to return if an error occurs, e.g.: * [[ * %NULL * ]] * * A macro that creates code that converts a Python list to a #GSList The * returned list must be freed using the appropriate list free function when * it's no longer needed If an error occurs the child_free_func is used to * release the memory used by the list items and then the list memory is * freed */ #define PYLIST_ASGSLIST(py_list,list,check_func,convert_func,child_free_func,\ errormsg,errorreturn) \ PYLIST_ASGLIBLIST(GSList,g_slist,py_list,list,check_func,convert_func,\ child_free_func,errormsg,errorreturn) #endif /* !_INSIDE_PYGOBJECT_ */ G_END_DECLS #endif /* !_PYGOBJECT_H_ */ 89 ... VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THI? ??T KẾ HỆ THỐNG CẢNH BÁO TÀI XẾ NGỦ GẬT TRÊN Ô TÔ – THI CÔNG, LẮP ĐẶT VÀ THỰC NGHIỆM HỆ THỐNG NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô. .. đề tài báo cáo ? ?Thi? ??t kế hệ thống cảnh báo tài xế ngủ gật ô tô – Thi công, lắp đặt thực nghiệm hệ thống? ?? Trong trình thực báo cáo, trình độ hiểu biết hạn chế Nhưng bảo thầy (cô) Viện kỹ thuật... 5: THI CÔNG, LẮP RÁP VÀ THỰC NGHIỆM 60 5.1 Thi công lắp ráp hệ thống cảnh báo tài xế ngủ gật lên xe ô tô .60 5.1.1 Lắp camera hồng ngoại 60 5.1.2 Lắp LCD theo dõi hoạt động hệ thống

Ngày đăng: 17/07/2022, 14:13

Hình ảnh liên quan

Hình 2.1: Hệ thống chống ngủ gật DDREM (Nguồn Internet) - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 2.1.

Hệ thống chống ngủ gật DDREM (Nguồn Internet) Xem tại trang 18 của tài liệu.
Hình 2.2: Mức cảnh báo chú ý được hiển thị theo từng cấp độ (Nguồn Internet) - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 2.2.

Mức cảnh báo chú ý được hiển thị theo từng cấp độ (Nguồn Internet) Xem tại trang 19 của tài liệu.
Hình 2.3: Các mức cảnh báo buồn ngủ được hiển thị theo 4 cấp độ (Nguồn - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 2.3.

Các mức cảnh báo buồn ngủ được hiển thị theo 4 cấp độ (Nguồn Xem tại trang 20 của tài liệu.
Từ đó gọi O0 (x, y) là gốc tọa độ khuôn mặt ở vị trí tiêu chuẩn của tài xế (Hình 3.3) - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

g.

ọi O0 (x, y) là gốc tọa độ khuôn mặt ở vị trí tiêu chuẩn của tài xế (Hình 3.3) Xem tại trang 29 của tài liệu.
Hình 3.7: Khn mặt cúi xuống dưới - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.7.

Khn mặt cúi xuống dưới Xem tại trang 31 của tài liệu.
Hình 3.9: Vị trí con ngươi trong trường hợp mắt đóng - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.9.

Vị trí con ngươi trong trường hợp mắt đóng Xem tại trang 32 của tài liệu.
Hình 3.10: Giám sát trạng thái mắt - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.10.

Giám sát trạng thái mắt Xem tại trang 33 của tài liệu.
Hình 3.11: Tổ chức thư viện OpenCV (Nguồn Internet) - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.11.

Tổ chức thư viện OpenCV (Nguồn Internet) Xem tại trang 35 của tài liệu.
Hình 3.12: Tổng quan phương pháp phát hiện mặt người bằng Haar-like - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.12.

Tổng quan phương pháp phát hiện mặt người bằng Haar-like Xem tại trang 36 của tài liệu.
Hình 3.17: Các đặc trưng Haar-like cơ bản (Nguồn Internet) - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 3.17.

Các đặc trưng Haar-like cơ bản (Nguồn Internet) Xem tại trang 41 của tài liệu.
4.1 Mơ hình hệ thống cảnh báo ngủ gật tài xế cần thiết kế 4.1.1 Yêu cầu của mô hình hệ thống  - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

4.1.

Mơ hình hệ thống cảnh báo ngủ gật tài xế cần thiết kế 4.1.1 Yêu cầu của mô hình hệ thống Xem tại trang 45 của tài liệu.
Hình 4.2: Bộ xử lý trung tâm CPU - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.2.

Bộ xử lý trung tâm CPU Xem tại trang 46 của tài liệu.
Hình 4.6: Khối nguồn hệ thống - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.6.

Khối nguồn hệ thống Xem tại trang 48 của tài liệu.
Hình 4.7: Sơ đồ kết nối chip BCM2837 trên Board Raspberry Pi 4 Bảng 4.1: Cấu hình Chip BCM2837  - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.7.

Sơ đồ kết nối chip BCM2837 trên Board Raspberry Pi 4 Bảng 4.1: Cấu hình Chip BCM2837 Xem tại trang 50 của tài liệu.
Hình 4.9: Khối cảnh báo âm thanh - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.9.

Khối cảnh báo âm thanh Xem tại trang 53 của tài liệu.
Hình 4.8: Khối xử lý trung tâm 4.2.4 Khối cảnh báo  - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.8.

Khối xử lý trung tâm 4.2.4 Khối cảnh báo Xem tại trang 53 của tài liệu.
Để tính diện tích khn mặt phát hiện được dùng cơng thức (Hình 4.18): - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

t.

ính diện tích khn mặt phát hiện được dùng cơng thức (Hình 4.18): Xem tại trang 58 của tài liệu.
Hình 4.22: Lưu đồ chương trình tổng quát phát hiện buồn ngủ của lái xe - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.22.

Lưu đồ chương trình tổng quát phát hiện buồn ngủ của lái xe Xem tại trang 63 của tài liệu.
Hình 4.23: Lưu đồ chương trình xác định vị trí đầu người lái xe - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.23.

Lưu đồ chương trình xác định vị trí đầu người lái xe Xem tại trang 64 của tài liệu.
Hình 4.24: Lưu đồ chương trình xác định vùng mặt theo phát hiện vùng mũi - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.24.

Lưu đồ chương trình xác định vùng mặt theo phát hiện vùng mũi Xem tại trang 65 của tài liệu.
Lưu đồ thuật toán xác định vùng mắt và con ngươi trình bày trên Hình 4.25. - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

u.

đồ thuật toán xác định vùng mắt và con ngươi trình bày trên Hình 4.25 Xem tại trang 66 của tài liệu.
− Tiến hành Cài đặt chương trình (Hình 4.26). - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

i.

ến hành Cài đặt chương trình (Hình 4.26) Xem tại trang 67 của tài liệu.
Hình 4.26: Cài đặt chương trình - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.26.

Cài đặt chương trình Xem tại trang 67 của tài liệu.
Hình 4.28: Nạp code xuống thiết bị - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 4.28.

Nạp code xuống thiết bị Xem tại trang 68 của tài liệu.
− Chạy chương trình, trên màn hình máy tính hiển thị (Hình 4.29). - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

h.

ạy chương trình, trên màn hình máy tính hiển thị (Hình 4.29) Xem tại trang 68 của tài liệu.
Hình ảnh thực nghiệm và kết quả ghi nhận trong code chương trình trên màn hình máy tính (Hình 4.30):  - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

nh.

ảnh thực nghiệm và kết quả ghi nhận trong code chương trình trên màn hình máy tính (Hình 4.30): Xem tại trang 69 của tài liệu.
Hình 5.5: Vị trí lấy nguồn hệ thống 5.1.6 Mơ hình sau khi lắp hồn thiện  - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 5.5.

Vị trí lấy nguồn hệ thống 5.1.6 Mơ hình sau khi lắp hồn thiện Xem tại trang 71 của tài liệu.
Hình 5.7: Thiết bị hoạt động ở điều kiện ban ngày - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

Hình 5.7.

Thiết bị hoạt động ở điều kiện ban ngày Xem tại trang 72 của tài liệu.
Kết quả thực nghiệm tổng hợp được trình bày trên Hình 6.1 và Bảng 6.1. - Thiết kế hệ thống cảnh báo tài xế ngủ gật trên ô tô – thi công, lắp đặt và thực nghiệm hệ thống

t.

quả thực nghiệm tổng hợp được trình bày trên Hình 6.1 và Bảng 6.1 Xem tại trang 75 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan