1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Nhận diện ảnh dùng OPENCV

91 879 3

Đ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 91
Dung lượng 3,83 MB
File đính kèm Nhận diện ảnh dùng OPENCV.rar (3 MB)

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

Nội dung

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 1

BỘ 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 2

BỘ 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 3

MỤ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 4

Phụ 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 5

DANH 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 6

DANH 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 7

BỘ 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 8

Nhậ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 9

MỞ ĐẦ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 10

CHƯƠ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 11

Hì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 12

1.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

YRGB (1.1) Trong OpenCV, ta sử dụng hàm cvtColor để chuyển đổi ảnh từ hệ màu RGB

Trang 13

Trong đó 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 14

Câ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 15

a) ả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 16

Dù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 17

Sau 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 18

Hì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 20

chuỗ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 22

o 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 23

và 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 24

Hì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 25

Hì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 26

b 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 27

Hình 2.7 Sơ đồ chân GPIO của kit Raspberry PI

Trang 28

2.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 29

Hình 2.8 Phần cứng ứng dụng nhận diện khuôn mặt

Trang 30

b Lưu đồ giải thuật

Tải cơ sở dữ liệu

Thông báo lỗi OK?

Trang 31

Hì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 32

Begin

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 33

c 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 34

Hì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 35

Trong đó:

 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 36

chươ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 37

Hì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 38

Chươ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 39

200/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 40

Hình 2.17 Phát hiện khuôn mặt trường hợp nhìn qua trái

Ngày đăng: 03/04/2016, 23:28

HÌNH ẢNH LIÊN QUAN

Hình 1.6. Cân bằng Histogram ảnh. - Nhận diện ảnh dùng OPENCV
Hình 1.6. Cân bằng Histogram ảnh (Trang 14)
Hình 2.2. Cấu hình và sơ đồ phần cứng board raspberry PI 2. - Nhận diện ảnh dùng OPENCV
Hình 2.2. Cấu hình và sơ đồ phần cứng board raspberry PI 2 (Trang 24)
Hình 2.4. Module Camera. - Nhận diện ảnh dùng OPENCV
Hình 2.4. Module Camera (Trang 25)
Hình 2.7. Sơ đồ chân GPIO của kit Raspberry PI. - Nhận diện ảnh dùng OPENCV
Hình 2.7. Sơ đồ chân GPIO của kit Raspberry PI (Trang 27)
Hình 2.8. Phần cứng ứng dụng nhận diện khuôn mặt. - Nhận diện ảnh dùng OPENCV
Hình 2.8. Phần cứng ứng dụng nhận diện khuôn mặt (Trang 29)
Hình 2.11.  Hàm huấn luyện ảnh. - Nhận diện ảnh dùng OPENCV
Hình 2.11. Hàm huấn luyện ảnh (Trang 32)
Hình 2.17. Phát hiện khuôn mặt trường hợp nhìn qua trái. - Nhận diện ảnh dùng OPENCV
Hình 2.17. Phát hiện khuôn mặt trường hợp nhìn qua trái (Trang 40)
Hình 2.21. Nhận diện khuôn mặt trường hợp nhìn hướng lên. - Nhận diện ảnh dùng OPENCV
Hình 2.21. Nhận diện khuôn mặt trường hợp nhìn hướng lên (Trang 42)
Hình 2.23. Nhận dạng khuôn mặt trường hợp nhìn thẳng. - Nhận diện ảnh dùng OPENCV
Hình 2.23. Nhận dạng khuôn mặt trường hợp nhìn thẳng (Trang 43)
Hình : Giao diện ứng dụng nhận diện biển số xe ô tô. - Nhận diện ảnh dùng OPENCV
nh Giao diện ứng dụng nhận diện biển số xe ô tô (Trang 44)
Hình 2.16. Lưu đồ giải thuật ứng dụng nhận diện biển số xe. - Nhận diện ảnh dùng OPENCV
Hình 2.16. Lưu đồ giải thuật ứng dụng nhận diện biển số xe (Trang 45)
Hình 2.17. Giao diện chính của ứng dụng nhận diện biển số xe. - Nhận diện ảnh dùng OPENCV
Hình 2.17. Giao diện chính của ứng dụng nhận diện biển số xe (Trang 47)
Hình 2.18. Kết quả nhận diện biển số xe thứ nhất. - Nhận diện ảnh dùng OPENCV
Hình 2.18. Kết quả nhận diện biển số xe thứ nhất (Trang 47)
Hình 2.19. Kết quả nhận diện biển số xe thứ 2. - Nhận diện ảnh dùng OPENCV
Hình 2.19. Kết quả nhận diện biển số xe thứ 2 (Trang 48)

TỪ KHÓA LIÊN QUAN

w