Trạng thái khn mặt ở vị trí chuẩn

Một phần của tài liệu 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 (Trang 29)

Để xác định vị trí khn mặt tài xế cần dựa vào độ lệch của khn mặt tại vị trí hiện tại so với khn mặt ở vị trí tiêu chuẩn nhờ công thức sau:

− Gọi ∆Ox1, ∆Ox2, ∆Oy1, ∆Oy2 là độ lệch vị trí khn mặt hiện tại so với khuôn mặt ở vị trí tiêu chuẩn.

∆Ox1 = O1x − Ox ∆Ox2 = Ox − O1x ∆Oy1 = O1y − Oy ∆Oy2 = Oy − O1y

20

Trong đó:

Ox, Oy là tọa độ khn mặt tại vị trí chuẩn

O1x, O1y là tọa độ khn mặt tại vị trí hiện tại so với vị trí chuẩn. Trục Ox biểu diễn cho trục ngang (bên trái, bên phải) nên:

− Nếu ∆Ox1 > width * 0,25 thì khn mặt quay sang bên phải (Hình 3.4). − Nếu ∆Ox2 > width * 0,25 thì khn mặt quay sang bên trái (Hình 3.5).

Hình 3.4: Khn mặt đang quay sang bên phải

Hình 3.5: Khn mặt quay sang trái

Trục Oy biểu diễn cho trục dọc (lên,xuống) nên:

− Nếu ∆Oy1 > height * 0,05 thì khn mặt đang ngửa ra phía sau (Hình 3.6). − Nếu ∆Oy2 > height * 0,2 thì khn mặt đang cúi xuống phía dưới (Hình 3.7).

21

Hình 3.6: Khn mặt ngửa ra sau

Hình 3.7: Khn mặt cúi xuống dưới

3.2.2 Tìm con ngươi từ khn mặt để xác định mắt nhắm hay mở

Dựa trên vùng mặt đã phát hiện, ta xác định được vùng mắt và con ngươi từ đó xác định được trạng thái nhắm mở của mắt → Đưa ra cảnh báo buồn ngủ trong trường hợp mắt nhắm.

Để xác định mắt nhắm hay mở trước tiên xác định được vùng mắt sau đó xác định con ngươi (Hình 3.8).

22

Dựa vào vùng mặt và vùng mũi phóng lớn thì cơng thức xác định vùng mắt được tính như sau (Hình 3.9): Chiều rộng và cao vùng mắt: He = Fheight * α * 0,01 We = Fwidth * β * 0,01 Hoặc: He = Nheight * α * 0,01 We = Nwidth * β * 0,01 Trong đó: α = 35; β = 30

He; We lần lược là chiều cao, chiều rộng vùng mắt. Fheight; Fwidth lần lượt là chiều cao, chiều rộng vùng mặt.

Nheight; Nwidth lần lượt là chiều cao, chiều rộng vùng mũi phóng lớn để xác định vùng mặt.

Hình 3.9: Vị trí con ngươi trong trường hợp mắt đóng

Xác định vị trí con ngươi ta dựa trên tỉ lệ vùng mắt vừa xác định được. Nếu con ngươi nằm giữa vùng mí mắt trên tới chân mày thì mắt đang ở trạng thái đóng (nhắm), nếu con ngươi nằm trong vùng mắt chứa con ngươi thì mắt đang ở trạng thái mở (Hình 3.10).

23

Hình 3.10: Giám sát trạng thái mắt

Hạn chế: Khoảng cách từ thiết bị tới vùng mắt phải gần khoảng từ 20 ÷ 30 cm

thì độ chính xác sẽ cao, khi khoảng cách càng xa thì vùng con ngươi càng bé nên khó phát hiện chính xác con ngươi.

3.2.3 Xác định các thông số kỹ thuật cơ bản cho thiết bị giám sát trạng thái buồn ngủ của lái xe buồn ngủ của lái xe

Bảng 3.1: Các thông số kỹ thuật cơ bản cho thiết bị giám sát trạng thái

buồn ngủ của lái xe

Nội dung Thiết bị giám sát trạng thái lái xe dự kiến của Đề tài

Chip điều khiển Broadcom BCM2837, Quad core Cortex-A53 ARM 64-bit SoC Thiết bị nhúng sử dụng chip điều khiển xây dựng trên @ 1.2GHz tích hợp trên Raspberry Pi 4.

Bộ nhớ

ROM/RAM 32G/2G

Tín hiệu đầu vào

Sử dụng camera số kết nối với bộ xử lý nhúng

Sử dụng camera hồng ngoại để hoạt động tốt vào ban đêm và khi lưu thông trong đường hầm

USB 2 cổng USB 3.0 và 2 cổng USB 2.0

Thuật toán điều khiển

