1. Trang chủ
  2. » Giáo án - Bài giảng

BÁO cáo NGHIÊN cứu KHOA học kĩ THUẬT THIẾT bị CẢNH báo BUỒN NGỦ tự ĐỘNG THÔNG QUA TRẠNG THÁI của mắt DÀNH CHO NGƯỜI THAM GIA GIAO THÔNG

70 71 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 70
Dung lượng 4,8 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tất cả hình ảnh của mắt sẽ được một camera siêu nhỏ được đặt bên trong mắt kính thu nhận và truyền đến một chương trình xử lý được tích hợp trên máy tính mini Raspberry Pi B+.. Cô

Trang 1

Cuộc thi khoa học kỹ thuật cấp Quốc gia dành cho

học sinhtrung học năm



Đơn vị dự thi: Trường THPT chuyên Lê Hồng Phong

Tên đề tài THIẾT BỊ CẢNH BÁO BUỒN NGỦ TỰ ĐỘNG THÔNG QUA TRẠNG THÁI CỦA MẮT DÀNH CHO

NGƯỜI THAM GIA GIAO THÔNG

Lĩnh vực dự thi

KT điện – Cơ khí

Đề tài số: 12 Tác giả

LỜI CẢM ƠN 4

Trang 2

MỤC LỤC

Phần 1: TÓM TẮT NỘI DUNG DỰ ÁN 5

Phần 2: GIỚI THIỆU TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU 6

1 Giới thiệu tổng quan về vấn đề nghiên cứu 6

2 Ý nghĩa nghiên cứu 8

Phần 3: GIẢ THUYẾT KHOA HỌC VÀ MỤC ĐÍCH NGHIÊN CỨU 9

I Giả thuyết khoa học 9

1 Tổng quan về cấu tạo mắt và hiện tượng 9

2 Tổng quan về ngôn ngữ lập trình Python 15

3 Tổng quan về thư viện OpenCV 17

4 Raspberry Pi B+ 20

II Mục đích nghiên cứu 23

Phần 4: PHƯƠNG PHÁP NGHIÊN CỨU 24

I Kế hoạch nghiên cứu 24

II Chi tiết về quá trình nghiên cứu 24

1 Ngôn ngữ lập trình 24

2 Tìm hiểu và chọn lọc câu lệnh của OpenCV 25

3 Nghiên cứu về camera 29

4 Cài đặt và khởi động Raspberry Pi 31

III Tiến hành thử nghiệm 35

Phần 5: KẾT QUẢ VÀ THẢO LUẬN 45

I Kết quả nghiên cứu 45

1 Chương trình 45

2 Mắt kính 54

II Thảo luận 57

Phần 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 59

Phần 7: TÀI LIỆU THAM KHẢO 60

Trang 3

DANH MỤC HÌNH ẢNH

Hình 1: Cấu tạo mắt thường của con người 12

Hình 2: Cơ trực 13

Hình 3: Tròng đen khi mắt mở 14

Hình 4: Khi nhắm mắt, không có sự xuất hiện của tròng đen 14

Hình 5: Guido van Rossum 15

Hình 6: Khối lệnh trong C++ 16

Hình 7: Khối lệnh trong Python 16

Hình 8: OpenCV 1 dựa trên cấu trúc của IplImage 19

Hình 9: OpenCV 2 dựa trên cấu trúc của cv::Mat 19

Hình 10: Eben Upton 20

Hình 11: Hai Model B và B+ 21

Hình 12: Raspberry Pi B+ 23

Hình 13: Không gian màu BGR 26

Hình 14: Không gian màu CMYK 27

Hình 15: Không gian màu HSV 28

Hình 16: Đường tròn biểu diễn màu sắc 28

Hình 17: Camera Colorvis 29

Hình 18: Đèn hồng ngoại 30

Hình 19: Camera hồng ngoại North 30

Hình 20: Màn hình Raspi – config để thiết lập cho RPi ……… 32

Hình 21: Hệ điều hành Raspbian được cài đặt thành công 33

Hình 22: OpenCV được cài đặt thành công trên nền Raspbian 34

Hình 23: Hình ảnh camera nhận được vào ban đên 35

Hình 24: Đoạn code sử dụng thư viện mp3play 36

Hình 25: Lỗi khi dùng thư viện mp3play 37

Hình 26: Đoạn code khi sử dụng thư viên pymedia 38

Hình 27: Lỗi khi dùng thư viện pymedia 39

Trang 4

Hình 28: Dòng lệnh để tập tin py tự động 40

Hình 29: RPi báo lỗi không tự động thực thi tập tin py 41

Hình 30: Tự động thành công trên giao diện LXDE 42

Hình 31: Pin Samsung ARUN 3000mAh 43

Hình 32: Pin Samsung ARUN 6000mAh 44

Hình 33: Hình ảnh lúc mắt mở được camera chụp lại ở không gian màu BGR 45

Hình 34: Hình ảnh sau khi được chuyển từ không gian màu BGR sang HSV 45

Hình 35: Hình ảnh lúc mắt nhắm được camera chụp lại ở không gian màu BGR 46

Hình 36: Hình ảnh sau khi được chuyển từ không gian màu BGR sang HSV 46

Hình 37: Đoạn code cơ bản 47

