Tải bản đầy đủ (.docx) (41 trang)

Đồ án chương trình nhận diện tài xế buồn ngủ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (11.01 MB, 41 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA CƠ KHÍ

ĐỒ ÁN KỸ THUẬT ĐIỀU KHIỂN TỰ ĐỘNG
Đề tài: Nghiên cứu lập trình hệ thống cảnh báo ngủ gật cho lái xe ứng
dụng công nghệ xử lý ảnh

Sinh viên thực hiện: Vũ Hữu Huy

10519294

Vũ Hữu Bắc

11019209

Vũ Thạch Quang Anh 10119081
Lớp : 110195
Giảng viên hướng dẫn : Trịnh Thanh Nga

Hưng Yên 2022

1


NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................


.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
Hưng Yên, ngày
Giảng viên hướng dẫn

2

tháng

năm 2022


MỤC LỤC
MỤC LỤC.............................................................................................................3
DANH MỤC HÌNH ẢNH.....................................................................................5
CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI.............................................................7
1.1.


Lý do chọn đề tài.......................................................................................7

1.2. Yêu cầu của đề tài.......................................................................................8
1.3. Nội dung nghiên cứu..................................................................................9
1.4. Đối tượng nghiên cứu.................................................................................9
1.5. Phương pháp nghiên cứu............................................................................9
1.6. Phạm vi nghiên cứu.................................................................................10
1.7. Mục tiêu đề tài..........................................................................................10
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT....................................................................11
2.1. Nghiên cứu khuôn mặt trong trạng thái buồn ngủ....................................11
2.2. Xử lý ảnh..................................................................................................12
2.2.1. Khái niệm về xử lý ảnh.....................................................................12
2.2.2. Bài toán phát hiện mặt người trong ảnh............................................12
2.3. Các phương pháp phát hiện buồn ngủ khi lái xe......................................14
2.3.1. Phương pháp dựa vào sinh lý người lái xe........................................14
2.3.2. Phương pháp dựa vào hoạt động và phản ứng điều khiển.................14
2.3.3. Đề xuất phương án thực hiện............................................................14
2.4. Ứng dụng phương án vào bài toán...........................................................17
2.4.1. 68 Ficial landmark.............................................................................17
2.4.2. Bộ xác định facial landmark của dlib................................................19
2.4.3. Các thư viện khác sử dụng trong chương trình.................................20
2.4.4. Ứng dụng vào bài tốn......................................................................27

3


2.5. Phương pháp tính tốn và áp dụng...........................................................30
2.5.1. Cơng thức Euclidean Distance..........................................................30
2.5.2. Áp dụng vào chương trình.................................................................32

CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH..............................................35
3.1. Lưu đồ thuật tốn.....................................................................................35
3.2. Chương trình điều khiển...........................................................................36
3.3. Thử nghiệm và hiệu chỉnh........................................................................37
3.3.1. Thử nghiệm với bài toán nhận diện khuôn mặt, mắt và miệng.........37
3.3.2. Thực nghiệm trên bài toán phát hiện buồn ngủ.................................37
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN....................................40
4.1. Kết luận....................................................................................................40
4.2. Hướng phát triển.......................................................................................40

4


DANH MỤC HÌNH ẢN

Hình 2.1. Nhận diện buồn ngủ............................................................................13
Hình 2.2. Nhận diện mắt.....................................................................................13
Hình 2.3. Nhận dạng khn mặt, mắt, miệng......................................................13
Hình 2.4. Nhận dạng sử dụng facial landmark....................................................18
Hình 2.5. 68 điểm nhận diện khn mặt.............................................................19
Hình 2.6. K-D Trees............................................................................................21
Hình 2.7. Minh họa dịch chuyển.........................................................................22
Hình 2.8. Minh họa quay.....................................................................................23
Hình 2.9. Minh họa thay đổi kích thước.............................................................23
Hình 2.10. Minh họa sự tạo xương......................................................................24
Hình 2.11. Minh họa hiển thị với Maplotlib........................................................25
Hình 2.12. Minh họa cắt mặt...............................................................................26
Hình 2.13. Hàm vẽ bounding line.......................................................................28
Hinh 2.14. Đánh dấu các điểm của mắt trên landmark.......................................29
Hình 2.15. Các điểm tọa độ mắt trên 68 ficial landmark....................................29

Hình 2.16. Các điểm miệng trên 68 ficial landmark...........................................29
Hình 2.17. Cơng thức Euclidean Distance..........................................................31
Hình 2.18. Xây dựng cơng thức Euclidean Distance..........................................31
Hình 2.19. Các điểm của mắt..............................................................................32
Hinh 2.20. Đánh dấu các điểm của mắt trên landmark.......................................32
Hình 2.21. Các điểm đánh dấu miệng.................................................................32
Hình 2.22. Các tham số buồn ngủ và mất tập trung............................................33
Hình 2.23. Thuật tốn kiểm tra xem mắt có nhắm hay khơng............................34

5


Hình 2.24. Thuật tốn kiểm tra ngáp ngủ............................................................34
Hình 2.25. Thuật tốn kiểm tra mất tập trung.....................................................34
Hình 3.1. Lưu đồ thuật tốn................................................................................35
Hình 3.2. Chương trình điều khiển......................................................................36
Hình 3.3. Giao diện điều khiển............................................................................36
Hình 3.4. Nhận diện mặt, mắt và miệng..............................................................37
Hinh 3.5. Nhận diện khi đeo mắt kính................................................................37
Hình 3.6. Ánh sáng thường và thiếu sáng...........................................................38
Hình 3.7. Ánh sáng rọi xung quanh.....................................................................38
Hình 3.8. Nhận dạng khi nghiêng đầu (mất tập trung)........................................38
Hình 3.9. Nhận dạng khi ngửa và cúi đầu...........................................................39

6


CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI
Đề tài: “Nghiên cứu lập trình hệ thống cảnh báo ngủ gật cho lái xe ứng dụng


công nghệ xử lý ảnh”.
1.1.

Lý do chọn đề tài.
Những năm gần đây, ở nước ta, cùng với quá trình phát triển nhanh của các

phương tiện giao thơng, con số tai nạn giao thông ngày càng tăng nhiều, đặt ra
một mối nguy hiểm nghiêm trọng cho cuộc sống xã hội và người tham gia giao
thông. Tai nạn giao thông (TNGT) đã và đang trở thành nỗi đau lớn của nhiều
gia đình, trong những vụ tai nạn giao thơng, người thì mang tật suốt đời, người
tử vong để lại những khoảng trống khơng gì bù đắp nổi cho người thân. Và một
trong những nguyên nhân chính của tai nạn giao thông là sự thiếu tập trung của
người lái xe do mệt mỏi hay buồn ngủ.
Theo báo cáo của Tổng cục Thống kê cho biết, tính chung 10 tháng đầu năm
2022 trên địa bàn cả nước đã xảy ra 9212 vụ tai nạn giao thơng và bình qn
mỗi ngày 30 vụ. Và theo phân tích của Cục Cảnh Sát Giao Thơng, gần 40% số
vụ TNGT xảy ra vào khoảng thời gian từ 12h đến 24h, đây là khoảng thời gian
người điều khiển phương tiện bị tác động tâm lý của sự mệt mỏi, căng thẳng, sự
chênh lệch về nhiệt độ, ánh sáng giữa ngày và đêm (đặc biệt đối với phương tiện
vận tải hành khách, hàng hóa…)
Báo cáo về "Rối loạn giấc ngủ và tai nạn giao thông" tại hội nghị khoa học
thường niên Hội Hô hấp Việt Nam và Chương trình đào tạo y khoa liên tục
2022, giáo sư Telfilo Lee Chiong (Trung tâm Nationnal Jewish Health, Mỹ), cho
biết buồn ngủ là một trong những nguyên nhân chính gây tai nạn giao thơng trên
thế giới. Ước tính khoảng 10-15% tai nạn xe có liên quan đến thiếu ngủ. Nghiên
cứu về 2 giấc ngủ ở các tài xế 19 quốc gia châu Âu cho thấy tỷ lệ buồn ngủ khi
lái xe cao, trung bình 17%. Trong đó 10,8% người buồn ngủ khi lái xe ít nhất
một lần trong tháng, 7% từng gây tai nạn giao thông do buồn ngủ, 18% suýt xảy
ra tai nạn do buồn ngủ. Những số liệu thống kê đáng báo động chỉ ra sự cần thiết
để thực hiện các hệ thống có khả năng theo dõi và cảnh báo tình trạng mệt mỏi,


7


buồn ngủ của người lái xe để có thể ngăn chặn những vụ TNGT đáng tiếc có thể
xảy ra.
1.2. Yêu cầu của đề tài.
- Một đề tài nghiên cứu khoa học phải có ý nghĩa khoa học nhằm bổ sung
nội dung lý thuyết của khoa học, làm rõ một số vấn đề lý thuyết vốn tồn tại, xây
dựng cơ sở lý thuyết mới hoặc xây dựng nguyên lý các giải pháp khác nhau
trong kỹ thuật, công nghệ, tổ chức, quản lý…
Bên cạnh đó, đề tài phải có tính thực tiễn hỗ trợ xây dựng luận cứ cho các
chương trình phát triển kinh tế xã hội, nhu cầu kỹ thuật của sản xuất; nhu cầu về
tổ chức, quản lý, thị trường… Đồng thời, phải có tính cấp thiết đối với thời điểm
tiến hành nghiên cứu, giải quyết những vấn đề nóng bỏng, mang tính thời sự và
đem lại giá trị thiết thực cho lý luận và thực tiễn, đóng góp cho sự phát triển của
khoa học và đời sống.
- Một đề tài nghiên cứu khoa học ln mang tính mới mẻ, thời sự, hướng
vào những lĩnh vực hoạt động phức tạp, đa dạng của khoa học và đời sống,
hướng tới những vấn đề chưa được giải quyểt triệt để trong lĩnh vực nghiên cứu
khoa học nào đó… Một đề tài nghiên cứu khoa học cần phù hợp với thực tế và
đem lại hiệu quả; cập nhật, mới mẻ, phù hợp với xu thế đi lên của sự phát triển
kinh tế - xã hội, khoa học và công nghệ; đồng thời đảm bảo tính xác định: mức
độ, xác định và phạm vi.
- Thiết kế, lắp ráp phần cứng, viết phần mềm cho hệ thống.
- Nguyên lý hoạt động của chương trình là thiết lập hệ các điểm trên
khuôn mặt người dùng, thông qua camera liên tục cấp hình ảnh về để tiến hành
so sánh với thư viện sẵn có. Từ đó đưa ra nhận định người dùng có ở trạng thái
buồn ngủ hay mất tập trung hay không rồi tiến hành cảnh báo.
- Thực hiện đề tài này là một cơ hội để tìm hiểu nhiều hơn, rõ ràng hơn về

ngơn ngữ lập trình python cũng như thư viện Dlib. Bên cạnh đó, cũng cho thấy
việc ứng dụng quan trọng của điện tử và lập trình vào trong cơng nghệ và cuộc

8


sống. Đồng thời học hỏi thêm kinh nghiệm trong việc thiết kế chế tạo một hệ
thống cơ điện tử.
1.3. Nội dung nghiên cứu.
Phần thuyết minh:
- Nghiên cứu khuôn mặt người trong trạng thái buồn ngủ.
- Tìm hiểu về xử lý ảnh cũng như bài toán phát hiện mặt người trong ảnh.
- Nghiên cứu tổng quan về ngôn ngữ Python và thư viện Dlib.
- Đi vào chi tiết nguyên lý, cấu trúc của hệ thống.
Phần thực hành:
- Thiết kế lưu đồ thuật tốn cho chương trình.
- Xây dựng chương trình điều khiển cho hệ thống.
- Thực nghiệm và đưa ra kết quả thực nghiệm.
1.4. Đối tượng nghiên cứu.
- Ngôn ngữ Python và một số thư viện trong Python, thư viện Dlib.
- Hệ thống cảnh báo của xe.
- Các phần mềm lập trình, các họ vi điều khiển.
- Camera hồng ngoại
1.5. Phương pháp nghiên cứu.
Dựa vào các kiến thức đã học trên lớp và tìm hiểu thêm trong các mơn:
lập trình cơ bản, lập trình C/C++, kỹ thuật xung số, vi điều khiển, lập trình
nâng cao, lập trình điều khiển hệ thống… kết hợp với những kiến thức tìm hiểu
ngồi thực tế về mơ hình cũng như sơ đồ mạch để thiết kế và xây dựng chương
trình.
Giáo trình liên quan đến đề tài, nguồn internet, máy vi tính.

Các linh kiện điện tử để thi cơng mạch điện: máy tính nhúng, loa,...

9


Các phần mềm hỗ trợ như: Python, Visual studio code …
1.6. Phạm vi nghiên cứu.
Trong đồ án này chúng em sẽ đưa ra cái nhìn tổng quan các phương pháp
cho các hệ thống giải quyết các vấn đề về sự mệt mỏi và buồn ngủ của người lái
xe. Sau đó, đi sâu nghiên cứu phương pháp theo dõi và cảnh báo tình trạng buồn
ngủ của người lái xe trong ứng dụng nhận dạng khuôn mặt người bằng cách theo
dõi trạng thái nhắm/ mở mắt (miệng) của người lái xe.
Đề tài được làm sử dụng các kiến thức và kĩ năng thực hành đã được học
trong khoa cơ điện tử kết hợp với những kiến thức tìm hiểu bên ngồi để hoàn
thành sản phẩm.
1.7. Mục tiêu đề tài.
Mục tiêu của đề tài sẽ là góp phần nghiên cứu và xây dựng một ứng dụng
có khả năng ứng dụng vào thực tế tại Việt Nam với các phương tiện vận tải hành
khách, hàng hoá vận chuyển đường dài chiếm một phần lớn và có khả năng xảy
ra tai nạn giao thơng do tình trạng mệt mỏi và buồn ngủ của người lái xe cao.
Để giúp sinh viên có thể có thể củng cố kiến thức đã được học trong sách
vở, tổng hợp và nâng cao kiến thức chuyên ngành cũng như kiến thức ngồi thực
tế. Đề tài cịn thiết kế chế tạo thiết bị, mơ hình để các sinh viên trong trường đặc
biệt là sinh viên khoa cơ điện tử tham khảo, học hỏi tạo tiền đề nguồn tài liệu
cho các học sinh, sinh viên khố sau có thêm nguồn tài liệu để nghiên cứu và
học tập.
Giúp ích cho sự phát triển của ngành cơng nghiệp Việt Nam, đấy nhanh
q trình cơng nghiệp hóa, hiện đại hóa đất nước. Thúc đấy tiến độ phát triển
của các ngành công nông nghiệp, phát huy tinh thần sang tạo Việt Nam .


10


CHƯƠNG 2. CƠ SỞ LÝ THUYẾT

2.1. Nghiên cứu khuôn mặt trong trạng thái buồn ngủ
Giấc ngủ là tình trạng nghỉ ngơi tự nhiên theo chu kỳ của thể xác và tinh
thần. Trong tình trạng này người ta thường nhắm mắt và mất ý thức một phần
hay hồn tồn do đó sẽ giảm các vận động và phản ứng đối với các kích thích
bên ngồi. Giấc ngủ khơng phải là một lựa chọn, nó là cần thiết và khơng thể
tránh khỏi để giúp cơ thể nghỉ ngơi và phục hồi năng lượng. Vì vậy một con
người cần phải ngủ.
Có một thuật ngữ gọi là "Microsleep", định nghĩa là một giai đoạn ngủ ngắn
và ngồi ý muốn của giấc ngủ, có thể xảy ra bất cứ lúc nào do mệt mỏi hay một
sự nỗ lực của ý thức kéo dài nào đó. Microsleep có thể kéo dài trong một vài
giây (có thể khoảng từ 1 đến 30 giây).
Nghiên cứu cho thấy rằng microsleep có thể xảy ra bất cứ lúc nào, não rơi
vào trạng thái ngủ nhanh chóng và khơng kiểm sốt được, tình trạng này có thể
vơcùng nguy hiểm, đặc biệt là nếu bạn đang ngồi sau tay lái hay trong các tình
huống yêu cầu sự chú ý tập trung. Một số dấu hiệu cho thấy bạn đang không tỉnh
táo khi lái xe:











Ngáp
Mắt nháy liên tục và khó mở mắt
Khơng thể tập trung
Mơ màng cả ngày, đầu óc bị phân tán, xao động
Khơng thể nhớ số km hành trình vừa trải qua, phản ứng chậm
Đi chệch làn đường, lái xe chệnh choạng
Cảm thấy mệt mỏi, khó chịu
Khơng thể giữ đầu thẳng
Tầm nhìn bị mờ

Và bất kể bạn chọn máy chống ngủ gật theo cách nào, lời khuyên đưa ra
luôn luôn là: Hãy ngủ đủ giấc. Không bao giờ liều lĩnh cầm lái khi có dấu hiệu
buồn ngủ.

11


2.2. Xử lý ảnh
2.2.1. Khái niệm về xử lý ảnh
Xử lý ảnh là phương pháp chuyển đổi hình ảnh sang dạng số và thực hiện
một số hoạt động trên đó để nâng cao chất lượng hình ảnh hoặc để trích xuất
một số thơng tin hữu ích từ nó. Đó là một dạng phân bố tín hiệu mà đầu vào là
một hình ảnh như các bức ảnh hoặc các khung hình từ video và đầu ra là một
hình ảnh khác hoặc các đặc tính gắn liền nó. Thơng thường, các hệ thống xử lý
ảnh sẽ xem các hình ảnh như các tín hiệu hai chiều để từ đó áp dụng các phương
pháp xử lý tín hiệu lên các tín hiệu đó. Nó là một trong các cơng nghệ phát triển
nhanh chóng hiện nay và được áp dụng trong nhiều lĩnh vực khác nhau.

2.2.2. Bài toán phát hiện mặt người trong ảnh.

Dựa vào tính chất của các phương pháp xác định mặt người trên ảnh, các
phương pháp này được chia thành bốn loại chính, tương ứng với bốn hướng tiếp
cận khác nhau. Ngồi ra có rất nhiều nghiên cứu mà phương pháp xác định mặt
người không chỉ dựa vào một hướng mà có liên quan đến nhiều hướng.
- Hướng tiếp cận dựa trên tri thức
- Hướng tiếp cận dựa trên đặc trưng không thay đổi
- Hướng tiếp cận dựa trên so sánh khớp mẫu
- Hướng tiếp cận dựa trên diện mạo
Phát hiện khuôn mặt trong trạng thái buồn ngủ được xác định thông qua việc
nhận diện khuôn mặt. Tuy nhiên việc phát hiện buồn ngủ của người lái khó phát
hiện do trạng thái buồn ngủ của mỗi người là khác nhau. Việc chỉ dùng các cử
chỉ thông thường rất dễ được nhận diện nhầm thành các cảm xúc khác nhau như
vui, buồn, cười hay cả khi nói chuyện thơng thường…

12


Hình 2.1. Nhận diện buồn ngủ.
Để tăng độ chính xác trong phát hiện buồn ngủ ta nhận dạng thêm đôi mắt và
xác định buồn ngủ thông qua mức độ nhắm/mở mắt.

Hình 2.2. Nhận diện mắt.
Tương tự ta nhận dạng miệng và mức độ đóng/ mở miệng (ngáp)

Hình 2.3. Nhận dạng khuôn mặt, mắt, miệng.

13


Ngoài ra việc phát hiện buồn ngủ khi lái xe còn được phát hiện bởi độ nghiêng

của đầu lúc ngủ gật trong quá trình lái xe, hoặc quay ngang trong khi lái xe.
2.3. Các phương pháp phát hiện buồn ngủ khi lái xe
2.3.1. Phương pháp dựa vào sinh lý người lái xe
Kỹ thuật thứ nhất: Theo dõi, đánh giá các thay đổi về sinh lý của người lái
xe như sự thay đổi nhịp tim, sóng não và nháy mắt. Để thực hiện lỹ thuật này
các thiết bị sẽ được gắn trực tiếp lên cơ thể người lái xe. Do đó, chúng gây cảm
giác khó chịu cho người lái xe. Mặt khác, trong quá trình hoạt động cơ thể xuất
hiện mồ hơi trên bề mặt da làm giảm độ chính xác của thiết bị.
Kỹ thuật thứ hai: Phát hiện lái xe buồn ngủ dựa trên cử chỉ khuôn mặt. Kỹ
thuật này là một trong những tiêu chí quan trọng và tin cậy bởi biểu hiện mệt
mỏi thường thể hiện trực quan nhất và có thể dễ dàng quan sát được từ những
thay đổi trong các tính năng trên khn mặt như mắt, đầu, và miệng. Các cử chỉ
cơ bản trên khuôn mặt có thể phát hiện lái xe buồn ngủ như sau:
- Nhận dạng khuôn mặt
- Nhận dạng đôi mắt và đánh giá mức độ nhắm/mở mắt
- Nhận dạng phần miệng và mức độ mở miệng (ngáp)
- Vị trí nghiêng của đầu
2.3.2. Phương pháp dựa vào hoạt động và phản ứng điều khiển
Đây là kỹ thuật thực hiện bằng cách theo dõi hoạt động của tay lái, phanh
xe, tốc độ xe, sự di chuyển sang ngang… Phương pháp này không trực tiếp tác
động vào người lái xe mà gắn trên xe như một hệ thống hỗ trợ người lái nhận
biết dấu hiện buồn ngủ
2.3.3. Đề xuất phương án thực hiện
Sau khi nghiên cứu các phương pháp phát hiện buồn ngủ cũng như nhìn
theo thực tế đề xuất sử dụng phương án cảnh báo ngủ gật sử dụng cử chỉ khn
mặt. Có nhiều phương pháp để ứng dụng cử chỉ khuôn mặt xác định trạng thái
buồn ngủ của người lái xe:

14



a.

OpenCV là tên viết tắt của open source computer vision library – có thể

được hiểu là một thư viện nguồn mở cho máy tính. Cụ thể hơn OpenCV là kho
lưu trữ các mã nguồn mở được dùng để xử lý hình ảnh, phát triển các ứng dụng
đồ họa trong thời gian thực. OpenCV cho phép cải thiện tốc độ của CPU khi
thực hiện các hoạt động real time. Nó cịn cung cấp một số lượng lớn các mã xử
lý phục vụ cho quy trình của thị giác máy tính hay các learning machine khác.
b.

YOLO là viết tắt của “You Only Look Once”, đây là một nhóm thuật tốn

phát hiện đối tượng thời gian thực phổ biến. Công cụ phát hiện đối tượng YOLO
ban đầu được phát hành lần đầu tiên vào năm 2016. Công cụ này được tạo bởi
Joseph Redmon, Ali Farhadi và Santosh Divvala. Khi phát hành, kiến trúc này
nhanh hơn nhiều so với các máy dò đối tượng khác và trở thành công nghệ tiên
tiến nhất cho các ứng dụng thị giác máy tính thời gian thực. Hiện tại YOLOv7
cung cấp độ chính xác phát hiện đối tượng theo thời gian thực được cải thiện
đáng kể mà không làm tăng chi phí suy luận. Như đã trình bày trước đây trong
các điểm chuẩn, khi so sánh với các cơng cụ phát hiện đối tượng đã biết khác,
YOLOv7 có thể giảm hiệu quả khoảng 40% tham số và 50% tính tốn phát hiện
đối tượng theo thời gian thực hiện đại, đồng thời đạt được tốc độ suy luận nhanh
hơn và độ chính xác phát hiện cao hơn.
c.

OpenCV hay YOLO đều yêu cầu cấu hình phần cứng rất lớn do phải train

rất nhiều các dữ liệu hình ảnh. Để tối ưu nhất cho các thiết bị có cấu hình thấp

và ít bộ nhớ như máy tính nhúng thì Dlib là phương án tối ưu nhất.
DLIB là một bộ công cụ C ++ hiện đại có 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 viện trong
một loạt các 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 suất cao lớn.
Dlib chứa các phần mềm để xử lý mạng, luồng, giao diện đồ họa, cấu trúc
dữ liệu phức tạp, đại số tuyến tính, học máy thống kê, xử lý hình ảnh, khai thác
dữ liệu, phân tích văn bản và phân tích văn bản, tối ưu hóa số, mạng Bayes và
nhiều tác vụ khác. Trong những năm gần đây, phần lớn sự phát triển đã tập trung
vào việc tạo ra một bộ rộng các công cụ học máy thống kê. Tuy nhiên, DLIB

15


vẫn là một thư viện mục đích chung và hoan nghênh sự đóng góp của các thành
phần phần mềm chất lượng cao hữu ích trong bất kỳ miền nào.
 Các tính năng chính.
Doccument:
 Khơng giống như nhiều dự án nguồn mở, dự án này cung cấp tài liệu đầy
đủ và chính xác cho mọi lớp và chức năng. Ngồi ra cịn có các chế độ gỡ
lỗi kiểm tra các điều kiện tiên quyết được ghi lại cho các chức năng. Khi
điều này được kích hoạt, nó sẽ bắt được phần lớn các lỗi gây ra bởi việc
gọi các chức năng khơng chính xác hoặc sử dụng các đối tượng một cách
khơng chính xác.
 High Quality Portable Code (Mã di động chất lượng cao).
 Phạm vi kiểm tra đơn vị tốt. Tỷ lệ các dòng kiểm tra đơn vị của mã với
dòng thư viện của mã là khoảng 1 đến 4.
 Thư viện được kiểm tra thường xuyên trên các hệ thống MS Windows,
Linux và Mac OS X. Tuy nhiên, nó sẽ hoạt động trên bất kỳ hệ thống

POSIX nào và đã được sử dụng trên Solaris, HPUX và BSD.
 Không có gói nào khác được yêu cầu sử dụng thư viện. Chỉ cần API được
cung cấp bởi một hệ điều hành ngoài hộp.
 Tất cả các mã cụ thể của hệ điều hành được phân lập bên trong các lớp
trừu tượng hóa hệ điều hành được giữ càng nhỏ càng tốt. Phần còn lại của
thư viện được xếp lớp trên đầu các lớp trừu tượng HĐH hoặc là C ++ tiêu
chuẩn ISO tinh khiết.
Numerical Algorithms (Thuật toán số):
 Một đối tượng ma trận nhanh được triển khai bằng kỹ thuật mẫu biểu thức
và có khả năng sử dụng các thư viện Blas và Lapack khi có sẵn.
 Nhiều đại số tuyến tính và các hoạt động tốn học được xác định cho đối
tượng ma trận như phân tách giá trị số ít, chuyển vị, hàm Trig, v.v.
 Mục đích chung khơng giới hạn các thuật tốn tối ưu hóa phi tuyến tính
bằng cách sử dụng các kỹ thuật gradient, BFGS và L-BFG liên hợp.
 Levenberg-Marquardt để giải quyết các vấn đề bình phương tối thiểu phi
tuyến tính.
 Tối ưu hóa khơng có đạo hàm bị hạn chế thơng qua thuật toán Bobyqa.
 Triển khai của thuật toán mặt phẳng cắt tối ưu hóa.
16


 Các cơng cụ tối ưu hóa tổ hợp để giải quyết các vấn đề về gán tối ưu và
cắt/tối đa cũng như thuật tốn CKY để tìm cây phân tích phân tích có thể
xảy ra nhất.
Graphical Model Inference Algorithms (Thuật tốn suy luận mơ hình đồ họa):
 Tham gia thuật tốn cây để suy luận chính xác trong mạng Bayesian.
 Bộ mẫu Gibbs Markov Chuỗi Monte Carlo Thuật toán cho suy luận gần
đúng trong một mạng lưới Bayes.
 Các thói quen thực hiện suy luận bản đồ trong cấu trúc chuỗi, POTT hoặc
biểu đồ yếu tố chung.

Image Processing (Xử lí ảnh):
 Các thói quen đọc và viết các định dạng hình ảnh phổ biến.
 Chuyển đổi khơng gian màu tự động giữa các loại pixel khác nhau.
 Các hoạt động hình ảnh phổ biến như tìm kiếm cạnh và hoạt động hình
thái học.
 Việc triển khai các thuật tốn trích xuất tính năng Surf, Hog và FHOG.
 Các cơng cụ để phát hiện các đối tượng trong hình ảnh bao gồm phát hiện
mặt trước và ước tính tư thế đối tượng.
 Nhận dạng khuôn mặt chất lượng cao.
2.4. Ứng dụng phương án vào bài toán
2.4.1. 68 Ficial landmark.
Xác định facial landmark là một bài toán con của bài toán dự đốn hình dạng
(shape prediction). Đó chính là việc chúng ta phải xác định được những điểm
chính tạo nên hình dạng của đối tượng trong một bức ảnh. Trong bài toán xác
định facial landmark, chúng ta sẽ phải xác định được những điểm chính trong
bức ảnh tạo nên hình dạng khuôn mặt người. Facial landmark là đầu vào cho
nhiều bài toán khác như dự đoán tư thế đầu, tráo đổi khuôn mặt, phát hiện nháy
mắt, xoay chỉnh lại khuôn mặt và điển hình là cơng nghệ nhận dạng khn mặt
FaceID được Apple trang bị trên iphone X.

17


Hình 2.4. Nhận dạng sử dụng facial landmark.
Việc xác định facial landmark gồm có hai bước:
Bước 1: Xác định được vị trí khn mặt trong bức ảnh.
Bước 2: Xác định được các điểm tạo nên cấu trúc của khuôn mặt.
Việc xác định vị trí khn mặt có thể được thực hiện bằng nhiều cách từ đơn
giản như thuật toán Haar cascades đến phức tạp như các thuật toán dựa trên
deep-learning. Tuy nhiên dù sử dụng thuật tốn nào, mục đích cuối cùng là ta sẽ

thu được một vùng (thường là hình vng) được xác định bởi tọa độ ( x, y ) bao
quanh khuôn mặt trong bức ảnh.
Sau khi xác định được khuôn mặt trong bức ảnh, chúng ta sẽ xác định cấu
trúc của khn mặt. Có rất nhiều kiểu cấu trúc khuôn mặt khác nhau nhưng về
cơ bản, chúng ta sẽ phải xác định được những phần sau:







Miệng
Lông mày phải
Lông mày trái
Mắt phải
Mắt trái
Mũi

18


 Hàm
2.4.2. Bộ xác định facial landmark của dlib.
Bộ xác định facial landmark của dlib là cài đặt của thuật tốn được mơ tả
trong bài báo One Millisecond Face Alignment with an Ensemble of Regression
Trees của Kazemi và Sullivan (2014).
Bộ xác định facial landmark này sẽ xác định 68 điểm chính theo tọa độ (x,y)
cấu tạo nên khn mặt người như hình bên dưới.


Hình 2.5. 68 điểm nhận diện khn mặt.
Để có thể xác định được 68 điểm này trên khuôn mặt người, bộ xác định
facial landmark của dlib được huấn luyện với bộ dữ liệu iBUG 300-W.
Xác định được càng nhiều điểm landmark thì khn mặt người càng cụ thể,
rõ ràng và chính xác hơn. Ví dụ FaceID đã sử dụng bộ cảm biến hồng ngoại với
30 triệu điểm để dựng lên cấu trúc khuôn mặt 3D của người sử dụng điện thoại.

2.4.3. Các thư viện khác sử dụng trong chương trình.
a, Thư viện Scipy trong Python.

19


- Scipy là phần mềm nguồn mở cho toán học, khoa học và kỹ thuật. Thư
viện Scipy được xây dựng dựa trên thư viện NumPy, cung cấp thao tác
mảng N chiều thuận tiện và nhanh chóng. Scipy gồm các gói con
(submodule) chứa các mơ-đun để tối ưu hóa, đại số tuyến tính, tích hợp,
nội suy, các chức năng đặc biệt, FFT, xử lý tín hiệu và hình ảnh, bộ giải
ODE và các tác vụ khác phổ biến trong khoa học và kỹ thuật.

- Tính năng:
 SciPy chứa nhiều loại gói phụ giúp giải quyết vấn đề phổ biến nhất
liên quan đến tính tốn khoa học.
 SciPy là thư viện Khoa học được sử dụng nhiều nhất chỉ sau Thư viện
Khoa học GNU cho C/C ++ hoặc Matlab.
 Dễ sử dụng và hiểu cũng như sức mạnh tính tốn nhanh.
 Nó có thể hoạt động trên mảng (array) của thư viện NumPy.

- Scipy.spatial (Các cấu trúc dữ liệu không gian và thuật toán)
 Gồm các thuật toán cho các cấu trúc không gian như K-D Trees,

nearest neighbors, Convex hulls, v.v.
 K-D Trees: Trong khoa học máy tính, K-D Trees (viết tắt của cây k
chiều ) là một cấu trúc dữ liệu phân vùng theo không gian để tổ chức
các điểm qua không gian K chiều.

20


Hình 2.6. K-D Trees
- K-D Trees 3 chiều. Lần tách đầu tiên (mặt phẳng dọc màu đỏ) cắt tế bào
gốc (màu trắng) thành hai ơ con, mỗi ơ sau đó được tách (bởi các mặt
phẳng ngang màu xanh lục) thành hai ô con. Cuối cùng, bốn ô được chia
(bởi bốn mặt phẳng thẳng đứng màu xanh lam) thành hai ô con. Vì khơng
cịn phân tách nữa nên tám ơ cuối cùng được gọi là ơ lá.

-

Convex hulls (vỏ lồi):
Trong hình học, bao lồi hoặc bao lồi của một hình là tập lồi nhỏ nhất chứa nó.
Vỏ lồi có thể được định nghĩa là giao của tất cả các tập lồi chứa một tập con đã
cho của không gian Euclide, hoặc tương đương như tập hợp tất cả các tổ hợp lồi
của các điểm trong tập con. Đối với một tập hợp con có giới hạn của mặt phẳng,
thân tàu lồi có thể được hình dung như hình dạng được bao bọc bởi một dải cao
su căng xung quanh tập hợp con đó.

21


Hình 2.6: Vỏ lồi của tập hợp màu đỏ là tập hợp lồi màu xanh và đỏ.


b, Thư viện Imutils.
-

Gói này bao gồm một loạt các chức năng tiện lợi của OpenCV+ thực hiện
các tác vụ cơ bản như dịch, xoay, thay đổi kích thước và tạo khung.

+ Translation (Dịch):
-

Phép dịch là sự dịch chuyển của một hình ảnh theo hướng x hoặc y. Để
dịch một hình ảnh trong OpenCV, bạn cần cung cấp dịch chuyển (x, y),
được ký hiệu là (t x, t y) để xây dựng ma trận dịch M:

-

Và từ đó, bạn sẽ cần áp dụng cv. warpAffine hàm số.

-

Thay vì xây dựng thủ cơng ma trận dịch M này và gọi cv. warpAffine, bạn
chỉ cần thực hiện cuộc gọi đến dịch chức năng của imutils.

Hình 2.7. Minh họa dịch chuyển
+ Rotation (Vịng quay):
-

Xoay hình ảnh trong OpenCV được thực hiện bằng cách thực hiện cuộc
gọi đến cv2. getRotationMatrix2D và cv. warpAffine. Cần phải cẩn thận
hơn nữa để cung cấp điểm nằm (x, y) của điểm mà hình ảnh sẽ được xoay.
Các lệnh gọi tính tốn này có thể nhanh chóng cộng dồn và làm cho mã


22


của bạn trở nên cồng kềnh và khó đọc hơn. Các rotate chức năng trong
imutils giúp giải quyết vấn đề này.

Hình 2.8. Minh họa quay
+ Resizing (Thay đổi kích thước):
-

Thay đổi kích thước hình ảnh trong OpenCV được thực hiện bằng cách
gọi hàm cv2. resize. Tuy nhiên, cần đặc biệt lưu ý để đảm bảo rằng tỷ lệ
khung hình được duy trì. Đây là chức năng của imutils duy trì tỷ lệ khung
hình và cung cấp các đối số từ khóa width (chiều rộng) và height (chiều
cao) để hình ảnh có thể được thay đổi kích thước thành chiều rộng / chiều
cao dự định trong khi duy trì tỷ lệ co và đảm bảo kích thước của hình ảnh
khơng phải được nhà phát triển tính tốn rõ ràng.

23


Hình 2.9. Minh họa thay đổi kích thước
+ Skeletonization (Sự tạo xương):
-

Skeletonization là quá trình xây dựng "khung cấu trúc liên kết" của một đối
tượng trong một hình ảnh, trong đó đối tượng được cho là có màu trắng trên
nền đen. OpenCV không cung cấp một chức năng để cấu tạo khung xương một
cách rõ ràng, nhưng cung cấp các chức năng hình thái học và nhị phân để làm

như vậy.

-

Để thuận tiện, chức năng skeletonize của imutils có thể được sử dụng để xây
dựng khung cấu trúc liên kết của hình ảnh.

-

Đối số đầu tiên, là size (kích thước) của nhân phần tử cấu trúc. Một đối số tùy
chọn, structure (cấu trúc), có thể được sử dụng để kiểm sốt phần tử cấu trúc nó được mặc định là cv2. MORPH_RECT, nhưng có thể là bất kỳ phần tử cấu
trúc hợp lệ nào.

24


Hình 2.10. Minh họa sự tạo xương
+ Displaying with Matplotlib (Hiển thị với Matplotlit):
-

Trong liên kết Python của OpenCV, hình ảnh được biểu diễn dưới dạng mảng
NumPy theo thứ tự BGR. Điều này hoạt động tốt khi sử dụng hàm cv2.Imshow.
Tuy nhiên, nếu bạn có ý định sử dụng Matplotlib, hàm giả sử hình ảnh theo thứ
tự RGB. Một cuộc gọi đơn giản đến cv2.cvtColor sẽ giải quyết vấn đề này hoặc
bạn có thể sử dụng chức năng tiện lợi opencv2matplotlib.

Hình2.11. Minh họa hiển thị với Maplotlib
c, Thư viện face utils (Khuôn mặt).

25



×