Thuật toán phát hiện buồn ngủ theo các thông số quan sát đặc trưng:

− Tìm con ngươi từ khn mặt để xác định mặt nhắm hay mở. − Xác định vùng tai trái, vùng tai phải đề phát hiện tài xế đang quay phải hay trái.

24

Hệ thống bảo vệ và giảm thiểu tiếng ồn Mạch bảo vệ điện áp quá áp/quá dòng, cắm ngược điện nguồn Nguồn mạch Làm việc với cả nguồn 12 V và 24 V, phù hợp cho mọi loại xe

Công suất Cơng suất tiêu thụ 6 W

Tránh chói Loại bỏ sự phản xạ bất thường của ánh mặt trời bằng cách sử dụng các bộ lọc đặc biệt

3.3 Phần mềm xử lý ảnh 3.3.1 Thư viện OpenCV 3.3.1 Thư viện OpenCV

OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Nó là một thư viện mã nguồn mở phục vụ cho việc nghiên cứu hay phát triển về thị giác máy tính, tối ưu hóa và xử lý các ứng dụng trong thời gian thực. Nó giúp cho việc xây dựng các ứng dụng xử lý ảnh, thị giác máy tính,... trở nên nhanh hơn.

Thư viện OpenCV gồm khoảng 500 Hàm, được viết bằng ngơn ngữ lập trình C/C++ và tương thích với các hệ điều hành Windows, Linux, Mac OS... đóng vai trị xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực Computer Vision và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng dụng.

Trước đây OpenCV khơng có một cơng cụ chuẩn nào cho lĩnh vực xử lý ảnh. Các đoạn mã đơn lẻ do các nhà nghiên cứu tự viết thường không thống nhất và không ổn định. Các bộ công cụ thương mại như Matlab, Simulink, Halcon, v.v... lại có giá cao chỉ thích hợp cho các cơng ty phát triển các ứng dụng lớn. Ngồi ra cịn có các giải pháp kèm theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng.

3.3.2 Cách tổ chức thư viện OpenCV

Tổ chức thư viện OpenCV khá đơn giản, bao gồm 4 module chính và 2 module mở rộng, được mơ tả ở Hình 3.11.

CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ như các cấu trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h. CXCORE cũng chứa đại số tuyến tính và các phương pháp thống kê, chức năng duy trì và điều khiển chuỗi. Một số ít các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây.

25

Hình 3.11: Tổ chức thư viện OpenCV (Nguồn Internet)

CV chứa các thuật tốn về xử lý ảnh và xác định kích cỡ camera. Các chức năng đồ họa máy tính cũng được đặt ở đây.

CVAUX được mô tả trong tài liệu của OpenCV chứa các mã cũ đã thử nghiệm. Tuy nhiên, các giao diện đơn giản cho việc nhận diện ảnh được đặt ở trong module này. Mã nguồn sau này được sử dụng và ứng dụng rộng rãi cho việc nhận diện khuôn mặt.

HighGUI được đặt trong thư mục là “otherlibs”. HighGUI chứa các giao diện nhập/xuất cơ bản, nó cũng chứa các khả năng mở rộng khác và nhập/xuất video. Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện một phần các chức năng của công cụ OpenCV.

Các chức năng của OpenCV tập trung vào thu thập ảnh, xử lý ảnh và các thuật tốn phân tích dữ liệu ảnh, bao gồm:

− Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim. − Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi,

xâu và cây.

− Xử lý ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh sửa màu, phóng to thu nhỏ, và hiệu chỉnh histograms.

26

− Xử lý cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, làm trịn các đơn vị hình học cơ sở như mặt phẳng, đa giác, ellipse, đường thẳng...

− Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích chuyển động.

− Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh thơng số (nếu cần thiết, có thể tự tạo thêm các phím điều khiển thơng qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets).

− Chức năng vẽ, chú thích lên ảnh.

3.3.3 Tổng quan phương pháp Haar-like

Có rất nhiều phương pháp để giải quyết bài tốn xác định khuôn mặt người trên ảnh 2D dựa trên các hướng tiếp cận khác nhau. Phương pháp Haar-like – Adaboost (viết tắt HA) của hai tác giả Paul Viola và Michael J.Jones là phương pháp xác định mặt người dựa theo hướng tiếp cận trên diện mạo (Hình 3.12).

Hình 3.12: Tổng quan phương pháp phát hiện mặt người bằng Haar-like

27

Hướng tiếp cận trên diện mạo là hệ thống nhận dạng khuôn mặt theo cách học các mẫu của khuôn mặt từ một tập ảnh mẫu. Sau khi quá trình học hay huấn luyện (training) này thực hiện xong, hệ thống sẽ rút ra được những tham số để phục vụ cho quá trình nhận dạng. Vì vậy tiếp cận trên diện mạo cịn được biết đến với tên gọi tiếp cận theo phương pháp học máy. Đề tài tập trung chủ yếu vào quá trình nhận dạng (sau khi đã thực hiện quá trình học).

