BÁO CÁO MƠN ỨNG DỤNG MÁY TÍNH
ĐỀ TÀI: HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN Ơ
TƠ
GVHD:
SVTH:
Tp. Hồ Chí Minh, ngày 01 tháng 05 năm 2021
MỤC LỤC
DANH MỤC HÌNH ẢNH
DANH MỤC TÀI LIỆU THAM KHẢO
[1].Giáo trình lập trình Labview của Ts.Nguyễn Bá Hải.
[2].Tài liệu hướng dẫn sử dụng Labview của NI (National Instruments).
[3].Tài liệu hướng dẫn và tự thực hành về Arduino.
3
CHƯƠNG I: GIỚI THIỆU CHUNG
1.1 Lý do chọn đề tài
Công nghệ xử lý ảnh đã được nghiên cứu, phát triển mạnh mẽ trong những năm gần
đây. Việc ứng dụng công nghệ này vào trong thực tiễn cuộc sống ngày càn trở nên quan
trọng và cần thiết hơn hết. Theo số liệu thống kế, tổng hợp từ một số Phòng Cảnh sát
Giao thông (CSGT) Đường bộ - Đường sắt khu vực miền Trung thời gian qua cho thấy,
20% số vụ tại nạn xảy ra về đêm đều rơi vào khoảng 2 đến 5 giờ sáng. Đây là thời gian
mà nhịp sinh học cơ thể đòi hỏi được nghỉ ngơi nhất khi đã căng sức gần 20 tiếng trong
ngày. Đó cũng là múi giờ mà nhiều lái xe đường dài thú nhận là rất khó cưỡng lại được
cảm giác them ngủ bởi họ đã phải căng sức trong suốt một ngày đường (rất cần được
nghỉ ngơi để phục hồi sức khỏe).
Nhiều lái xe đã tìm cách “khắc chế” cơn buồn ngủ vào múi giờ này đã tìm cách
uống rất nhiều nước trà, cà phê trước khi ngồi sau vô lăng. Nhưng không phải lái xe
nào cũng vượt qua được cảm giác khó khăn này. Và 20% số vụ tai nạn giao thông xảy
ra về đêm kể trên là một minh chứng về tình trạng báo động. Vì vậy, đề tài sẽ thực hiện
việc ứng dụng thuật toán xử lý ảnh vào trong thiết bị cảnh báo ngủ gật trên xe ô tô với
mục đích đưa cơng nghệ vào thực tiễn nhằm giúp người tham gia giao thơng được an
tồn cũng như hạn chế các tai nạn đáng tiếc xảy ra.
1.2 Mục tiêu của đề tài
Trong phạm vi của đề tài, nhóm nghiên cứu chủ yếu nghiên cứu về cách thức sử
dụng phần mềm Labview cùng với lập trình python: cách tạo giao diện, liên kết với
Adruino, lập trình python nhận diện khn mặt và thuật toán trên python để xử lý ảnh.
Nghiên cứu các thuật toán kết hợp python, labview và adruino nhằm đáp ứng được
mục tiêu “Nghiên cứu, thiết kế hệ thống cảnh báo ngủ gật”.
1.3 Nội dung nghiên cứu
−
Nghiên cứu các thuật tốn xử lí ảnh khác nhau rồi so sánh, chạy chương
thử chương trình, lựa chọn thuật tốn
−
Nghiên cứu phần mềm Labview và các khối chức năng.
−
Nghiên cứu về các khối chức năng liên kết với Adruino, Python.
−
Tính tốn dấu hiệu của hiện tượng ngủ gật.
−
Thiết kế hàm truyền dữ liệu từ Labview qua Adruino.
−
Thiết kế mạch Adruino, dùng chính webcam máy tính để thu thập hình
ảnh.
4
1.4 Tổng quan về hệ thống
Trong hệ thống cảnh báo ngủ gật trên ô tô yêu cầu thiết bị và vị trí thiết kế sẽ góp
phần đảm bảo an tồn cho người tham gia giao thơng cũng như độ chính xác của việc
xử lý.
Mơ hình gồm các thiết bị:
−
Webcam: thu tín hiệu hình ảnh từ bên ngồi.
−
Mạch xử lý các tín hiệu và giao tiếp máy tính.
−
Thiết bị ngõ ra như: chuông cảnh báo, đèn cảnh báo.
5
CHƯƠNG II: CƠ SỞ LÍ THUYẾT
2.1 Labview là gì?
LabVIEW (viết tắt của Laboratory Virtual Instrumentation Engineering Workbench)
là môi trường ngôn ngữ đồ họa hiệu quả trong việc giao tiếp đa kênh giữ con người,
thuật toán và các thiết bị.
Gọi LabVIEW là ngơn ngữ đồ học hiệu quả vì về cách thức lập trình, LabVIEW
khác với các ngơn ngữ C (hay Python, Basic, vv.). Thay vì sử dụng các từ vựng (từ
khóa) cố định, LabVIEW sử dụng các khối hình ảnh sinh động và các dây nối để tạo ra
các lệnh và các hàm như trong hình 2.2. Đặc biệt, LabVIEW rất phù hợp đối với kỹ sư,
nhà khoa học, hay giảng viên. Chính vì vậy LabVIEW trở thành một trong những công
cụ phổ biến trong các ứng dụng thu thập dữ liệu từ các cảm biến, phát triển các thuật
toán, và điều khiển thiết bị tại các phịng thí nghiệm trên thế giới.
Hình 2.1 Màn hình khởi động labview.
Về ý nghĩa kỹ thuật, LabVIEW cũng được dùng để lập trình ra các chương trình
(source code: mã nguồn) trên máy tính tương tự các ngơn ngữ lập trình dựa trên chữ
(text – bassed language) như C, Python, Java, Basic, vv
Đồng thời, LabVIEW hỗ trợ các kỹ sư, nhà khoa học và sinh viên, vv. Xây dựng
6
(thực thi) các thuật toán một cách nhanh, gọn, sáng tạo, và dễ hiểu nhờ các khối hình
ảnh có tính gợi nhớ và cách thức hoạt động theo kiểu dòng dữ liệu (date flow) lần lượt
từ trái qua phải. Các thuật toán này được áp dụng lên các mạch điện và cơ cấu chấp
hành thực nhờ vào việc kết nối hệ thống thật với LabVIEW thông qua nhiều chuẩn
giao tiếp như chuẩn giao tiếp RS232 (giao tiếp qua cổng COM), chuẩn USB, chuẩn
giao tiếp mạng TCP/IP, UDP, chuẩn GBIB, ... Vì vậy LabVIEW là một ngơn ngữ giao
tiếp đa kênh.
2.2 Ứng dụng của Labview
LabVIEW được sử dụng trong các lĩnh vực đo lường, tự động hóa, cơ điện tử,
robotics, vật lý, tốn học, sinh học, vật lý, ơ tơ, ... Nhìn chung:
− LabVIEW giúp kỹ sư kết nối bất kỳ cảm biến và bất kỳ cơ cấu chấp hành nào với
máy tính.
LabVIEW có thể được sử dụng để xử lý các kiểu dữ liệu như tín hiệu tương tự
(analog), tín hiệu số (digital) hình ảnh (vision), âm thanh (audio).
− LabVIEW hỗ trợ các giao thức giao tiếp khác nhau nhau RS232, RS485, TCP/IP,
PCI, PXI, và như vậy
− LabVIEW cũng có thể tạo ra các thực thi độc lập và các thư viện chia sẽ (ví dụ
như viên liên kết động DLL), bởi vì LabVIEW là một trình biên dịch 32 – bit.
−
Hình 2.2 Ứng dụng Labview vào dây chuyền xử lý mã vạch.
7
2.3 Giao tiếp Labview với Adruino
Có 2 cách để kết nối adruino với Labview:
− Cách 1: Thông qua bộ VIs, Labview có thể lấy dữ liệu từ các chân Arduino và
xử lý, điều khiển hoặc hiển thị kết quả trên màn hình máy tính.
− Cách 2: Kết nối với adruino thông qua LINX được tạo ra và phát triển
MakerHub giúp Labview giao tiếp được với nhiều phần cứng.
Hình 2.3 Nền tảng LINX hỗ trọ cho Labview
Ở đề tài của nhóm lựa chọn giao tiếp với adruino thông qua LINX:
+ Bước 1: Tìm kiếm và cài đặt LINX bằng VIPM.
Hình 2.4 Cài đặt LINX trên VIPM.
+ Bước 2: Tải Firmware cho Labview.
8
Hình 2.5 Tải Firmware cho Labview.
• Chạy Labview.
• Chọn Tools > MakerHub > LINX > Firmware Wizard…
• Chọn phần cứng thích hợp (ở đây là Adruino).
• Chọn Firmware Version và Next .
9
Hình 2.6 Kết nối cổng COM Adruino với Labview thơng qua LINX.
2.3.1 Một số khối (hàm) thường hay sử dụng của LabVIEW:
•
Khối While loop: là khối dùng để lặp lại liên tục một chương trình chứa
trong nó trong khoảng thời gian tùy ý.
Hình 2.7 Khối While Loop
Nút “stop” dùng để dừng vịng lặp, khối “i” sẽ cho biết có bao nhiêu
vịng lặp đã được lặp.
• Khối Case Structure: tương đương một hàm điều kiện (IF), các trường
hợp trong miền True sẽ xảy ra nếu giả thiết đầu vào là True, các trường
hợp trong miền False sẽ xảy ra nếu giả thiết đầu vào là False.
10
Hình 2.8 Khối Case Structure
• Hàm Time Delay: Hàm này cho phép cài đặt thời gian trễ sau mỗi vòng
lặp While Loop, như trên hình thì mỗi vịng lặp While loop sẽ có thời gian
trễ là 1 giây.
Hình 2.9 Khối Time Delay
• Hàm While Until Next ms Multiple: Hàm này cho phép cài đặt thời gian
làm việc cho mỗi vòng lặp While Loop, như trên hình thì mỗi vịng lặp
While loop sẽ diễn ra trong 50(ms).
Hình 2.10 Hàm While Until Next ms Multiple
• Các hàm tính tốn
11
Hình 2.11 Các hàm tính tốn trong LabVIEW
• Các hàm so sánh
Hình 2.12 Các hàm so sánh trong LabVIEW
12
• Các hàm logic
Hình 2.13 Các hàm logic
2.3 2 Các khối chức năng Arduino trong Labview:
•
Hình 2.14 Các khối chức năng Arduino
Khối INIT:
13
Hình 2.15 Khối INIT
- Chân VISA resource là chân thiết lập cổng COM để giao tiếp
giữa LabVIEW và Arduino.
- Chân Baud Rate là chân thiết lập tốc độ baud.Tốc độ baud là
115200 đối với Arduino Uno, là 9600 đối với các dòng Arduino
khác.
- Chân Board Type là chân để chọn loại Arduino để làm việc.Có 3
loại Arduino được hỗ trợ là: Uno,Mega 2560 và
Dimuelanove/Atmega 328.
- Chân Connection Type là chân lựa chọn kiểu kết nối: qua
USB,XBEE hoặc Bluetooth.
- Chân Arduino Resource để kết nối với các khối khác. Cách thiết
lập chân và một số lưu ý nhỏ khi nối các khối
Một khối được chia làm 2 dãy chân dữ liệu.
Các chân nằm bên trái của khối là các chân đưa dữ liệu vào hoặc là các
thiết lập ban đầu của tín hiệu. Các chân bên phải là các chân đưa dữ liệu
ra hoặc các thành phần của tín hiệu đã tách được khi qua khối.
Để thiết lập bất kỳ chân nào của một khối ta làm như sau:
Đưa con trỏ chuột tới chân cần thiết lập sao cho con trỏ chuột trở thành
Wiring tool (hoặc có thể dùng Tool Palette).
Click Chuột phải, sau đó trỏ chuột vào Create chọn kiểu thiết lập.Có 3
kiểu thiết lập: Constant(hằng số), Control(điều khiển), Indicator(hiển
thị) tùy vào mục đích để lựa chọn phù hợp.
Chân Arduino Resource của khối này nối với chân Arduino
Resource của khối khác.
Chân error out của khối trước thì nối với error in của khối liền
sau.
14
•
Đối với các khối cịn lại ta cũng thiết lập tương tự
Khối CLOSE:
Hình
CLOSE
2.16 Khối
Là khối để dóng một chương trình giao tiếp với Arduino.Và chỉ gồm các
chân cơ bản là Arduino Resource, error in, error out.
•
Khối LOW LEVEL:
15
Hình 2.17 Khối low level
Bao gồm các khối để đọc, ghi tín hiệu analog hoặc digital từ board A
rduino. Ngồi ra cịn có các khối phục vụ việc băm xung, bus...
•
Khối SENSORS:
Hình 2.18 Khối Sensors
Bao gồm các khối VI sensor thường dùng như: Cảm biến nhiệt độ, cảm biến ánh
sáng, LCD, led 7 thanh, led nhiều màu...
16
CHƯƠNG III: XỬ LÝ ẢNH VÀ THUẬT TOÁN ĐIỀU KHIỂN
3.1 Phương pháp xử lý ảnh trên python kết hợp với labview.
Xử lí hình ảnh qua
Python
Thu nhận hình ảnh
Giao tiếp camera, webcam.
Xử lí tín hiệu từ
Python trên
Labview
Lấy tín hiệu từ Camera, webcam
Lấy tín hiệu sau khi xử lý ảnh.
Phân tích, chỉnh sửa ảnh. Giao tiếp với mạch điều khiển.
Tríchchọnđặc điểm ảnh. Đưa tín hiệu điều khiển vào cơ cấu chấp hành.
Chọnthơngsố xuất ra.
Hình 3.1 Phương pháp xử lý ảnh.
3.2 Khái niệm về xử lý ảnh
Những năm gần đây, sự phát triển của phần cứng máy tính làm cho bộ nhớ máy tính
có dung lượng lớn hơn, tốc độ của chip vi xử lý nhanh hơn, đã cho phép các ứng dụng
đồ họa phát triển mạnh mẽ và chó nhiều ứng dụng trong cuộc sống. Trong đó, xử lý ảnh
là một trong những công cụ phát triển rất nhanh do nhu cầu ứng dụng trong cơng
nghiệp. Q trình xử lý ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho
ra kết quả mong muốn. Kết quả đầu ra của mơt q trình xử lý ảnh có thể là môt ảnh tốt
hơn hoặc một kết luận.
17
THU NHẬN HÌNH ẢNH TIỀN XỬ LÝ
TRÍCH LỌC, CHỌN LỌC
KẾT LUẬN
HẬU XỬ LÝ
XỬ LÝ ẢNH
LƢU TRỮ
Hình 3.2: Cách thức xử lý ảnh.
Q trình xử lí ảnh gồm:
Tiền xử lý: là bước sơ chế, cải thiện chất lượng ảnh đầu vào, nhằm làm nổi bật
lên đặc điểm đặc trưng của ảnh;
− Trích lọc, chọn lọc: lấy ra các đặc điểm của ảnh để xử lý (hình dạng, màu sắc,
kích thước, chữ viết trên sản phẩm…)
− Hậu xử lý: gán các giá trị cho ảnh do người lập trình quy định để đưa ra kết quả
là kết luận (đúng, sai, tốt, xấu, loại A, B, C…)
−
3.3 Lí thuyết về thư viện OpenCV trong xử lý ảnh
OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thị giác
máy với hơn 500 hàm và hơn 2500 thuật toán đã được tối ưu về xử lý ảnh và các vấn đề
liên quan tới thị giác máy. OpenCV được thiết kế một cách tối ưu, sử dụng tối đa sức
mạnh của các dòng chip đa lõi… để thực hiện các phép tính tốn trong thời gian thực.
Các phép xử lý ảnh:
−
Chuyển đổi giữa các khơng gian màu: là một mơ hình tốn học dung để mô tả
các màu sắc trong thực tế được biểu diễn dưới dạng số học.
Ví dụ: khơng gian màu RGB, không gian màu CMYK, không gian màu HSV.
−
Chuyển đổi giữa các không gian màu
−
Điều chỉnh độ sáng và độ tương phản trong ảnh
−
Ảnh nhị phân, nhị phân háo với ngưỡng động
−
Histogram, cân bằng histogram trong ảnh
−
Phóng to, thu nhỏ và xoay ảnh.
18
3.4 Thuật tốn nhận diện khn mặt
3.4.1 Tạo cơ sở dữ liệu
Chụp ảnh người đó để nhận diện khn mặt sau khi chạy tập lệnh
created_database.py. Khi tạo cơ sở dữ liệu, hình ảnh khn mặt phải có các biểu thức
khác nhau.
3.4.2 Kiểm tra
Nhận diện khuôn mặt bằng Python được thực hiện bằng mã face_rec.py. Thuật toán
được sử dụng ở đây là biểu độ mơ hình nhị phân cục bộ (Local Binary Patterns
Histograms-LBPH). Trong Haar Features, tất cả các khuôn mặt của con người đều có
chung một số đặc tính.
Hai đặc tính chung cho khn mặt người là:
−
−
Vùng mắt đậm hơn má trên
Vùng sống mũi sáng hơn mắt
Thành phần của hai đặc tính hình thành các đặc điểm khn mặt phù hợp là:
−
−
Vị trí kích thước bao gồm mắt, miệng và sống mũi.
Giá trị độ dốc định hướng của cườmg độ pixel.
3.4.3 Thư viện xử lý ảnh trên Python
•
Thư viện Dlib:
Dlib là bộ công cụ C ++ hiện đại chứa các thuật tốn và cơng cụ học máy
để tạo phần mềm phức tạp trong C ++ để giải quyết các vấn đề trong thế
giới thực. Nó được sử dụng trong cả ngành công nghiệp và học thuật
trong nhiều lĩnh vực bao gồm robot, thiết bị nhúng, điện thoại di động và
môi trường điện toán hiệu năng cao lớn. Cấp phép nguồn mở của
Dlib cho phép bạn sử dụng nó trong bất kỳ ứng dụng nào, miễn phí.
• Face_recognition:
Nhận dạng khn mặt là một công nghệ sinh trắc học được sử dụng để
thiết lập một danh tính cá nhân và có khả năng nhận dạng và xác minh
duy nhất một người. Nó sử dụng một ứng dụng máy tính, cịn được gọi là
hệ thống nhận dạng khn mặt, để trích xuất hình ảnh kỹ thuật số từ hình
ảnh, khung hình video hoặc quét 3D và tạo một bản sao, một bộ các phép
19
đo đặc trưng của cấu trúc khuôn mặt, nhận dạng duy nhất một người
khn mặt cụ thể cho mục đích nhận dạng và xác thực.
Hệ thống nhận dạng khuôn mặt có thể sử dụng hình ảnh 2D / 3D hoặc
nguồn cấp dữ liệu video để tạo hình ảnh kỹ thuật số, thiết lập bản in và
nhận diện khuôn mặt bằng cách so sánh hình ảnh kỹ thuật số của nó với
bản in trong cơ sở dữ liệu. Mỗi khuôn mặt đều có một số cột mốc của
thành phố và hệ thống sẽ đánh dấu những điểm này là điểm nút của
điểm. Một khn mặt người có thể có tới 80 điểm này. Họ đại diện cho
các lĩnh vực quan tâm trên khn mặt mà hệ thống đo lường.
Một số ví dụ về các phép đo này sẽ là, khoảng cách giữa hai mắt, chiều
rộng của mũi, độ sâu của hốc mắt và hơn thế nữa. Các phép đo này sẽ
được lưu trữ trong cơ sở dữ liệu dưới dạng bản in.
Khi hệ thống qt một khn mặt, nó sẽ so sánh tất cả các phép đo này
với các bản ghi, bản in, trong cơ sở dữ liệu.
Các hệ thống nhận dạng khn mặt sử dụng một thuật tốn, chẳng hạn
như Kiểm tra nhà cung cấp nhận dạng khn mặt, có thể dự đốn liệu có
một trận đấu dựa trên các điểm nút gật đầu trên khuôn mặt của một cá
nhân hay khơng.
Thơng thường, có một quy trình gồm 4 giai đoạn liên quan đến hoạt động
của công nghệ này:
-
-
Chụp - Một mẫu vật lý hoặc hành vi được hệ thống chụp lại
trong q trình đăng ký.
Trích xuất - Dữ liệu duy nhất được trích xuất từ mẫu và
mẫu được tạo.
So sánh - Mẫu sau đó được so sánh với một mẫu mới.
-
Kết hợp - Hệ thống sau đó quyết định xem tính năng được
-
trích xuất từ mẫu mới có khớp hay không.
20
CHƯƠNG IV: THIẾT KẾ MƠ HÌNH HỆ THỐNG CHỐNG NGỦ GẬT
4.1 Thiết kế mơ hình
Trên thực tế ta cần đáp ứng những yêu cầu:
−
−
−
Phát hiện được dấu hiệu ngủ gật.
Cảnh báo người tài xế sắp ngủ gật
Quan sát và bám theo chuyển động ngang của khn mặt người tài xế.
LABVIEW
WEBCAM
CHNG BÁO
Hình 4.1 Quy trình xử lý thơng tin.
4.2 Xử lý nhận diện khuôn mặt thông qua Python:
def calculate_EAR(eye):
A = distance.euclidean(eye[1], eye[5])
B = distance.euclidean(eye[2], eye[4])
C = distance.euclidean(eye[0], eye[3])
ear_aspect_ratio = (A+B)/(2.0*C)
return ear_aspect_ratio
Thuật tốn tính khoảng cách mắt.
face_landmarks = dlib_facelandmark(gray, face)
leftEye = []
rightEye = []
Thư viện xử lí khn mặt
for n in range(0, 16):
x = face_landmarks.part(n).x
y = face_landmarks.part(n).y
cv2.circle(frame, (x, y), 1, (0, 255, 255), 1)
for n in range(36,42):
x = face_landmarks.part(n).x
y = face_landmarks.part(n).y
leftEye.append((x,y))
next_point = n+1
if n == 41:
next_point = 36
x2 = face_landmarks.part(next_point).x
21
y2 = face_landmarks.part(next_point).y
cv2.line(frame,(x,y),(x2,y2),(0,255,0),1)
for n in range(42,48):
x = face_landmarks.part(n).x
y = face_landmarks.part(n).y
rightEye.append((x,y))
next_point = n+1
if n == 47:
next_point = 42
x2 = face_landmarks.part(next_point).x
y2 = face_landmarks.part(next_point).y
cv2.line(frame,(x,y),(x2,y2),(0,255,0),1)
4.3 Xử lý khối Labview:
Nhiệm vụ chính của Labview là giao tiếp được với Arduino để từ đó điều khiển
được đèn và còi báo động, động cơ servo. Sau đây là lưu đồ thuật tốn của chương
trình.
Hình 4.2 Lưu đồ thuật tốn chương trình trên Labview.
Trên cơ sở lưu đồ thuật tốn trên, nhóm nghiên cứu tiến hành xây dựng chương
trình trên Labview như hình 4.3.
22
Hình 4.3 Chương trình Labview liên kết adruino.
Giải thích:
−
Kết nối LINX với Labview bằng khối Serial, sau đó thiết lập các chân nhận
tín hiệu đầu vào và xuất tín hiệu đầu ra.
−
Tín hiệu gửi vào được chuyển đổi sang nhị phân nhờ Bool to (0,1).
−
Sử dụng khối Case Structure để xét 2 trường hợp khi nhận tín hiệu gửi vào:
+
Trường hợp tín hiệu bằng 1:
Hình 4.4 Hàm case 0.
+
Trường hợp tín hiệu bằng 0: Để động cơ servo xoay liên tục cần phải có
tín hiệu biến thiên cấp đến, nhóm nghiên cứu đã lựa chọn giả lập một bộ
phát xung.
23
Hình 4.5 Hàm case 1.
Sau khi hồn thành code chương trình trên Block Diagram, nhóm nghiên cứu
tiến hành thiết kế giao diện trên Front Panel. Ở đây, giao diện sẽ hiển thị các phần
sau đây:
−
Khung thiết lập, người dùng có thể tự chọn COM Arduino, chân tín hiệu đầu vào
đầu ra.
−
Biểu đồ hiện thị tín hiệu đầu vào.
−
Thang đo mơ phỏng độ xoay của servo.
−
Đèn cảnh báo đính kèm câu lệnh để gây chủ ý cho người dùng.
Hình 4.6 Giao diện chương trình Labview trên Front Panel.
24
4.4 Mơ hình thực tế.
Hình 4.7 Mạch thực tế
Hình 4.7 Mơ hình thực tế.
25