Trường hợp vật thể có hình dạng và màu sắc giống với khuôn mặt người. Đôi khi hệ thống vẫn nhận nhầm vật thể đó là khn mặt người. Chẳng hạn như hình 5.23 hệ thống nhận nhầm chiếc ghế là khuôn mặt người do màu ghế gần giống với màu da người. Hình 5.24 a) và b) là kết quả báo tin khi hệ thống phát hiện người và nhận dạng khn mặt. Người dùng có thể gửi tin nhắn đến thuê bao để tắt – mở thiết bị hệ thống.
a) Báo tin phát hiện người b) Báo tin nhận dạng khn mặt Hình 5.24 Tin nhắn được gửi khi phát hiện người và khuôn mặt.
5.3. KẾT QUẢ THỐNG KÊ
Bảng 5.1. Thống kế kết quả nhận dạng dáng người
Số người thử Đi thẳng Đi ngang
Lần 1 50 88 % 92 %
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 63 Bảng thống kê 5.1 là kết quả nhóm thực hiện khi quan sát số lượng người đi bộ qua Camera của hệ thống. Tốc độ người đi bộ bình thường ở hai địa điểm trong hai khoảng thời gian bất kỳ. Camera sẽ khơng nhận diện được nhóm đơng trên 5 người và đi sát nhau, hoặc đi xa so với tầm quan sát của Camera.
Bảng 5.2. Thống kế kết quả nhận dạng khuôn mặt khoảng cách 0.5 m
Số ảnh thử Nhìn thẳng Nhìn phải Nhìn trái
Người thứ nhất 50 86 % 70% 72%
Người thứ hai 50 80% 64% 68%
Bảng 5.3. Thống kế kết quả nhận dạng khuôn mặt khoảng cách 1 m
Số ảnh thử Nhìn thẳng Nhìn phải Nhìn trái
Người thứ nhất 50 68 % 54% 58%
Người thứ hai 50 64% 56% 60%
Từ bảng thống kê cho ta thấy giải thuật mà đang xây dựng khá đơn giản nhưng lại có hiệu suất khá cao so với yêu cầu đặt ra trước đó. Tùy vào ánh sáng môi trường và khoảng cách khác nhau mà hiệu suất cũng sẽ thay đổi, với kết quả này đã thực hiện ở nhiều môi trường ánh sáng khác nhau để cho thấy xử lý ảnh phụ thuộc khá nhiều vào mơi trường mà nó xử lý. Trong những kết quả đã kiểm nghiệm, khi khn mặt nhìn thẳng sẽ có độ chính xác cao nhất. Nhìn nghiêng sẽ có độ chính xác thấp hơn so với cùng mơi trường có độ sáng như nhau.
Giải thuật sử dụng trong đồ án này khá đơn giản, nhưng vẫn đảm bảo yêu cầu là nhận dạng được dáng người và nhận dạng được khuôn mặt. Tuy nhiên, tỉ lệ phần trăm đặc điểm nhận dạng thấp, đôi khi nhận dạng nhầm đối tượng. Vẫn cịn có những hạn chế là khoảng cách để nhận dạng cịn ngắn, và mơi trường ánh sáng tối hơn hệ thống sẽ không đảm bảo độ chính xác như lúc đầu. Chính vì vậy, khi thực hiện đề tài này, luôn tạo điều kiện về mơi trường được xem là lí tưởng để đạt kết quả tốt nhất, trong khi ngồi mơi trường thực tế kết quả sẽ bị ảnh hưởng rất nhiều.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 64
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
6.1. KẾT LUẬN
Sau khoảng 3 tháng nghiên cứu và tìm hiểu về đề tài “Báo trộm dùng Camera Pi và Raspberry Pi”, nhóm thực hiện đã kết thúc đề tài theo như định hướng ban đầu. Trong thời gian tìm hiểu và nghiên cứu về lý thuyết kỹ thuật phát hiện người cũng như nhận dạng khn mặt, xây dựng chương trình giải thuật dựa trên việc sử dụng ngôn ngữ Matlab để kết nối với kit Raspberry Pi, nhóm thực hiện đã thu được kết quả như sau:
- Hiểu và nắm được phương pháp phát hiện dáng người, khuôn mặt.
- Biết cách sử dụng ngôn ngữ Matlab trong nhận dạng và so sánh khuôn mặt. - Kết hợp giữa nhận dạng người song song với khuôn mặt của nhiều đối tượng. - Thực hiện việc kết nối thành công giữa phần mềm Matlab và kit Raspberry. - Thực hiện được điều khiển được Sim900 thông qua Raspberry bằng Matlab.
Về phần cứng, mạch được thiết kế theo từng phần, vì vậy có thể tháo lắp dễ dàng. Về phần chương trình, kết quả thu về đạt được một cách tương đối với khoảng thời gian phát hiện không quá 5s, điều kiện phát hiện người cũng như nhận dạng khn mặt cịn phụ thuộc vào ánh sáng của mơi trường, chất lượng Camera. Những khn mặt có góc nghiêng so với phương thẳng của Camera cịn gặp nhiều khó khăn khi nhận dạng. Nhược điểm lớn khi nhận dạng người là quá nhiều đối tượng sẽ làm giảm tốc độ xử lý của Camera.
6.2. HƯỚNG PHÁT TRIỂN
Với những kiến thức còn hạn chế nên cịn mắc phải nhiều sai sót, vì vậy nhóm thực hiện sẽ cố gắng để có thể phát triển và ứng dụng đề tài trong thực tiễn. Đối với hướng phát triển, nhóm thực hiện nhận thấy có thể phát triển thêm các tính năng sau đây để có thể đem lại hiệu quả hơn:
- Cải thiện chất lượng Camera.
- Nâng cao khả năng chính xác trong việc nhận dạng khn mặt. - Chạy độc lập hồn tồn trên Raspberry.
BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP 65
TÀI LIỆU THAM KHẢO
[1] Matt Richardson - Shawn Wallace Getting Started with Raspberry Pi, 2012. [2] Nguyễn Hữu Sáng – Từ Thị Kim Chi, “Điều Khiển Thiết Bị Bằng Cử Chỉ Tay Thông Qua Xử Lý Ảnh”, đồ án tốt nghiệp 2016, trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM.
[3] Navneet DALAL, “Finding People in Images and Videos”, 2006
[4] Nguyen Thanh Hai, Giáo trình Xử Lí Ảnh, NXB Đại Học Quốc Gia, Tp.HCM, 2014.
[5] Nguyễn Trung Hiếu – Bùi Ngọc Liên, “Luận văn dị tìm và cắt ảnh mặt người dùng PCA”, 2010.
[6] Trương Công Lợi, “Nhận Dạng Khuôn Mặt Sử Dụng Phương Pháp Biến Đổi Eigenfaces Và Mạng Nơron”, tóm tắt luận văn thạc sỹ, đại học Đà Nẵng, 2013. [7] Datasheet LM2596, Datasheet 16F887.
[8] Nguyễn Đình Phú, “Giáo trình vi xử lý II”, NXB ĐH Quốc Gia Tp.HCM, 2007.
[9] Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng, “Giáo trình Điện tử cơ bản”, NXB ĐH Quốc Gia Tp.HCM, 2013.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 66
PHỤ LỤC
1. CẤU HÌNH PHẦN CỨNG
- Ở trong mục Resource của Matlab 2014, nhấp vào Add-Ons - Get Hardwave Support Packages.
Ta chọn cách cài đặt từ internet để dowload và cài đặt hệ điều hành. Có thể cài đặt theo đường link sau đây:
https://www.mathworks.com/help/supportpkg/raspberrypiio/ug/install-support-for- raspberry-pi-hardware.html
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 67 Ta chọn Raspberry Pi và chọn phần cài đặt Matlab. Sau đó bấm Next
Kế tiếp, ta chọn Raspberry Pi 2 Module B vì trong đồ án này nhóm đang sử dụng Raspberry pi 2. Và sau đó bấm “Next”.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 68 Một hộp thoại mới hiện ra, ta chọn Manually enter network settings
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 69
Hộp thoại mới hiện ra, ta có thể đặt lại tên trong phần Host-name. Trong phần IP Assignment: ta chọn Manualy enter addresss để đặt lại IP. Sau khi đặt xong IP ta bấm “Next”.
Ta sẽ chuẩn bị một thẻ nhớ để quá trình cài đặt hệ điều hành vào đó. Ta gắn thẻ nhớ vào máy tính, khi đã nhận được thẻ ta sẽ bấm “Next” .
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 70 Hộp thoại mới hiện lên, bấm “Write” để quá trình cài đặt bắt đầu.
Sau khi quá trình cài đặt vào thẻ nhớ đã xong. Ta lấy thẻ nhớ gắn vào kit raspberry và kết nối phần cứng như trong chỉ dẫn như hình bên dưới.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 71 Bấm “Next” để q trình hịn tất.
Quá trình cài đặt thành cơng, nhấn Finish để hồn tất.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 72 Camera pi để lấy hình ảnh, video trực tiếp quay được đưa vào hệ thống, phải chú ý đến vị trí lắp đặt đáp ứng thuận lợi nhất với điều kiện ánh sáng. Ánh sáng nơi đặt Camera pi khơng được chiếu vào Camera vì sẽ làm giảm độ chính xác của video mà Camera thu được. Tuy nhiên, phải đáp ứng đủ sáng để Camera có thể hoạt động hiệu quả. Để kết nối Camera pi với Raspberry, trước hết chúng ta phải cấu hình cho
Raspberry để có thể đọc được tín hiệu truyền đến từ Camera:
Bước 1: kết nối camera pi và kit raspberry như hình 1 bên dưới.
Bước 2: Mở hệ điều hành vừa cài đặt và điều chỉnh Enable Camera từ Raspberry –
config:
- Đăng nhập vào hệ điều hành của Raspberry với tên là “pi” và password là “raspberry” - Mở Terminal và gõ lệnh:
“sudo raspi-config”
- Sau khi hệ thống thực hiện, chúng ta khởi động lại Raspberry để Enable Camera có hiệu lực. Kiểm tra Camera bằng lệnh sau khi đăng nhập lại vào Raspberry:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 73 $ raspistill –o output.jpg
- Lệnh này thực hiện sẽ trả về ảnh có đi .JPG và lưu ở mục mà chúng ta đang hiện hành.
- Thiết kế giao diện điều khiển
+ Khung hiển thị dáng người khi hệ thống nhận dạng được. Các nút bấm để hệ thống bắt đầu làm việc, nút tắt tồn bộ hệ thống, nút chạy lại chương trình. Đây là giao diện chính để điều khiển hệ thống và hiển thị kết quả hình ảnh của q trình xử lí. Giao diện được thiết kế bằng phần mềm Matlap 2014a. Tồn bộ chương trình điều khiển được trình bày trong hình.
2. GIỚI THIỆU PHẦN MỀM MATLAB 2014A
MATLAB là phần mềm cung cấp mơi trường tính tốn số và lập trình, do cơng ty MathWorks thiết kế. MATLAB cho phép tính tốn số với ma trận, vẽ đồ thị hàm số hay biểu đồ thơng tin, thực hiện thuật tốn, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngơn ngữ lập trình khác.
BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP 74
- Với thư viện Toolbox, MATLAB cho phép mơ phỏng tính tốn, thực nghiệm nhiều mơ hình trong thực tế và kỹ thuật.
- Ngơn ngữ lập trình dùng trong hệ tính tốn số cũng có tên gọi là MatLab, thuộc kiểu lập trình thủ tục. Hệ thống giao diện của Matlab gồm những phần như sau:
- Thư viện, các hàm tốn học bao gồm các cấu trúc như tính tổng, sin cosin atan,... các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghich đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library. MatLab có đầy đủ các kiểu dữ liệu đơn giản (số nguyên, số thực, kí tự, logic), kiểu kí tự, kiểu dãy, kiểu ma trận. Ngồi ra, cịn có các kiểu dữ liệu cao cấp hơn như kiểu Cell, kiểu Struck (bản ghi).
- Ngơn ngữ Matlab. Đó là các ngơn ngữ cao về ma trận và mảng, với các dịng lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.
- Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện đồ họa trong môi trường 2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử dụng và máy tính.
- Giao tiếp với các ngơn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác như C, Fortran …
- Môi trường phát triển. Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và các file, ta có thể liệt kê một số như sau:
+ Desktop.
+ Command Window. + Command History.
+ Browsers for viewing help.
Trong đồ án này, nhóm em sử dụng Matlab 2014a.
3. Chương trình - Chương trình xử lí chính function [] = vd_dangnguoi() mypi = raspi(); myCam = cameraboard(mypi,'Resolution','320x240'); flag = 1; while flag
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 75 %% ---------- ---------check for keys & exit ------------------
k=get(gcf,'CurrentCharacter');
if k~='@' % has it changed from the dummy character? set(gcf,'CurrentCharacter','@'); % reset the character % now process the key as required
if k == 'q' break; end end
clearvars -except mypi myCam flag
%%-------------------------------------------------------------------------------------------- mySnap = snapshot(myCam);
bodyDetector = vision.CascadeObjectDetector('UpperBody'); bodyDetector.MinSize = [60 60];
bodyDetector.MergeThreshold = 10; bboxBody = step(bodyDetector, mySnap); peopleDetector = vision.PeopleDetector('UprightPeople_128x64'); ppbox = step(peopleDetector,mySnap); mySnap = insertObjectAnnotation(mySnap,'rectangle',ppbox,'People'); faceDetector = vision.CascadeObjectDetector(); bbox = step(faceDetector, mySnap);
mySnap = insertObjectAnnotation(mySnap,'rectangle',bbox,'Face'); subplot(8,14,[1 8 71 78],'replace'); imshow(mySnap); drawnow %%--------------------------------------------------------------------------------------------------- for i = 1:size(bboxBody,1) I= imcrop(mySnap,bboxBody(i,:)); I = imresize(I,[112 92]); subplot(4,6,[17 18 23 24],'replace'); imshow(I); writeDigitalPin(mypi,23,1); pause(0.1); writeDigitalPin(mypi,23,0); end %%--------------------------------------------------------------------------------------------------
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 76 for i = 1:size(ppbox,1) J= imcrop(mySnap,ppbox(i,:)); J = imresize(J,[112 92]); subplot(4,6,[17 18 23 24],'replace'); imshow(J); writeDigitalPin(mypi,23,1); pause(0.1); writeDigitalPin(mypi,23,0); end %%--------------------------------------------------------------------------------------------------- for i=1: (size(bbox,1))
K= imcrop(mySnap,bbox(i,:)); K = imresize(K,[48 64]); imwrite(K,'test.png','png'); subplot(4,6,[5 6 11 12],'replace'); imshow(K); pause(0.5); input_dir = 'E:\file_do_an_tn\matlab_2013\PCA_FaceDetecting'; image_dims = [48 64]; filenames = dir(fullfile(input_dir, '*.png')); num_images = numel(filenames); images = zeros(prod(image_dims),num_images); for n = 1:num_images
filename = fullfile(input_dir, filenames(n).name); img = imread(filename); img = im2double(img); img = imresize(img,image_dims); images(:, n) = img(:); end %% ------------------------------------------Training---------------------------------------------- mean_face = mean(images, 2);
shifted_images = images - repmat(mean_face, 1, num_images); [evectors, ~, ~] = princomp(images');
num_eigenfaces = 20;
evectors = evectors(:, 1:num_eigenfaces); features = evectors'*shifted_images; input_image = imread('test.png'); input_image = rgb2gray(input_image);
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 77 input_image = imresize(input_image,image_dims);
input_image = im2double(input_image);
feature_vec = evectors' * (input_image(:) - mean_face);
similarity_score = arrayfun(@(n) 1 / (1 + norm(features(:,n) - feature_vec)), 1:num_images);
[match_score, match_ix] = max(similarity_score);
%%--------------------------------------------------------------------------------------------------- if match_score > 0.3
imshow([input_image reshape(images(:,match_ix), image_dims)]); pause(1.5); else writeDigitalPin(mypi,24,1) pause(0.1); writeDigitalPin(mypi,24,0) end end end %%--------------------------------------------------------------------------------------------------