Hình 38: Đoạn code giúp bỏ qua hiện tượng chớp mắt thông thường 48

Hình 39: Đoạn code giúp không còn hạn chế độ phân giải camera 49

Hình 40 : Đoạn code khắc phục những ảnh hưởng của ánh sáng 49

Hình 41 : Đoạn code truyền tín hiệu đến tai nghe để phát ra âm thanh 50

Hình 42 : Đoạn code dừng chương trình 50

Hình 43 : Hình ảnh sau khi được chuyển từ không gian màu BGR sang HSV 51

Hình 44 : Hình ảnh sau khi được chuyển từ không gian màu BGR sang HSV 51

Hình 45 : Tính diện tích điểm ảnh sau khi chuyển không gian màu 52

Hình 46 : Hình ảnh camera nhận được là mắt nhắm 53

Hình 47 : Play sound để báo hiệu nguy hiểm 53

Hình 48 : Mô hình cơ bản của sản phẩm 55

Hình 49 : Sản phẩm hoàn thiện 56

Hình 50 : Thử nghiệm mô hình sản phẩm trên mặt bạn Thảo Linh 56

Trang 5

LỜI CẢM ƠN

- Cảm ơn ba mẹ và gia đình đã ủng hộ và động viên trong suốt quá trình nghiên cứu

- Cảm ơn nhà trường đã tạo điều kiện tham gia sân chơi bổ ích

- Cảm ơn thầy, cô đã tận tình chỉ dẫn và giúp đỡ chúng em trong quá trình nghiên cứu

Trang 6

Phần 1: TÓM TẮT NỘI DUNG DỰ ÁN

Thiết bị cảnh báo buồn ngủ tự động thông qua trạng thái của mắt dành cho người tham gia giao thông hoạt động dựa trên sự khác nhau cơ bản giữahai hiện tượng nhắm và mở mắt: khi mở, tròng đen của mắt có diện tích lớn hơn khi mắt có xu hướng nhắm Tất cả hình ảnh của mắt sẽ được một camera siêu nhỏ được đặt bên trong mắt kính thu nhận và truyền đến một chương trình xử lý được tích hợp trên máy tính mini Raspberry Pi B+ Nếu hình ảnh nhận được là mắt nhắm, chương trình sẽ gửi thông tin đến tai nghe và báo hiệu nguy hiểm

Câu hỏi nghiên cứu

Làm thế nào để viết nên một chương trình có thể nhận diện được trạng thái của mắt khi rơi vào hiện tượng buồn ngủ và tự động hóa thiết bị?

Công việc đã thực hiện

Bằng cách sử dụng thư viện OpenCV, thư viện Pygame kết hợp với ngôn ngữ lậptrình Python, chương trình đã được viết để nhận diện trạng thái mắt nhắm – mở và đượccải tiến để bỏ qua hiện tượng chớp mắt thông thường của con người, cũng như khắc phụcmột vài nhược điểm về độ phân giải của camera.Thiết bị được thử nghiệm trên mắt người

và cho kết quả khả quan

Trang 7

Phần 2: GIỚI THIỆU TỔNG QUAN VỀ

VẤN ĐỀ NGHIÊN CỨU

1 Giới thiệu tổng quan về vấn đề nghiên cứu

Hiện nay, các tai nạn xảy ra do lái xe trong tình trạng bị mệt mỏi và thiếu ngủkhông phải là hiếm Theo thống kê, tại Đức mỗi năm có khoảng 3.000 tai nạn gây ra dongười tham gia giao thông bị mệt mỏi quá sức Tại Mỹ, theo Cơ quan An toàn giao thôngquốc gia (NHTSA), con số này lớn hơn nhiều: mỗi năm có đến 100,000 tai nạn do mệtmỏi khi lái xe, khiến 1,500 người chết mỗi năm Các nhà khoa học ước tính khoảng 10-20% các tai nạn nghiêm trọng xảy ra là do người lái xe ngủ gật Riêng ở Việt Nam, theo

số liệu thống kê của Cục Cảnh sát Giao thông Đường bộ - Đường sắt, số vụ tai nạn giaothông đặc biệt nghiêm trọng do lái xe ngủ gật chiếm tới khoảng 30% tổng số tai nạn

Khi buồn ngủ, về trạng thái sinh lý, các giác quan và phản xạ của người điều khiển

xe sẽ chậm lại, độ tỉnh táo giảm, rất dễ căng thẳng và khả năng xử lý tình huống cũngkém đi Các hiện tượng thường thấy ở một tài xế bị coi là đang ngủ gật gồm nhắm mắtthay vì chớp mắt, đầu lắc lư về phía trước rồi gật gù về phía sau, ánh mắt thường đờ đẫn

và chỉ tập trung hướng về một điểm cố định,

Nguyên nhân của tình trạng buồn ngủ khi lái xe chủ yếu bởi tài xế thiếu ngủ hoặc

do cơ thể mệt mỏi quá sức Theo anh Trương Quốc Khanh (42 tuổi, ngụ tại quận ThủĐức, tài xế đã bỏ nghề) cho biết anh đã nhiều lần suýt gây tai họa cho người đi đường doquá buồn ngủ, sau những lần đó anh quyết định bỏ nghề Anh Trần Quốc Nam - tài xế xecontainer của doanh nghiệp Q.T (quận 2) - hé lộ nguyên nhân: “Nhiều lúc cầm vô lăngnhưng mắt cứ lim dim, muốn chợp mắt một lát nhưng lại sợ ngủ quên, đến giờ cấm lạikhông vào được thành phố, nên dù rất buồn ngủ cũng cố chạy”

Trang 8

Theo nhận định của một cán bộ cảnh sát giao thông công an quận 2, trong thờigian qua các đơn vị chức năng liên tục ra quân kiểm tra xe quá khổ, quá tải nên nhiềudoanh nghiệp vận tải cũng thay đổi phương thức nhằm đối phó với cơ quan chức năngnhư cho tài xế nghỉ ban ngày và tăng cường chạy vào ban đêm Tuy nhiên, các tài xếchạy xe tải, xe container tuổi đời còn rất trẻ, ban ngày có thời gian rảnh rỗi họ thường chútâm vào vui chơi, đến tối chỉ tranh thủ chợp mắt vài tiếng rồi phải chạy xe nên thiếu ngủ

là điều tất yếu

Trước thực trạng đó, có không ít nhà khoa học đã tiến hành các nghiên cứu để tìm

ra cách phòng tránh Một nhóm các nhà nghiên cứu đến từ Đại học Trent (Canada) đã đềxuất một giải pháp là tích hợp hệ thống cảm biến đo nhịp tim ngay trên ghế ngồi nhằmphát hiện ra khi nào người lái xe có dấu hiệu buồn ngủ để đưa ra cảnh báo kịp thời (1).Bên cạnh đó, một số các nghiên cứu khác thì hướng đến việc đọc sóng điện não(2) Nhìnchung, hai công trình (1),(2) sẽ đạt đến độ chính xác cao khi can thiệp trực tiếp vào hoạtđộng của tim và não bộ, nhưng phần nào sẽ ảnh hưởng đến sức khỏe của đối tượng sửdụng khi can thiệp trực tiếp như vậy Với nghiên cứu từ công trình (1), hệ thống cảm biến

đo nhịp tim phải phụ thuộc vào loại xe điều khiển cũng như ghế ngồi Để gắn được vàoghế ngồi, hệ thống cảm biến phải nhỏ, gọn, được cảm biến ngay trong nguyên liệu dệtghế để tránh gây cảm giác khó chịu cho người lái xe Ngoài ra, thiết bị phải liên tục đolường nhịp tim của tài xế trong 4 – 6 giờ liền, điều này sẽ ảnh hưởng xấu đến sức khỏecủa những người bị bệnh về tim và huyết áp Còn về nghiên cứu từ công trình (2), để đảmbảo tính chính xác, phương pháp đọc sóng điện não phải được thực hiện bằng cách cấyđiện cực vào não bộ, tuy nhiên cơ năng của điện cực không thể được duy trì, hơn nữa gâytổn hại đến các tổ chức xung quanh Hay thiết bị được lắp đặt bên ngoài có thể tránh tổnthương cơ thể, tuy nhiên do vật liệu cố định điện cực là các chất silicone, không thể kếthợp một cách chặt chẽ với bộ phận đầu, hơn nữa khoảng cách giữa các điện cực chỉ là1cm, vì thế độ nhạy rất thấp

Trang 9

Từ những mặt hạn chế của công trình nghiên cứu (1), (2), chúng tôi đã có ý tưởng

là sử dụng camera mini để ghi lại hình ảnh của mắt và kết hợp với thư viện OpenCV, thưviện Pygame trong ngôn ngữ lập trình Python để phát hiện hiện tượng ngủ gật của ngườilái xe Khác với hai công trình nghiên cứu trên, để nhận biết được hiện tượng ngủ gật,chúng tôi đã dùng một đoạn code khá đơn giản bằng việc xác định điểm ảnh và tính diệntích điểm ảnh đó, kết hợp với một camera thu nhận hình ảnh, một tai nghe báo hiệu nguyhiểm và một máy tính mini Raspberry Pi B+ là trung tâm xử lý dữ liệu

Về bố cục, bản báo cáo bao gồm:

Phần 1: TÓM TẮT NỘI DUNG DỰ ÁN

Phần 2: GIỚI THIỆU VÀ TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU

Phần 3: GIẢ THUYẾT KHOA HỌC VÀ PHÁT BIỂU MỤC ĐÍCH NGHIÊN CỨU.Phần 4: PHƯƠNG PHÁP NGHIÊN CÚU

Phần 5: SỐ LIỆU, KẾT QUẢ NGHIÊN CỨU VÀ THẢO LUẬN

Phần 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Phần 7: TÀI LIỆU THAM KHẢO

Đề tài được bắt đầu từ tháng 9/2014, tính đến nay đã nghiên cứu được 5 tháng

Trang 10

2 Ý nghĩa nghiên cứu

- Nếu nghiên cứu thành công, thiết bị sẽ góp phần làm giảm tai nạn giao thông gây ra

do hiện tượng ngủ gật, do sự mệt mỏi quá sức của người lái xe

- Người điều khiển xe sẽ không cần phải dùng những chất kích thích như cà phê, thuốclá… có hại cho sức khỏe khi sử dụng trong thời gian dài

- Thiết bị nhằm mục đích chủ yếu là phát hiện hiện tượng ngủ gật, do đó, thiết bị có thểứng dụng vào mục đích khác như: phát hiện học sinh ngủ gật trong giờ học, đánh giánăng lực của giáo viên…

Trang 11

Phần 3: GIẢ THUYẾT KHOA HỌC VÀ

MỤC ĐÍCH NGHIÊN CỨU

I Giả thuyết khoa học

1 Tổng quan về cấu tạo mắt và hiện tượng của mắt khi rơi vào trạng thái ngủ

Mắt gồm có nhãn cầu, thần kinh mắt và những bộ phận phụ thuộc như mí mắt,lông mi, các cơ mắt, các cân mạc, tuyến lệ và các màng tiếp hợp

Nhãn cầu là phần chính yếu nhất, thường được so sánh với chiếc máy ảnh vìđặc tính chính xác quang học của nó

Nhãn cầu gồm 3 lớp màng có tên gọi là:

 Màng ngoài gồm củng mạc và phía trước biến đổi thành giác mạc

 Màng giữa là màng bồ đào, thân bè và mạch lạc mạc, chứa nhiều mạch máu, phíatrước dày lên thành cơ mi và mống mắt

 Màng trong là võng mạc, chứa các tế bào nhận cảm ánh sáng là tế bào gậy và tếbào nón

Chức năng cơ bản của mắt:

 Là hệ quang học, thu chụp lấy hình ảnh

 Là hệ thống thu nhận và “mã hoá” thông tin cho đại não

 Là một cơ quan chức năng, “phục vụ” cho sự sống con người

Trang 12

Hình 1: Cấu tạo mắt thường của con người

Trang 13

Trong hốc mắt có các bộ phận điều khiển trạng thái nhắm – mở và di chuyển của mắt:

- Cơ vận động nhãn cầu:có 6 cơ vận nhãn gồm 4 cơ thẳng là cơ thẳng trên, thẳngdưới, thẳng trong, thẳng ngoài và 2 cơ chéo là cơ chéo lớn, cơ chéo bé Cơ thẳng trênđưa mắt lên trên, cơ thẳng dưới đưa mắt xuống dưới, cơ thẳng trong đưa mắt vàotrong, cơ thẳng ngoài đưa mắt ra ngoài Cơ chéo lớn đưa mắt xuống dưới, ra ngoài vàxoáy vào trong, cơ chéo bé đưa mắt lên trên, ra ngoài và xoáy ra ngoài

- Các cơ của mi mắt gồm: cơ nâng mi trên: cơ này xuất phát từ các tổ chức xơ ởđỉnh hốc mắt đi hướng ra phía trước, nằm sát trần ổ mắt, khi gần đến đáy hốc mắt thân

cơ toả rộng ra và tận hết bằng một dải gân rộng trong mi mắt; cơ vòng mi: các thớ cơbao quanh khe mi có nhiệm vụ nhắm kín mắt Cơ có hai phần là phần hốc mắt vàphần mi

Hình 2: Cơ trực

Trang 14

Như vậy, dựa vào cấu tạo mắt và cơ chế đóng – mở của mi mắt, chương trìnhcủa chúng tôi được viết để phát hiện hiện tượng ngủ gật, tức khi rơi vào trạng tháibuồn ngủ, cơ mi sụp xuống dẫn đến tròng đèn của mắt sẽ hẹp hơn hoặc không thấy so

tỉnh táo

Hình 3: Tròng đen khi mắt mở(Người chụp: Hồng Hạnh)

Hình 4: Khi nhắm mắt, không có sự xuất hiện của tròng đen

(Người chụp: Hồng Hạnh)

Trang 15

2 Tổng quan về ngôn ngữ lập trình Python

Python là một ngôn ngữ lập trìnhthông dịch do Guido van Rossum(Hình 5) tạo

ra năm 1990 Python được phát triển tại Viện Nghiên cứu Quốc gia về Toán học vàKhoa học Máy tính Hà Lan bởi Guido van Rossum vào những năn 80-90 của thế kỷtrước Hiện nay Python được duy trì và phát triển bởi nhóm phát triển core của việnnày

Trang 16

- Từ khóa: Python tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kí hiệu và cấu

trúc cú pháp so với các ngôn ngữ khác Python là một ngôn ngữ phân biệt kiểu chữHOA, chữ thường

- Khối lệnh:Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp kí

hiệu hoặc từ khóa.Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọcmột khối lệnh Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là lùi cáccâu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh mẹ

chứa nó

Hình 6: Khối lệnh trong C++

Hình 7: Khối lệnh trong Python

Trang 17

- Nhờ chức năng thông dịch mà trình thông dịch (Interpreter) của Python có thể xử lýlệnh tại thời điểm chạy chương trình (runtime), ta không cần biên dịch chương trìnhtrước khi thực hiện nó.

- Mặc dù Python được xem là ngôn ngữ lập trình dành cho những ai mới làm quen vớiviệc lập trình trên máy tính, nhưng nó hỗ trợ mạnh cho việc phát triển nhiều loại ứngdụng khác nhau, từ các chương trình xử lý văn bản đơn giản đến các ứng dụng web,đến các chương trình game,… Và đây là điều mà Pascal không làm được

