NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON (có code)...... NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON (có code)...... NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON (có code)...... NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON (có code)...... NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON (có code)......
ĐỒ ÁN TỐT NGHIỆP NHẬN DIỆN TRẠNG THÁI MẮT SỬ DỤNG NGÔN NGỮ PYTHON MỤC LỤC DANH MỤC CÁC HÌNH VẼ IV DANH MỤC CÁC BẢNG BIỂU .VI DANH MỤC CÁC TỪ VIẾT TẮT VII MỞ ĐẦU VIII CHƯƠNG CƠ SỞ DỮ LIỆU 1.1 KHÁI QUÁT VỀ NHẬN DIỆN KHUÔN MẶT VÀ MẮT NGƯỜI 1.2 CÁC THUẬT TỐN MƠ TẢ ĐIỂM ĐẶC BIỆT 1.2.1 Harris corner 1.2.2 Scale-Invariant Feature Transform 1.2.3 Histograms of Oriented Gradients 1.2.4 Speeded Up Robust Features 1.2.5 Thuật toán Haar-like feature CHƯƠNG GIỚI THIỆU NGƠN NGỮ LẬP TRÌNH PYTHON 11 2.1 GIỚI THIỆU PYTHON .11 2.2 LỊCH SỬ PHÁT TRIỂN CỦA PYTHON 11 2.3 ĐẶC ĐIỂM CỦA NGÔN NGỮ PYTHON 12 2.3.1 Dễ học, dễ đọc 12 2.3.2 Khối lệnh 12 2.3.3 Đa 12 2.3.4 Multiple paradigms 12 2.3.5 Trình thơng dịch 13 2.4 XẾP HẠNG NGÔN NGỮ 13 2.5 ỨNG DỤNG CỦA NGÔN NGỮ PYTHON .14 CHƯƠNG DỮ LIỆU HUẤN LUYỆN 15 3.1 BỘ PHÂN LOẠI ADABOOST .15 3.2 CASCADE OF CLASSIFIERS 15 3.3 TIẾN HÀNH HUẤN LUYỆN .16 CHƯƠNG HỆ THỐNG NHẬN DIỆN TRẠNG THÁI MẮT 23 4.1 XÂY DỰNG HỆ THỐNG 23 4.2 XÂY DỰNG CHƯƠNG TRÌNH 23 4.2.1 Xử lý đầu video vào 25 4.2.2 Phát khuôn mặt 25 4.2.3 Nhận dạng đôi mắt 26 4.2.4 Ghi nhận trạng thái mắt 26 CHƯƠNG KẾT QUẢ MÔ PHỎNG 27 5.1 MÔI TRƯỜNG TRIỂN KHAI .27 5.2 KẾT QUẢ MÔ PHỎNG .27 CHƯƠNG NHẬN XÉT 29 6.1 NHẬN XÉT 29 6.2 HƯỚNG PHÁT TRIỂN .29 TÀI LIỆU THAM KHẢO 30 PHỤ LỤC 31 DANH MỤC CÁC HÌNH VẼ HÌNH 1-1: ĐÁP ỨNG GÓC [12] .3 HÌNH 1-2: CHIA KHỐI TRÍCH ĐẶC TRƯNG HOG [5] HÌNH 1-3: ĐẶC TRƯNG HAAR-LIKE [6] HÌNH 1-4: ĐẶC TRƯNG CẠNH [7] HÌNH 1-5: ĐẶC TRƯNG ĐƯỜNG [8] .8 HÌNH 1-6: ĐẶC TRƯNG XUNG QUANH TÂM [9] .8 HÌNH 1-7: ẢNH I(X, Y) [10] HÌNH 1-8 : VÍ DỤ TÍNH ĐẶC TRƯNG HAAR-LIKE [11] HÌNH 2-1 : BIỂU TƯỢNG CỦA NGƠN NGỮ LẬP TRÌNH PYTHON [1] .11 HÌNH 2-2: BẢNG XẾP HẠNG NGƠN NGỮ LẬP TRÌNH PHỔ BIẾN [2] .13 HÌNH 2-3: THỐNG KÊ NGƠN NGỮ GIẢNG DẠY [3] .14 HÌNH 3-1: MỘT SỐ HÌNH ẢNH POSITIVE IMAGES .16 HÌNH 3-2: MỘT SỐ HÌNH ẢNH NEGATIVE IMAGES 17 HÌNH 3-3: QUÁ TRÌNH TẠO DỮ LIỆU HO NEGATIVE IMAGES 17 HÌNH 3-4: DỮ LIỆU FILE BG.TXT 18 HÌNH 3-5: QUÁ TRÌNH TẠO DỮ LIỆU CHO POSITIVE IMAGES .18 HÌNH 3-6: DỮ LIỆU FILE INFO.DAT 19 HÌNH 3-7: QUÁ TRÌNH THU THẬP MẪU SO SÁNH 19 HÌNH 3-8: CÁC MẪU ĐÃ ĐƯỢC TẠO XONG 20 HÌNH 3-9: QUÁ TRÌNH HUẤN LUYỆN 20 HÌNH 3-10: LỚP ĐẦU TIÊN ĐƯỢC HUẤN LUYỆN XONG 21 HÌNH 3-11: PHÂN LỚP THỨ ĐƯỢC HUẤN LUYỆN XONG 22 HÌNH 3-12: FILE ĐANG ĐƯỢC CHUYỂN 22 HÌNH 4-1: MƠ HÌNH CỦA HỆ THỐNG NHẬN DIỆN TRẠNG THÁI MẮT .23 HÌNH 4-2: SƠ ĐỒ GIẢI THUẬT 24 HÌNH 4-3: CHUYỂN HÌNH ẢNH ĐẦU VÀO THÀNH ẢNH XÁM 25 HÌNH 4-1: TRẠNG THÁI MỞ MẮT .27 HÌNH 4-2: TRẠNG THÁI NHẮM MẮT .28 HÌNH 4-3: TRẠNG THÁI CHỚP MẮT 28 DANH MỤC CÁC BẢNG BIỂU BẢNG : SO SÁNH CÁC THUẬT TỐN MƠ TẢ ĐIỂM ĐẶC BIỆT 10 DANH MỤC CÁC TỪ VIẾT TẮT COM Communication Dog Deffirence of Gaussisan HOG Histograms of Oriented Gradients SURF Speeded Up Robust Features SIFT Scale-Invariant Feature Transform MỞ ĐẦU Trong năm gần hệ thống nhận dạng ngày phát triển Một ứng dụng thực tế nhận dạng trạng thái mắt áp dụng để để kiểm tra tài xế ngủ gật đưa cảnh báo Theo dõi chuyển động mắt để điều khiển thiết bị công nghệ, xe lăn cho người tàn tật Ngủ gật nguyên nhân dẫn đến vụ tai nạn giao thông Báo cáo "Rối loạn giấc ngủ tai nạn giao thông" hội nghị khoa học thường niên Hội Hơ hấp Việt Nam Chương trình đào tạo y khoa liên tục 2015, giáo sư Telfilo Lee Chiong (Trung tâm Nationnal Jewish Health, Mỹ) cho biết thiếu ngủ nguyên nhân gây tai nạn giao thơng 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 giấc ngủ tài xế 19 quốc gia châu Âu cho thấy tỷ lệ buồn ngủ lái xe cao, trung bình 17% Trong 10,8% người buồn ngủ lái xe lần tháng, 7% gây tai nạn giao thông buồn ngủ, 18% xảy tai nạn buồn ngủ [4] Do đó, cảnh báo tài xế có tượng buồn ngủ vấn đề thiết thực góp phần làm giảm tỷ lệ tai nạn giao thơng ngày gia tăng Từ vấn đề nêu chọn đề tài “nhận diện trạng thái mắt” dùng ngôn ngữ Python mô phỏng, thực nhận dạng trạng thái mắt phân loại AdaBoost rút trích đặc trưng Haar like nhận hình ảnh thu từ camera Nội dung đề tài chia thành chương: Chương 1: Cơ sở liệu Chương 2: Giới thiệu ngôn ngữ Python Chương 3: Dữ liệu huấn luyện Chương 4: Hệ thống nhận diện trạng thái mắt Chương 5: Kết mô Chương 6: Nhận xét Trang 1/34 CHƯƠNG CƠ SỞ DỮ LIỆU 1.1 Khái quát nhận diện khuôn mặt mắt người Phát khuôn mặt kỹ thuật máy tính để xác định vị trí mặt người ảnh Việc phát mắt thực khuôn mặt phát Có bốn hướng tiếp cận để phát khuôn mặt mắt người: - Hướng tiếp cận dựa tri thức: dựa vào thuật toán, mã hoá đặc trưng quan hệ đặc trưng khuôn mặt mắt thành luật - Hướng tiếp cận dựa đặc trưng không thay đổi: xây dựng thuật tốn để tìm đặc trưng khuôn mặt mắt, đặc trưng không thay đổi tư khuôn mặt hay vị trí camera thay đổi - Hướng tiếp cận dựa so sánh khớp mẫu: dùng mẫu chuẩn khuôn mặt mắt để mô tả Mẫu sử dụng để phát khuôn mặt mắt cách qt qua ảnh tính tốnh giá trị tương đồng cho vị trí Việc xuất khn mặt vị trí ảnh phụ thuộc vào giá trị tương đồng điểm so với mẫu chuẩn - Hướng tiếp cận dựa diện mạo: trái với hướng tiếp cận dựa khớp mẫu, mơ hình học từ tập ảnh huấn luyện mà thể tính chất tiêu biểu xuất mặt người mắt ảnh Sau hệ thống xác định mặt người mắt Phương pháp gọi phương pháp học máy Việc tiếp cận theo hướng cần thuật tốn riêng biệt để mơ tả điểm đặc biệt 1.2 Các thuật tốn mơ tả điểm đặc biệt 1.1.1 Harris corner Harris corner Chris Harris Mike Stephens giới thiệu vào năm 1998 Harris corner thường sử dụng thuật tốn tầm nhìn máy tính để trích xuất góc hình ảnh Một góc giải thích đường giao hai cạnh, cạnh thay đổi đột ngột độ sáng hình ảnh Các góc tính quan trọng hình ảnh, thường gọi điểm quan tâm không thay đổi Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 2/34 dịch huyển ánh sáng Harris corner thường sử dụng việc kết hợp âm lấy sở liệu hình ảnh Mặc dù tồn hạn chế, máy dò góc Harris kỹ thuật quan trọng cho nhiều ứng dụng tầm nhìn máy tính Thơng thường, thuật tốn phát góc Harris chia thành năm bước Xám hố hình ảnh: bước chuyển hình ảnh thành ảnh xám để tăng tốc độ xử lý Tính tốn khơng gian: Giả sử ta có ảnh xám I, với điểm (x, y) độ dịch chuyển (u, v) ta tính tốn thay đổi trung bình cường độ xám cửa sổ dịch chuyền từ (x, y) đến (x + u, y + v) sau: [1.1] Với E(u, v) thay đổi cường độ xám (u, v) W(x, y) cửa sổ (x, y) I(x, y) I(x + u, y +v) giá trị cường độ xám pixel vị trí I(x,y) I(x + u, y +v) Giá trị I(x + u, y +v) triển khai theo cơng thức Taylor sau : I(x + u, y +v) I(x, y) + Ix(x, y)u + Iy(x, y)v [1.2] Với Ix, Iy đạo hàm theo thành phần x, y Vậy Thiết lập cáu trúc tensor M: Nếu độ dịch chuyển (u, v) nhỏ thì: Với Tính tốn phản hồi Harris: Trong bước này, tính giá trị tự trị nhỏ cho việc sử dụng cấu trúc với phương trình xấp xỉ sau [1.3] Đo đáp ứng góc : R = det(M) – k(traceM)2 = λ1 λ2 - k (λ1+λ2)2 Ở k số xác định thực nghiệm: k = 0.04 :0.06 Nhận diện trạng thái mắt sử dụng ngôn ngữ Python [1.4] Trang 19/34 Hình 3-8: Các mẫu tạo xong Bước 5: chạy lệnh huấn luyện đặc trưng Haar like Hình 3-9: Quá trình huấn luyện Nhận diện trạng thái mắt sử dụng ngơn ngữ Python Trang 20/34 Hình 3-10: Lớp huấn luyện xong Nhận diện trạng thái mắt sử dụng ngơn ngữ Python Trang 21/34 Hình 3-11: Phân lớp thứ huấn luyện xong Bước 6: chuyển lớp liệu huấn luyện thành file haarcascade_eye.xml.xml Hình 3-12: File chuyển Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 22/34 CHƯƠNG HỆ THỐNG NHẬN DIỆN TRẠNG THÁI MẮT 1.11 Xây dựng hệ thống Mơ hình đề xuất hệ thống sau: Hình 4-1: Mơ hình hệ thống nhận diện trạng thái mắt Có thể thấy hệ thống bao gồm khối chức chính: Camera, phân chia thành khung hình, phát khn mặt , phát mắt, ghi nhận trạng thái mắt open/close/blink 1.12 Xây dựng chương trình Sơ đồ thuật tốn hệ thống đề xuất trình bày sau: Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 23/34 Hình 4-2: Sơ đồ giải thuật 1.1.11 Xử lý đầu video vào Để rút trích đặc trưng Haar-like ảnh đầu vào đòi hỏi phải dạng mức xám Do ảnh màu đầu vào chuyển dạng mức xám Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 24/34 Hình 4-3: Chuyển hình ảnh đầu vào thành ảnh xám 1.1.12 Phát khuôn mặt Khởi tạo dò tìm Đầu tiên cần phải tải phân loại cần thiết Ở cần phân loại để huấn luyện cho khuôn mặt đôi mắt sau: - haarcascade_frontalface_alt_tree.xml: Bộ liệu huấn luyện cho trình xử lý mặt trước - haarcascade_eye.xml: Bộ liệu huấn luyện cho q trình xử lý đơi mắt Thực dò tìm khn mặt Bước dò tìm khn mặt ảnh Nếu đối tượng tìm thấy, trả vị trí khn mặt phát theo cấu trúc rectangle(x,y,w,h) Khi nhận vị trí đó, tạo ROI cho khuôn mặt xử lý nhận dạng đôi mắt ROI Phương pháp nhận diện khuôn mặt dựa vào đặc trưng Haar-like kết hợp Adaboost cài sẵn thư viện Opencv Để sử dụng phương pháp OpenCV, chương trình sử dụng hàm detectMultiScale Hàm detectMultiScale sau tìm kiếm xong trả giá trị gồm tọa độ gốc khung chứa khuôn mặt (x, y) chiều dài, rộng khung (w, h) Các giá trị nằm mảng faces Cấu trúc for….in duyệt qua giá trị này, với giá trị ta dùng hàm rectangle để vẽ hình chữ nhật lên ảnh ban đầu với tọa độ điểm trái phải dưới: (x,y), (x + w, y + h) Như xác định xong khn mặt có ảnh Xem kết dò tìm Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 25/34 Để xem kết dò tìm khn mặt gọi hàm hiển thị ảnh vẽ xong lên cửa sổ với tên đặt trước cửa sổ ảnh muốn xem lệnh cv2.imshow() 1.1.13 Nhận dạng đơi mắt Việc tìm kiếm mắt thực khuôn mặt tìm thấy khơng phải qt tồn ảnh ban đầu tìm kiếm mặt Hàm detectMultiScale sau tìm kiếm trả giá trị gồm toạ độ gốc khung chứa mắt người (ex, ey) chiều dài, rộng khung (ew, eh) Các giá trị nằm mảng eyes Cấu trúc for…in duyệt qua giá trị này, với giá trị ta dùng hàm rectangle để vẽ hình chữ nhật lên ảnh ban đầu img với tọa độ điểm trái phải dưới: (ex, ey), ( ex + ew, ey + eh) Như phát mắt ảnh 1.1.14 Ghi nhận trạng thái mắt Vì huấn luyện đầu vào Haar Cascade cho hàm phát trạng thái mở mắt nên nhận dạng mắt người xác định ln mắt trạng thái mở, khởi tạo thời gian T = Khi đôi mắt thay đổi từ trạng thái mở mắt sang nhắm mắt, T thay đổi T = T+1 Nếu T < xác định nháy mắt Nếu T > xác định nhắm mắt Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 26/34 CHƯƠNG KẾT QUẢ MÔ PHỎNG 1.13 Mơi trường triển khai Q trình mơ thực máy tính xách tay sử dụng hệ điều hành Window có cấu hình tương đương máy tính phổ thơng sử dụng camera trực tiếp máy để thu video đầu vào Ngơn ngữ sử dụng chương trình thực nghiệm ngơn ngữ lập trình Python Bên cạnh đó, chương trình thực nghiệm có sử dụng thư viện mã nguồn mở OpenCV 2.4.10 Dữ liệu huấn luyện Bao gồm huấn luyện HaarCascade hỗ trợ cài thư viện mở OpenCV haarcascade_frontalface_alt_tree.xml haarcascade_eye.xml 1.14 Kết mơ Hình 4-1: Trạng thái mở mắt Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 27/34 Hình 4-2: Trạng thái nhắm mắt Hình 4-3: Trạng thái chớp mắt Q trình mơ thực điều kiện ánh sáng bình thường Thu trạng thái mở mắt, nhắm mắt nháy mắt Tuy nhiên hệ thống có tình trạng nhạy, xác định sai mắt thay đổi sánh sáng Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 28/34 CHƯƠNG NHẬN XÉT 1.15 Nhận xét Ưu điểm: - Hệ thống nhận dạng trạng thái mở mắt, nhắm mắt nháy mắt thời gian ngắn - Hệ thống hoạt động tốt ánh sáng trung bình ánh sáng vừa phải Nhược điểm: - Không thể xác định mắt khuôn mặt nghiêng, quay trái, quay phải góc lớn 30o, cúi xuống góc lớn 10 ngước lên góc lớn 200, đeo kính bị che khuất vật thể khác - Nếu ảnh có nhiều đối tượng nhận dạng đối tượng đối tượng phát 1.16 - Khoảng cách từ camera đến đối tượng 0.5m Hướng phát triển Tìm kiếm giải pháp tối ưu để nâng cao khả nhận dạng xác hệ thống cải thiện thời gian xử lý Tạo thêm huấn luyện cho trường hợp đeo kính Ứng dụng điện thoại thơng minh Ứng dụng trực tiếp cho phát tài xế ngủ gật lái xe Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 29/34 TÀI LIỆU THAM KHẢO Tiếng Việt: [1] Giới thiệu Python, http://o7planning.org [2] Giới thiệu Python, http://o7planning.org [3] Giới thiệu Python, http://o7planning.org [4] Trần Ngoan, Giấc ngủ có liên quan đến tai nạn giao thông nào, https://suckhoe.vnexpress.net [5] Trương Quốc Bảo, Phát nhận dạng biển báo giao thông đường sử dụng đặc trưng HOG mạng nơron nhân tạo, tạp chí khoa học trưởng đại học cần thơ, Công nghệ Thông tin (2015): 47-54 Tiếng Anh: [6] Adaboost - Haar Features - Face detection (2010), http://www.ieev.org [7] Face Detection using Haar Cascades, https://docs.opencv.org [8] Haar Feature-based Cascade Classifier for Object Detection Cascade Classifier for Object Detection, https://docs.opencv.org [9] Haar Feature-based https://docs.opencv.org [10] Paul Viola and Michael Jones, Rapid Object Detection using a Boosted Cascade of Simple Features, accepted conference on computer vision and pattern recognition 2001 [11] Paul Viola and Michael Jones, Rapid Object Detection using a Boosted Cascade of Simple Features, accepted conference on computer vision and pattern recognition 2001 [12] Robert Collins, Harris Corner Detector Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 30/34 PHỤ LỤC Code chương trình nhận diện trạng thái mắt: import cv2 from functools import wraps import pygame import time face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') cap = cv2.VideoCapture(0) def closed(): print "Eye Closed" cv2.putText(img, "EYES CLOSED ", (450, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) time.sleep(0.3) def blink(): print "Eye blink" cv2.putText(img, "EYES BLINK ", (450, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 31/34 time.sleep(0.3) def openeye(): print "Eye is Open" cv2.putText(img, "EYES OPEN ", (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) def sound(): pygame.mixer.init() pygame.mixer.music.load("b.wav") pygame.mixer.music.play() while (1): ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) if len(faces)==0: print 'no face' cv2.putText(img, "NO FACE ", (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 32/34 roi_gray = gray[y:y + h, x:x + w] roi_color = img[y:y + h, x:x + w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) if (len(eyes)>0): cv2.putText(img, ""+str(len(eyes)), (10, 40), ""+str(len(eyes)), (10, 40), cv2.FONT_HERSHEY_PLAIN, 2, 255) openeye() Time = else : cv2.putText(img, cv2.FONT_HERSHEY_PLAIN, 2, 255) Time = Time + if Time < 3: print (len(eyes)) print Time blink() sound() else: print Time Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 33/34 print (len(eyes)) cv2.putText(img, ""+str(len(eyes)), (10, 40), cv2.FONT_HERSHEY_PLAIN, 2, 255) closed() sound() cv2.imshow('img', img) cv2.imshow('gray', gray) k = cv2.waitKey(30) & 0xff cap.release() cv2.destroyAllWindows() Nhận diện trạng thái mắt sử dụng ngôn ngữ Python ... đa ph ần trường sử dụng ngôn ngữ Python để giảng dạy: Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 13/34 Hình 2-3: Thống kê ngơn ngữ giảng dạy [3] 1.7 Ứng dụng ngôn ngữ Python Lập trình... NGƠN NGỮ LẬP TRÌNH PYTHON 1.3 Giới thiệu Python Nhận diện trạng thái mắt sử dụng ngôn ngữ Python Trang 10/34 Python ngôn ngữ lập trình mức cao, đa mục đích sử dụng r ộng rãi Triết lý thiết kế ngôn. .. Hình 3-9: Quá trình huấn luyện Nhận diện trạng thái mắt sử dụng ngơn ngữ Python Trang 20/34 Hình 3-10: Lớp huấn luyện xong Nhận diện trạng thái mắt sử dụng ngơn ngữ Python Trang 21/34 Hình 3-11: