Với mục đích muốn tiếp cận với các công nghệ đang phát triển trên. Vì vậy, nhóm thực hiện đồ án với mong muốn chế tạo ra mô hình chống trộm sử dụng xử lý ảnh kết hợp với sử dụng kit Arduino được giám sát bằng máy tính thông qua Laptop và tin nhắn
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH THIẾT KẾ THI CÔNG MẠCH CHỐNG TRỘM THÔNG MINH GVHD : ThS Võ Đức Dũng SVTH: Tăng Nguyễn Công Thiên MSSV : 13141328 Tp Hồ Chí Minh - 7/2018 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH THIẾT KẾ THI CÔNG MẠCH CHỐNG TRỘM THÔNG MINH GVHD : ThS Võ Đức Dũng SVTH: Tăng Nguyễn Cơng Thiên MSSV : 13141328 Tp Hồ Chí Minh - 7/2018 TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Y SINH Tp HCM, ngày 16 tháng năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Tăng Nguyễn Cơng Thiên Điện tử cơng nghiệp Đại học quy 2013 MSSV: 13141328 Mã ngành: 141 Mã hệ: I TÊN ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH THIẾT KẾ THI CÔNG MẠCH CHỐNG TRỘM THÔNG MINH II NHIỆM VỤ Các số liệu ban đầu: Matlab 2017a Sử dụng Webcam Logitech Kit điều khiển chính: Arduino Uno R3, Servo SG90, Module Sim 800A, Nguồn tổ ong 10V-5A, Chuông, Led đơn Nội dung thực hiện: Để tài thực nội dung phát người nhận diện khuôn mặt với đầu vào hình ảnh lấy từ webcam, kết gửi qua arduino để điều khiển Servo SG90, Module Sim 800A, Chng, Led đơn Nhóm thực nơi dung sau: Tìm hiểu Matlab Tìm hiểu Arduino Uno R3 Cài đặt thưc viện cho Arduino liên kết Matlab Arduino Tìm hiểu thuật tốn nhận diện, phát người khn mặt Xây dựng trình xử lý ảnh đầu vào Xây dựng hệ thống phát người nhận diện khuôn mặt đồng thời gửi liệu thu qua Arduino Xây dựng chương trình điều khiển servo SG90, Module Sim 800A, chuông, Led đơn Đánh giá kết thực III NGÀY GIAO NHIỆM VỤ: 21/03/2018 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 05/07/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Võ Đức Dũng CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP - Y SINH TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC Tp.HCM, ngày 19 tháng 03 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên : Tăng Nguyễn Công Thiên Lớp:13141DT3B MSSV:13141328 Tên đề tài: ỨNG DỤNG XỬ LÝ ẢNH THIẾT KẾ THI CÔNG MẠCH CHỐNG TRỘM THÔNG MINH Tuần/ngày Nội dung (19-25/3) Gặp GVHD để phổ biến quy định thực hiện, chọn đề tài, tên đề tài, thời gian làm việc Duyệt đề tài Viết đề cương cho đề tài (26/3-1/4) Tìm hiểu hoạt động kiến thức liên quan tới Arduino Matlab (2/4-8/4) (9/4-15/4) Cài đặt Matlab, kết nối Arduino với Matlab (16/4-22/4) (23/4-29/4) Xây dựng hệ thống nhận diện phát chuyển động người Xây dựng hệ thống nhận diện so sánh khuôn mặt Tiến hành xây dựng sở liệu để lưu giữ khn mặt Lập trình Arduino với chân I/O để nhúng liệu Thiết kế sơ đồ khối giải thích chức khối kết nối ngoại vi Tính tốn số liệu (30/4-6/5) (7/5-13/5) Lập trình xây dựng chương trình cho xử lý hình ảnh đầu vào Matlab (14/5-20/5) Thi cơng mơ hình Lắp đặt kết nối thiết vị ngoại vi 10 (21/5-28/5) Kiểm tra lỗi chạy thử chương trình mơ hình hồn chỉnh Viết báo cáo hoàn chỉnh Xác nhận GVHD 11 (29/5-3/6) Hoàn thiện sửa báo cáo gửi cho GVHD để xem xét góp ý lần cuối 12 (4/6-11/6) Nộp báo cáo hoàn chỉnh làm slide powerpoint báo cáo GV HƯỚNG DẪN (Ký ghi rõ họ tên) ii LỜI CAM ĐOAN Đề tài nhóm sinh viên Tăng Nguyễn Công Thiên tự thực hiện, dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài Tăng Nguyễn Cơng Thiên iv LỜI CẢM ƠN Trong thời gian thực đề tài, người thực giúp đỡ gia đình, q thầy bạn bè nên đề tài hoàn thành Những người thực xin chân thành gửi lời cảm ơn đến: Thầy Võ Đức Dũng, giảng viên trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM trực tiếp hướng dẫn tận tình giúp đỡ tạo điều kiện để nhóm hồn thành tốt đề tài Những người thực xin chân thành cám ơn đến thầy cô khoa Điện - Điện tử trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM tận tình dạy dỗ, bảo, cung cấp cho người thực kiến thức nền, chun mơn làm sở để hồn thành đề tài Cảm ơn gia đình động viên ln ln bên cạnh lúc khó khăn Xin gửi lời cảm ơn đến người bạn sinh viên khoa Điện-Điện tử giúp đỡ người thực đề tài để hồn thành tốt đề tài Xin chân thành cảm ơn! Người thực đề tài: Tăng Nguyễn Cơng Thiên v MỤC LỤC Trang bìa i Nhiệm vụ đồ án ii Lịch trình thực đồ án tốt nghiệp iii Cam đoan iv Lời cảm ơn v Mục lục vi Liệt kê hình vẽ ix Liệt kê bảng vẽ xi Tóm tắt xii CHƯƠNG TỔNG QUAN 1.1 LÝ DO CHỌN ĐỀ TÀI 1.2 MỤC TIÊU 1.2.1 Mục tiêu 1.2.2 Giới hạn 1.3 BỐ CỤC ĐỒ ÁN TỐT NHIỆP CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ HỆ THỐNG XỬ LÝ ẢNH 2.1.1 Phần thu nhận ảnh (Image Acquisiton) 2.1.2 Tiền xử lý (Image Processing) 2.1.3 Phân đoạn (Segmentation) hay phân vùng ảnh 2.1.4 Biểu diễn ảnh (Image Representation) 2.1.5 Nhận dạng nội suy (Image Recognition and Interpretation) 2.1.6 Cơ sở tri thức 2.1.7 Các thành phần hệ thống 2.2 NHỮNG VẤN ĐỀ CƠ BẢN TRONG XỬ LÝ ẢNH 2.2.1 Điểm ảnh (Picture Element) 2.2.2 Độ phân giải ảnh 2.2.3 Mức xám ảnh 2.2.4 Định nghĩa ảnh số vi 2.3 GIỚI THIỆU KHÁI QUÁT VỀ CÁC LINH KIỆN SỬ DỤNG TRONG THIẾT KẾ, THI CÔNG ĐỀ TÀI 2.3.1 Mạch Arduino Uno R3 2.3.2 Tổng quan động Servo 14 2.3.3 Tổng quan Buzzer 14 2.3.4 Module SIM 800A 15 CHƯƠNG TÍNH TỐN VÀ THIẾT KẾ 16 3.1 TỔNG QUAN CÁC KỸ THUẬT NHẬN BIẾT MÀU DA DỰA TRÊN TÍNH CHẤT ĐIỂM ẢNH 16 3.1.1 Giới thiệu 16 3.1.2 Không gian màu sử dụng cho mô hình hóa màu da 16 3.1.2.1 Không gian màu RGB 17 3.1.2.2 Khơng gian RGB chuẩn hóa 17 3.1.2.3 Không gian màu HIS, HSV, HSL 18 3.1.2.4 Không gian màu HIS 18 3.1.2.5 Không gian màu HSV 19 3.1.2.6 Không gian màu HSL 20 3.1.2.7 Không gian màu TSL 21 3.1.2.8 Không gian màu Y 21 3.1.2.9 Các hệ tọa độ không gian màu khác 22 3.1.3 Mơ hình hóa màu da 22 3.1.3.1 Xác đinh ngƣỡng cụ thể điểm ảnh màu da 22 3.1.3.2 Phƣơng pháp mơ hình hóa màu da sử dụng phân phôi không tham số 23 3.1.3.3 Bảng tra cứu chuẩn cứu (LUT – Lookup Table) 23 3.1.3.4 Phân lớp Bayes (bayes Classifier) 24 3.1.3.5 Tổng kết phƣơng pháp không tham số 25 3.1.3.6 Mô hình hóa phân phối màu da có tham số 25 3.1.3.7 Mơ hình dựa phân phối Gauss đơn 26 3.1.3.8 Mơ hình kết hợp dựa phân phối Gauss 26 3.1.3.9 Đa phân phối Gauss 27 3.1.3.10 Tổng kết phƣơng pháp mơ hình hóa theo tham số 27 3.1.4 So sánh kết mơ hình 27 3.1.5 Đánh giá phƣơng pháp 29 vii 3.1.6 Chọn lựa không gian màu phƣơng pháp mơ hình hóa dùn để nhận biết màu da cho đồ án 29 3.2 PHÂN TÍCH THÀNH PHẦN CHÍNH PCA 30 3.2.1 Tổng quan phƣơng pháp PCA 30 3.2.1.1 Giới thiệu 30 3.2.1.2 Ý tƣởng 30 3.2.2 Trích chọn đặc trƣng khn mặt ngƣời dựa phƣơng pháp PCA 34 3.2.2.1 Chuyển đổi ảnh 34 3.2.2.2 Tính khn mặt ngƣời trung bình 35 3.2.2.3 Trừ ảnh cho mặt trung bình 35 3.2.2.4 Xây dựng ma trận hợp phƣơng sai 35 3.2.2.5 Phép chiếu 36 3.3 PHÂN TÍCH HOG 37 3.3.1 Giới thiệu 37 3.3.2 Chuẩn hóa hình ảnh trƣớc xử lý 38 3.3.3 Tính tốn gradient 38 3.3.4 Lấy votes cell 39 3.3.5 Chuẩn hóa block 40 3.3.6 Sử dụng toán object recognition 40 3.3 KẾT NỐI VỚI THIẾT BỊ NGOẠI VI 41 3.4.1 Khối xử lý trung tâm 42 3.4.2 Khối Module Sim 800A 42 3.4.3 Khối động servo 43 3.4.4 Khối hiển thị báo động 44 3.4.5 Khối nguồn 45 3.4.6 Sơ đồ nguyên lý hệ thống ngoại vi 46 CHƯƠNG THI CÔNG HỆ THỐNG 47 4.1 GIỚI THIỆU 47 4.2 THI CÔNG HỆ THỐNG 47 4.2.1 Hệ thống nhận chuyển động 47 4.2.1 Hệ thống nhận diện khuôn mặt 50 4.2.2.1 Lƣu đồ giải thuật hệ thống nhận diện khuôn mặt 50 4.2.2.2 Lƣu đồ giải thuật hệ thống huấn luyện 51 4.2.2.3 Yêu cầu liệu ảnh 52 viii CHƢƠNG KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 6.2 HƢỚNG PHÁT TRIỂN Có thể nâng cấp hệ thống việc gửi liệu lên internet để hệ thống dễ dàng quản lý từ xa Thiết kế thêm nguôn dự trữ dùng pin mặt trời ác-quy để nguồn điện bị hệ thống hoạt động bình thường BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 78 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Sách tham khảo [1] Nguyễn Thanh Hải, Giáo trình Xử lý ảnh, Nhà xuất ĐH Quốc Gia TP HCM, 2014 [2] Lương Mạnh Bá Nguyễn Thanh Thủy, Chương 7, Nhập Môn Xử Lý ảnh số, Nxb Khoa học Kỹ Thuật, 2002, trang 179-208 [3] John Boxal, “ Arduino Workshop, Willinam Pollock”, May 2013 [4] Stuart William Perry, Hau-San Wong and Ling Guan, Adaptive Image Processing: A Computational Intelligence Perspective, CEC Press LLC, 2002 [5] Kyungnam Kim, Face Recognition using Principle Component Analysis, Department of Computer Science University of MaryLand, USA, trang1-6 [6] Howard A Draper, Kyungim Baek, Marian Stewart Barlett, J Ross Bervridge, “Recognizing Faces with PCA and ICA”, 2004, trang 1-24 DATASHEET [7] Arduino Uno R3, https://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3schematic.pdf [8] Sim 800A, http://simcomm2m.com/En/module/detail.aspx?id=138 [9] Tập lệnh AT, http://www.espruino.com/datasheets/SIM900_AT.pdf [10] Động Servo, http://www.micropik.com/PDF/SG90Servo.pdf BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 79 PHỤ LỤC PHỤ LỤC CHƢƠNG TRÌNH CỦA TỪNG HỆ THỐNG I Chƣơng trình hệ thống nhận diện phát chuyển động function varargout = giaodien123(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @giaodien123_OpeningFcn, 'gui_OutputFcn', @giaodien123_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function giaodien123_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject, handles); function varargout = giaodien123_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function figure1_CreateFcn(hObject, eventdata, handles) im = imread('GetArticleImage.jpg'); imshow(im); function pushbutton1_Callback(hObject, eventdata, handles) global s; s=serial('COM6'); fopen(s); i=0; peopleDetector = vision.PeopleDetector('MergeDetections',true); peopleDetector.ClassificationThreshold =2; pointTracker = vision.PointTracker('MaxBidirectionalError', 2); cam = webcam(); videoFrame = snapshot(cam); frameSize = size(videoFrame); videoPlayer = vision.VideoPlayer('Position', [100 100 [frameSize(2), frameSize(1)]+30]); runLoop = true; numPts = 0; frameCount = 0; while runLoop videoFrame = snapshot(cam); videoFrameGray = rgb2gray(videoFrame); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 80 PHỤ LỤC frameCount = frameCount + 1; if numPts < 10 bbox = step(peopleDetector,videoFrame); if ~isempty(bbox) points = detectMinEigenFeatures(videoFrameGray, 'ROI', bbox(1, :)); xyPoints = points.Location; numPts = size(xyPoints,1); release(pointTracker); initialize(pointTracker, xyPoints, videoFrameGray); oldPoints = xyPoints; bboxPoints = bbox2points(bbox(1, :)); bboxPolygon = reshape(bboxPoints', 1, []); D=1; videoFrame = insertObjectAnnotation(videoFrame,'rectangle',bbox,D); end else [xyPoints, isFound] = step(pointTracker, videoFrameGray); visiblePoints = xyPoints(isFound, :); oldInliers = oldPoints(isFound, :); numPts = size(visiblePoints, 1); if numPts >= 30 bbox = step(peopleDetector,videoFrame); [xform, oldInliers, visiblePoints] = estimateGeometricTransform( oldInliers, visiblePoints, 'similarity', 'MaxDistance', 4); bboxPoints = transformPointsForward(xform, bboxPoints); bboxPolygon = reshape(bboxPoints', 1, []); D=1; videoFrame = insertObjectAnnotation(videoFrame,'rectangle',bbox,D); step(videoPlayer,videoFrame); oldPoints = visiblePoints; setPoints(pointTracker, oldPoints); if i==0 fwrite(s,2) end i=1; end end step(videoPlayer, videoFrame); runLoop = isOpen(videoPlayer); end clear cam; release(videoPlayer); release(pointTracker); close; function figure1_DeleteFcn(hObject, eventdata, handles) global s; fwrite(s,0); out = instrfind; fclose(out); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 81 PHỤ LỤC function pushbutton2_Callback(hObject, eventdata, handles) global s; fwrite(s,0); out = instrfind; fclose(out); II Chƣơng trình hệ thống nhận diện khuôn mặt function varargout = regconition(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @regconition_OpeningFcn, 'gui_OutputFcn', @regconition_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function regconition_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = regconition_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function figure1_CreateFcn(hObject, eventdata, handles) global q; q = serial('com3'); fopen(q); im = imread('GetArticleImage.jpg'); imshow(im); function pushbutton1_Callback(hObject, eventdata, handles) global co if isfield(handles,'vdx') vid = handles.vdx; stoppreview(vid) delete(vid) handles = rmfield(handles,'vdx'); guidata(hObject,handles) cla(handles.axes1) reset(handles.axes1) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 82 PHỤ LỤC set(handles.axes1,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) cla(handles.axes2) reset(handles.axes2) set(handles.axes2,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) end fd = vision.CascadeObjectDetector(); fd.MergeThreshold = 15; info = imaqhwinfo('winvideo'); did = info.DeviceIDs; if isempty(did) msgbox({'YOUR SYSTEM DO NOT HAVE A WEBCAM';' ';'CONNECT A ONE'},'WARNING !!!!','warn','modal') return end did = cell2mat(did); for k = 1:length(did) devinfo = imaqhwinfo('winvideo',k); na(1,k) = {devinfo.DeviceName}; sr(1,k) = {devinfo.SupportedFormats}; end [a,b] = listdlg('promptstring','SELECT A WEB CAM DEVICE','liststring',na,'ListSize', [125, 75],'SelectionMode','single'); if b == return end if b ~= frmt = sr{1,a}; [a1,b1] = listdlg('promptstring','SELECT RESOLUTION','liststring',frmt,'ListSize', [150, 100],'SelectionMode','single'); if b1 == return end end frmt = frmt{a1}; l = find(frmt == '_'); res = frmt(l+1 : end); l = find(res == 'x'); res1 = str2double(res(1: l-1)); res2 = str2double(res(l+1 : end)); axes(handles.axes1) vid = videoinput('winvideo', a); vr = [res1 res2]; nbands = get(vid,'NumberofBands'); h2im = image(zeros([vr(2) vr(1) nbands] , 'uint8')); preview(vid,h2im); handles.vdx = vid; guidata(hObject,handles) tx = msgbox('PLZ STAND IN FRONT OF CAMERA STILL','INFO !!!'); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 83 PHỤ LỤC pause(1) delete(tx) kx = 0; while im = getframe(handles.axes1); im = im.cdata; bbox = step(fd, im); vo = insertObjectAnnotation(im,'rectangle',bbox,'FACE'); axes(handles.axes2) imshow(vo) if size(bbox,1) > msgbox({'TOO MANY FACES IN FRAME';' ';'ONLY ONE FACE IS ACCEPTED'},'WARNING !!!','warn','modal') uiwait stoppreview(vid) delete(vid) handles = rmfield(handles,'vdx'); guidata(hObject,handles) cla(handles.axes1) reset(handles.axes1) set(handles.axes1,'box','on','xtick',[],'ytick',[],'xcolor',[1 1],'ycolor',[1 1],'color',co,'linewidth',1.5) cla(handles.axes2) reset(handles.axes2) set(handles.axes2,'box','on','xtick',[],'ytick',[],'xcolor',[1 1],'ycolor',[1 1],'color',co,'linewidth',1.5) return end kx = kx + 1; if kx > 10 && ~isempty(bbox) break end end imc = imcrop(im,[bbox(1)+3 bbox(2)-35 bbox(3)-10 bbox(4)+70]); imx = imresize(imc,[300 300]); fhx = figure(2); set(fhx,'menubar','none','numbertitle','off','name','PREVIEW') imshow(imx) cd ('database'); l = length(dir(pwd)); n = [int2str(l-1) '.jpg']; imwrite(imx,n); cd while qq = inputdlg('WHAT IS UR NAME?','FILL'); if isempty(qq) msgbox({'YOU HAVE TO ENTER A NAME';' ';'YOU CANT CLICK CANCEL'},'INFO','HELP','MODAL') uiwait else break BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 84 PHỤ LỤC end end qq = qq{1}; if exist('info.mat','file') == load ('info.mat') r = size(z2,1); z2{r+1,1} = {n , qq}; save('info.mat','z2') else z2{1,1} = {n,qq}; save('info.mat','z2') end close gcf stoppreview(vid) delete(vid) handles = rmfield(handles,'vdx'); guidata(hObject,handles) cla(handles.axes1) reset(handles.axes1) cla(handles.axes2) reset(handles.axes2) function pushbutton2_Callback(hObject, eventdata, handles) flist = dir('database'); if length(flist) == msgbox('NOTHING TO DELETE','INFO','modal'); return end cd('database') [f,p] = uigetfile('*.jpg','SELECT A PIC TO DELETE IT'); if f == cd return end p1 = fullfile(p,f); delete(p1) flist = dir(pwd); if length(flist) == cd return end for k = 3:length(flist) z = flist(k).name; z(strfind(z,'.') : end) = []; nlist(k-2) = str2double(z); end nlist = sort(nlist); h = waitbar(0,' MATLAB IS RENAMING','name','PROGRESS '); for k = 1:length(nlist) if k ~= nlist(k) p = nlist(k); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 85 PHỤ LỤC movefile([num2str(p) '.jpg'] , [num2str(k) '.jpg']) waitbar((k-2)/length(flist),h,sprintf('RENAMED %s to %s',[num2str(p) '.jpg'],[num2str(k) '.jpg'])) end pause(.5) end close(h) cd function pushbutton4_Callback(hObject, eventdata, handles) runLoop = true; global co global q; if exist('features.mat','file') == msgbox('FIRST TRAIN YOUR DATABASE','INFO !!!','MODAL') return end ff = dir('database'); if length(ff) == h = waitbar(0,'Xin ch? ','name','SCANNING IS IN PROGRESS'); for k = 1:100 waitbar(k/100) pause(0.03) end close(h) msgbox({'NO IMAGE FOUND IN DATABASE';'FIRST LOAD YOUR DATABASE';'USE ''ADD NEW IMAGE'' MENU'},'WARNING !!!','WARN','MODAL') return end if isfield(handles,'vdx') vid = handles.vdx; stoppreview(vid) delete(vid) handles = rmfield(handles,'vdx'); guidata(hObject,handles) cla(handles.axes1) reset(handles.axes1) set(handles.axes1,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) cla(handles.axes2) reset(handles.axes2) set(handles.axes2,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) end info = imaqhwinfo('winvideo'); did = info.DeviceIDs; if isempty(did) msgbox({'YOUR SYSTEM DO NOT HAVE A WEBCAM';' ';'CONNECT A ONE'},'WARNING !!!!','warn','modal') return BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 86 PHỤ LỤC end fd = vision.CascadeObjectDetector(); fd.MergeThreshold =15; did = cell2mat(did); for k = 1:length(did) devinfo = imaqhwinfo('winvideo',k); na(1,k) = {devinfo.DeviceName}; sr(1,k) = {devinfo.SupportedFormats}; end [a,b] = listdlg('promptstring','SELECT A WEB CAM DEVICE','liststring',na,'ListSize', [125, 75],'SelectionMode','single'); if b == return end if b ~= frmt = sr{1,a}; [a1,b1] = listdlg('promptstring','SELECT RESOLUTION','liststring',frmt,'ListSize', [150, 100],'SelectionMode','single'); if b1 == return end end while runLoop frmt = sr{1,a}; frmt = frmt{a1}; l = find(frmt == '_'); res = frmt(l+1 : end); l = find(res == 'x'); res1 = str2double(res(1: l-1)); res2 = str2double(res(l+1 : end)); axes(handles.axes1) vid = videoinput('winvideo', a); vr = [res1 res2]; nbands = get(vid,'NumberofBands'); h2im = image(zeros([vr(2) vr(1) nbands] , 'uint8')); preview(vid,h2im); handles.vdx = vid; guidata(hObject,handles) tx = msgbox('XIN DUNG YEN TRUOC CAMERA','INFO !!!'); pause(1) delete(tx) kx = 0; while im = getframe(handles.axes1); im = im.cdata; bbox = step(fd, im); vo = insertObjectAnnotation(im,'rectangle',bbox,'FACE'); axes(handles.axes2) imshow(vo) if size(bbox,1) > BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 87 PHỤ LỤC msgbox({'QUA NHIEU KHUON MAT';' ';'CHI DUOC MOT KHUON MAT'},'WARNING !!!','warn','modal') uiwait stoppreview(vid) delete(vid) handles = rmfield(handles,'vdx'); guidata(hObject,handles) cla(handles.axes1) reset(handles.axes1) set(handles.axes1,'box','on','xtick',[],'ytick',[],'xcolor',[1 1],'ycolor',[1 1],'color',co,'linewidth',1.5) cla(handles.axes2) reset(handles.axes2) set(handles.axes2,'box','on','xtick',[],'ytick',[],'xcolor',[1 1],'ycolor',[1 1],'color',co,'linewidth',1.5) return end kx = kx + 1; if kx > 10 && ~isempty(bbox) break end end imc = imcrop(im,[bbox(1)+3 bbox(2)-35 bbox(3)-10 bbox(4)+70]); imx = imresize(imc,[300 300]); axes(handles.axes1) image(imx) text(20,20,'\bfHINH HIEN TAI.','fontsize',12,'color','y','fontname','comic sans ms') set(handles.axes1,'xtick',[],'ytick',[],'box','on') immxx = imx; zz = findsimilar(immxx); zz = strtrim(zz); fxz = imread(['database/' zz]); q1= ehd(immxx,0.1); q2 = ehd(fxz,0.1); q3 = pdist([q1 ; q2]); disp(q3) if q3 < 0.5 axes(handles.axes2) image(fxz) set(handles.axes1,'xtick',[],'ytick',[],'box','on') text(20,20,'\bf HINH LUU TRU.','fontsize',12,'color','y','fontname','comic sans ms') set(handles.axes2,'xtick',[],'ytick',[],'box','on') xs = load('info.mat'); xs1 = xs.z2; for k = 1:length(xs1) st = xs1{k}; stx = st{1}; if strcmp(stx,zz) == str = st{2}; break end BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 88 PHỤ LỤC end fid = fopen('attendence_sheet.txt','a'); fprintf(fid,'%s %s %s %s\r\n\n', 'Name','Date','Time', 'Attendence'); c = clock; if c(4) > 12 s = [num2str(c(4)-12) ,':',num2str(c(5)), ':', num2str(round(c(6))) ]; else s = [num2str(c(4)) ,':',num2str(c(5)), ':', num2str(round(c(6))) ]; end fwrite(q,1) pause(4) else msgbox('BAN KHONG PHAI NGUOI TRONG NHA', 'WARNING','WARN','MODAL') cla(handles.axes1) reset(handles.axes1) cla(handles.axes2) reset(handles.axes2) fwrite(q,3); end pause(5); end function pushbutton5_Callback(hObject, eventdata, handles) f = dir('database'); if length(f) == msgbox('YOUR DATA BASE HAS NO IMAGE TO DISPLAY','SORRY','modal') return end l = length(f)-2; while a = factor(l); if length(a) >= break end l = l+1; end d = a(1: ceil(length(a)/2)); d = prod(d); d1 = a(ceil(length(a)/2)+1 : end); d1 = prod(d1); zx = sort([d d1]); figure('menubar','none','numbertitle','off','name','Images of Database','color',[0.0431 0.5176 0.7804],'position',[300 200 600 500]) for k = 3:length(f) im = imread(f(k).name); subplot(zx(1),zx(2),k-2) imshow(im) title(f(k).name,'fontsize',10,'color','w') end BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 89 PHỤ LỤC function pushbutton6_Callback(hObject, eventdata, handles) x = questdlg({'Tat Ca Du Lieu Se Bi Xoa'},'Please select !!'); if strcmpi(x,'yes') == delete('attendence_sheet.txt') delete('features.mat') delete('info.mat') cd ([pwd, '\database']) f = dir(pwd); for k = 1:length(f) delete(f(k).name) end cd cla(handles.axes1); reset(handles.axes1); set(handles.axes1,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) cla(handles.axes2); reset(handles.axes2); set(handles.axes2,'box','on','xcolor','w','ycolor','w','xtick',[],'ytick',[],'color',[0.0431 0.5176 0.7804],'linewidth',1.5) beep msgbox('All Reset','Info','modal') end function pushbutton7_Callback(hObject, eventdata, handles) if exist('attendence_sheet.txt','file') == winopen('attendence_sheet.txt') else msgbox('NO ATTENDENCE SHEET TO DISPLAY','INFO !!!','HELP','MODAL') end function pushbutton8_Callback(hObject, eventdata, handles) ff = dir('database'); if length(ff) == h = waitbar(0,'Xin Doi Trong Giay Lat','name','SCANNING IS IN PROGRESS'); for k = 1:100 waitbar(k/100) pause(0.03) end close(h) msgbox({'NO IMAGE FOUND IN DATABASE';'FIRST LOAD YOUR DATABASE';'USE ''ADD NEW IMAGE'' MENU'},'WARNING !!!','WARN','MODAL') return end if exist('features.mat','file') == bx = questdlg({'TRAINING HAS ALREDY BEEN DONE';' ';'WANT TO TRAIN DATABASE AGAIN?'},'SELECT','YES','NO','CC'); if strcmpi(bx,'yes') == builddatabase msgbox('TRAINING DONE PRESS OK TO CONTINUE','OK','modal') BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 90 PHỤ LỤC return else return end else builddatabase msgbox('TRAINING DONE PRESS OK TO CONTINUE','OK','modal') return end function figure1_DeleteFcn(hObject, eventdata, handles) if ~isempty(instrfind) fclose(instrfind); delete(instrfind); end III CHƢƠNG TRÌNH HỆ THỐNG NGOẠI VI #include "SoftwareSerial.h" #include "Hshopvn_GSM.h" #include SoftwareSerial sim800ds(2, 3); HshopGSM HGSM = HshopGSM(&sim800ds); String Str_PhoneNum = "01672131349"; unsigned long UL_PhoneNum = 1672131349; Servo myservo; int data =0; int servoPin = 10; int j=1; int led = 4; int bell = 9; int i; void setup() { Serial.begin(9600); HGSM.init(&GSM_Ready, 9600); pinMode(led, OUTPUT); pinMode(bell, OUTPUT); myservo.attach(servoPin); myservo.write(130); } void loop() { HGSM.handle(); if(Serial.available()>0){ data = Serial.read(); j=1; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 91 PHỤ LỤC i=1; } if (data == 2) { digitalWrite(led,HIGH); delay(1000); digitalWrite(led,LOW); delay(1000); digitalWrite(bell,HIGH); if (i==1){ HGSM.sendsms(Str_PhoneNum, "BAO DONG CO TROM "); i =i + 1; } } else if (data == 1) { if (j==1){ myservo.write(0); delay(4000); myservo.write(130); j=j+1; } } else { digitalWrite(led,LOW); digitalWrite(bell,LOW); } } void GSM_Ready() { if (HGSM.getDataGSM() != "") { Serial.println(HGSM.getDataGSM()); //show data comming } else; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 92 ... Ứng dụng xử lý ảnh thi t kế thi công mạch chống trộm thông minh. ” để làm đồ án tốt nghiệp Nhằm khắc phục phần ngăn ngừa hậu nêu trên, nhóm sinh viên chúng em chọn đề tài Ứng dụng xử lý ảnh thi t. .. đó, ảnh BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH CHƢƠNG CƠ SỞ LÝ THUYẾT đưa qua thi t bị xử lý ảnh, Ảnh sau xử lý đưa thi t bị hiển thị/ thực thi để xuất kết cuối (hiển thị kết hình thực thi chức thi t. .. Chương 2: Cơ sở lý thuyết Giới thi u hệ thống xử lý ảnh Những vấn đề hệ thống xử lý ảnh Giới thi u khái quát linh kiện sử dụng thi t kế, thi cơng đề tài Chương 3: Tính tốn thi t kế Tổng quan