- Một trong những điểm mạnh nhất của Python đến từ thư viện chuẩn của nó: Một thưviện lớn, dễ sử dụng có tính tương thích cao và đặc biệt hoạt động đa nền: UNIX,Windows and Macintosh

- Python hỗ trợ chế độ Interactive, nhờ đó mà ta có thể nhập kết quả từ các đầu cuốikhác nhau vào chương trình Python, nhờ đó mà việc test và debug lỗi code trở nênđơn giản hơn

- Python cho phép người lập trình tích hợp (add-on) các mô-đun cấp thấp, các tool tùychọn vào trình thông dịch của nó Điều này giúp cho việc lập trình trên Python trở nêndễ dàng và hiệu quả hơn

3 Tổng quan về thư viện OpenCV

Thị giác máy là một lĩnh vực đã và đang rất phát triển Khái niệm xử lý ảnh vàthị giác máy – Computer Vision có liên quan tới nhiều ngành học và hướng nghiên cứukhác nhau Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trởnên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như cáchình ảnh, các đoạn phim thì khái niệm về thị giác máy ngày càng được nhắc đến vànghiên cứu nhiều hơn cho tới ngày nay

Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ramột hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu được hoặc tập dữliệu đa chiều Ngày nay, ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng, hỗ

Trang 18

trợ mọi lĩnh vực từ quân sự ( hệ thống tích hợp quang hồng ngoại có khả năng điều khiểntự động dàn hỏa lực…), an ninh ( hệ thống camera nhận dạng khuôn mặt, vân tay tựđộng…), hàng không vũ trụ ( hệ thống ống kính chụp ảnh viễn thám lắp trên các vệ tinh),cho đến y học (kính hiển vi tự động nhận dạng các tế bào với độ chính xác cao)…

Một trong những công cụ hỗ trợ về thị giác máy cũng như phân tích hình ảnhchuyên nghiệp và mạnh mẽ là OpenCV OpenCV (Open Computer Vision library) là mộtthư viện

mã nguồn mở do Intel phát triển, được giới thiệu năm 1999 và hoàn thiện thành phiênbản 1.0 năm 2006 Thư viện OpenCV gồm khoảng hơn 500 hàm và hơn 2500 các thuậttoán đã được tối ưu về xử lý ảnh, và các vấn đề liên quan tới thị giác máy và tương thíchvới các hệ điều hành Windows, Linux, Mac OS Trước OpenCV không có một công cụchuẩn nào cho lĩnh vực xử lý hình ảnh Các đoạn code đơ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 ứngdụng lớn

OpenCV là công cụ hữu ích cho những người bước đầu làm quen với xử lý ảnh số

vì các ưu điểm sau:

- OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóacho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lí

- OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí, việc đượcxây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợpchonghiên cứu và phát triển, với khả năng thay đổi và mở rộng các mô hình,thuật toán

Dự án về OpenCV được khởi động từ những năm 1999, đến năm 2000 nó được

giới thiệu trong một Hội nghị của IEEE về các vấn đề trong thị giác máy và nhận dạng,

tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức được công bố và năm

Trang 19

2008 phiên bản 1.1 (pre-release) mới được ra đời Tháng 10 năm 2009, bản OpenCV thế

hệ thứ hai ra đời (thường gọi là phiên bản 2.x) Cho tới nay, trải qua hơn 6 năm từ lúcphiên bản OpenCV đầu tiên được công bố, đã có lần lượt nhiều phiên bản OpenCV rađời, tuy nhiên có thể chia thư viện này thành hai bản chính dựa trên những đặc điểm khácbiệt lớn nhất của chúng: phiên bản OpenCV thế hệ thứ nhất (hay còn gọi là phiên bảnOpenCV 1.x) và phiên bản OpenCV thứ hai (hay còn gọi là phiên bản OpenCV 2.x):

- OpenCV 1.x là cấu trúc của một ảnh số dựa trên cấu trúc của IplImage, trong khi

thư viện OpenCV 2.xdựa vào cấu trúc của ảnh số, ma trận dựa trên cấu trúc của cv::Mat

Hình 8: OpenCV 1.x dựa trên cấu trúc của IplImage

Hình 9: OpenCV 2.x dựa trên cấu trúc của cv::Mat

- Trong OpenCV 1.x người sử dụng phải hoàn toàn quản lý bộ nhớ của các

đối tượng, nghĩa là khi một đối tượng mới được tạo ra, ta phải luôn chú ý để giải

Trang 20

phóng nó khi không còn sử dụng nữa trong khi thư viện OpenCV 2.x việc quản lýbộ nhớ trở nên dễ dàng hơn nhờ các hàm hủy các các lớp đối tượng trong OpenCV2.x đã thực hiện điều này khi một đối tượng không còn được sử dụng nữa.

4 Raspberry Pi B+

