NHIỆM VỤ VÀ NỘI DUNG: Nghiên cứu một số thuật toán sử dụng camera để theo vết, xác định hướng nhìn của mắt.. Hiện thực hệ thống xác định vị trí khuôn mặt, các điểm đặc trưng trên mặ
TỔNG QUAN
Tổng quan về khuôn mặt và mắt người
Như chúng ta đã biết, khuôn mặt bao gồm các phần chính:
Vùng trán, bên dưới là lông mày
Hai mắt, bảo vệ bởi mi mắt và lông mi
Hai lỗ mũi và sống mũi
Miệng gồm môi trên và môi dưới
Cằm nằm bên dưới miệng
Hình 1-1: Khuôn mặt của con người [26]
2.1.2 Đặc tính sinh học của mắt người 2.1.2.1 Cấu tạo
Mắt là cơ quan thị giác, gồm 2 con mắt có kích thước nhỏ Mỗi con mắt là một khối cầu dai có đường kính chừng 2,5 cm Các mô quan trọng của mắt :
Giác mạc là một cấu trúc trong suốt nằm trước mắt, đóng vai trò như một tấm chắn dày và dai, bảo vệ mắt khỏi các tác nhân bên ngoài Giác mạc có chức năng lọc và cho phép hình ảnh truyền vào bên trong mắt Ngoài ra, giác mạc còn hoạt động như một thấu kính, có tác dụng hội tụ ánh sáng từ các vật thể, giúp hình ảnh rõ nét trên võng mạc.
Mống mắt: Mống mắt hoạt động như một màng chắn hoặc một cửa sập tròn có tác dụng điều chỉnh lượng ánh sáng đi vào bên trong mắt Đây là bộ phận tạo ra các màu khác nhau của mắt
Thủy tinh thể: Thủy tinh thể là một cấu trúc protein trong suốt, giúp tập trung hình ảnh và điều tiết mắt tùy thuộc vào khoảng cách xa hay gần của đối tượng nhìn
Thủy tinh dịch: Đây là một khối dịch đặc như lòng trắng trứng và trong suốt, giúp định hình mắt và hỗ trợ các cấu trúc bên trong của mắt
Thể mi: Đây là bó cơ giúp thay đổi hình dạng của thủy tinh thể nhằm tạo ra sự điều tiết phù hợp Đây cũng chính là tuyến tiết ra một loại dịch lỏng, được gọi là thủy dịch Sự cân bằng giữa việc sản sinh và dẫn lưu của thủy dịch tạo áp lực làm mắt lồi ra
Võng mạc: Võng mạc là mô thần kinh lót mặt trong của mắt Nó bao gồm các mô thần kinh cực mỏng được chia thành từng lớp rất tinh vi Phần trung tâm của võng mạc là nơi chúng ta sử dụng để nhìn các vật thể Vị trí này được gọi là hoàng điểm Đây là nơi tập trung nhiều nhất các tế bào nhạy cảm ánh sáng, hay còn gọi là những tế bào thụ quang (thụ thể ánh sáng)
Dây thần kinh thị giác là một cấu trúc quan trọng gồm các sợi thần kinh từ các vùng của võng mạc hội tụ lại thành một bó Bó sợi này xuyên qua một loạt lỗ nhỏ trên vỏ nhãn cầu và đi ra phía sau Như một dây cáp tinh tế, dây thần kinh thị giác mang các xung điện từ võng mạc đến não để não bộ có thể xử lý thông tin thị giác.
Tất cả các mô này có cấu trúc rất tinh vi Ngoại trừ thành ngoài của mắt khá dai, các mô khác đều rất mảnh và cần được bảo vệ Vì vậy, nhãn cầu nằm trong ổ mắt, một hốc xương được bảo vệ tốt trên khuôn mặt với những phần vững chắc và những phần khác có thể bị vỡ Mắt được bảo vệ nhờ vào những cơ chế phản xạ tự nhiên cùng với một hệ thống rửa (bằng nước mắt) và lau sạch bề mặt (thông qua động tác nháy mi mắt)
Hình 1-2: Cấu tạo mắt người [26]
2.1.2.2 Chức năng Chức năng của mắt là để xác định các đối tượng nhìn, tập hợp và hội tụ tia sáng từ đối tượng, sau đó truyền hình ảnh rõ nét đến các tế bào nhạy cảm ánh sáng nằm ở đáy mắt, nơi hình ảnh được thu nhận và bước đầu được xử lý Hình ảnh sau đó được chuyển tải bởi xung điện dọc theo dây thần kinh thị giác (là dây thần kinh đi từ đáy mắt lên não) Các dây thần kinh thị giác liên kết với nhau trong não bộ cho phép chúng ta nhìn thấy được những hình ảnh kết hợp từ cả hai mắt Phần não bộ ghi nhận các tín hiệu thị giác này được gọi là vỏ não thị giác, nằm ở phía sau cùng của não bộ Từ vỏ thị giác, tín hiệu được truyền đến nhiều phần khác của não Các xung điện ban đầu phải trải qua một quá trình xử lý phức tạp để tạo ra những hình ảnh mà chúng ta nhìn thấy.
Phân tích
giác mạc Khi đó, bằng việc phát hiện vị trí tâm của tròng mắt và điểm sáng phản chiếu, tác giả ước lượng hướng nhìn qua vị trí tương đối giữa 2 điểm
J.-G Wang và E Sung [5] tính toán hướng nhìn bằng cách ước lượng hình dạng của đồng tử hoặc tròng mắt được phát hiện thông qua việc khớp hình elip, và sử dụng đồng tử được ước lượng hoặc hình elip của tròng mắt để suy ra hướng nhìn
Sự chính xác của phương pháp này không cao vì bị ảnh hưởng của mi mắt và hướng của khuôn mặt Hơn nữa thuật toán đòi hỏi phải sử dụng hình ảnh từ camera độ phân giải cao Để giải quyết các vấn đề này, các phương pháp phát hiện mới đã được nghiên cứu dựa trên đặc tính của khuôn mặt [6,7] Vị trí của tròng mắt và các góc của mắt được xác định trong ảnh và được sử dụng để ước lượng hướng nhìn Năm 2008, tác giả Hirotake Yamazoe và các cộng sự [7] đã áp dụng xử lý ảnh để xác định hướng nhìn của mắt, chỉ sử dụng 1 camera mà không dùng thêm nguồn sáng và các thiết bị hỗ trợ khác Tác giả đã tiến hành mô hình hóa đầu và mắt của chủ thể dựa vào chuỗi ảnh từ camera, sau đó sử dụng mô hình này để ước lượng hướng nhìn của mắt Độ chính xác đạt được của phương pháp là 6 o với ảnh độ phân giải thấp 320x240
Cùng năm đó, các tác giả Jixu Chen và Qiang Ji [8] đã sử dụng các điểm trên khuôn mặt để ước lượng hướng của đầu Kết hợp với việc mô hình hóa mắt dựa trên đặc tính sinh học của đầu người đã tính toán được hướng nhìn với độ chính xác nhỏ hơn 3 o
Tác giả Matsumoto và các cộng sự [9] đã sử dụng hệ thống 2 camera để ước lượng vị trí 3D của mắt và từ đó tính toán hướng nhìn trong không gian
Về các đề tài nghiên cứu trong nước có các tác giả Nguyễn Hữu Cường, giảng viên đại học Cần Thơ đã chế tạo xe lăn điều khiển bằng mắt, với một webcam được đeo vào đầu để theo dõi chuyển động của mắt Tác giả Huỳnh Thái Hoàng Trường Đại học Bách Khoa TP HCM cũng đã chế tạo xe lăn điều khiển bằng mắt [15] nhưng với phương pháp khác: Camera được lắp đặt phía trước ghế ngồi của xe lăn để thu ảnh mặt người sử dụng, sau đó sử dụng kỹ thuật xử lý ảnh để tách ra vùng chứa ảnh mắt người, và tiếp đó sử dụng mạng thần kinh với ngõ vào là các đặc trưng đặc trưng PCA của ảnh mắt để xác định hướng nhìn của mắt.
Các vấn đề cần tập trung giải quyết của đề tài
Tiến hành calib các thông số cho camera, sau đó xác định các điểm đặc trưng trên khuôn mặt và tính toán hướng của khuôn mặt Từ đó kết hợp với tâm của tròng mắt để suy ra hướng nhìn
Thực hiện việc nhúng toàn bộ hệ thống vào board Mini210s ARM Cortex A8 nhân Linux.
CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP THỰC HIỆN
Xử lý ảnh số
Một ảnh số biểu diễn thông qua hàm hai chiều f(x, y), trong đó (x, y) là tọa độ không gian và giá trị f(x, y) tại mỗi điểm được gọi là cường độ hoặc mức xám tại vị trí đó Khi x, y hữu hạn và rời rạc, ta có ảnh số.
Mỗi điểm ảnh tại tọa độ ( , ) trong một ảnh số với độ xám hoặc độ màu nhất định được gọi là một pixel Đặc tính của hàm ( , ) cho mỗi pixel phụ thuộc vào loại ảnh (ảnh nhị phân, ảnh xám, ảnh màu…) Một ảnh số gồm các pixel được sắp xếp trong một mảng hình chữ nhật (hoặc gọi là bitmap) Mức xám của ảnh L = 2 n
Số bit trên mỗi điểm ảnh (bpp) quyết định số màu hiển thị trong hình ảnh Ví dụ, hình ảnh 1bpp chỉ dùng 1 bit cho mỗi điểm ảnh, cho phép bật hoặc tắt điểm ảnh (hình nhị phân) Thêm mỗi bit sẽ tăng gấp đôi số màu, tức là hình ảnh 2bpp có thể hiển thị 4 màu, hình ảnh 3bpp có thể hiển thị 8 màu,
1bpp = 2 1 = 2 màu (đen hoặc trắng)
Hình 3-1: Biểu diễn cấu trúc ảnh số 2 chiều
Một số kiểu ảnh số thường gặp: Ảnh nhị phân (binary image): Ảnh nhị phân là một kiểu ảnh số mà tại mỗi pixel chỉ có thể nhận một trong hai giá trị là 0 hoặc 1 đặc trưng cho màu trắng (mức 1) hoặc đen (mức 0) Ảnh nhị phân có ưu điểm là đơn giản, kích thước nhỏ gọn, thuận tiện cho việc lưu trữ, xử lý, phân tích ảnh
Hình 3-2: Mô tả ảnh nhị phân Ảnh xám (grayscaledigital image): Ảnh xám là kiểu ảnh 8bit (256 màu), giá trị mỗi pixel được lưu trữ trong 1 byte Ảnh xám là một dạng của ảnh đen trắng với giá trị độ lớn tại mỗi pixel thay đổi từ 0 đến 255 (với ảnh 8bit) tương ứng với mức thay đổi từ màu đen đến màu trắng
Hình 3-3: Thang màu mức xám ảnh 8 bit
Hình 3-4: Biểu diễn ảnh xám [16] Ảnh màu (color image): Để thể hiện hình ảnh một cách trực quan, mỗi pixel phải thể hiện được 3 kênh màu trong không gian màu Các không gian màu thường được sử dụng là RGB (Red, Green and Blue), YCbCr, HSV (Hue, Saturation and Value) Ảnh màu có thể là ảnh 4bit, 8bit, 32bit…Trong đó, không gian màu RGB được sử dụng phổ biến trong xử lý ảnh Không gian RGB là sự kết hợp của 3 màu cơ bản là màu đỏ, xanh lá và xanh dương (Red – Green - Blue)
Mỗi pixel ảnh màu được biểu diễn như sau: = Khi phối hợp 3 màu cơ bản này, ta có được nhiều màu mong muốn Ví dụ với ảnh màu 8 bit: màu đỏ (256,0,0), xanh lá (0,256,0), xanh dương (0,0,256), vàng (256, 256,0), tím (256,0,256), xanh lơ (0, 256, 256), trắng (256, 256, 256)
3.1.1.1 Giới thiệu về xử lý ảnh số Xử lý ảnh số thường được biết đến với tên viết tắt là DIP (Digital Image Proccessing) DIP sử dụng các thuật toán máy tính để phân tích ảnh kỹ thuật số
Dưới đây là sơ đồ cơ bản của quá trình xử lý ảnh:
Hình 3-5: Sơ đồ xử lý ảnh số [17]
Các thiết bị thu nhận ảnh phổ biến là máy ảnh kỹ thuật số, máy quay phim, thiết bị scan, webcam…Nhìn chung các hệ thống thu nhận ảnh thực hiện 2 quá trình là biến đổi năng lượng quang học thành năng lượng điện (cảm biến) và tổng hợp năng lượng điện thành ảnh
Có 2 loại cảm biến hình ảnh sử dụng phổ biến là loại CCD và CMOS.Loại cảm biến CCD có đặc điểm là độ nhạy sáng cao, cho độ phân giải lớn và thể hiện được các dải màu liên tục Loại CMOS thì có độ nhạy sáng thấp hơn nên loại CCD được sử dụng phổ biến cho các loại máy ảnh kỹ thuật số và camera Tuy nhiên, với sự phát triển của khoa học kỹ thuật hiện đại, loại CMOS đang dần chiếm lại ưu thế bởi khả năng tích hợp cao (ADC, cân bằng sáng…) của loại cảm biến này
Gradient là một véctơ có các thành phần biểu thị tốc độ thay đổi giá trị của điểm ảnh
Với , : khoảng dịch chỉnh theo x và y; trong ảnh số = = 1
∆ = ( + 1, ) − ( , ) , ∆ = ( , + 1) − ( , ) Gradient của 1 điểm ảnh với hướng thay đổi về cường độ sáng:
Hướng của gradient được xác định bằng công thức:
∆ Độ lớn của gradient điểm ảnh có thể được xác định bằng công thức:
Gradient được tính thông qua việc trượt ma trận mặt nạ (nxn) lên ảnh được phân tích Mặt nạ này được gọi là mặt nạ cuộn hay kernel
Tính toán gradient trong ảnh là một kỹ thuật quan trọng giúp xác định các cạnh của vật thể, tạo cơ sở cho việc phân đoạn và xử lý hình ảnh để phân tích nội dung.
Làm mượt ảnh và lọc nhiễu
Mặt nạ cuộn trong ảnh:
Xét ảnh = ( , )có kích thước ( )và mặt nạ có kích thước ( )
Giá trị ( , ) được xác định bằng cách trượt mặt nạ qua từng pixel của ảnh tại vị trí ( , ), có công thức tổng quát:
VD: với mặt nạ cuộn có kích thước 3x3
Bộ lọc ảnh là phương pháp áp dụng các giá trị thống kê trên một vùng lân cận của điểm ảnh, với mục đích làm mịn, khử nhiễu hoặc nâng cao hình ảnh Bộ lọc Gaussian là một loại bộ lọc trung bình trọng số, trong đó trọng số được xác định bởi hàm Gaussian (hay còn gọi là phân phối chuẩn) Hàm Gaussian có dạng chuông, với giá trị cao hơn ở tâm vùng lân cận và giảm dần về các cạnh Điều này tạo ra hiệu ứng làm mịn trên hình ảnh khi các điểm ảnh lân cận có ảnh hưởng lớn hơn đến điểm ảnh trung tâm.
Với là trị trung bình hoặc vị trí đỉnh, là phương sai Hàm gaussian tiêu chuẩn thì = 0 và = 1
Lọc gaussian sử dụng mặt nạ cuộn với kích thước 3x3, 5x5, 7x7…
Thông thường lọc gaussian cho ảnh I với mặt nạ cuộn kích thước nxn sẽ được tiến hành theo 3 bước:
1- Tạo mặt nạ cuộn gaussian 1 chiều có kích thước n
2- Trượt mặt nạ này qua từng cột của I được I N 3- Sau đó trượt mặt nạ qua từng hàng của IN, ta thu được kết quả
Hình 3-7: Mặt nạ cuộn gaussian 1 chiều
Chuyển ảnh màu sang ảnh xám, nhị phân
Chuyển sang ảnh xám: có 3 cách sau có thể áp dụng để chuyển từ ảnh màu sang ảnh xám:
Lightness: Lấy trung bình giá trị màu cao nhất và màu thấp nhất ( , ) = [max( , , ) + min ( , , )]/2
Average: Lấy giá trị màu trung bình ( , ) = ( , , )/3
Luminosity: Nhân theo hệ số ( , ) = ( , ) ∗ 30% + ( , ) ∗ 59% + ( , ) ∗ 11%hoặc ( , ) = ( , ) ∗ 21% + ( , ) ∗ 71% + ( , ) ∗ 7% Ảnh gốc Trung bình max-min
Trung bình RGB Nhân hệ số
Hình 3-8: Chuyển từ ảnh màu sang ảnh xám [18]
Chuyển sang ảnh nhị phân:Chuyển sang ảnh nhị phân được thực hiện thông qua việc đặt ngưỡng (Thresholding T) Ví dụ với ảnh xám 8 bit:
Với là ảnh gốc, là ảnh nhị phân sau khi chuyển đổi Ảnh gốc Ảnh nhị phân
Hình 3-9: Chuyển từ ảnh xám 8 bit sang ảnh nhị phân
Histogram là một biểu đồ thể hiện số lượng và cường độ màu của các pixel trong toàn bộ ảnh
Hình 3-10: Giản đồ histogram ảnh xám
Thay đổi độ sáng, độ tương phản Độ sáng và độ tương phản của ảnh có thể được thay đổi bằng cách thay đổi giá trị và tại mỗi pixel của ảnh gốc
( , ) = ( , ) + Với > 0 là hệ số thay đổi độ tương phản, hệ số thay đổi độ sáng của ảnh
Trong đó, là ảnh ban đầu, là ảnh sau khi hiệu chỉnh Độ sáng cao Histogram
Hình 3-11: Tăng độ sáng và giản đồ histogram
S ố lư ợ ng Độ sáng thấp Histogram Hình 3-12: Giảm độ sáng và giản đồ histogram Độ tương phản cao Histogram
Hình 3-13: Tăng độ tương phản và giản đồ histogram Độ tương phản thấp Histogram
Hình 3-14: Giảm độ tương phản và giản đồ histogram
Dựa vào biểu đồ histogram, ta có thể nhận thấy khi thay đổi độ sáng giá trị biểu đồ histogram sẽ dịch sang trái hoặc sang phải, khi thay đổi độ tương phản giá trị biểu đồ sẽ giản ra 2 biên hoặc co về giữa
Phát hiện biên trong ảnh số là quá trình xác định các biên giới, hay các đường bao, nơi có sự thay đổi đột ngột về các đặc điểm vật lý của ảnh Những thay đổi này có thể biểu hiện dưới dạng cường độ sáng khác nhau, màu sắc khác biệt hoặc kết cấu bề mặt không liên tục Phát hiện biên đóng vai trò quan trọng trong nhiều ứng dụng xử lý ảnh, bao gồm nhận dạng đối tượng, phân vùng ảnh và trích xuất đặc điểm.
Camera calibration
Về mặt hình học, mô hình này bao gồm một mặt phẳng ảnh và một tâm điểm C nằm trên mặt phẳng tiêu cự
Một đặc điểm cơ bản của mô hình Pinhole là mọi điểm ảnh trên mặt phẳng ảnh được tạo ra khi điểm đi qua sẽ thẳng hàng với trục quang và tâm quang Tức là điểm ảnh, tâm quang và trục quang nằm trên một đường thẳng Điểm chính là điểm nằm trên trục quang, trực giao với mặt phẳng ảnh và được ký hiệu là
3.2.2 Lý thuyết camera calibration sử dụng mô hình pinhole Gọi ( , , , ) là hệ tọa độ camera, ( , , , ) là hệ tọa độ của các điểm ảnh
Thay mặt phẳng bằng một mặt phẳng khác nằm phía bên kia mặt phẳng , tính chất hình học sẽ không đổi Trong hệ tọa độ mới này, mỗi điểm ( , ) giờ đây sẽ có tọa độ 3D là ( , , )
Trong phép chiếu hình học, các điểm nằm trên cùng đường thẳng vuông góc với mặt phẳng chiếu đều được biểu diễn tại một điểm duy nhất trên mặt phẳng đó Tỷ lệ tọa độ của một điểm (x, y, z) bất kỳ khi chiếu xuống mặt phẳng sẽ luôn giống nhau, chỉ cho ra một điểm (x', y') duy nhất.
Phương trình (3.2) có thể được viết lại như sau:
0 0 1 0 gọi là ma trận chiếu phối cảnh
Như vậy với mỗi một điểm ( , , )và một điểm ảnh tương ứng ( , )ta có thể viết lại :
Trong thực tế thì một đối tượng thật có thể biểu diễn bởi một hệ tọa độ 3D bất kỳ mà không phải là tọa độ camera như ta giả sử Để tính toán được trên các hệ tọa độ này, cách đơn giản nhất là ta chuyển nó về hệ tọa độ camera Giả sử rằng là một điểm bất kỳ trong hệ tọa độ bất kỳ, là một điểm trong hệ tọa độ camera
Khi đó, có thể chuyển về bằng một phép quay và một phép tịnh tiến
Ma trận và vector biểu diễn hướng và vị trí tương đối giữa hệ tọa độ camera và hệ tọa độ thực tế Ma trận chứa ba phép quay (theo trục x, y và z) và vector chứa ba phép tịnh tiến (theo trục x, y và z) Các thông số này được gọi là thông số ngoại của camera.
Trên thực tế, tâm của ảnh không phải lúc nào cũng là điểm chính CI và tỷ lệ theo các trục u, v không phải lúc nào cũng như nhau Vì thế, người ta sử dụng một ma trận K để diễn tả những sai lệch đó Mối quan hệ giữa một điểm trong thực tế MW và một điểm ảnh MI được diễn tả theo công thức sau:
Trong đó , là tỷ lệ dọc theo hai trục của ảnh , là điểm chính của hệ tọa độ ảnh (gốc tọa độ, thay cho ở trên) Góc thể hiện độ méo giữa hai trục , nếu trong ảnh lý tưởng ( , ) vuông góc với nhau thì góc này bằng 0
Hình 3-19: Tương quan của ảnh lý tưởng và thực tế Có được mối quan hệ giữa các điểm ảnh và điểm ở ngoài thực tế đồng nghĩa với việc ta có thể tái tạo lại những điểm thực tế 3D dựa trên các ảnh thu được, tuy nhiên việc đầu tiên và quan trọng là ta phải tìm ra được các thông số của camera Có 5 thông số nội và 6 thông số ngoại cần phải tìm Việc đi tìm các thông số này được gọi là quá trình calibrate camera Vì mỗi camera có ống kính, khác nhau, vị trí khác nhau… nên không có một thông số chung cho tất cả các loại camera, ta phải làm cho mỗi camera khác nhau.
Hai thuật toán phát hiện tâm tròng mắt
3.3.1.1 Giới thiệu đường isophote Isophote của một ảnh là những đường cong kết nối các điểm có cùng cường độ sáng lại với nhau Vì các đường này không cắt lẫn nhau nên một bức ảnh có thể được mô tả hoàn toàn bằng các đường isophote của nó Thêm vào đó, hình dạng của các đường isophote không phụ thuộc vào góc quay và sự thay đổi ánh sáng một cách tuyến tính [20] Do đó, các đường isophote có thể được sử dụng như một đặc tính trong việc phát hiện vật thể và tách hình ảnh
Hình 3-20: Ảnh gốc (a), các đường isophote của ảnh (b) Tại mỗi điểm của ảnh, một hệ trục tọa độ cục bộ được gắn lên với hướng của hệ trục chỉ hướng thay đổi cường độ sáng nhiều nhất, cũng chính là hướng của gradient Hệ tọa độ này { , } được gọi là hệ tọa độ đánh giá Các vecto của nó được định nghĩa:
= { , } ; =⊥ ; (2.5) với và là đạo hàm bậc nhất của hàm giá trị điểm ảnh ( , ) theo trục x và y Theo đó, đạo hàm theo trục hướng của chính là giá trị gradient của ảnh, và đạo hàm theo hướng của bằng 0 (không thay đổi giá trị điểm ảnh dọc theo các đường isophote
Trong hệ trục tọa độ xác định, đường isophote được định nghĩa là hình học nơi góc phương vị của véctơ gradient giữ hằng số Các đường cong của nó được tạo thành khi véctơ góc thay đổi Áp dụng phép lấy đạo hàm ẩn đối với góc phương vị, ta có được vi phân liên hệ giữa đạo hàm bậc nhất theo các tọa độ của hàm isophote và véctơ gradient.
Với = 0 từ điều kiện phía trên, suy ra = 0 Tiếp tục lấy vi phân đối với :
+ 2 + + = 0 (2.7) Đặt = , và với = 0, đường cong isophote được tính:
Trong hệ tọa độ Đề Các, công thức trở thành
3.3.1.2 Tâm của các đường isophote
Ta nghịch đảo biểu thức (2.9) để đạt được bán kính của đường tròn tạo nên đường isophote Hướng của vecto bán kính có thể được lấy từ gradient, nhưng gradient luôn hướng về phía thay đổi cường độ sáng lớn nhất Tuy nhiên, dấu của các đường isophote phụ thuộc vào cường độ sáng của vùng phía bên ngoài của nó (vùng ngoài sáng hơn sẽ cho dấu dương) Vì vậy, bằng cách nhân gradient với nghịch đảo của đường isophote, ta được các vecto thay thế:
Hình 3-21: Hướng của gradient (a), các vector thay thế chỉ vào tâm của đường cong
(b), tâm được đánh giá bởi các vector (c)
Các vecto thay thế này có hướng chỉ vào tâm của đường cong, được cộng dồn vào bản đồ phân bố tâm để tìm tâm tốt nhất Khi mỗi vector đều chỉ đưa ra ước tính sơ bộ, ta sẽ cần một bộ lọc Gaussian để mỗi khối tâm được phân bố sẽ chỉ tạo nên một tâm chính giữa
3.3.1.3 Xác định tâm đường isophote
Khi trượt mặt nạ nhân Gaussian qua ảnh, ta có thể thấy rằng số lượng đường isophote tăng dần xung quanh biên của vật thể Mỗi đường isophote mới có thể được coi như một đường isophote cũ đã được thu nhỏ theo tỷ lệ.
Trong thực tế, không có gì bảo đảm đường biên của vật thể có cùng cường độ sáng Trong trường hợp này, cho phép mỗi đường isophote tự bầu chọn tâm của chính nó sẽ tạo ra kết quả không mong muốn khi hình dạng của đường isophote khác với hình dạng của vật thể Để giải quyết vấn đề này, chỉ những phần của đường isophote có ý nghĩa cho mục đích của ta mới được sử dụng, đó là những phần chạy dọc theo cạnh của vật thể Điều này được thực hiện bằng công thức tính toán đường cong chỉ ra biên dạng của vật thể:
= (2.11) Đường cong curvedness ít đáp ứng đối với bề mặt rộng mà đáp ứng tốt với những nơi có mật độ các đường isophote lớn, đó chính là cạnh của vật thể Điều này có nghĩa là bằng cách chọn những phần của các đường isophote tại nơi đường cong curvedness có giá trị lớn nhất chúng sẽ đi theo biên của vật thể và bầu chọn cho cùng một điểm tâm
Hình 3-22: Các đường isophote của một hình cầu (a), đường cong curvedness của ảnh hình cầu (b)
3.3.1.4 Xác định tâm tròng mắt
Dấu của đường isophote phản ánh cường độ sáng của vùng bên ngoài đường cong, với dấu âm biểu thị hướng gradient Từ đó, có thể phân biệt vùng sáng và tối dựa trên dấu của đường isophote Căn cứ vào đặc điểm sinh học của mắt, tròng trắng sáng hơn tròng đen nên có thể loại bỏ những điểm được đề cử có đường isophote mang giá trị dương.
3.3.2 Thuật toán dựa trên giá trị gradient [21]
Về mặt hình học, tâm của một đối tượng hình tròn có thể được xác định bằng cách phân tích trường vector gradient của ảnh Gọi là tâm của đối tượng và là vector gradient tại vị trí Khi đó vector thay thế được chuẩn hóa (vector đơn vị) , là vector có gốc đặt tại tâm và hướng về , sẽ có cùng hướng với vector gradient
Hình 3-23: Minh họa cho mối quan hệ giữa các vector và tâm Công thức tính :
‖ − ‖ Với là tâm giả định trong quá trình tính toán Khi đó, tâm thực ∗ của đối tượng được tính bằng công thức:
Để chuẩn hóa các phép đo trong thuật toán nhận diện khuôn mặt, các vector được đưa về vector đơn vị để có trọng số như nhau Phép biến đổi này giúp đảm bảo tính ổn định trong quá trình xử lý hình ảnh, ngay cả khi ảnh hưởng của ánh sáng và độ tương phản thay đổi.
Hình 3-24 minh họa kết quả xác định tâm mắt: hình ảnh bên trái hiển thị tâm mắt được xác định, biểu đồ 2D bên giữa thể hiện giá trị tính toán cho từng tâm giả định, trong khi biểu đồ 3D bên phải cung cấp góc nhìn ba chiều về các kết quả.
Khối lượng tính toán có thể được giảm bớt bằng việc chỉ thực hiện tính toán với những vector gradient có độ lớn đáng kể (bỏ qua các vector nằm trong vùng đồng nhất)
3.3.2.2 Hậu xử lý kết quả tính được
Trong một số trường hợp, giá trị lớn nhất có thể không chính xác hoặc xuất hiện nhiều điểm giá trị lớn nhất cục bộ dẫn đến sai lệch trong kết quả ước tính Ví dụ, giá trị điểm ảnh của mí mắt hoặc lông mi với độ tương phản thấp giữa tròng trắng và tròng đen có thể ảnh hưởng đến kết quả Do tròng đen thường tối hơn tròng trắng và màu da, việc áp dụng trọng số cho mỗi tâm giả định theo công thức (1) sẽ dẫn đến công thức cuối cùng.
Với = ∗ , là giá trị mức xám của điểm ảnh tại vị trí , của ảnh đã được lấy âm bản.
Đặc tính Haar-like của khuôn mặt và thuật toán Adaboost
Ý tưởng của thuật toán phát hiện khuôn mặt của Viola Jones là biểu diễn ảnh theo integral image và sử dụng thuật toán Adaboost kết hợp với các đặc trưng Haar- like
3.4.1 Đặc trưng Haar-like Đặc trưng Haar-like gồm 4 đặc trưng cơ bản để xác định một đối tượng trong ảnh Mỗi đặc trưng Haar-like là sự kết hợp của hai hoặc ba hình chữ nhật đen trắng
Những khối đặc trưng này thể hiện sự liên hệ tương quan giữa các bộ phận trong ảnh Để phát hiện khuôn mặt thì các đặc trưng Haar-like cơ bản được mở rộng thành các đặc trưng cạnh, đặc trưng đường, đặc trưng góc và đặc trưng trung tâm
Hình 3-25: Các đặc trưng cạnh
Hình 3-26: Các đặc trưng đường
Hình 3-27: Các đặc trưng góc (a) và các đặc trưng trung tâm (b)
Giá trị của các đặc trưng Haar-like là sự chênh lệch giữa tổng các điểm ảnh của các vùng đen và các vùng trắng Các đặc trưng Haar-like có thể được tính toán rất nhanh bằng cách sử dụng ảnh tích phân của ảnh gốc cho quá trình tính toán, khi đó tốc độ tính toán không phụ thuộc vào kích thước của đặc trưng
Cách tính toán tổng giá trị pixel cho vùng :
Và: ( , ) là giá trị điểm ảnh tại tọa độ ( , )
Hình 3-28: Cách tính tổng giá trị pixel bằng ảnh tích phân Để chọn các đặc trưng Haar-like cho việc thiết lập ngưỡng Viola Jones sử dụng một phương pháp huấn luyện gọi là Adaboost
Adaboost là một bộ phân loại mạnh được tạo nên trên nguyên tắc kết hợp tuyến tính các bộ phân loại yếu Adaboost là một cải tiến của tiếp cận boosting Adaboost sử dụng thêm khái niệm trọng số để đánh dấu các mẫu khó nhận dạng Trong quá trình huấn luyện, cứ mỗi bộ phân loại yếu được xây dựng thì thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng bộ phân loại yếu tiếp theo
Thuật toán tự cập nhật bằng cách điều chỉnh trọng số của các mẫu được phân loại đúng và không đúng Cụ thể, thuật toán sẽ tăng trọng số của các mẫu bị nhận dạng sai để tăng khả năng phân loại chính xác trong tương lai Ngược lại, thuật toán sẽ giảm trọng số của các mẫu được nhận dạng đúng bởi bộ phân loại yếu vừa xây dựng, giúp thuật toán tập trung vào các mẫu khó phân loại hơn.
Bằng cách này thì bộ phân loại yếu sau có thể tập trung vào các mẫu mà bộ phân loại yếu trước nó làm chưa tốt Cuối cùng các bộ phân loại yếu sẽ được kết hợp lại tùy theo mức độ tốt của chúng để tạo nên một bộ phân loại mạnh Adaboost Viola Jones dùng Adaboost kết hợp với các bộ phân loại yếu sử dụng các đặc trưng Haar- like theo mô hình cascade sau:
Hình 3-29: Mô hình cascade kết hợp các bộ phân loại yếu Trong đó ℎ là các bộ phân loại yếu được biểu diễn như sau:
0 ế ( ) < ế ượ ạ Vùng ảnh cần xét ℎ
Không phải khuôn mặt Là khuôn mặt
Với là cửa sổ con cần xét, là ngưỡng, là giá trị đặc trưng Haar-like và là hệ số quyết định chiều của phương trình.
Hệ điều hành nhân Linux
Nhìn bề ngoài, Linux là một hệ điều hành Linux gồm có một nhân kernel (mà cốt lõi quản lý các tài nguyên phần cứng và phần mềm) và một bộ sưu tập các ứng dụng của người dùng (các thư viện, các trình quản lý cửa sổ và các ứng dụng)
Hình 3-30: Cấu trúc tổng quát của một hệ thống Linux [26]
Tầng cuối cùng của kiến trúc Linux bao gồm một bộ mã kiến trúc cho phép Linux hỗ trợ đa nền tảng phần cứng như ARM, PowerPC.
Hình 3-31: Giao diện hệ điều hành Ubuntu Desktop 10.04 nhân Linux
Linux có tính di động cao Hệ thống con của trình điều khiển hỗ trợ động các mô-đun được nạp mà không ảnh hưởng đến hiệu năng, tạo nên tính mô-đun của hệ thống
3.5.2 Các ưu điểm nổi bật của Linux
Linh hoạt, uyển chuyển : Linux là một HĐH mã nguồn mở nên có thể tùy ý sửa chữa theo như mình thích Việc Việt hóa Windows được xem là không thể nếu như không có sự đồng ý và hỗ trợ của Microsoft Tuy nhiên với Linux thì ta có thể làm được điều này một cách đơn giản hơn Mặt khác do Linux được một cộng đồng rất lớn những người làm phần mềm cùng phát triển trên các môi trường, hoàn cảnh khác nhau nên tìm một phiên bản phù hợp với yêu cầu sẽ không phải là một vấn đề quá khó khăn Tính linh hoạt của Linux còn được thể hiện ở chỗ nó tương thích được với rất nhiều môi trường
Độ an toàn cao: Trong Linux có một cơ cấu phân quyền hết sức rõ ràng Chỉ có "root" ( người dùng tối cao) mới có quyền cài đặt và thay đổi hệ thống Ngoài ra Linux cũng có cơ chế để một người dùng bình thường có thể chuyển tạm thời chuyển sang quyền "root" để thực hiện một số thao tác Điều này giúp cho hệ thống có thể chạy ổn định và tránh phải những sai sót dẫn đến đổ vỡ hệ thống
Ngoài ra chính tính chất "mở" cũng tạo nên sự an toàn của Linux Nếu như một lỗ hổng nào đó trên Linux được phát hiện thì nó sẽ được cả cộng đồng mã nguồn mở cùng sửa và thường thì chỉ sau 24h sẽ có thể cho ra bản sửa lỗi
Chạy thống nhất trên các hệ thống phần cứng: Dù cho có rất nhiều phiên bản Linux được các nhà phân phối khác nhau ban hành nhưng nhìn chung đều chạy khá ổn định trên mọi thiết bị phần cứng, từ Intel 486 đến những máy Pentium mới nhất, từ những máy có dung lượng RAM chỉ 4MB đến những máy có cấu hình cực mạnh.
3.5.3 Hệ thống nhúng Hệ thống nhúng là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao
Hệ thống nhúng thường được thiết kế để thực hiện một chức năng chuyên biệt nào đó Khác với các máy tính đa chức năng, chẳng hạn như máy tính cá nhân, một hệ thống nhúng chỉ thực hiện một hoặc một vài chức năng nhất định, thường đi kèm với những yêu cầu cụ thể và bao gồm một số thiết bị máy móc và phần cứng chuyên dụng mà ta không tìm thấy trong một máy tính đa năng nói chung Vì hệ thống chỉ được xây dựng cho một số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ưu hóa nó nhằm giảm thiểu kích thước và chi phí sản xuất Các hệ thống nhúng thường được sản xuất hàng loạt với số lượng lớn Hệ thống nhúng rất đa dạng, phong phú về chủng loại Đó có thể là những thiết bị cầm tay nhỏ gọn như đồng hồ kĩ thuật số và máy chơi nhạc MP3, hoặc những sản phẩm lớn như đèn giao thông, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các máy năng lượng hạt nhân Xét về độ phức tạp, hệ thống nhúng có thể rất đơn giản với một vi điều khiển hoặc rất phức tạp với nhiều đơn vị, các thiết bị ngoại vi và mạng lưới được nằm gọn trong một lớp vỏ máy lớn
Hình 3-32: Một số thiết bị sử dụng hệ thống nhúng [26]
THỰC NGHIỆM VÀ KẾT QUẢ ĐẠT ĐƯỢC
Calib thông số camera
Sử dụng tấm caro có 10x7 điểm giao nhau, với kích thước thực tế của mỗi ô là 1 inch x 1 inch Hệ tọa độ thực có gốc đặt tại điểm giao nhau đầu tiên (góc trên bên trái) của tấm caro
Hình 4-1: Bảng caro 10x7 với hệ trục tọa độ thực [22]
Lần lượt xoay tấm caro trước camera dưới các góc độ khác nhau sao cho vẫn phát hiện được tốt các điểm giao nhau
Hình 4-2: Tấm caro với các hướng khác nhau
Sử dụng hàm findChessboardCorners trong thư viện OpenCV để phát hiện tọa độ điểm ảnh của các điểm giao nhau và lấy thứ tự các điểm đó
Hình 4-3: Phát hiện các điểm giao nhau trên tấm caro Theo phương pháp của tác giả Zhengyou Zhang cần ít nhất 3 ảnh để có thể tính được đầy đủ các giá trị của ma trận thông số nội camera Quá trình thực nghiệm đã sử dụng 15 ảnh cho quá trình tính toán
Phương pháp calib camera của tác giả được hỗ trợ bởi hàm calibrateCamera của OpenCV Hàm calibrateCamera với biến đầu vào là tọa độ thực của các điểm giao nhau của tấm caro và tọa độ điểm ảnh tương ứng của chúng Với hệ tọa độ thực gắn trên tấm caro và trục vuông góc với mặt phẳng của nó, ta luôn có tọa độ = 0 đối với mọi điểm trên tấm caro Tọa độ thực tế của các điểm được sử dụng trên tấm bảng có dạng:
0 Ma trận thông số nội tính được:
0 0 1 Để kiểm tra tính chính xác của ma trận vừa tính, ta tiến hành tính ma trận thông số ngoại ứng với từng ảnh riêng biệt dựa trên ma trận thông số nội vừa nhận được và so sánh kết quả tính toán với giá trị thực tế Kết quả tính toán đạt được sẽ gồm ma trận xoay R và ma trận chuyển vị T giữa hệ tọa độ camera và hệ tọa độ thực (gắn tại điểm giao nhau đầu tiên trên tấm caro)
Thử nghiệm lần lượt với các vị trí khác nhau của tấm caro, thực hiện tính toán vị trí của tấm bảng bằng hàm SolvePnp của OpenCV ta có kết quả tương đương với vị trí thực của tấm caro
Với vị trí được xoay quanh trục z 30 0 Kết quả tính toán được là:
, , = 0 , 2 , 29 Với , , lần lượt là các góc quay quanh trục x, y, z
Hình 4-4: Tấm caro ở vị trí xoay quanh trục z 30 độ
Với vị trí được xoay quanh trục y 30 0 Kết quả tính toán được là:
Hình 4-5: Tấm caro ở vị trí xoay quanh trục y 30 độ
Tiền xử lý ảnh
Hình 4-6: Sơ đồ các bước thực hiện thu thập mẫu Ảnh nhận được từ video hoặc camera sẽ được chuyển thành ảnh xám Quá trình tiền xử lý sẽ được thực hiện theo thứ tự các bước:
Lưu giữ lại 1 bản gốc
Nhận ảnh từ video/camera
End Phát hiện vùng chứa khuôn mặt
Trích xuất vùng ảnh của mắt Áp dụng bộ lọc Gaussian và median
Chuyển sang ảnh xám Giảm độ phân giải của ảnh
Tạo bản lưu giữ ảnh gốc Khôi phục vị trí của khuôn mặt trong ảnh gốc Ảnh sử dụng cho phát hiện tâm tròng mắt
Giảm độ phân giải hiện tại và tiến hành phát hiện khuôn mặt Việc phát hiện khuôn mặt được thực hiện bằng cách sử dụng lớp CascadeClassifier của OpenCV Lớp này chứa hàm detectMultiScale dùng để phát hiện khuôn mặt dựa trên file đã được huấn luyện Trong quá trình thực hiện phát hiện khuôn mặt nhóm đã sử dụng file “haarcascade_frontalface_alt.xml” được cung cấp bởi OpenCV - đây là file dùng để phát hiện khuôn mặt đã được huấn luyện sẵn Sau khi đã phát hiện được khuôn mặt, ta khôi phục lại vị trí tương ứng khuôn mặt trước khi thay đổi độ phân giải
Sau khi trích xuất vị trí của khuôn mặt từ hình ảnh gốc, ta tiếp tục sử dụng hình ảnh đã lưu giữ để trích xuất vùng ảnh chứa mắt dựa trên các đặc tính sinh học của khuôn mặt.
Hình 4-7: Vị trí tương đối của vùng ảnh chứa mắt Với :
Vùng ảnh chứa mắt sau đó được áp dụng các bộ lọc Gaussian và median để giảm nhiễu Ảnh nhận được bây giờ có thể áp dụng thuật toán để tìm tâm tròng mắt
Mục đích của việc giảm độ phân giải ảnh nhằm giảm thời gian phát hiện khuôn mặt Thực nghiệm cho thấy với ảnh có độ phân giải 640x480, thời gian để phát hiện khuôn mặt trên vi xử lý Intel CORE i5-4200U 1.6GHz là 80ms Với độ phân giải được giảm đi 1 nửa, thời gian còn lại khoảng 46ms Thực nghiệm cho thấy bộ thư viện OpenCV phát hiện được tương đối chính xác vị trí của khuôn mặt cho dù ảnh đã giảm đi 1 nửa độ phân giải
Các thông số đầu vào của hàm detectMultiScale được sử dụng trong việc phát hiện khuôn mặt:
scaleFactor – hệ số tỷ lệ, chỉ ra tỷ lệ được giảm xuống mỗi khi giảm kích thước vùng tính toán
flags – thông số chỉ ra kiểu phát hiện vật thể
minSize – kích thước nhỏ nhất có thể của vùng ảnh chứa khuôn mặt, những vùng ảnh có kích thước nhỏ hơn sẽ bị bỏ qua
maxSize – kích thước lớn nhất có thể của vùng ảnh chứa khuôn mặt, những vùng ảnh có kích thước lớn hơn sẽ bị bỏ qua
Vì khuôn mặt được đặt cách camera khoảng 0.5 mét và độ phân giải ảnh là 640x480 pixel, nên kích thước nhỏ nhất của khuôn mặt có thể được phát hiện trong thực tế phải lớn hơn 100x100 pixel, và kích thước lớn nhất phải nhỏ hơn độ phân giải theo chiều dọc của ảnh Việc đặt giới hạn cho kích thước phát hiện giúp giảm thời gian tìm kiếm khuôn mặt trong ảnh Thực nghiệm cho thấy điều này làm giảm khoảng 1 3⁄ thời gian tìm kiếm đối với những ảnh không chứa khuôn mặt Kiểu tìm kiếm của hàm cũng được chỉ định rõ là “chỉ tìm và trả về vật thể có kích thước lớn nhất”
Nhóm đã tiến hành thử và chọn thông số cuối cùng cho bài toán là:
flags : CV_HAAR_FIND_BIGGEST_OBJECT
Phát hiện tâm tròng mắt
Sơ đồ giải thuật cho phương pháp
Hình 4-8: Sơ đồ giải thuật phát hiện tâm tròng mắt dùng đường Isophote
End Displacement vectors D Isophote curvature
Center Voting = pixel pointed by vectors + valueof curvedness
Hình 4-9: Ảnh gốc của mắt
Hình 4-10: Đường curvedness của mắt
Hình 4-11: Bản đồ phân bố tâm
Hình 4-12: Kết quả đạt được khi áp dụng thuật toán
4.3.2 Phương pháp sử dụng giá trị gradient Thực nghiệm áp dụng thuật toán trên ảnh của mắt có kích thước 30x20 pixel và thời gian cần thiết để tính toán khoảng 500ms/hình Vì khối lượng tính toán của phương pháp này rất lớn và phụ thuộc rất nhiều và kích thước ảnh đầu vào nên để tăng tốc độ tính toán ta phải giảm kích thước vùng mắt xuống hết mức có thể
Thực nghiệm cho thấy mặc dù thời gian tính toán đã giảm đáng kể khi giảm kích thước vùng mắt, tuy nhiên thời gian tính toán vẫn còn rất hạn chế
4.3.3 Đánh giá và chọn lựa giữa hai phương pháp Qua quá trình thực nghiệm sử dụng 2 phương pháp được đề cập để ước lượng vị trí của tâm tròng mắt, rút được kết luận sau:
Phương pháp sử dụng giá trị gradient cho ước lượng ổn định hơn, ít bị nhiễu làm sai kết quả hoàn toàn Tuy nhiên, phương pháp sử dụng đường isophote với ảnh có tâm tròng mắt gần khóe mắt đôi khi không chính xác.
Phương pháp sử dụng đường isophote cho thời gian tính toán nhanh hơn gần gấp đôi (và có thể hơn nếu ảnh của mắt càng lớn) đối với phương pháp sử dụng giá trị gradient
Vì mục tiêu cuối cùng của đề tài là thiết kế hệ thống nhúng trên nền ARM với hạn chế về tốc độ xử lý hơn nhiều so với máy tính, nên nhóm quyết định chọn phương pháp sử dụng đường isophote vì phương pháp này có tốc độ tính toán nhanh hơn phương pháp còn lại nhiều lần.
Ước lượng góc nhìn
Phương pháp của đề tài sử dụng: tọa độ ảnh của các điểm trên khuôn mặt, tọa độ 3D của các điểm trên mô hình khuôn mặt và ma trận thông số nội của camera để suy ra hướng của đầu Thứ tự các bước thực hiện:
Sử dụng thư viện flandmark ta có thể phát hiện các điểm trên mặt và lấy được tọa độ ảnh của chúng Ta có được 6 điểm cần sử dụng là: 2 góc mắt trái và phải, 2 bên mép miệng và hệ tọa độ khuôn mặt có gốc đặt tại chóp mũi
Hình 4-13: 6 điểm đặc trưng trên khuôn mặt được trích xuất ra
Mô hình của khuôn mặt: Mô hình được dùng trong đề tài là “male head” được download từ internet [23] Sử dụng chương trình MeshLab có thể xác định được vị trí 3D tương đối của các điểm tương ứng trên khuôn mặt trên mô hình
Hình 4-14: Giao diện MeshLab với mô hình của khuôn mặt
Tọa độ 3D của khuôn mặt so với gốc tọa độ đặt tại chóp mũi:
Ma trận thông số nội lấy được từ quá trình calib camera:
Sử dụng hàm SolvePnP của thư viện OpenCV ta có thể tính được hướng của đầu Thông số đầu vào của hàm là: tọa độ điểm ảnh của các điểm đặc trưng trên khuôn mặt, tọa độ 3D của các điểm tương ứng trên mô hình khuôn mặt và ma trận thông số nội của camera Ứng với mỗi ảnh khác nhau ta sẽ tính được ma trận xoay và ma trận chuyển vị tương ứng Hình bên dưới thể hiện góc xoay của khuôn mặt theo ma trận tính được
Hình 4-15: Hướng của đầu tính được ở vị trí thẳng
Hình 4-16: Hướng của đầu tính được ở vị trí nghiêng 4.4.2 Ước lượng hướng nhìn của mắt Đề tài sử dụng phương pháp và các thông số được đưa ra trong bài báo [8] cho quá trình ước lượng hướng nhìn Các thông số được sử dụng:
= [0.14 0.09 −16.9] ( ) Nhóm chọn mắt trái để tiến hành ước lượng góc nhìn Mối liên hệ giữa mô hình mắt và góc nhìn được thể hiện qua hình bên dưới
Hình 4-17: Minh họa mô hình mắt và góc nhìn [8]
Thứ tự các bước được thực hiện:
Xác định tọa độ ảnh ( , ) của 2 điểm , trên khuôn mặt Đây là 2 điểm tại góc mắt
Xác định tọa độ của tâm tròng mắt ( , ) bằng phương pháp được đề cập ở trên
Tính tọa độ ảnh cho điểm ( là điểm chính giữa của ):
Tính tọa độ 3D của điểm :
Với , , lấy từ ma trận thông số nội của camera:
Tính tọa độ 3D của tâm cầu mắt :
Tính tọa độ 3D của tâm tròng mắt = ( , , ) , sử dụng biểu thức:
= ( , ; − ) Với ( , ; ) là hàm thêm góc xoay theo phương ngang và góc xoay theo phương thẳng đứng vào vector Vector biểu thị hướng nhìn của mắt
Hình 4-18: Hướng nhìn của mắt được ước lượng.
Nhúng chương trình ứng dụng lên board ARM
Bo mạch được thiết kế và phát triển bởi FriendlyARM, sử dụng vi xử lý Samsung’s S5PV210 có tần số tối đa 1GHz Chip xử lý S5PV210 tích hợp xử lý đồ họa PowerVR SGX540 hỗ trợ 3D và có khả năng phát video độ phân giải 1080p Ngoài ra, bo mạch còn được trang bị màn hình LCD 5 inch, RAM DDR2 512MB và bộ nhớ FLASH 1GB.
Cấu hình chi tiết của thiết bị:
Bảng 4-1: Cấu hình chi tiết của board Mini210s CPU Samsung S5PV210, based on CortexTM-A8, 1GHz
Integrated PowerVR SGX540 graphic engine
Up to 1080p@30fps hard decoded video playing, support MPEG4, H.263, H.264 etc
Up to 1080p@30fps hard decoded (Mpeg-2/VC1) video input
32bit data bus, dual channels
FLASH MLC2 NAND Flash: 4GB
LCD LCD interface: 41Pin, 1.0mm spacing, compatible with
LCD, supports one wire precise touching including an I2C, three interrupts
miniHDMI high definition interface (Type C)
LCDs supported from 3.5” to 12.1” up to maximum resolution of 1024x768
Mạng 10/100M Ethernet interface(RJ45) using DM9000AEP Phần cứng khác 1 x DB9 RS232 serial port
1 x miniUSB Slave-OTG 2.0 which can be extened via a 2.0mm socket
1 x one speaker port which can drive an 8Ω 1W speaker
1 x I2C-EEPROM (256byte) for I2C bus test
1 x adjustor resistor for ADC test
1 x backup battery for on board real time clock
4.5.1 Cài đặt host và các toolchain:
Hình 4-20: Tổng thể về host và toolchain Luận văn sử dụng hệ điều hành Ubuntu phiên bản 10.04 [24] để làm môi trường xây dựng chương trình cho hệ thống nhúng
Các toolchain sử dụng để xây dựng hệ thống trên board Mini210S có thể được tìm thấy tại địa chỉ [25] Các bước xây dựng toolchain:
Copy tất cả các file được download sang thư mục “\tmp” trên máy host
Chuyển thư mục hiện thời sang “\tmp”:
Giải nén các toolchain cần thiết cho quá trình nhúng:
Giải nén công cụ biên dịch chéo cho cấu trúc ARM arm-linux-gcc sẽ được cài đặt vào thư mục “/opt/FriendlyARM/toolschain/4.5.1”:
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /
Giải nén nhân hệ điều hành Linux Nhân sẽ được giải nén vào thư mục
“/opt/FriendlyARM/mini210s/linux” Nhân được dùng khi muốn thay đổi thành phần driver trên board
#tar xvzf linux-2.6.35.7-20111118.tar.gz –C /opt/FriendlyARM\
Giải nén công cụ cho phép tạo ứng dụng với giao diện Qt trên board ARM
#tar xvzf target-qte-4.7.0.tgz –C /opt/FriendlyARM/ mini210s/Linux
#/opt/FriendlyARM/mini210s/linux/arm-qte-4.7.0/build-all
Kết nối mạng và cài đặt chương trình Qt-creator với lệnh:
#apt-get install qt-creator đây là chương trình dùng để viết và biên dịch chương trình có giao diện Giao diện chương trình:
Hình 4-21: Giao diện của chương trình Qt-creator
Cấu hình để Qt-creator biên dịch được ứng dụng chạy trên board ARM:
Tạo mới project và chỉnh sửa file pro của project mới tạo:
QMAKE_RPATHDIR += /usr/local /lib
LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgproc - lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d - lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy - lopencv_flann
INCLUDEPATH += /usr/local/include/opencv /usr/local/include
QMAKE_CXXFLAGS = -rpath -rpath-link
Thay đổi công cụ sử dụng cho quá trình build project là Qt và toolchain lần lượt thành:
/usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin/qmake
/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc Máy host bây giờ cần cài đặt thêm thư viện OpenCV để có thể được tạo ứng dụng xử lý ảnh chạy trên board ARM Mini210s
4.5.2 Cài đặt thư viện OpenCV cho ARM 4.5.2.1 Cài đặt các thư viện cần thiết cho OpenCV
Nhóm sử dụng thư viện OpenCV phiên bản 2.3.1 để nhúng lên board Vì thư viện OpenCV phụ thuộc vào 1 số thư viện khác, nên cần cài đặt thêm các thư viện phụ thuộc Các thư viện này phải được biên dịch cho nền ARM trước khi được sử dụng bởi OpenCV:
#tar xzvf zlib-1.2.7.tar.gz
#./configure -prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux- gnueabi -shared
CC = arm-linux-gcc AR = arm-linux-ar RANLIB = arm-linux-ranlib LDSHARED = arm-linux-gcc -shared -wl,-soname, libz.so.1, - version-script, zlib.map
#tar xzvf jpegsrc.v7.tar.gz
#./configure -host=arm-linux -prefix=/opt/FriendlyARM/toolschain/4.5.1\
/arm-none-linux-gnueabi -enable-shared -enable-static
#tar xzvf libpng-1.5.10.tar.gz
#./configure -host=arm-linux -prefix=/opt/FriendlyARM/toolschain/4.5.1\
/arm-none-linux-gnueabi -enable-shared -enable-static
#tar xzvf yasm-1.2.0.tar.gz
#./configure -host=arm-linux -prefix=/opt/FriendlyARM/toolschain/4.5.1\
/arm-none-linux-gnueabi -enable-shared -enable-static
#tar xjvf x264-snapshot-20120608-2245.tar.gz2
#./configure -host=arm-linux -prefix=/opt/FriendlyARM/toolschain/4.5.1\
/arm-none-linux-gnueabi -enable-shared disable-asm
#tar xzvf xvidcore-1.3.2.tar.gz
#./configure -host=arm-linux -prefix=/opt/FriendlyARM/toolschain/4.5.1\
/arm-none-linux-gnueabi –disable-assembly
#tar xzvf ffmpeg-0.10.3.tar.gz
#./configure -prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux- gnueabi enable-shared disable-static enable-gpl enable-cross-compile
-arch=arm disable-stripping target-os=linux enable-libx264 enable- libxvid cc=arm-linux-gcc enable-swscale
#tar xzvf v4l-utils-0.8.9.tar.bz2
#make CC=arm-linux-gcc
#make install PREFIX=/opt/FriendlyARM/toolschain/4.5.1/arm-none-lin\ ux-gnueabi 4.5.2.2 Cài đặt thư viện OpenCV cho ARM Đầu tiên ta phải cài đặt Cmake Đây là chương trình tạo source cho quá trình biên dịch chéo của các phần mềm
#sudo apt-get install cmake-gui
Hình 4-22: Giao diện của chương trình C-make Các bước thực hiện:
Tại mục “Where is the source code” nhập đường dẫn đến thư mục chứa source code của thư viện OpenCV đã giải nén
VD: /home/quangtridinh/Libraries/OpenCV-2.3.1
Tại mục “Where to build the binaries” nhập đường dẫn đến thư mục chứa source được sinh ra bởi cmake
VD: /home/quangtridinh/Libraries/LibOpenCV-2.3.1
Chọn Configure, cửa sổ hiện ra chọn “Specify options for cross-compiling”
Hình 4-23: Lựa chọn cross-compiling
Cấu hình theo hình sau đó chọn Finish
Hình 4-24: Cấu hình công cụ
C Compilers : /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
C++ Compilers : /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++
Target Root : /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnuea\ bi/sys-root/usr
Chọn các chức năng cần sử dụng của thư viện trong cửa sổ hiện ra
Mở cửa sổ terminal tại thư mục chứa source được sinh ra bởi cmake, gõ lệnh
Thư viện được mặc định cài ở thư mục /usr/local
4.5.3 Kết quả nhúng chương trình lên board Sau khi viết ứng dụng chạy ổn định trên máy host, nhóm tiến hành biên dịch và nhúng ứng dụng lên board ARM Hình bên dưới là kết quả đạt được khi thực hiện việc nhúng ứng dụng
Hình 4-25: Ứng dụng được nhúng lên board Mini210s
Tốc độ thực tế đạt được khi thực hiện chương trình là khoảng 2 fps Tốc độ này khá chậm khi so sánh với tốc độ đạt được của máy core i5 tốc độ 2.6 Ghz là 10 fps.