Ngày nay, với sự phát triển mạnh mẽ của ngành công nghiệp điện tử phần cứng, các máy tính đóng vai trò ngày càng quan trọng trong công việc cũng như đời sống. Tuy nhiên, mảnh ghép còn thiếu của máy tính chính là thị giác. Nếu mảnh ghép này được hoàn thiện sẽ góp phần nâng trí tuệ nhân tạo (AI) lên một tầm cao mới và các máy tính có thể làm các công việc nhƣ con ngƣời. Khởi đầu vào thập niên 70, khi mà ngành khoa học không gian vũ trụ phát triển, vấn đề đặt ra là cần có các robot thám hiểm có khả năng nhận biết như con ngƣời. Ngày nay, với các máy tính có cấu hình mạnh mẽ, thị giác đã được ứng dụng trong nhiều lĩnh vực. OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 đã đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi ngƣời tham gia nghiên cứu và phát triển ứng dụng. Gìn giữ trật tự an ninh luôn là vấn đề cấp thiết của xã hội. Hiện nay, một số công nghệ nhận diện bằng vân tay, nhận diện mống mắt,… đã được áp dụng nhưng chi phí mua sắm trang thiết bị vẫn còn cao. Với mong muốn tìm ra giải pháp giải quyết vấn đề trên, nhóm nghiên cứu đã mạnh dạn chọn đề tài Nhận diện hình ảnh dùng thƣ viện OpenCV, mục tiêu chính là xây dựng ứng dụng nhận diện khuôn mặt ở các hướng nhìn khác nhau với chi phí thấp. Ngoài ra, nhóm còn xây dựng ứng dụng nhận diện biển số xe ô tô hƣớng tới thiết kế bãi giữ xe thông minh. Các phương pháp nghiên cứu tư duy phân tích, DOITS, 6 chiếc mũ tư duy đã được vận dụng trong đề tài. Vì đề tài mang tính chất tìm hiểu và ứng dụng, nên nhóm nghiên cứu chỉ tập trung vào phần xử lý ảnh dùng thư viện OpenCV. Ứng dụng nhận diện khuôn mặt sẽ hoạt động trên kit Raspberry PI và xử lý trực tiếp ảnh nhận từ camera. Do khuôn khổ của đề tài có hạn nên ứng dụng nhận diện biển số xe chỉ dừng lại ở việc nhận diện biển số trên ảnh tĩnh.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
NHẬN DIỆN HÌNH ẢNH DÙNG THƯ VIỆN OPENCV
SV 2015-63
Thuộc nhóm nghành khoa học: Khoa học kỹ Thuật và công nghệ
Tp Hồ Chí Minh, 08/2015
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
NHẬN DIỆN HÌNH ẢNH DÙNG THƯ VIỆN OPENCV
SV 2015-63
Thuộc nhóm nghành khoa học: Khoa học kỹ thuật và công nghệ
Sinh viên thực hiện: Đinh Việt Hòa Nam
Dân tộc: Nùng
Lớp, khoa: 12141VT2B, Khoa Điện - Điện Tử Năm thứ: 3/ Số năm đào tạo: 4 Người hướng dẫn: PGS.TS Trần Thu Hà
Trang 3MỤC LỤC
Mục lục i
Danh mục bảng biểu iii
Danh mục từ viết tắt iv
Thông tin kết quả nghiên cứu đề tài v
Mở đầu vii
Chương 1 Cơ sở lý thuyết 1
1.1 Giới thiệu về thư viện OpenCV 1
1.2 Không gian màu RGB và xám 3
1.3 Mức xám và cân bằng mức xám 4
1.4 Đặc trưng Haar-like 6
1.6 Chuỗi các bộ phân lớp (Cascade Classifier) 10
a Ý tưởng 10
b Huấn luyện một cascade 11
Chương 2 Ứng dụng nhận diện khuôn mặt trên kit Raspberry PI và nhận diện biển số xe ô tô 14
2.1 Ứng dụng nhận diện khuôn mặt trên kit Raspberry PI 14
2.1.1 Giới thiệu kit Raspberry PI 14
a Phần cứng 14
b Phần mềm 17
2.1.2 Hiện thực hóa ứng dụng 19
a Bài toán thiết kế 19
b Lưu đồ giải thuật 21
c Tập tin huấn luyện 24
d Các hàm, chương trình được sử dụng trong ứng dụng 28
e Kết quả ứng dụng 29
2.2 Ứng dụng nhận diện biển số xe ô tô 35
2.2.1 Tính năng ứng dụng 35
2.2.2 Lưu đồ giải thuật 36
2.2.3 Cấu trúc ứng dụng và kết quả 36
Kết luận và kiến nghị 41
Tài liệu tham khảo 42
Trang 4Phụ lục I 43
Phụ lục II 45
Phụ lục III 46
Phụ lục IV 58
Phụ lục V 60
Phụ luc VI 70
Trang 5DANH MỤC BẢNG BIỂU
Bảng 1 Kết quả thử nghiệm ứng dụng nhận diện khuôn mặt trên kit Raspberry
PI 41
Trang 6DANH MỤC CÁC TỪ VIẾT TẮT
AI Artificial Intelligence Trí tuệ nhân tạo
CMOS Complementary Metaloxide
Sermiconductor
Chất bán dẫn meta oxit bổ sung
CPU Central Processing Unit Bộ xử lý trung tâm
CSI Camera Serial Interface Cổng kết nối camera truyền dữ
liệu nối tiếp
DOITs Define problem-Open mind and
apply creative Identify best solution-Transform
techniques-Phương pháp tư duy sáng tạo: Xác định vấn đề - Cởi mở ý tượng sáng tạo – Xác định ý tưởng hay nhất – Chuyển bước Full HD Full High Definition Độ phân giải 1920x1280
GPU Graphical Processing Unit Bộ xử lý đồ họa
IDE Intergrated Development
Trang 7BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI
1 Thông tin chung:
- Tên đề tài: Nhận diện hình ảnh dùng thư viện OpenCV
- SV thực hiện: Đinh Việt Hòa Mã số SV: 12141084
Nguyễn Anh Hoàng Mã số SV: 12141088
- Lớp: 12141VT2B Khoa: Điện – Điện Tử Năm thứ: 3 Số năm đào tạo: 4
- Người hướng dẫn: PGS.TS Trần Thu Hà
2 Mục tiêu đề tài:
- Hiện nay, đa số các ứng dụng nhận diện hình ảnh đều được xây dựng trên phần mềm Matlab Đây là phần mềm thương mại có chi phí bản quyền cao Những ứng dụng xây dựng trên phần mềm này chỉ chạy tốt trên những máy tính có cấu hình tương đối cao Trong những năm gần đây, công nghệ IoTs (Internet of Things) đang phát triển mạnh mẽ, đi kèm với nó là
xu hướng phát triển các thiết bị cầm tay nhỏ gọn Chúng ta không thể chạy ứng dụng Matlab trên những thiết bị như điện thoại thông minh, máy tính bảng…được vì cấu hình của chúng không tương thích và cũng không đủ mạnh
- Mục tiêu của đề tài là tìm hiểu và xây dựng ứng dụng nhận diện hình ảnh bằng mã nguồn mở
có thể hoạt động trên các board mạch chuyên dụng chạy hệ điều hành LINUX có kích thước nhỏ gọn để triển khai IoTs như Raspberry PI Đề tài tập trung vào 2 ứng dụng chính:
Nhận diện khuôn mặt trên kit Raspberry PI với các hướng nhìn khác nhau (lên trên, xuống dưới, qua trái, qua phải) có thể ứng dụng trong các dự án nhà thông minh hoặc văn phòng
Nhận diện biển số xe ô tô trên máy tính chạy hệ điều hành Windows một cách tự động
- Để có thể hoạt động trên các thiết bị kể trên, mã nguồn ứng dụng cần được tối ưu hóa để làm giảm tiêu tốn về tài nguyên như CPU, GPU, RAM,…Hơn nữa, một điều kiện cần có của ứng dụng là nó phải có đặc tính là không giới hạn số lượng đối tượng có thể nhận diện được Đây cũng là mục tiêu mà đề tài hướng đến
4 Kết quả nghiên cứu:
- Đề tài đã đạt được mục tiêu nghiên cứu đã đặt ra Ứng dụng nhận diện khuôn mặt và nhận diện biển số xe hoạt động ổn định và chính xác
5 Đóng góp về mặt giáo dục và đào tạo, kinh tế - xã hội, an ninh, quốc phòng và khả năng
áp dụng của đề tài:
Dựa vào những kết quả đạt được, đề tài có thể phát triển thành hệ thống kiểm soát sự ra vào ở các văn phòng, hoặc các dự án tòa nhà thông minh (smart home) Ứng dụng nhận diện biển số
xe có thể được ứng dụng trong các bãi giữ xe thông minh, các trạm thu phí đường bộ
6 Công bố khoa học của SV từ kết quả nghiên cứu của đề tài (ghi rõ tên tạp chí nếu có)
hoặc nhận xét, đánh giá của cơ sở đã áp dụng các kết quả nghiên cứu (nếu có): Không có
Ngày 15 tháng 08 năm 2015
SV chịu trách nhiệm chính thực hiện đề tài
(kí, họ và tên)
Trang 8Nhận xét của người hướng dẫn về những đóng góp khoa học của SV thực hiện đề tài (phần
này do người hướng dẫn ghi):
Ngày tháng năm
Xác nhận của Trường Người hướng dẫn
Trang 9MỞ ĐẦU
Ngày nay, với sự phát triển mạnh mẽ của ngành công nghiệp điện tử phần cứng, các máy tính đóng vai trò ngày càng quan trọng trong công việc cũng như đời sống
Tuy nhiên, mảnh ghép còn thiếu của máy tính chính là thị giác Nếu mảnh ghép này được hoàn thiện sẽ góp phần nâng trí tuệ nhân tạo (AI) lên một tầm cao mới và các máy tính có thể làm các công việc như con người
Khởi đầu vào thập niên 70, khi mà ngành khoa học không gian vũ trụ phát triển, vấn đề đặt ra là cần có các robot thám hiểm có khả năng nhận biết như con người Ngày nay, với các máy tính có cấu hình mạnh mẽ, thị giác đã được ứng dụng trong nhiều lĩnh vực
OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 đã đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng dụng
Gìn giữ trật tự an ninh luôn là vấn đề cấp thiết của xã hội Hiện nay, một số công nghệ nhận diện bằng vân tay, nhận diện mống mắt,… đã được áp dụng nhưng chi phí mua sắm trang thiết bị vẫn còn cao Với mong muốn tìm ra giải
pháp giải quyết vấn đề trên, nhóm nghiên cứu đã mạnh dạn chọn đề tài Nhận diện hình ảnh dùng thư viện OpenCV, mục tiêu chính là xây dựng ứng dụng
nhận diện khuôn mặt ở các hướng nhìn khác nhau với chi phí thấp Ngoài ra, nhóm còn xây dựng ứng dụng nhận diện biển số xe ô tô hướng tới thiết kế bãi giữ
xe thông minh Các phương pháp nghiên cứu tư duy phân tích, DOITS, 6 chiếc
mũ tư duy đã được vận dụng trong đề tài
Vì đề tài mang tính chất tìm hiểu và ứng dụng, nên nhóm nghiên cứu chỉ tập trung vào phần xử lý ảnh dùng thư viện OpenCV Ứng dụng nhận diện khuôn mặt sẽ hoạt động trên kit Raspberry PI và xử lý trực tiếp ảnh nhận từ camera Do khuôn khổ của đề tài có hạn nên ứng dụng nhận diện biển số xe chỉ dừng lại ở việc nhận diện biển số trên ảnh tĩnh
Trang 10CHƯƠNG 1
CƠ SỞ LÝ THUYẾT
1.1 Giới thiệu về thư viện OpenCV
OpenCV (Open Computer Vision library) hoàn thiện thành phiên bản 1.0 năm
2006 Phiên bản mới nhất hiện nay là 3.0 Thư viện OpenCV lúc đầu được viết bằng ngôn ngữ lập trình C, về sau đã được mở rộng sang các ngôn ngữ khác như Python, C++ và tương thích vớ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 CV 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 ứng dụng lớn Ngoài ra còn có các giải pháp kèm theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết
kế riêng cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng
OpenCV là công cụ hữu ích cho việc nghiên cứu, ứng dụng CV 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óa cho 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ý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn OpenCV thích hợp để phát triển nhanh ứng dụng
OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiê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
Cấu trúc thư viện OpenCV:
Trang 11Hình 1.1 Cấu trúc thư viện OpenCV Ban đầu, phiên bản OpenCV 1.0 được viết bằng ngôn ngữ C, dữ liệu ảnh được
lưu trữ trên RAM sử dụng cấu trúc C được gọi là lplImage Điều này đem lại một
bất tiện là chúng ta phải tự giải phóng vùng nhớ lưu trữ dữ liệu ảnh sau khi sử dụng Sau đó, OpenCV 2.0 ra đời, kế thừa những ưu điểm đã có từ phiên bản 1.0,
sử dụng ngôn ngữ C++ và toán tử cv::Mat ra đời Kể từ đây, tất cả các kiểu dữ liệu ảnh, các ma trận đều được lưu dưới dạng cv::Mat Từ đây việc giải phóng vùng nhớ sau khi sử dụng được thực hiện một cách tự động Về cơ bản, Mat là
một lớp gồm 2 phần dữ liệu: hằng số header ma trận (chứa các thông tin như kích thước ma trận, phương thức sử dụng để lưu trữ và địa chỉ lưu trữ ma trận …) và con trỏ ma trận chứa giá trị các pixel
Hình 1.2 Minh họa kiểu dữ liệu của toán tử mat
Trang 121.2 Không gian màu RGB và xám
Không gian màu là phương thức pha trộn các thành phần màu tạo thành các màu sắc Hệ màu RGB mô tả màu sắc bằng ba thành phần Red, Green, Blue trong một mô hình gọi là không gian màu RGB Không gian này được minh họa bằng một khối lập phương với các trục chính R, G, B
Hình 1.3 Minh họa không gian màu RGB
Mỗi màu trong không gian RGB đều được biểu diễn như là một vector thông qua ba vector cơ sở là Red, Green, Blue Do đó, ứng với các tổ hợp khác nhau của ba màu này sẽ cho ta một màu mới RGB là không gian màu rất phổ biết được dùng trong đồ họa máy tính và các thiết bị kỹ thuật số như máy ảnh, điện thoại,…Với một ảnh số được mã hóa bằng 24 bit thì có nghĩa là sẽ có 8 bit cho kênh R (màu đỏ), 8 bit cho kênh G (màu xanh lục) và 8 bit cho kênh B (màu lam), trong đó mỗi kênh sẽ có giá trị từ 0 đến 255 Như vậy sẽ có 255x255x255 = 1.66 triệu màu được tạo ra
Không gian màu xám được tạo thành từ các thành phần màu đen và trắng Việc chuyển đổi không gian màu RGB sang xám được thực hiện bằng cách thay đổi độ sáng trên từng pixel ảnh qua công thức sau:
' 0.2126 0.7152 0.0722
Y R G B (1.1) Trong OpenCV, ta sử dụng hàm cvtColor để chuyển đổi ảnh từ hệ màu RGB
Trang 13Trong đó original là ma trận ảnh gốc, gray là ma trận ảnh sau khi chuyển đổi, CV_BGR2GRAY là tham số cho biết ảnh gốc (RGB) sẽ đƣợc chuyển thành ảnh
Hình 1.5 Một ví dụ về histogram ảnh
Trang 14Cân bằng mức xám (Histogram equalization) là phương pháp dùng để giảm bớt độ tương phản của ảnh dựa vào lược đồ Histogram của ảnh
Hình 1.6 Cân bằng Histogram ảnh
Việc cân bằng này là cần thiết vì đôi khi độ tương phản giữa đối tượng mà ta muốn xử lý (khuôn mặt hoặc ký tự biển số xe) và phông nền là không cao bởi nhiều yếu tố môi trường như ánh nắng, bóng mờ,…gây khó khăn cho việc nhận diện đối tượng Để thực hiện cân bằng xám trong OpenCV ta dùng hàm
equalizeHist:
equalizeHist( source, destination );
Trong đó source là ma trận ảnh gốc, destination là ma trận ảnh sau khi cân
bằng
Trang 15a) ảnh gốc b) ảnh sau khi cân bằng
Hình 1.7 Kết quả sau khi chạy hàm equalizeHist
1.4 Đặc trưng Haar-like
Đặc trung Haar-like được tạo thành bằng việc kết hợp các hình chữ nhật trắng,
đen với nhau theo một trật tự, một kích thước nào đó Hình 1.8 mô tả các đặc trưng Haar-like cơ bản như sau:
Hình 1.8 Các đặc trưng Haar-like cơ bản
Trang 16Dùng các đặc trưng trên, ta có thẻ tính được giá trị của các đặc trưng Haar-like
là sự chênh lệch giữa tổng của các pixel của các vùng đen và trắng theo công thức sau:
f(x) =Tổngvùng đen (các mức xám của pixel) - Tổngvùng trắng (các mức xám của pixel)
(1.2)
Sử dụng các giá trị này, so sánh với giá trị của các pixel thô, các đặc trưng Haar-like có thể tăng/giảm sự thay đổi in-class/out-of-class (bên trong hay bên ngoài lớp khuôn mặt người), do đó sẽ làm cho bộ phân loại dễ hơn
Có thể thấy, ta cần tính tổng các pixel trên ảnh, từ đó mới xác định được các giá trị đặc trưng Haar-like Khối lượng các phép toán để tính các giá trị của các đặc trưng Haar-like trên toàn bức ảnh là khá lớn, độ trễ lớn nên không thể đáp ứng được với các ứng dụng real-time
Ta có thể tính giá trị của đặc trưng Haar-like rất nhanh thông qua một cách thức được gọi là “Integral Image” Phương pháp này do Viola và Jones đề xuất một mảng 2 chiều với kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó
Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh.Ở đây, Integral Image tại vị trí (x, y) có giá trị bằng tổng các giá trị pixel nằm trong hình chữ nhật được định bởi góc trái trên là (0, 0) và góc phải dưới là (x, y):
Trang 17Sau khi đã tính được Integral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản
Giả sử ta cần tính tổng các giá trị mức xám của vùng D như trong hình 1.9, ta
có thể tính như sau:
D A B C D (A B ) ( A C )A (1.4) Với A là giá trị tại điểm P1, A + B là giá trị tại P2, A + C là giá trị tại P3, A +
B + C + D chính là giá trị tại điểm P4 trên Intergral Image Vậy biểu thức (2.4)
có thể viết lại như sau:
Bộ phân loại mạnh có thể đưa ra câu trả lời chính xác trên 60% trong khi đó với
bộ phân loại yếu cho câu trả lời chính xác chỉ hơn việc đoán một cách ngẫn nhiên một chút
Mỗi bức ảnh có một vector riêng giúp máy tính phân biệt ảnh này với ảnh khác Trong đề tài này nhóm nghiên cứu sẽ tính toán các vector riêng dựa trên phương pháp Haar Giả sử ta có hai ký tự 9 và 6, ta có thể dễ dàng phân biệt 2 ký tự này nhưng đối với máy tính, ta phải đưa chúng về cùng kích thước rồi chia chúng thành 16 ô nhỏ khác nhau như hình 2.10:
P2 P1
P3
Trang 18Hình 1.11 Minh họa cách tính toán đặc trƣng của các kí tự biển số xe
Ta có thể thấy để phân biện 2 số trên có thể dựa vào tổng số pixel đen ở các ô (1,4), (4,1) , (1,3)…số pixdel đen ở các ô này là khác nhau hoàn toàn Tính toán
số pixel đen ở 16 ô nhỏ này ta có thể thu đƣợc nhiều nhất là 16 đặc trƣng để có thể phân biệt đƣợc ký tự 9 và 6 Tuy nhiên với nhiều ký tự hơn ta cần phải tính toán để tìm ra nhiều đặc trƣng hơn, các đặc trƣng có thể có tỉ lệ pixel đen/trắng nào đó Từ 16 đặc trƣng ban đầu, ta kết hợp chúng để tạo ra những đặc trƣng mới Số đặc trƣng càng nhiều thì kết quả phân loại càng chính xác
Đặc trƣng Haar-like cũng đƣợc vận dụng để phát hiện khuôn mặt Lúc này ảnh
đƣợc quét bằng một cửa sổ con chứa một đặc trƣng Haar-like
Hình 1.12 Nhận dạng khuôn mặt sử dụng đặc trƣng haar-like
(x) đƣợc định nghĩa
Trang 19 là hệ số với ý nghĩa là quyết định dấu của bất phương trình
Nếu đặc trưng Haar-like tại cửa sổ con x vượt quá một ngưỡng nào đó thì đó
là khuôn mặt, ngược lại thì không phải là khuôn mặt
1.6 Chuỗi các bộ phân lớp (Cascade Classifier)
Dựa trên những đặc trưng haar-like, thuật toán Cascade Classifier tiến hành rút trích ra các đặc trưng của đối tượng Do đối tượng có thể biến đổi nhiều hình dạng khác nhau nên phải phân tầng nhận dạng
Những cửa chỗ được cho đi qua bởi bộ phân lớp đầu sẽ được xem xét bởi bộ phân lớp sau đó: nếu bộ phân lớp cho rằng đó không phải là khuôn mặt thì ta loại bỏ; nếu bộ phân lớp cho rằng đó là khuôn mặt thì ta lại cho đi qua và chuyển đến bộ phân lớp phía sau
Những bộ phân lớp càng về sau thì càng phức tạp hơn, đòi hỏi sự tính toán nhiều hơn Người ta gọi những cửa sổ con (mẫu) mà bộ phân lớp không loại
bỏ được là những mẫu khó nhận dạng Những mẫu này càng đi sâu vào trong
Trang 20chuỗi các bộ phân lớp thì càng khó nhận dạng Chỉ những cửa sổ đi qua được tất cả các bộ phân lớp thì ta mới quyết định đó là khuôn mặt
Hình 1.13 Mô hình Cascade Classifier Tóm lại, chuỗi các bộ phân lớp sẽ xử lý các mẫu (cửa sổ con) đi vào theo nguyên tắc sau: nếu một bộ phân lớp nào đó cho rằng đó không phải là mặt người thì ta loại bỏ ngay; còn nếu bộ phân lớp cho rằng đó là khuôn mặt thì ta chuyển đến bộ phân lớp sau Nếu một mẫu trót lọt hết tất cả các bộ phân lớp thì ta mới quyết định đó là khuôn mặt
b Huấn luyện một cascade
Trước tiên, ta cần nói đến hai độ đo quan trọng là detection rate và false positive rate Cụ thể như sau:
Detection rate = Số lượng các vùng được nhận dạng là khuôn mặt và đúng /
(1.7)
Trang 21 False positive rate của cascade được tính như sau:
1
K
f i
(1.8)
với di là detection rate của bộ phân lớp thứ i
Thuật toán huấn luyện:
o P = tập các mẫu là khuôn mặt (positive.)
o N = tập các mẫu không phải là khuôn mặt (negative.)
o F0 = 1.0; D0 = 1.0
o i = 0 //Chỉ số của bộ phân lớp trong cascade
Bước 3:Trong khi mà Fi> Ftarget:
o i = i +1
//Xây dưng bộ phân lớp thứ i trong cascade
o ni = 0 //Số bộ phân lớp yếu của bộ phân lớp thứ i
Tính Fi và Di của cascade hiện tại thông qua validation set
Giảm ngưỡng của bộ phân lớp thứ i cho tới khi cascade hiện tại đạt detection rate ít nhất là d*Di-1 (để ý là Fi cũng sẽ thay đổi theo)
Trang 22o N = 0
o Nếu Fi> Ftarget: Đƣa những mẫu không phải là khuôn mặt vào cascade hiện tại và tiến hành nhận dạng Những mẫu mà bị nhận dạng là khuôn mặt sẽ đƣợc đƣa vô N
Nhƣ đã nói nguyên tắc xử lý của cascade là nếu có một bộ phân lớp nào đó nói mẫu không phải là khuôn mặt thì loại bỏ ngay, còn nếu bộ phân lớp nói đó là khuôn mặt thì ta chuyển cho bộ phân lớp phía sau Do đó, ta thấy trong thuật toán, khi xây dựng các bộ phân lớp của cascade, tập P (ứng với tập ảnh khuôn mặt) luôn không đổi, còn tập N (ứng với tập ảnh không phải khuôn mặt) thì thay đổi Giả sử ta đã xây dựng đƣợc cascade đến bộ phân lớp thứ i Ta sẽ đƣa các ảnh không phải khuôn mặt vô cascade hiện thời và tiến hành nhận dạng Các ảnh mà
bị cho là khuôn mặt sẽ đƣợc đƣa vào tập N để xây dựng tiếp bộ phân lớp thứ i+1
Trang 23và các tính năng khác … tất cả đƣợc tích hợp bên trong chip có điện năng thấp này Tính đến 12/2014, khoảng 4.8 triệu board Raspberry PI đã đƣợc bán ra
Hình 2.1 Doanh số của board Raspberry PI
Trang 24Hình 2.2 Cấu hình và sơ đồ phần cứng board raspberry PI 2
Hình 2.3 Các thiết bị ngoại vi cần thiết cho Raspberry PI
Đề tài sử dụng module camera làm thiết bị chụp ảnh đầu vào
Trang 25Hình 2.4 Module Camera
Module camera có kích thước 25mm x 20mm x 9mm và nặng 3g Nó được kết nối trực tiếp vào cổng CSI (Camera Serial Interface) trên kit Raspberry PI thông qua cáp tín hiệu Module sử dụng cảm biến hình ảnh CMOS QSXGA 5 Mpixel với công nghệ OmniBSI do hãng OmniVision chế tạo, có tiêu cự cố định Nó hỗ trợ quay video với độ phân giải full HD tốc độ 30 fps, độ phân giải HD là 60 fps
và VGA là 60/90 fps
Hình 2.5 Cách kết nối module camera với kit raspberry PI
Trang 26b Phần mềm
Raspberry PI chủ yếu sử dụng các hệ điều hành dựa trên nhân Linux (Linux Kernel)
Hình 2.6 Một số hệ điều hành chạy trên kit Raspberry PI
Để kit Raspberry PI nhận đƣợc module camera, ta cần cấu hình nó bằng cách
gõ lệnh: sudo raspi-config
Tiếp theo, chọn Enable camera và bấm Enter, sau đó nhấn phím Tab để di chuyển con trỏ tới nút Finish, hệ điều hành sẽ yêu cầu reboot Sau khi khởi động
lại, module camera đã sẵn sàng để sử dụng
c Thƣ viện lập trình giao tiếp I/O BCM2835
Thƣ viện BCM2835 là thƣ viện viết bằng ngôn ngữ C, cung cấp các hàm truy
xuất đến GPIO và các IO khác trên nền tảng chip Broadcom BCM2835 Board Raspberry PI gồm 26 chân IO, ta có thể điều khiển và giao tiếp với các ngoại vi khác thông qua các chân này
Trang 27Hình 2.7 Sơ đồ chân GPIO của kit Raspberry PI
Trang 282.1.2 Hiện thực hóa ứng dụng nhận diện khuôn mặt
a Bài toán thiết kế
Các giải pháp nhận diện đã rất phát triển trong những năm gần đây với sự ra
đời của các hệ thống nhận diện vân tay, mống mắt, giọng nói…Mặc dù công nghệ nhận diện khuôn mặt có độ chính xác không cao như những phương pháp
kể trên nhưng nó có ưu điểm là quá trình nhận diện không cần đến sự tiếp xúc trực tiếp giữa đối tượng và thiết bị thu Điều này rất thuận lợi khi triển khai các ứng dụng theo dõi, giám sát đối tượng Hơn nữa ta có thể cho thiết bị thu vào hộp bảo vệ để tránh hư hỏng
Mục tiêu của đề tài là tạo ra một ứng dụng nhận diện chính xác khuôn mặt ở mọi hướng nhìn, có thể ứng dụng để kiểm soát việc ra vào trong các văn phòng, các dự án nhà thông minh (smart home) nhằm tăng độ tin cậy và bảo mật cho những nơi này Từ phần này, bài báo cáo sẽ gọi tắt ứng dụng nhận diện khuôn mặt trên kit Raspberry PI là ứng dụng nhận diện khuôn mặt Tính năng của ứng dụng gồm các bước sau:
Bước 1: Tạo cơ sở dữ liệu phục vụ việc nhận diện Bước này người dùng sẽ
chạy chế độ huấn luyện Hình ảnh sẽ được chụp từ camera, xử lý sau đó được lưu lại
Bước 2: Nhận diện khuôn mặt Ứng dụng sẽ chạy với chế độ nhận diện Đầu
tiên người dùng sẽ đăng nhập mật khẩu Sau đó, ứng dụng sẽ xử lý ảnh thu từ camera để nhận diện đối tượng, nếu đối tượng có trong cơ sở dữ liệu thì kit Raspberry PI sẽ xuất mức cao ở ngõ ra chân GPIO 12 làm led sáng Tín hiệu này
có thể dùng làm tín hiệu kích relay bật, động cơ quay để mở cửa
Trang 29Hình 2.8 Phần cứng ứng dụng nhận diện khuôn mặt
Trang 30b Lưu đồ giải thuật
Tải cơ sở dữ liệu
Thông báo lỗi OK?
Trang 31Hình 2.10 Lưu đồ chương trình chính nhận diện khuôn mặt (tiếp theo)
Tách khuôn mặt
Chuẩn hóa kích thước ảnh
Nhận diện khuôn mặt
End
Thông báo
Đ
Đ
Trang 32Begin
Cân bằng xám Chuyển xám
Tách khuôn mặt
Chuẩn hóa kích thước ảnh
Chụp ảnh Khởi tạo camera
Lưu ảnh Tạo và lưu thông tinh ảnh Biến đếm = 0
Trang 33c Tạo tập tin huấn luyện:
Bước 1: Chuẩn bị tập dữ liệu huấn luyện gồm 2250 ảnh màu kích thước
640x480 pixel Trong đó: 750 ảnh positive (chứa khuôn mặt) được chụp, sưu tầm trên mạng internet Các ảnh này nên được chụp ở các góc khác nhau để nhận được tất cả các trường hợp 1500 ảnh negative (không chứa khuôn mặt) Ảnh này
có thể được lấy từ những video ca nhạc, phim,… Nếu muốn lấy ảnh từ video, chúng ta sử dụng công cụ ffmpeg:
ffmpeg -i tenvideo.mpg nagetive_samples_%d.bmp
Bước 2: Cắt và đánh dấu các ảnh Positive:
Bước này ta sẽ tạo ra một file vector chứa tên của các ảnh positive và vị trí của khuôn mặt trong các ảnh này Phần mềm Objectmarker được sử dụng để xác định tọa độ khuôn mặt Giả sử ta đặt các tập tin ảnh positive vào thư mục
D:\HaarTraining\train\positive\rawdata Trong thư mục
D:\HaarTraining\train\positive\ có chứa các tập tin objectmarker.exe, cv.dll và highgui.dll
Chạy objectmarker.exe và chúng ta sẽ thấy có 2 cửa sổ xuất hiện: một cửa sổ
là tập tin ảnh đang được xử lý và một cửa sổ commandline hiện thị tên tập tin đó
Hình 2.12 Giao diện chương trình objectmarker.exe
Click vào phía trên bên trái vùng ảnh chứa khuôn mặt, nhấn giữ chuột trái Tiếp tục kéo chuột xuống góc phải của vùng ảnh
Trang 34Hình 2.13 Đánh dấu vùng ảnh có chứa khuôn mặt
Khi đã ưng ý, bấm phím SPACE để hoàn tất Cửa sổ Commandline sẽ hiển thị tọa độ, kích thước của vùng mà chúng ta đã chọn
Trang 35Trong đó:
createsamples.exe: tên chương trình tạo vector
-vec D:\HaarTraining\train\vector.vec: file vector ouput được lưu với tên
Sau bước này ta sẽ thu được tập tin vector.vec
Tập tin vector.vec là tập tin vectơ chứa ảnh thumbnail với kích cỡ, vị trí được chỉ định trong tập tin info.txt Dựa vào file này mà chương trình sẽ tìm ra các đặc
trưng haar-like của đối tượng, từ đó tạo bộ nhận diện dựa trên đặc trưng này
Bước 4: Tạo chỉ mục tập ảnh không chứa khuôn mặt, sau đó lưu lại với tên
negative.txt có nội dung:
Bước 5: Huấn luyện nhận dạng (Haar-Training)
haartraining.exe -data D:\HaarTraining –vec
D:\HaarTraining\train\vector.vec -bg
D:\HaarTraining\train\negative\negative.txt -npos 750 -nneg 1500 -nstages 15 -mem 1024 -w 24 -h 24 -nonsym -minhitrate 0.995 -maxfalsealarm 0.5
Trong đó:
-data D:\HaarTraining: đường dẫn thư mục chứa các file thông
số ngõ ra được cập nhật của tầng huấn luyện (cascade) Khi huấn luyện
Trang 36chương trình sẽ tạo ra các thư mục từ 0 nstages Khi huấn luyện xong
sẽ tạo ra file HaarTraining.xml để sử dụng trong chương trình
-vec D:\HaarTraining\train\vector.vec: chứa đường dẫn đến file vector đã tạo ra ở bước 3
-bg D:\HaarTraining\train\negative\negative.txt: đường dẫn đến tập tin chứa danh sách các ảnh negative đặt chung thư mục với ảnh negative
-nonsym: khai báo các đối tượng huấn luyện là không có tính đối xứng
-minhitrate 0.995: là tỉ lệ dự đoán đúng tối thiểu
-maxfalsealarm 0.5: tỉ lệ dự đoán sai tối đa
Trang 37Hình 2.15 Quá trình chạy huấn luyện
Kết thúc bước này ta thu được tập tin haarcascade_frontface.xml
Tập tin haarcascade_frontface.xml là kết quả của quá trình huấn luyện, sử
dụng trong chương trình Nội dung tập tin này là các đặc trưng của đối tượng, dựa vào đó mà chương trình có thể nhận biết đối tượng có tồn tại trong ảnh hay không
Thư viện OpenCV đã cung cấp sẵn rất nhiều tập tin *.xml trong thư mục /opencv/data/haarcascades/ Nhóm nghiên cứu đã sử dụng thêm các tập tin haarcascade_eye_tree_eyeglasses.xml và haarcascade_eye.xml giúp xác định
vùng mắt để tăng độ chính xác khi nhận diện khuôn mặt
d Các hàm, chương trình được sử dụng trong ứng dụng
Chương trình takephoto: Đây là chương trình hỗ trợ, ứng dụng sẽ chụp ảnh từ
camera của kit Raspberry PI sau đó lưu lại
Chương trình prepare: Chương trình sẽ dò tìm khuôn mặt có trong ảnh, nếu
có thì sẽ cắt, xử lý sau đó lưu lại
Trang 38Chương trình ledblink: Chương trình này nhằm mục đích là cho ngõ ra cổng
GPIO 12 của kit Raspberry PI lên mức cao, delay 1 khoảng thời gian là 2 giây, sau đó đưa ngõ ra này xuống mức thấp
Hàm read_csv: Đọc cơ sở dữ liệu là các ảnh chụp khuôn mặt lưu trữ trong thư
mục /home/pi/camcv/data để phục vụ cho quá trình nhận diện
Hàm saysomething: Đếm số lần ứng dụng phát hiện khuôn mặt đối tượng có
trong cơ sở dữ liệu Mục đích của hàm này là để đảm bảo đối tượng đã được
nhận diện chính xác Khi đếm được 15 lần, hàm này sẽ gọi chương trình ledblink
Hàm trace: Đưa ra các thông báo cho người dùng
Hàm traceStep: Đưa ra mức tin cậy khi nhận diện đối tượng
Hàm main: Đây là hàm quan trọng nhất của ứng dụng Hàm này sẽ nhận các
thông số đầu vào như sau: /camcv a b c Trong đó camcv là tên ứng dụng nhận
diện khuôn mặt a: Nếu nhập 0 thì ứng dụng không cân bằng histogram trước khi nhận dạng ảnh và ngược lại b: Ngưỡng kiểm tra nhận diện, nếu mức tin cậy > số
ta nhập vào thì ứng dụng xác nhận đối tượng có trong cơ sở dữ liệu c: Nhập 0 là chạy chế độ nhận diện, nhập 1 là chế độ huấn luyện Quá trình hoạt động của hàm này tương tự như lưu đồ đã được trình bày ở mục 2.1.2.b
e Kết quả ứng dụng
Ứng dụng hoạt động ổn định, không bị giật, lag Nhóm nghiên cứu đã sử dụng
dữ liệu ảnh tại địa chỉ
Trang 39200/200, nhận diện chính xác 190/200 trường hợp Các trường hợp không phát hiện được là do ảnh mờ hoặc điều kiện lúc chạy nhận diện là vào ban đêm có ánh sáng yếu
Trường hợp kiểm tra với người thật, với 40 người làm mẫu thì tỉ lệ phát hiện khuôn mặt ở mọi hướng nhìn là 40/40, tỉ lệ nhận diện chính xác là 35/40
Một số ảnh chụp màn hình kết quả chạy thử ứng dụng:
Hình 2.16 Phát hiện khuôn mặt trường hợp nhìn thẳng
Trang 40Hình 2.17 Phát hiện khuôn mặt trường hợp nhìn qua trái