Raspberry Pi là một máy tính mini có kích thước chỉ bằng một thẻ tín dụng, đượcphát triển bởi Raspberry Pi Foundation (Anh Quốc) với mục đích thúc đẩy việc giảng dạykhoa học máy tính trong trường học [12] Raspberry Pi (RPi) được sáng lập bởi EbenUpton (Hình 10) - là giám đốc điều hành của Raspberry Pi Foundation, là người chịutrách nhiệm về toàn bộ phần mềm và kiến trúc phần cứng của RPi Vào năm 2008, EbenUpton vào làm việc tại Broadcom với vai trò thiết kế chip Công việc này giúp ông cónhiều điều kiện tốt hơn để phát triển Raspberry Pi Ông đã sử dụng các linh kiện và chipđiện tử có hiệu năng cao (nhưng giá thành rẻ gấp nhiều lần ngoài thị trường) ở chính công

ty ông làm việc để hoàn thiện sản phẩm của mình Ông cùng các cộng tác của mình cũngchọn Linux sẽ là hệ điều hành cho Raspberry Pi bởi đặc điểm đòi hỏi cấu hình PC thấp,

“nguồn mở” và quan trọng nhất là nó có “tính lập trình” cao hơn so với Windows Vớinhững nỗ lực của Eben Upton và đồng nghiệp, đến năm 2011, Raspberry Pi Model B,phiên bản hoàn thiện của Raspberry Pi, đã chính thức được tung ra thị trường

Trang 21

Hình 10: Eben Upton

Tính đến thời điểm này, trên thị trường đã có 4 Model RPi, mới nhất là Model RPiB+ được Raspberry Pi Foundation công bố vào ngày 14/7/2014 vừa qua với rất nhiều cảitiến về phần cứng Model B+ chính là phiên bản nâng cấp của Model B trước kia với việctăng thêm 2 cổng USB (tổng thành 4 cổng), số chân GPIO là 40 thay vì 26, tích hợpcổng cổng RCA vào cổng Audio 3.5 đồng thời giảm điện năng tiêu thụ

Hình 11: Hai Model B và B+

(Nguồn: [11])

Chính những cải tiến về cấu hình, đặc biệt là việc nâng cấp cổng USB từ 2 lên 4,chúng tôi đã chọn RPi Model B+ để hoàn thiện đề tài và hướng đến tự động hóa thiết bị.Hiện tại, thiết bị vẫn phải hoạt động phụ thuộc vào laptop, nhưng vì laptop quá to và cồngkềnh nên chúng tôi cần dùng đến máy tính mini RPi, (tuy nhỏ nhưng lại có cấu hình khámạnh không thua gì một laptop) làm trung tâm xử lí dữ liệu và thiết bị sẽ không còn phụthuộc vào laptop.Cấu hình của RPi Model B+ như sau [11]:

 Chip: Broadcom BCM2835 SoC

 Core architecture: ARM11

 CPU: 700 MHz ARM1176JZFS

Trang 22

 GPU: Dual Core VideoCore IV® Multimedia Co-Processor Hỗ trợ Open

GL ES 2.0, tăng tốc phần cứng OpenVG, và bộ giải mã

 Camera: Connector 15-pin MIPI Camera Serial Interface (CSI-2)

 Display: Connector Display Serial Interface (DSI)

 Memory Card Slot: MicroSD

Trang 23

Hình 12: Raspberry Pi B+

(Người chụp: Hồng Hạnh)

II Mục đích nghiên cứu

- Viết được chương trình nhận diện trạng thái nhắm – mở của mắt

- Thiết bị hoạt động độc lập, ổn định, độ chính xác cao

- Giá thành phù hợp với người dân lao động phổ thông

Trang 24

Phần 4: PHƯƠNG PHÁP NGHIÊN CỨU

I Kế hoạch nghiên cứu

- Lựa chọn ngôn ngữ cho phù hợp với dự án

- Tìm hiểu về cấu tạo mắt, về cơ sở lý thuyết để phát hiện hiện tượng ngủ gật thông quatrạng thái của mắt

- Tìm hiểu về các thuật toán xác định điểm ảnh, cũng như các không gian màu

- Sau khi tìm hiểu, viết đoạn mã để nhận diện hai trạng thái nhắm và mở mắt

- Tìm hiểu về các loại camera mini và tích hợp lên mắt kính

- Tìm hiểu Pygame Modules và tiến hành viết đoạn code play sound

- Tìm hiểu về Raspberry Pi và hướng đến tự động hóa thiết bị

II Chi tiết về quá trình nghiên cứu

1 Ngôn ngữ lập trình

Qua quá trình nghiên cứu, chúng tôi đã lựa chọn Python làm ngôn ngữ lập trình đểphát triển phần mềm nhận diện trạng thái nhắm – mở của mắt Chúng tôi chọn Python màkhông phải C++, Pascal hay nhưng ngôn ngữ lập trình khác vì những lí do sau:

Pascal: Đây có lẽ là một ngôn ngữ lập trình rất đỗi quen thuộc, và được

chọn làm ngôn ngữ lập trình để giảng dạy trong trường học Nói đếnPascal, chúng ta không thể chối bỏ rằng đây là một ngôn ngữ rất dễ hiểu,dễ đọc và dễ sử dụng Tuy nhiên, điều đầu tiên mà chúng tôi cần ở ngônngữ lập trình là phải hỗ trợ thư viện OpenCV ( vì OpenCV là một thư việnđồ họa rất phổ biến, chuyên xử lí hình ảnh và những vấn đề liên quan đếnthị giác máy tính), nhưng Pascal lại không đáp ứng được chúng tôi

