Chương 1: Chương này giới thiệu sơ lược về tình hình nghiên cứu hiện nay cũng như tính cấp thiết của đề tài và giới thiệu một số sản phẩm, công trình nhà thông minh. Chương 2: Nội dung của chương này là trình bày các lý thuyết cần thiết để sử dụng trong đề tài. Chương 3: Chương này trình bày sơ đồ hệ thống và giải thích hoạt động của hệ thống, bên cạnh đó đưa ra các phương pháp lựa chọn phần cứng và xác định lựa chọn phù hợp với yêu cầu của đề tài. Chương 4: Chương này trình bày kết quả đã thực hiện về phần cứng và phần mềm.
4 do an Chương 5: Nội dung của chương này là nêu các ưu điểm và các điểm cần cải thiện của đề tài. Đưa ra đề xuất hướng khắc phục và hướng phát triển trong tương lai. 5 do an CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2. Giới thiệu về nhà thông minh và nền tảng tự động hóa Một hệ thống nhà thông minh cơ bản được kết hợp từ một bộ xử lý trung tâm và các thiết bị thông minh có thể kết nối với nhau, tương tác với người dùng.
Các thiết bị này đang rất phổ biến trên thị trường, từ những thiết bị hoàn toàn quen thuộc như tivi, máy lạnh, đèn,. đều được tích hợp chức năng để có thể tương tác với các bộ điều khiển, với các thiết bị khác. Nền tảng tự động hóa cho nhà thông minh Điều quan trọng nhất để có thể kết hợp và điều khiển các thiết bị Smart Home chính là bộ điều khiển trung tâm (Hub), mà phần lõi của nó chính là các bo mạch máy tính nhúng hoặc tương tự như Raspberry Pi, Nano Pi, … Các bo mạch máy tính nhúng này sử dụng hệ điều hành Linux và dùng các nền tảng, công cụ phần mềm nhà thông minh để kết nối và điều khiển các thiết bị nhà thông minh thông qua các kết nối như Wifi, Z-Wave hay Zigbee.1: Sơ đồ hoạt động của hệ thống nhà thông minh 6 do an Có rất nhiều nền tảng hỗ trợ nhà thông minh, ví dụ một số nền tảng mã nguồn mở phổ biến sau: Home Assistant là một nền tảng tự động hóa ngôi nhà mã nguồn mở chạy trên Python 3, ngôn ngữ phổ biến và mạnh trên Linux, được thiết kế để dễ dàng triển khai trên bất kỳ máy tính nào từ Raspberry Pi đến các thiết bị lưu trữ trên mạng và thậm chí là một container Docker để triển khai trên các hệ thống khác một cách dễ dàng. Home Assistant tích hợp với một số lượng lớn các sản phẩm mã nguồn mở cũng như thương mại, cho phép bạn liên kết các thiết bị, dữ liệu với nhau, ví dụ như IFTTT (if this then that - công cụ để tự động hóa các thao tác), thông tin thời tiết hay Amazon Echo, để kiểm soát phần cứng trong nhà, từ khóa cửa cho đến đèn điện.
Dự án Home Assistant ra đời năm 2013, do Paulus Schoutsen khởi xướng, và cho đến nay trở nên rất phổ biến đối với cộng đồng người phát triển Smart Home với khả năng thiết kế giao diện, hỗ trợ kết nối hầu hết các thiết bị thông minh đã có và liên tục được cập nhật. OpenHAB là viết tắt của Open Home Automation Bus, là một trong những công cụ nổi tiếng nhất trong cộng đồng những người đam mê nguồn mở trên thế giới, nó được hỗ trợ bởi một cộng đồng người dùng lớn và hỗ trợ khá nhiều thiết bị. Được viết bằng Java, openHAB có thể cài trên bất cứ hệ điều hành nào, và đương nhiên đang hỗ trợ tốt cho Raspberry. Hỗ trợ hàng trăm thiết bị, openHAB được thiết kế để trở thành hệ thống thông minh mở giúp các nhà phát triển dễ dàng thêm thiết bị hoặc plugin của riêng họ vào hệ thống.
OpenHAB cũng có ứng dụng iOS và Android để điều khiển thiết bị, bằng cách kết nối qua cloud trên myopenHAB. Ngoài ra, openHAB cũng như các công cụ thiết kế để bạn có thể tạo giao diện người dùng của riêng mình cho hệ thống nhà riêng của mình. Domoticz là hệ thống nhà thông minh hỗ trợ rất nhiều các thiết bị thông dụng từ báo khói cho đến điều khiển từ xa. Đây là hệ thống có số tài liệu tích hợp các thiết bị bên ngoài (3rd party) lớn nhất hiện nay.
Domoticz được viết bằng C/C++, giao diện làm bằng HTML5 và đương nhiên tương thích với các máy tính nhúng tiêu thụ ít điện như Orange Pi, Raspberry Pi. 7 do an OpenMotic là hệ thống nhà thông minh sử dụng cả phần cứng và phần mềm dưới bản quyền mã nguồn mở. Không giống như các phần mềm trên chỉ cung cấp các phần mềm điều khiển, OpenMotic cho phép bạn tải về cả các bản mạch và sơ đồ nguyên lý để tự thiết kế các bản mạch cho riêng mình. OpenMotic còn sử dụng chính Home Assistant như một thành phần cấu thành của nó.
Các thư viện Python cơ bản 2. Thư viện OpenCV OpenCV (Open source Computer Vision) là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính, xử lý ảnh, Machine learning và các tính năng tăng tốc GPU trong hoạt động thời gian thực. OpenCV hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có các giao diện C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android.
OpenCV được thiết kế để tính toán hiệu quả và với sự tập trinh nhiều vào các ứng dụng thời gian thực. Được viết bằng tối ứu C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi. Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot. Có thể kể đến một số chức năng của OpenCV như xử lý, hiển thị Image/video I/O, phát hiện các vật thể, xử lý hình học hay các chức năng thị giác máy tính, tính toán ảnh chụp, tăng tốc kiến trúc tính toán CUDA [7].
Thư viện Numpy Numpy là một thư viện toán học rất phổ biến và đầy quyền năng của Python, nó giống với Mathlab. Nó cho phép làm việc hiệu quả với ma trận, tính toán các phép toán của ma trận nhanh chóng và hiệu quả. Thư viện Numpy coi ma trận như một không gian nhiều chiều và làm việc trên những chiều của ma trận đó. Khái niệm chiều ma trận là khái niêm rất quan trọng trong thư viện Numpy và axis là thông số ám chỉ chiều của ma trận đó, một ma trận có số chiều là n thì sẽ có axis chạy từ 0 đến n-1, sẽ có rất nhiều hàm có tham số axis và nó ám chỉ ta tính toán theo chiều nào của ma trận.
Bên cạnh đó, với từng chiều ma trận, Numpy làm việc và tính toán với kích thước của chiều ma trận đó [8]. Module os Module os là một module có nhiều phương thức hữu ích trong việc làm việc với các tập tin và đường dẫn của chúng.path hỗ trợ các phương thức giúp thao tác nhanh chóng và thuận tiện hơn trên đường dẫn. Một số lệnh phổ biến của module os.path [9] Lệnh os.exists(path) kiếm tra một đường dẫn có tồn tại hay không Lệnh os.getfile(path) lấy kích thước tập tin (byte) Lệnh os.isfile(path) kiểm tra xem có phải là tập tin thông thường không Lệnh os.isdir(path) kiểm tra xem có phải là một thư mục Lệnh os.dirname(path) trả về tên thư mục của đường dẫn Lệnh os.getatime(path) trả về thời gian chỉnh sửa cuối cùng 2. Thư viện pillow Đôi lúc bạn sẽ gặp phải các vấn đề về xử lý hình ảnh trong công việc của mình.
Python cho phép bạn thực hiện điều đó dễ dàng thông qua thư viện Imaging (PIL). Thư viện này hỗ trợ nhiều định dạng tập tin, và cung cấp khả năng xử lý hình ảnh và đồ họa mạnh mẽ. Các chức năng cơ bản của thư viện [10] Tạo ảnh, Imaging cho phép bạn tạo được một hình ảnh trong python với đầy đủ kích thước , màu sắc với lệnh image.new() Mở ảnh, thư viện cho phép bạn mở một tấm ảnh đã có sẵn lên để thực hiện các thao tác khác như sao chép, chỉnh sửa,. với lệnh image.
Hiển thị ảnh, thao tác này chủ yếu được dùng cho mục đích gỡ lỗi trong quá trình làm việc với các tấm ảnh. Trên hệ điều hành windows, khi thực thi lệnh này nó lưu hình ảnh vào môt tập tin tạm thời và sử dụng các tiện ích tiêu chuẩn để hiển thị hình ảnh lên, sử dụng lệnh img.show() Lưu ảnh, thao tác này cho phép bạn lưu lại tấm ảnh dưới tên tập tin nhất định, dùng lệnh img. Haarcascade và phát hiện gương mặt OpenCV có hỗ trợ các tập dữ liêu đã được huấn luyện sẵn cho các lớp như 9 do an gương mặt, mắt, nụ cười, … Các tập này được lưu dưới dạng các file xml, người dùng có thể tự tạo các file này nếu muốn nhận diện các vật khác như xe cộ, điện thoại. Phát hiện đối tượng bằng cách sử dụng đặc trưng Haar dựa trên phân loại Cascade là một phương pháp phát hiện đối tượng hiệu quả được đề xuất bởi Paul Viola và Michael Jones.
Phương pháp này phát hiện đối tượng nhanh. Đây là một cách tiếp cận dựa trên máy học, được huấn luyện từ rất nhiều hình ảnh tích cực và tiêu cực. Sau đó, nó được sử dụng để phát hiện các đối tượng trong các hình ảnh khác. Ban đầu, thuật toán cần rất nhiều hình ảnh tích cực (hình ảnh khuôn mặt) và hình ảnh tiêu cực (hình ảnh không có khuôn mặt) để huấn luyện bộ phân loại.
Sau đó, chúng ta cần trích xuất các đặc trưng từ nó. Với việc này, các đặc trưng Haar hiển thị trong hình 2.2 dưới đây được sử dụng.2: Các dạng đặc trưng Haar [11] Mỗi tính năng là một giá trị duy nhất thu được bằng cách trừ tổng số pixel dưới hình chữ nhật màu đen với tổng số pixel dưới hình chữ nhật màu trắng, và chỉ với một cửa sổ 24x24 cũng cho kết quả hơn 160000 tính năng. Đối với mỗi tính toán đặc trưng, cần tìm tổng số pixel dưới hình chữ nhật trắng và đen. Để giải quyết điều này, họ đã giới thiệu hình ảnh tích hợp, cho dù hình ảnh của bạn lớn thế nào, việc tính toán cho một pixel nhất định trở thành một thao tác chỉ liên quan đến 4 pixel, phương thức mới này làm cho mọi thứ trở nên siêu nhanh.
10 do an Hình 2.3: Ví dụ trích xuất đặc trưng Haar [11] Nhưng trong số tất cả các đặc trưng được tính toán, hầu hết chúng không liên quan.3 thể hiện kết quả việc trích xuất đặc trưng và hàng trên cùng cho thấy hai đặc trưng tốt. Đặc điểm đầu tiên được chọn dường như tập trung vào đặc tính là vùng mắt thường tối hơn vùng mũi và má. Đặc điểm thứ hai được lựa chọn dựa vào đặc tính là mắt tối hơn sống mũi.