Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 109 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
109
Dung lượng
5,55 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THƠNG THIẾT KẾ VÀ THI CƠNG MƠ HÌNH GƯƠNG THƠNG MINH (SMART MIRROR) GVHD: NGUYỄN NGÔ LÂM SVTH: NGUYỄN HỮU ANH HUÂN MSSV:14141575 SVTH: HUỲNH CÔNG TÀI MSSV: 14141517 SKL 0 5 Tp Hồ Chí Minh, tháng 12/2017 an ĐỒ ÁN TỐT NGHIỆP CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -Tp Hồ Chí Minh, ngày 15 tháng 12 năm 2017 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: NGUYỄN HỮU ANH HUÂN Họ tên sinh viên: HUỲNH CÔNG TÀI Ngành: CNKT ĐIỆN TỬ TRUYỀN THÔNG Giảng viên hướng dẫn: THẦY NGUYỄN NGÔ LÂM Ngày nhận đề tài: 12/2017 MSSV: 14141575 MSSV: 14141517 Lớp : 14141CLDT2 ĐT : 0908434763 Ngày nộp đề tài: 16/7/2018 Tên đề tài: Thiết kế thi cơng mơ hình gương thơng minh (Smart Mirror) Các số liệu, tài liệu ban đầu: Kiến thức môn học mạch điện, điện tử bản, vi xử lý, điện tử thông tin, ngôn ngữ lập trình C tham khảo nguồn tài liệu đồ án tốt nghiệp khóa trước nguồn thông tin từ mạng internet Nội dung thực đề tài: o Tìm hiểu máy tính nhúng Raspberry Pi o Tìm hiểu module camera Raspberry Pi o Tìm hiểu phần mềm viết chương trình JavaScrit o Tìm hiểu tảng đám mây Google Cloud o Viết chương trình điều khiển cho Raspberry Pi o Thiết kế thi cơng mơ hình gương thơng minh (Smart Mirror) o Điều chỉnh để hệ thống hoạt động ổn định o Viết báo cáo thực đề tài tốt nghiệp o Báo cáo đề tài tốt nghiệp Sản phẩm: Mơ hình gương thơng minh (Smart Mirror) có khả hiển thị thông tin cần thiết đến người dùng thời gian, thời tiết, tìm kiếm video, điều khiển đèn thông minh TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN i an ĐỒ ÁN TỐT NGHIỆP CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên Họ tên Sinh viên Ngành Tên đề tài Họ tên GVHD : : : : : Nguyễn Hữu Anh Huân MSSV : 14141575 Huỳnh Công Tài MSSV : 14141517 Công nghệ kỹ thuật điện tử truyền thông Thiết kế thi cơng mơ hình gương thơng minh (Smart Mirror) Thầy NGUYỄN NGÔ LÂM NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2018 Giáo viên hướng dẫn (Ký & ghi rõ họ tên) ii an ĐỒ ÁN TỐT NGHIỆP CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên : Nguyễn Hữu Anh Huân MSSV: 14141575 Họ tên Sinh viên : Huỳnh Công Tài MSSV: 14141517 Ngành : Công nghệ kỹ thuật điện tử truyền thông Tên đề tài : Thiết kế thi cơng mơ hình gương thơng minh (Smart Mirror) Họ tên Giáo viên phản biện : …………………………………………………………… NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng Giáo viên phản biện (Ký & ghi rõ họ tên) năm 2018 iii an ĐỒ ÁN TỐT NGHIỆP LỜI CẢM ƠN Để hoàn thành đồ án tốt nghiệp này, lời chúng em xin bày tỏ lòng biết ơn sâu sắc đến Thầy Nguyễn Ngơ Lâm tận tình hướng dẫn nhóm suốt quãng thời gian thực đồ án tốt nghiệp Chúng em xin chân thành cảm ơn quý thầy, cô trường Đại Học Sư Phạm Kỹ Thuật TP.HCM, đặc biệt thầy cô khoa Đào Tạo Chất Lượng Cao, nhiệt tình giúp đỡ, truyền đạt kiến thức suốt khoảng thời gian học tập trường Vốn kiến thức tiếp thu q trình học khơng tảng cho trình thực đồ án tốt nghiệp mà hành trang quý báu cho nghiệp chúng em sau Tuy nhiên, nhóm chúng em hạn chế lớn mặt kiến thức, nhiều thiếu sót, hay kiến thức chưa nắm vững, Thầy hướng dẫn tận tình giải đáp cách kịp thời Vì nhóm hiểu rõ vấn đề cách chi tiết để hoàn thành tốt đồ án tốt nghiệp Cuối cùng, nhóm cố gắng hồn thành nhiệm vụ đề tài đặt đảm bảo thời hạn quy định chắn không tránh khỏi thiếu sót, mong q Thầy/Cơ bạn sinh viên thơng cảm Nhóm mong nhận ý kiến q Thầy/Cơ bạn sinh viên Nhóm xin chân thành cảm ơn! Tp.Hồ Chí Minh, Tháng 07 năm 2018 Nhóm sinh viên thực Huỳnh Cơng Tài Nguyễn Hữu Anh Huân iv an ĐỒ ÁN TỐT NGHIỆP LỜI MỞ ĐẦU Hiện nay, việc phát triển giới điện tử số phát triển cách nhanh chóng mạnh mẽ, điện tử số ngày trở nên đa dạng ứng dụng gần gũi với Cùng với phát triển đa dạng ngành công nghiệp vi xử lý nên nguồn tài nguyên vi xử lý nâng cao để đáp ứng ứng dụng khác thực tế Công nghệ ngày phát triển đòi hỏi nhu cầu ứng dụng vào đời sống ngày người, đem lại hiệu cao cho người sử dụng Vì thế, nhóm lựa chọn đề tài THIẾT KẾ VÀ THI CÔNG MÔ HÌNH GƯƠNG THƠNG MINH (SMART MIRROR) nhằm tìm hiểu thêm quan trọng vi điều khiển, Web Server, đáp ứng nhu cầu cấp thiết xã hội Bên cạnh việc phản chiếu hình ảnh phía trước gương, hệ thống cịn cung cấp cho người sử dụng thông tin thời gian, thời tiết, tìm vị trí hay xem video cách nhanh chóng v an ĐỒ ÁN TỐT NGHIỆP MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN iii LỜI CẢM ƠN iv LỜI MỞ ĐẦU v MỤC LỤC vi DANH MỤC TỪ VIẾT TẮT ix DANH MỤC HÌNH ẢNH x DANH MỤC CÁC BẢNG BIỂU xii CHƯƠNG 1: TỔNG QUAN 1.1 Tình hình nghiên cứu 1.2 Tính cấp thiết đề tài 1.3 Mục tiêu nghiên cứu 1.4 Nhiệm vụ nghiên cứu 1.5 Đối tượng phạm vi nghiên cứu 1.6 Phương pháp nghiên cứu 1.7 Bố cục Đồ án CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu module RASPBERRY PI 2.1.1 Giới thiệu bo mạch RASPBERRY PI 2.1.2 Cấu hình RASPBERRY PI 2.1.3 Phần mềm 2.2 Tổng quan thư viện NODE.JS 2.2.1 Đặc điểm thư viện NODE.JS 2.2.2 Các lĩnh vực Node.js sử dụng phổ biến: 2.3 Tổng quan thư viện Angular.Js 2.3.1 Đặc trưng Angular.Js 2.3.2 Các tính Angular.Js 10 2.3.3 Ưu điểm Angular.Js 10 2.3.4 Nhược điểm 10 2.3.5 Cấu trúc MVC Angular.Js 11 2.3.6 Dependency Injection Angular.Js 11 2.4 Giới thiệu HDMI 12 2.4.1 Cấu tạo nguyên tắc hoạt động cáp HDMI 12 2.4.2 Ưu điểm HDMI 12 vi an ĐỒ ÁN TỐT NGHIỆP 2.4.3 Một số loại cáp HDMI: 12 2.5 Giới thiệu Raspberry Pi Camera Module NoIR V2 13 2.5.1 Thông số kỹ thuật: 13 2.6 Giới thiệu bóng đèn thông minh Xiaomi Philips Led 13 2.6.1 Thông số kỹ thuật: 14 CHƯƠNG 3: CÔNG NGHỆ NHẬN DẠNG GIỌNG NĨI, NHẬN DẠNG HÌNH ẢNH VÀ THƯ VIỆN OPENCV 15 3.1 Giới thiệu công nghệ nhận dạng giọng nói 15 3.1.1 Sự cần thiết nhận dạng giọng nói người 15 3.1.2 Lịch sử cơng nghệ nhận dạng giọng nói 16 3.1.3 Hoạt động phần mềm nhận dạng giọng nói: 16 3.1.4 Cách thức xây dựng dịch vụ nhận dạng, điều khiển giọng nói 17 3.1.5 Mơ hình triển khai cơng nghệ nhận dạng giọng nói 18 3.1.6 Các cơng nghệ nhận dạng giọng nói 18 3.1.7 Các thư viện giọng nói phổ biến 19 3.1.8 Ưu điểm nhược điểm cơng nghệ nhận dạng giọng nói 20 3.2 Giới thiệu cơng nghệ nhận dạng hình ảnh 20 3.2.1 Kỹ thuật xử lý hình ảnh 21 3.3 Giới thiệu nhận diện khuôn măt: 22 3.3.1 Cách nhận diện khuôn mặt: 23 3.3.2 Các yếu tố làm ảnh hưởng tới kết nhận dạng: 24 3.4 Giới thiệu thư viện OpenCV 24 3.4.1 Tổng quan OPENCV 24 3.4.2 Các ứng dụng OpenCV 26 3.4.3 Các chức OpenCV tập trung vào thu thập ảnh, xử lí ảnh thuật tốn phân tích liệu ảnh, bao gồm: 26 3.4.4 Sử dụng OpenCV 26 3.4.5 Một số tính phần cấu thành nên OpenCV CxCore, CV HighGUI 27 3.4.6 Các thao tác liệu động 32 3.4.6.1 CV 32 3.4.6.2 HighGUI 32 CHƯƠNG 4: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 34 4.1 Giới thiệu tóm tắt 34 4.1.1 Yêu cầu hệ thống 34 4.1.2 Phương án thiết kế 34 vii an ĐỒ ÁN TỐT NGHIỆP 4.2 Xây dựng sơ đồ khối toàn hệ thống 35 4.3 Hoạt động hệ thống: 36 4.4 Tính tốn thiết kế hệ thống 36 4.4.1 Khối hiển thị: 36 4.4.2 Khối thu âm 37 4.4.3 Khối xử lý giọng nói 39 4.4.4 Khối thu hình ảnh 40 4.4.5 Khối nguồn: 41 4.4.6 Khối xử lý trung tâm 42 4.4.6.1 Phần cứng 42 4.4.6.2 Phần mềm 43 4.5 Sơ đồ nguyên lý hệ thống 48 4.6 Lập trình hệ thống 49 4.6.1 Lưu đồ chương trình 49 4.6.2 Lưu đồ chương trình 50 4.6.2.1 SPEECH TO TEXT 50 4.6.2.2 Bản đồ ( MAP ) 51 4.6.2.3 Tìm kiếm video từ Youtube 53 4.6.2.4 Chương trình dừng video phát 54 4.6.2.5 Chương trình bảo mật camera 55 4.6.2.6 Chương trình RSS Feeds 56 4.6.2.7 Chương trình điều khiển đèn thông minh Philips 57 4.6.2.8 Chương trình đếm Timer 59 4.6.2.9 Chương trình cập nhật thời tiết 61 CHƯƠNG 5: KẾT QUẢ THỰC HIỆN VÀ THỰC NGHIỆM 62 5.1 Kết thiết kế phần cứng 62 5.2 Kết hoạt động hệ thống 65 CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 70 6.1 Kết luận 70 6.2 Hạn chế phương hướng phát triển tương lai 70 TÀI LIỆU THAM KHẢO 71 PHỤ LỤC 72 viii an ĐỒ ÁN TỐT NGHIỆP DANH MỤC TỪ VIẾT TẮT STT TỪ VIẾT TẮT TÊN TIẾNG ANH LAN Local Area Network IOT Internet of Things MFCC DIY Do It Yourself CPU Central Processing Unit RAM Random Access Memory ROM Read Only Memory DC GPIO General Purpose Input/Output 10 JSON JavaScript Object Noattion 11 API Mel Frequency Cepstral Coeffcients Direct current Application Programming Interface ix an ĐỒ ÁN TỐT NGHIỆP angular.module('SmartMirror') factory('SpeechService', SpeechService) } (window.annyang)); o CODE CHƯƠNG TRÌNH MAP function Map($scope, $http, GeolocationService, SpeechService, Focus) { var map = {}; map.center = "Seattle, WA"; //default map locaiton map.zoom = 13; //default zoom is 13 // Get the current location of the mirror GeolocationService.getLocation({ enableHighAccuracy: true }).then(function (geoposition) { map.center = geoposition.coords.latitude + ',' + geoposition.coords.longitude; }); var generateMap = function (targetCenter, targetZoom) { if (targetCenter === undefined) { targetCenter = map.center; } else { //when we change the center of the map keep track of it map.center = targetCenter; } if (targetZoom === undefined) { targetZoom = map.zoom; } return "https://maps.googleapis.com/maps/api/staticmap?center=" + targetCenter + "&zoom=" + targetZoom + "&format=png&sensor=false&scale=2&size=" + window.innerWidth + "x1200&maptype=roadmap&style=visibility:on|weight:1|invert_lightness:true|satur ation:100|lightness:1"; }; // Show map SpeechService.addCommand('map_show', function () { $scope.map = generateMap(); Focus.change("map"); }); 82 an ĐỒ ÁN TỐT NGHIỆP // Hide everything and "sleep" SpeechService.addCommand('map_location', function (location) { $scope.map = generateMap(location); Focus.change("map"); }); // Zoom in map SpeechService.addCommand('map_zoom_in', function () { map.zoom = map.zoom + 1; $scope.map = generateMap(); }); SpeechService.addCommand('map_zoom_out', function () { map.zoom = map.zoom - 1; $scope.map = generateMap(); }); SpeechService.addCommand('map_zoom_reset', function () { map.zoom = 13; $scope.map = generateMap(); }); SpeechService.addCommand('map_zoom_point', function (value) { if (0 + value < || value == "zero") { value = } else if (0 + value > 18) { value = 18 } map.zoom = value; $scope.map = generateMap(); }); } angular.module('SmartMirror') controller('Map', Map); o CODE CHƯƠNG TRÌNH RSS FEEDS function Rss($scope, $http, $q, $interval) { $scope.currentIndex = 0; var rss = {}; rss.feed = []; rss.get = function () { 83 an ĐỒ ÁN TỐT NGHIỆP rss.feed = []; rss.updated = new moment().format('MMM DD, h:mm a'); if (typeof config.rss != 'undefined' && typeof config.rss.feeds != 'undefined') { var promises = []; angular.forEach(config.rss.feeds, function (url) { promises.push($http.jsonp('https://query.yahooapis.com/v1/public/yql?q=select%20 * %20from%20xml%20where%20url%20%3D%20\'' + encodeURIComponent(url) + '\'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&call back=JSON_CALLB ACK')); }); return $q.all(promises) } }; var refreshNews = function () { $scope.news = null; rss.get().then(function (response) { //For each feed for (var i = 0; i < response.length; i++) { for (var j = 0; j < response[i].data.query.results.rss.channel.item.length; j++) { var feedEntry = { title: response[i].data.query.results.rss.channel.item[j].title, //content: response[i].data.query.results.rss.channel.item[j].description[0], }; rss.feed.push(feedEntry); } } $scope.currentIndex = 0; $scope.rss = rss; }); }; 84 an ĐỒ ÁN TỐT NGHIỆP var cycleNews = function(){ $scope.currentIndex = ($scope.currentIndex >= $scope.rss.feed.length)? 0: $scope.currentIndex + 1; } if (typeof config.rss !== 'undefined' && typeof config.rss.feeds != 'undefined') { refreshNews(); $interval(refreshNews, config.rss.refreshInterval * 60000 || 1800000) $interval(cycleNews, 8000) } } angular.module('SmartMirror') controller('Rss', Rss); o CODE CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐÈN 'use strict'; const Lookup = require(" /index").Lookup; const Yeelight = require(" /index").Yeelight; let look = new Lookup(); look.on("detected",(light) => { console.log("new yeelight detected: host="+light.host); }); setTimeout(() => { let lights = look.getLights(); if (lights.length == 0) { console.log("no yeelight found"); return; } let light = lights[0]; // ******************* state updates ******************* light.on("connected",() => { console.log("connected"); }); 85 an ĐỒ ÁN TỐT NGHIỆP light.on("disconnected",() => { console.log("disconnected"); }); light.on("stateUpdate",(light) => { console.log(light.rgb); }); light.on("failed",(error) => { console.log(error); }); // ******************* setter ******************* light.setRGB([255,255,255]).then(() => { console.log("setRGB promise resolved"); }).catch((error => { console.log("promise rejected"); console.log(error); })); light.updateState().then(() => { console.log("updateState promise resolved"); }).catch((error => { console.log("promise rejected"); console.log(error); })); //light.setBright(10); //light.setHSV([298,100,100],1000); light.setPower(true); //light.setCT(5000); setInterval(() => { light.updateState().then(() => 86 an ĐỒ ÁN TỐT NGHIỆP { console.log("updateState promise resolved"); }).catch((error => { console.log("promise rejected"); console.log(error); })); },10000) },1500); o CODE CHƯƠNG TRÌNH TÌM KIẾM VIDEO function Search($scope, $http, SpeechService, $rootScope, Focus) { var searchYouTube = function (query) { return $http({ url: 'https://www.googleapis.com/youtube/v3/search', method: 'GET', params: { 'part': 'snippet', 'order': 'relevance', 'q': query, 'type': 'video', 'videoEmbeddable': 'true', 'videoSyndicated': 'true', //Sharing this key in the hopes that it wont be abused 'key': config.youtube.key } }); } var stopVideo = function() { var iframe = document.getElementsByTagName("iframe")[0].contentWindow; iframe.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*'); } //Search for a video SpeechService.addCommand('video_search', function (query) { searchYouTube(query).then(function (results) { 87 an ĐỒ ÁN TỐT NGHIỆP //Set cc_load_policy=1 to force captions $scope.video = 'https://www.youtube.com/embed/' + results.data.items[0].id.videoId + '?autoplay=1&controls=0&iv_load_policy=3&enablejsapi=1&showinfo=0'; Focus.change("video"); }); }); //Stop video SpeechService.addCommand('video_stop', function () { Focus.change("default"); stopVideo(); }); $rootScope.$on('focus', function (targetScope, newFocus, oldFocus) { if(oldFocus == "video" && newFocus != "video"){ stopVideo(); } }) } angular.module('SmartMirror') controller('Search', Search); o CODE CHƯƠNG TRÌNH THỜI TIẾT function Weather($scope, $interval, $http, GeolocationService) { var language = (typeof config.general.language !== 'undefined') ? config.general.language.substr(0, 2) : "en" var geoposition = {} var weather = {} weather.get = function () { return $http.jsonp('https://api.darksky.net/forecast/' + config.forecast.key + '/' + geoposition.coords.latitude + ',' + geoposition.coords.longitude + '?units=' + config.forecast.units + "&lang=" + language + "&callback=JSON_CALLBACK") then(function (response) { return weather.forecast = response; }); }; 88 an ĐỒ ÁN TỐT NGHIỆP weather.minutelyForecast = function () { if (weather.forecast === null) { return null; } return weather.forecast.data.minutely; } //Returns the current forecast along with high and low tempratures for the current day weather.currentForecast = function () { if (weather.forecast === null) { return null; } weather.forecast.data.currently.day = moment.unix(weather.forecast.data.currently.time).format('ddd'); weather.forecast.data.currently.temperature = parseFloat(weather.forecast.data.currently.temperature).toFixed(0); weather.forecast.data.currently.wi = "wi-forecast-io-" + weather.forecast.data.currently.icon; weather.forecast.data.currently.iconAnimation = weather.forecast.data.currently.icon; return weather.forecast.data.currently; } weather.weeklyForecast = function () { if (weather.forecast === null) { return null; } // Add human readable info to info for (var i = 0; i < weather.forecast.data.daily.data.length; i++) { weather.forecast.data.daily.data[i].day = moment.unix(weather.forecast.data.daily.data[i].time).format('ddd'); weather.forecast.data.daily.data[i].temperatureMin = parseFloat(weather.forecast.data.daily.data[i].temperatureMin).toFixed(0); weather.forecast.data.daily.data[i].temperatureMax = parseFloat(weather.forecast.data.daily.data[i].temperatureMax).toFixed(0); weather.forecast.data.daily.data[i].wi = "wi-forecast-io-" + weather.forecast.data.daily.data[i].icon; 89 an ĐỒ ÁN TỐT NGHIỆP weather.forecast.data.daily.data[i].counter = String.fromCharCode(97 + i); weather.forecast.data.daily.data[i].iconAnimation = weather.forecast.data.daily.data[i].icon; } return weather.forecast.data.daily; } weather.hourlyForecast = function () { if (weather.forecast === null) { return null; } weather.forecast.data.hourly.day = moment.unix(weather.forecast.data.hourly.time).format('ddd') return weather.forecast.data.hourly; } GeolocationService.getLocation({ enableHighAccuracy: true }).then(function (geopo) { geoposition = geopo; refreshWeatherData(geoposition); $interval(refreshWeatherData, config.forecast.refreshInterval * 60000 || 7200000) }); function refreshWeatherData() { weather.get().then(function () { $scope.currentForecast = weather.currentForecast(); $scope.weeklyForecast = weather.weeklyForecast(); $scope.hourlyForecast = weather.hourlyForecast(); $scope.minutelyForecast = weather.minutelyForecast(); }, function (err) { console.error(err) }); } } angular.module('SmartMirror') controller('Weather', Weather); 90 an ĐỒ ÁN TỐT NGHIỆP o CODE CHƯƠNG TRÌNH TIMER (function () { 'use strict'; function TimeboxService() { var service = {}; service.shouldDisplay = function (startTime, endTime) { if (startTime === undefined && endTime === undefined) { return true; } else { var now = new moment(); var format = null; if (startTime.match(/am/i) || startTime.match(/pm/i)) { format = 'h:mm a'; } else { format = 'HH:mm'; } var start = new moment(startTime, format); var end = new moment(endTime, format); return now.isBetween(start, end); } } return service; } angular.module('SmartMirror') factory('TimeboxService', TimeboxService); } ()); o CODE CHƯƠNG TRÌNH PHÁT HIỆN NGƯỜI QUA CAMERA_CODE PYTHON o CHƯƠNG TRÌNH CHÍNH import cv2 import sys from mail import sendEmail from flask import Flask, render_template, Response from camera import VideoCamera import time import threading 91 an ĐỒ ÁN TỐT NGHIỆP email_update_interval = 600 # sends an email only once in this time interval video_camera = VideoCamera(flip=True) # creates a camera object, flip vertically object_classifier = cv2.CascadeClassifier("models/fullbody_recognition_model.xml") # an opencv classifier # App Globals (do not edit) app = Flask( name ) last_epoch = def check_for_objects(): global last_epoch while True: try: frame, found_obj = video_camera.get_object(object_classifier) if found_obj and (time.time() - last_epoch) > email_update_interval: last_epoch = time.time() print "Sending email " sendEmail(frame) print "done!" except: print "Error sending email: ", sys.exc_info()[0] @app.route('/') def index(): return render_template('index.html') def gen(camera): while True: frame = camera.get_frame() yield (b' frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') @app.route('/video_feed') def video_feed(): 92 an ĐỒ ÁN TỐT NGHIỆP return Response(gen(video_camera), mimetype='multipart/x-mixed-replace; boundary=frame') if name == ' main ': t = threading.Thread(target=check_for_objects, args=()) t.daemon = True t.start() app.run(host='0.0.0.0', debug=False) o CHƯƠNG TRÌNH CON GỬI MAIL import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage # Email you want to send the update from (only works with gmail) fromEmail = 'email@gmail.com' # You can generate an app password here to avoid storing your password in plain text # https://support.google.com/accounts/answer/185833?hl=en fromEmailPassword = 'password' # Email you want to send the update to toEmail = 'email2@gmail.com' def sendEmail(image): msgRoot = MIMEMultipart('related') msgRoot['Subject'] = 'Security Update' msgRoot['From'] = fromEmail msgRoot['To'] = toEmail msgRoot.preamble = 'Raspberry pi security camera update' msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative) msgText = MIMEText('Smart security cam found object') msgAlternative.attach(msgText) 93 an ĐỒ ÁN TỐT NGHIỆP msgText = MIMEText('', 'html') msgAlternative.attach(msgText) msgImage = MIMEImage(image) msgImage.add_header('Content-ID', '') msgRoot.attach(msgImage) smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.starttls() smtp.login(fromEmail, fromEmailPassword) smtp.sendmail(fromEmail, toEmail, msgRoot.as_string()) smtp.quit() o CHƯƠNG TRÌNH CON CAMERA import cv2 from imutils.video.pivideostream import PiVideoStream import imutils import time import numpy as np class VideoCamera(object): def init (self, flip = False): self.vs = PiVideoStream().start() self.flip = flip time.sleep(2.0) def del (self): self.vs.stop() def flip_if_needed(self, frame): if self.flip: return np.flip(frame, 0) return frame def get_frame(self): frame = self.flip_if_needed(self.vs.read()) 94 an ĐỒ ÁN TỐT NGHIỆP ret, jpeg = cv2.imencode('.jpg', frame) return jpeg.tobytes() def get_object(self, classifier): found_objects = False frame = self.flip_if_needed(self.vs.read()).copy() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) objects = classifier.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) if len(objects) > 0: found_objects = True # Draw a rectangle around the objects for (x, y, w, h) in objects: cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) ret, jpeg = cv2.imencode('.jpg', frame) return (jpeg.tobytes(), found_objects) 95 an an ... Lắp đặt mơ hình gương thơng minh o Chạy thử nghiệm hệ thống gương thông minh o Viết báo cáo kết thực an ĐỒ ÁN TỐT NGHIỆP 1.5 Đối tượng phạm vi nghiên cứu o Thi? ??t kế mơ hình gương thơng minh để hỗ... Raspberry Pi trở thành thi? ??t bị sử dụng phổ biến cho dự án lập trình Đó là lý để nhóm nghiên cứu để thực đề tài ? ?THI? ??T KẾ VÀ THI CÔNG MÔ HÌNH GƯƠNG THƠNG MINH (SMART MIRROR)” 2.1.1 Giới thi? ??u bo mạch... trên, nhóm đề phương án thi? ??t kế xây dựng sơ đồ khối hệ thống tính tốn khối lựa chọn thi? ??t bị linh kiện phù hợp cho đề tài 4.1.2 Phương án thi? ??t kế Mạch thi? ??t kế chủ yếu dựa vào module cung cấp