Trang 25

C++: Đây là một ngôn ngữ lập trình mạnh mẽ, là một dạng ngôn ngữ đa

mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục, dữ liệu trừu trượng,lập trình hướng đối tượng, và lập trình đa hình Sau quá trình nghiên cứu

và học về C++, chúng tôi lại gặp một vài khó khăn trong khi lập trình: cáccâu lệnh trong C++ khó sử dụng, thường không sử dụng từ khóa TiếngAnh, mà đó là từ khóa riêng, có nhiều kí hiệu và cú pháp khá rắc rối

Python: Như đã giới thiệu ở trên, Python là một ngôn ngữ dễ học cho bất

kì ai muốn bắt đầu lập trình với mã nguồn dễ đọc, bố cục trực quan, dễhiểu, và đặc biệt là tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kíhiệu và cấu trúc cú pháp so với các ngôn ngữ khác Ngoài ra, tốc độ thựcthi của Python cực kỳ nhanh và Python có thể tạo ra những chương trìnhchạy từ những script rất nhỏ cho đến những chương trình lớn vô cùngmạnh mẽ

Đó là lí do chúng tôi chọn Python làm ngôn ngữ lập trình để phát triển chươngtrình

2 Tìm hiểu và chọn lọc câu lệnh của OpenCV phù hợp với yêu cầu dự án

a Một vài câu lệnh trong OpenCV

 Boundaries: xác định không gian màu BGR, với 2 giá trị: lower và upper

 np.array: chuyển đổi các lower limits và upper limits được quy định bởi boundaries

 cv2.inRange: phát hiện màu sắc đã được quy định bởi boundaries trong hình ảnh, đồng thời quy định độ phân giải của hình ảnh đó

 cv2.bitwise_and: hiển thị các điểm ảnh trắng được quy định trong cv2.inRange

 cv2.countNonZero: tính diện tích điểm ảnh trắng

Trang 26

b Không gian màu

Chương trình chúng tôi báo hiệu hiện tượng buồn ngủ dựa vào sự thay đổi màusắc, tức dựa vào hai gam màu trắng – đen, do đó khi nghiên cứu về OpenCV, điều đầutiên chúng tôi quan tâm chính là không gian màu

Không gian màu là một mô hình toán học dùng để mô tả các màu sắc trong thực tếđược biểu diễn dưới dạng số học Trên thực tế có rất nhiều không gian màu khác nhau,tuy nhiên có 3 không gian màu cơ bản: BGR, HSV và CMYK:

trong đồ họa máy tính và nhiều thiết bị kĩ thuật số khác Ý tưởng chính củakhông gian màu này là sự kết hợp của 3 màu sắc cơ bản: màu đỏ (R, Red),xanh lơ (G, Green) và xanh lam (B, Blue) để mô tả tất cả các màu sắc khác

Ví dụ: màu đen là sự kết hợp của các kênh màu (R, G, B)với giá trị tươngứng đã được mặc định (0, 0, 0) màu trắng có giá trị (255,255, 255), màu vàng

có giá trị (255, 255, 0), màu tím đậm có giá trị (64, 0, 128)…

Hình 13: Không gian màu BGR

Trang 27

Không gian màu CMYK: là không gian màu được sử dụng phổ

biến trong ngành công nghiệp in ấn.Ý tưởng cơ bản của hệ không gian này là

dùng 4 màu sắc cơ bản để phục vụ cho việc pha trộn mực in: C = Cyan: xanh

lam, M = Magenta: hồng sẫm, Y = Yellow: vàng và K = Black: đen Nguyên

lý này khác với nguyên lý làm việc của hệ màu CMYK khác với BGR: hệ

BGR là sự kết hợp của các thành phần màu, còn hệ CMYK là sự loại bỏ lẫn

nhau của các thành phần màu

Hình 14: Không gian màu CMYK

việc chỉnh sửa ảnh, phân tích ảnh và một phần của lĩnh vực thị giác máy tính

Hệ không gian này dựa vào 3 thông số sau để mô tả màu sắc H = Hue: màu

sắc, S = Saturation: độ đậm đặc, sự bảo hòa, V = value: giá trị cường độ

sáng

Trang 28

Hình 15: Không gian màu HSV

Hình 16: Hình tròn biểu diễn màu sắc (HUE)

c Pygame Modules

Pygame là một tập hợp của các mô-đun Python được thiết kế để viết các trò chơi

video Chúng tôi dùng pygame để play sound báo hiệu nguy hiểm Một số câu lệnh dùng

trong đoạn mã:

 pygame.init(): khởi tạo các gói trong pygame

 pygame.font: tải và vẽ font chữ

 pygame.mixer: tải và play sound

 pygame.font.Font: tạo ra đối tượng font mới với kích thước nhất định

 font.render: hiển thị chữ

 text.get_rect: vẽ khung hiển thị

Trang 29

 pygame.mixer.Sound: play sound

3 Nghiên cứu về camera

Phải chọn những camera có sẵn đèn Led để đảm bảo camera ghi nhận hình tốt

trong môi trường thiếu ánh sáng Hiện tại dùng webcam Colorvis CVC 2005:

Trang 30

Do đèn Led dùng cho camera Colorvis sẽ gây ảnh hưởng đến mắt cho đối tượng khi

sử dụng trong thời gian dài Vì thế, chúng tôi hướng đến dùng đèn hồng ngoại (Hình 18)

thay cho đèn có sẵn trên camera hoặc sử dụng camera hồng ngoại (Hình 19)

Hình 18: Đèn hồng ngoại

Hình 19: Camera hồng ngoại North

Trang 31

4 Cài đặt và khởi động Raspberry Pi

 Cài đặt hệ điều hành Raspian cho Raspberry Pi:

- Raspbian là một hệ điều hành miễn phí dựa trên nền tảng Debian, được tối ưu hóa

cho phần cứng của RPi Wheezy được cài sẵn LXDE, Midori, một vài chương trình dành

cho lập trình viên và nhà phát triển Raspberry Pi có thể cài đặt bởi nhiều hệ điều hành

như: Raspbian Wheezy, Pidora, Openelec, Raspbmc, Risc Os… Tuy nhiên, chúng tôi

chọn Raspbian Wheezy làm hệ điều hành cho RPi, vì nó thích hợp cho người mới học lập

trình và nghiên cứ về RPi

- Cách cài đặt:

 Để cài đặt hệ điều hành cho Raspberry Pi, cần phải có thẻ nhớ SD card từ 8GB

trở lên

 Tải SD Formatter 4.0 để format thẻ nhớ ở trang web [9]

 Tải hệ điều hành từ trang chủ chính thức của RPi [10] Bắt buộc mọi hệ điều

hành của RPi phải được tải ở trang web [10], vì nếu tải ở những trang web khác

RPi sẽ không nhận

 Sau khi tải hệ điều hành về máy, giải nén file và copy tất cả vào thẻ nhớ

 Cắm bàn phím, chuột (nếu không phải là bàn phím và chuột USB thì có thể

dùng dây USB to PS/2), màn hình (dùng dây HDMI to VGA để hỗ trợ và chúng

tôi dùng màn hình Samsung)

 Cắm nguồn vào RPi, nên chọn dây nguồn output 5V-1A

 Sauk hi RPi đọc xong thẻ nhớ, sẽ có một cửa sổ xuất hiện với các danh sách hệ

điều hành, chọn 1 hệ điều hành muốn cài Ở đây chúng tôi chọn Raspbian

Trang 32

 Chờ RPi cài đặt – quá trình có thể mất hơn 20 phút, tùy theo tốc độ của thẻ nhớ

Hình 20: Màn hình Raspi – config để thiết lập cho RPi trong lần khởi động đầu tiên.

 Sau khi cài đặt xong hệ điều hành Raspbian từ thẻ nhớ, chờ RPi khởi động lại và

bắt đầu thực hiện cài đặt một vài cấu hình cho RPi (Hình 20):

màn hình có độ phân giải khác nhau thì Raspberry sẽ tự động căn chỉnh cho phù hợp

có mật khẩu là raspberry, với tên đăng nhập là: pi

Trang 33

Memory _split: bộ nhớ Raspberry Pi được chia sẻ cho CPU và

GPU Một số chương trình đòi hỏi bộ nhớ cho GPU cao hơn, ví dụ

như Game, tuỳ chọn này giúp phân chia lại bộ nhớ cho CPU và

GPU

qua SSH

những lần khởi động sau đó

này, kit cần có kết nối Internet

Hình 21: Hệ điều hành Raspbian được cài đặt thành công trên RPi

Trang 34

 Tìm hiểu về cách cài đặt OpenCV cho Python trên nền Raspbian Các câu lệnh để

cài đặt:

 sudo apt-get update

 sudo apt-get upgrade

 sudo apt-get -y install build-essential cmake cmake-curses-gui pkg-config

libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg

zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools

libeigen3-dev

 sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs

ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev

libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev

libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev swig libv4l-0

libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev

libgtk2.0-dev

 git clone https://github.com/Itseez/opencv.git

 sudo apt-get install python-opencv

Hình 22: OpenCV được cài đặt thành công trên nền Raspbian

Trang 35

 Sau khi cài đặt xong hệ điều hành cũng như OpenCV cho RPi, chúng tôi sẽ thử

nghiệm đoạn code trên RPi, từ đó sẽ tiếp tục nghiên cứu để cho RPi tự động chạy

đoạn code khi có đủ nguồn điện cung cấp

III Tiến hành thử nghiệm

Thử nghiệm 1: Thử nghiệm đoạn code trong nhiều môi trường khác nhau:

 Trong môi trường tiêu chuẩn ( trong phòng): camera không cần phải mở đèn LED,

đoạn code thực thi ổn định, cho kết quả khả quan

 Trong môi trường thiếu ánh sáng (vào ban đêm): đoạn code hoàn toàn không thực

thi được, do vào ban đêm không đủ ánh sáng cho camera ghi nhận hình ảnh, dẫn

đến viêc hình ảnh nhận được rất mờ và ảnh hưởng đến quá trình chuyển đổi không

gian màu (Hình 23)

Hình 23: Hình ảnh camera nhận được vào ban đêm

Ngày đăng: 07/01/2021, 19:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w