Trong Hình 3.12, về tổng quan, phương pháp HA được xây dựng dựa trên sự kết hợp, lắp ghép của 4 thành phần, đó là:

− Các đặc trưng Haar−like: các đặc trưng được đặt vào các vùng ảnh để tính tốn các giá trị của nó. Khi đưa những giá trị đặc trưng này vào bộ phân loại Adaboost ta sẽ xác định được ảnh có khn mặt hay khơng.

− Ảnh tích hợp (Integral Image): là một cơng cụ giúp việc tính tốn các giá trị đặc trưng Haar−like nhanh hơn.

− Adaboost (Adaptive Boost): bộ phân loại (bộ lọc) hoạt động dựa trên nguyên tắc kết hợp các bộ phân loại yếu để tạo nên bộ phân loại mạnh. Adaboost sử dụng giá trị đặc trưng Haar−like để phân loại ảnh là mặt hay không phải mặt. − Cascade of Classifiers: bộ phân loại tầng với mỗi tầng là một bộ phân loại

Adaboost, có tác dụng tăng tốc độ phân loại.

Như vậy bài toán xác định mặt người trong ảnh cũng chính là bài tốn phân loại ảnh thành hai lớp: mặt hoặc không phải mặt.

3.3.3.1 Tiền xử lý

Một lưu ý là phương pháp HA thực hiện trên ảnh xám (gray image). Mỗi điểm ảnh (pixel) sẽ có giá trị mức xám từ 0 đến 255 (khơng gian màu 8 bit). Như vậy phương pháp HA sẽ không khai thác những đặc điểm về màu sắc khuôn mặt để nhận dạng song vẫn hiệu quả. Ảnh màu sẽ được chuyển về ảnh xám để nhận dạng, việc chuyển đổi này khá đơn giản, thực hiện bằng một hàm chuyển đổi và sử dụng chỉ với một câu lệnh trong OpenCV.

28

Sau khi chuyển thành ảnh xám, ảnh lại tiếp tục được chuyển thành “ảnh tích hợp”. Trong bước đầu tiên của quá trình nhận dạng, các đặc trưng Haar−like sẽ làm việc trực tiếp trên ảnh tích hợp.

3.3.3.2 Ảnh tích hợp

Ảnh tích hợp:

Như đã trình bày ở phần trên, số lượng đặc trưng Haar-like là rất nhiều và khối lượng tính tốn giá trị các đặc trưng này là rất lớn. Vì vậy ảnh tích hợp được đưa ra nhằm tính tốn nhanh chóng các đặc trưng, giảm thời gian xử lý.

Ảnh tích hợp được định nghĩa theo cơng thức: ii(x, y) = ∑i(x', y')

x' ≤ x; y' ≤ y

Giá trị của ảnh tích hợp tại vị trí (x, y) là tổng các điểm ảnh thuộc hình chữ nhật xác định bởi góc trái trên là (0, 0) và góc phải dưới (x, y) – Hình 3.13.

Hình 3.13: Giá trị của ảnh tích hợp tại vị trí (x, y) (Nguồn Internet)

Trên thực tế khi chuyển một ảnh thành ảnh tích hợp ta dùng cơng thức truy hồi sau:

s(x, y) = s(x, y − 1) + i(x, y) ii(x, y) = ii(x −, y) + s(x, y)

Ví dụ chuyển một ảnh 3 3 có giá trị xám như bên dưới thành ảnh tích hợp (Hình 3.14):

29

Ảnh ban đầu Ảnh tích hợp

Hình 3.14: Mơ tả cách tính tốn ảnh tích hợp từ ảnh ban đầu (Nguồn Internet)

Ở ví dụ Hình 3.14, ảnh ban đầu chứa giá trị pixel “1”. Để tính giá trị cho ảnh tích hợp, ta áp dụng cơng thức truy hồi. Sau khi tính tốn ảnh cần nhận dạng thành ảnh tích hợp, việc tính tốn giá trị các đặc trưng Haar−like sẽ rất đơn giản. Vấn đề sẽ được trình bày rõ ở hơn ở mục áp dụng Haar−like vào ảnh tích hợp.

Áp dụng Haar-like vào ảnh tích hợp:

Để tính giá trị đặc trưng Haar−like, ta phải tính được tổng giá trị điểm ảnh trong một vùng hình chữ nhật trên ảnh. Ví dụ như vùng D trong Hình 3.15:

Hình 3.15: Ví dụ các điểm ảnh trong một vùng hình chữ nhật (Nguồn Internet)

Trong đó:

A, B, C, D là tổng giá trị các điểm ảnh trong từng vùng. P1; P2; P3; P4 là giá trị của ảnh tích hợp tại 4 đỉnh của D.

Nhìn Hình 3.15, nếu như là ảnh xám bình thường thì để tính D ta phải tính tổng tất cả các giá trị điểm ảnh trong D, miền D càng lớn thì số phép cộng càng nhiều. Nhưng với ảnh tích hợp dù miền D có kích thước như thế nào thì D cũng chỉ cần tính thơng qua 4 giá trị tại 4 đỉnh. Ta có:

30

Suy ra:

P1 + P4 − P2 − P3 = A + (A + B + C + D) − (A + B) − (A + C) Vậy ta có:

D = P1 + P4 − P2 − P3

Khi áp dụng vào tính tốn các giá trị đặc trưng ta có thể thấy:

− Đặc trưng hai hình chữ nhật (đặc trưng cạnh) được tính thơng qua 6 giá trị điểm ảnh tích hợp.

− Đặc trưng ba hình chữ nhật (đặc trưng đường) và đặc trưng tâm - xung quanh được tính thơng qua 8 giá trị điểm ảnh tích hợp.

− Đặc trưng 4 hình chữ nhật (đặc trưng chéo) được tính thơng qua 9 giá trị điểm ảnh tích hợp.

Trong khi đó, nếu tính như định nghĩa thì các giá trị cần tính tốn lên tới hàng trăm. Điều này làm tăng tốc độ xử lý một cách đáng kể.

Đặc trưng Haar−like:

Trên ảnh, vùng khuôn mặt là tập hợp các điểm ảnh có những mối quan hệ khác biệt so với các vùng ảnh khác, những mối quan hệ này tạo lên các đặc trưng riêng của khuôn mặt. Tất cả khn mặt người đều có chung những đặc điểm sau khi đã chuyển qua ảnh xám, ví dụ như sau (Hình 3.16):

− Vùng hai mắt sẽ tối hơn vùng má và vùng trán, tức mức xám của vùng này cao hơn vượt trội so với hai vùng còn lại.

− Vùng giữa sống mũi cũng tối hơn vùng hai bên mũi.

Hình 3.16: Đặc trưng thứ nhất và thứ hai được lựa chọn bởi AdaBoost

31

Và cịn rất nhiều những đặc điểm khác của khn mặt và các đặc trưng Haar-like dựa vào các đặc điểm này để nhận dạng.

Về tổng quát, các đặc trưng Haar-like không chỉ được sử dụng để nhận dạng khn mặt mà có thể dùng để nhận dạng bất kỳ một đối tượng nào trên ảnh (thân người, tay, chân, ơ tơ, đồ vật, …). Bởi vì cũng giống như khn mặt, mỗi đối tượng có những đặc điểm riêng biệt đặc trưng bởi các vùng điểm ảnh, công việc của đặc trưng Haar-like là tính tốn các giá trị tương quan giữa các vùng ảnh đó.

Bốn đặc trưng cơ bản để xác định khuôn mặt người. Mỗi đặc trưng Haar-like là sự kết hợp của 2, 3 hoặc 4 hình chữ nhật trắng hay đen (Hình 3.17).

Hình 3.17: Các đặc trưng Haar-like cơ bản (Nguồn Internet)

Từ bốn đặc trưng cơ bản trên (Hình 3.17), khơng thể xác định khn mặt với đặc trưng phức tạp nên tác giả đã mở rộng thêm và chia làm ba tập đặc trưng như sau:

− Đặc trưng cạnh – edge feature (Hình 3.18):

Hình 3.18: Một số đặc trưng cạnh (Nguồn Internet)

− Đặc trưng đường – line feature (Hình 3.19):

Hình 3.19: Một số đặc trưng đường (Nguồn Internet)

32

Hình 3.20: Đặc trưng xung quanh tâm (Nguồn Internet)

Để phát hiện khuôn mặt, hệ thống sẽ cho một cửa sổ con (sub-window) có kích thước cố định qt lên tồn bộ ảnh đầu vào. Như vậy sẽ có rất nhiều ảnh con ứng với từng cửa sổ con, các đặc trưng Haar-like sẽ được đặt lên các cửa sổ con này để từ đó tính ra giá trị của đặc trưng. Sau đó các giá trị này được bộ phân loại xác nhận xem khung hình đó có phải khn mặt hay khơng.

Ứng với mỗi một đặc trưng như trên, một bộ phân lớp yếu (weak classifier) hk(x) được định nghĩa như sau:

hk(x) = {1 nếu pkfk(x) < pkθk 0 nếu ngược lại Trong đó:

x: cửa sổ con cần xét θk: ngưỡng

Một phần của tài liệu 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 (Trang 29)

Tải bản đầy đủ (PDF)

(99 trang)