1 | P a g e ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÀI TẬP LỚN KẾT THÚC MÔN HỌC XÂY DỰNG MÔ HÌNH GIÁM SÁT BÃI ĐỖ XE & CHO PHÉP ĐẶT TRƯỚC VỊ TRÍ TRÊN RASPBERRY PI 3B+ Môn học Đồ án 01 Đồ án c[.]
1|Page ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÀI TẬP LỚN KẾT THÚC MÔN HỌC XÂY DỰNG MƠ HÌNH GIÁM SÁT BÃI ĐỖ XE & CHO PHÉP ĐẶT TRƯỚC VỊ TRÍ TRÊN RASPBERRY PI 3B+ Mơn học: Đồ án 01: Đồ án chuyên ngành Cơ điện tử Lớp học phần: 2223I_EMA3143_40 Số tín chỉ: Năm học: Học kỳ I, 2022-2023 Giảng viên : PGS TS Phạm Mạnh Thắng Họ tên mã sinh viên: Đỗ Mạnh Tuấn - 19021129 Vũ Đình Tùng - 19021132 Hà Nội, tháng 11 năm 2022 2|Page MỤC LỤC A LỜI MỞ ĐẦU B NỘI DUNG CHÍNH Phần 1: Giới thiệu hệ thống 1.1 Khái quát hệ thống: 1.2 Nguyên lý hoạt động: Phần 2: Phần cứng 2.1 Linh kiện phần cứng: • Raspberry Pi 3B+: • RPi Camera (B): 12 • Arduino UNO 13 • Cảm biến hồng ngoại 14 • Động Servo SG90 15 • Một số linh kiện khác: 16 2.2 Cách cấu hình cài đặt phần cứng 17 • Cài đặt hệ điều hành cho Raspberry Pi 17 • Cài đặt module cần thiết 21 • Cài đặt thiết lập, sử dụng Rpi Camera 24 Phần 3: Phần mềm 26 3.1 Phầm mềm xây dựng cổng vào bãi gửi xe tự động 26 3.2 Các thư viện cần thiết để chạy chương trình giám sát 26 • Module OpenCV (CV2) 26 • Module Numpy 27 • Module phụ 28 3.3 Xây dựng hàm 31 3.4 Tích hợp vận dụng hàm vào chương trình 38 Phần 4: Kết luận 42 3|Page DANH MỤC HÌNH ẢNH Phần 1: Giới thiệu hệ thống Hình Sơ đồ nguyên lí Phần 2: Phần cứng Hình Raspberry Pi 3B+ Hình Sơ đồ cấu tạo Raspberry Pi Model B Hình Hệ điều hành Rasbian 11 Hình Hệ điều hành Raspbmc 11 Hình Rpi Camera (B) 12 Hình Kích thước Rpi Camera 13 Hình Phần mềm Raspberry Pi Imager 17 Hình Nhấn Choose OS để chọn hệ điều hành 18 Hình 10 Nhấn Choose Storage để chọn thẻ nhớ cần cài 18 Hình 11 Thiết lập Wi-fi, SSH, 19 Hình 12 Nhấn Write để bắt đầu cài HĐH lên thẻ nhớ 19 Hình 13 Nhấn yes để hồn tất q trình 20 Hình 27 Kiểm tra thư viện CV2 Raspberry Pi 23 Hình 28 Kết nối Camera với Raspberry Pi 25 Hình 29 Hình ảnh chụp lại từ Rpi Camera 25 Phần 3: Phần mềm Hình 30 OpenCV 26 Hình 31 Ảnh chuyển sang thang màu xám Error! Bookmark not defined Hình 32 Ảnh làm mờ qua thuật tốn GaussianBlurError! Bookmark not defined Hình 33 Ảnh làm mờ qua thuật toán MedianBlurError! Bookmark not defined Hình 34 Ảnh chuyển dạng nhị phân Error! Bookmark not defined Hình 35 Ảnh dạng nhị phân sau dãn nỡ pixelError! Bookmark not defined Hình 36 Thao tác, sử dụng hàm setMouseCallback Error! Bookmark not defined Hình 37 Thư viện NumPy 27 Hình 38 Phân tích ảnh thành mảng chiều 28 Hình 39 Firebase 29 Hình 40 Giao diện xây dựng từ Tkinter 30 4|Page Hình 41 Hàm xử lí ảnh 31 Hình 42 Hàm kiểm tra vị trí trống 32 Hình 43 Hàm tạo nhập liệu entry 33 Hình 44 Hàm thực nút nhấn 34 Hình 45 Tổ hợp hàm off 35 Hình 46 Hàm thiết lập gửi Email 36 Hình 47 Hàm gửi thông tin khách hàng lên Firebase 37 Hình 48 Thơng tin khách hàng lưu Firebase 37 Hình 49 Lấy tọa độ vị trí Firebase 38 Hình 50 Lấy kich thước vị trí Firebase 38 Hình 51 Hàm main 39 Hình 52 Cấu hình GUI 40 Hình 53 Kết 41 DANH MỤC BẢNG BIỂU Bảng 2.1 Thông số kỹ thuật Raspberry Pi 3, model B 10 Bảng 3.1 Một số Widget Tkinter chức chúng 30 5|Page A LỜI MỞ ĐẦU Ngày nay, cụm từ “tự động hóa” khơng cịn q xa lạ với chúng ta, mà hoạt động người ngày thay máy móc tương lai phổ biến Việc cỗ máy cầm nắm, làm việc, hay di chuyển tự động quen thuộc, nhiên hoạt động bị giới hạn cần có người giám sát, điều khiển Vậy thì, hệ thống hay máy móc có thêm “đơi mắt” để tự nhận biết tượng, thơng tin, tự thị cho mình, đáp ứng thơng tin tượng ? Để trả lời cho câu hỏi trên, báo cáo này, nhóm em giới thiệu cách ứng dụng xử lý ảnh vào mơ hình nhỏ, cụ thể bãi đỗ xe, để giám sát số lượng xe cho phép đặt trước vị trí trống Tại lại bãi đỗ xe, với việc tiến tới thành phố thông minh, mà thứ “máy móc hóa” cần hệ thống thay người giám sát, đề cập trên, để hệ thống xử lý cách tối ưu hiệu phải cho “đơi măt” 6|Page B NỘI DUNG CHÍNH Bài báo cáo sâu vào tìm hiểu phần cứng, cách lắp đặt sử dụng Raspberry Pi 3B+ kết hợp với Camera trở thành “đơi mắt” “bộ não” hệ thống, tìm hiểu thơng tin mà hệ thống “nhìn” thấy cách mà hệ thống xử lí thơng tin để đáp ứng yêu cầu toán Bài báo cáo gồm phần: Phần – Giới thiệu hệ thống: Khái quát hệ thống, nguyên lý hoạt động Phần hai – Phần cứng: Giới thiệu, phân tích linh kiện hệ thống, cách hoạt động thơng số quan trọng Cách cấu hình phần cứng Phần ba – Phần mềm: Giới thiệu thư viện sử dụng hàm cách vận dụng chúng vào chương trình Cuối phần bốn – Kết luận: Ứng dụng thực tiễn, thuận lợi khó khăn gặp phải hướng phát triển tương lai 7|Page Phần 1: Giới thiệu hệ thống Hình Sơ đồ ngun lí 1.1 Khái qt hệ thống: Ở phía bên trái,nhóm bọn em sử dụng RPi Camera để làm “đôi mắt” cho hệ thống Bộ não hệ thống bọn em lựa chọn Raspberry Pi 3B+ Kế đến, bọn em sử dụng hình để hiển thị Giao diện người dùng (GUI) giúp cho việc thao tác dễ dàng Và cuối cùng, khách hàng đặt trước vị trí thành cơng nhận Gmail thông tin khách hàng lưu trữ lại Firebase 1.2 Nguyên lý hoạt động: Camera – “đôi mắt” hệ thống theo dõi, giám sát bãi đỗ xe chuyển trực tiếp hình ảnh cho Raspberry Pi – “bộ não” hệ thống Sau nhận hình ảnh, Raspberry Pi xử lí dựa thuật tốn lập trình cho số lượng vị trí trống bãi đỗ xe Cuối cùng, Raspberri Pi đẩy hình ảnh kèm theo thơng tin xử lí lên GUI, để người dùng trực tiếp quan sát bãi đỗ xe thơng qua GUI đặt trước vị trí trống mà mong muốn Và sau khách hàng đặt trước thành cơng, Raspberry Pi gửi thơng báo đặt trước thành công tới Gmail khách hàng song song lưu trữ thông tin khách hàng theo thời gian thực Firebase, thời đại Big Data việc lưu trữ thơng tin vơ quan trọng 8|Page Phần 2: Phần cứng 2.1 Linh kiện phần cứng: • Raspberry Pi 3B+: Hình Raspberry Pi 3B+ • Giới thiệu Raspberry Pi: Raspberry Pi máy tính giá 35USD kích cỡ iPhone chạy HĐH Linux Với mục tiêu chương trình giảng dạy máy tính cho trẻ em Được phát triển Raspberry Pi Foundation – tổ chức phi lợi nhuận với tiêu chí xây dựng hệ thống mà nhiều người sử dụng công việc tùy biến khác Raspberry Pi sản xuất OEM: Sony, Qsida, Egoman Và phân phối Element14, RS Components Egoman Nhiệm vụ ban đầu dự án Raspberry Pi tạo máy tính rẻ tiền có khả lập trình cho sinh viên , Pi quan tầm từ nhiều đối tượng khác Đặc tính Raspberry Pi xây dựng xoay quanh xử lí SoC Broadcom BCM2835 ( chip xử lí mobile mạnh mẽ có kích thước nhỏ hay dùng điện thoại di động ) bao gồm CPU , GPU , xử lí âm /video , tính khác … tất tích hợp bên chip có điện thấp Raspberry Pi khơng thay hoàn toàn hệ thống để bàn máy xách tay Ta khơng thể chạy Windows BCM2835 dựa cấu trúc ARM nên khơng hỗ trợ mã x86/x64 , chạy Linux với tiện ích lướt web , mơi trường Desktop nhiệm vụ khác Tuy nhiên Raspberry Pi thiết bị đa đáng ngạc nhiên với nhiều phần cứng có giá thành rẻ hoàn hảo cho hệ thống điện tử 9|Page , dự án DIY , thiết lập hệ thống tính tốn rẻ tiền cho học trải nghiệm lập trình … • Cấu hình phần cứng Raspberry Pi Model B: Hình Sơ đồ cấu tạo Raspberry Pi Model B Raspberry Pi có hai phiên bản, Model A có giá 25$ Model B có giá 35$ Model B hình thơng dụng Model B bao gồm phần cứng cổng giao diện Phiên Raspberry Pi phát hành tháng năm 2012, tới có nhiều phiên khác nhau, với nâng cấp phần cứng, hướng tới mục tiêu khác Phiên theo thứ tự mắt : Pi A → Pi A+ → Pi B → Pi 1B+ → Pi 2B → Pi Zero → Pi 3B → Pi 3B+ →… 10 | P a g e Và đây, em giới thiệu thông số phần cứng Raspberry Pi model B: Raspberry Pi Pi 3, model B Vi xử lí Broadcom BCM2837, ARMv8 (64bit) quad-core GPU Broadcom VideoCore IV, OpenGL ES 2.0,OpenVG 1080p60 , 400 MHz Tốc độ xử lí 1.2 Ghz Power Ratings 800mA @ 5V RAM 1GB LPDDR2 (900Mhz) Bộ nhớ Micro SD (16Gb) GPIO 40 4xUSB 2.0 10/100mb Ethernet Kết nối wifi 802.11 n Bluetooth 4.1 CSI, DSI Video & Audio 1080p HDMI, stero audio 3.5mm jack Kích thước 85x56mm Bảng 2.1 Thông số kỹ thuật Raspberry Pi 3, model B 28 | P a g e Hình 19 Phân tích ảnh thành mảng chiều • Một số hàm thường gặp o numpy.ones((“m”, “n”), dtype=“”) Tạo ma trận m hàng n cơt, có m*n phần tử có giá trị 1, kiểu liệu khai báo dtype, int float, … o numpy.zeros((“m”, “n”), dtype=“”) Tạo ma trận m hàng n cơt, có m*n phần tử có giá trị 0, kiểu liệu khai báo dtype, int float, … o numpy.eye(“m”, dtype=“”) Tạo ma trận vuông với m hàng m cột, có phần tử vị trí (i, i) = với i lớn nhỏ m, phần tử cịn lại có giá trị o … Ngồi cịn nhiều hàm hữu ích khác với u cầu tốn, em giới thiệu số hàm cần dùng • Module phụ Ngồi thư viện chính, phục vụ cho thuật tốn xử lí ảnh ta cần thêm thư viện khác để tối ưu chương trình, giúp cho chương trình hồn thiện, dễ sử dụng • Module Pyrebase 29 | P a g e Thư viện giúp chương trình liên kết với Firebase, với Firebase dịch vụ sở liệu hoạt động tảng đám mây – cloud, kèm theo hệ thống máy chủ mạnh mẽ Google Em sử dụng Firebase để lưu trữ liệu cần thiết thông tin khách đặt trước nên em phải cần đến hỗ trợ module pyrebase Hình 20 Firebase Để truy cập vào sở liệu Firebase sử dụng Realtime Database Firebase, ta cần số dòng lệnh sau: Sau đó, ta sử dụng lệnh db.child(“key”) để truy vấn đến value key, push() / set() để đẩy liệu lên Firebase hay get() để lấy liệu từ Firebase, … Khi dự án có q nhiều chương trình liệu, ta sử dụng Firebase để lưu trữ vào key riêng biệt, lúc lấy sử dụng vơ tiện lợi • Module Tkinter Trong Python có sẵn thư viện GUI tiêu chuẩn Tkinter o Widget No Widget Button Canvas Entry Frame Label ListBox Menubutton Message Description Button sử dụng để thêm nút nhấn vào giao diện, nhấn nút chạy chương trình lập trình cho riêng nút nhấn Canvas sử dụng để vẽ hình cửa sổ Entry sử dụng để người dùng nhập nội dung GUI Frame định nghĩa vùng chứa mà chứa nhiều widget khác Label loại dán nhãn, thường dùng để văn hình ảnh lên GUI ListBox sử dụng để hiển thị danh sách tùy chọn cho người dùng Menubutton sử dụng để hiển thị mục menu cho người dùng Message sử dụng để hiển thị hộp tin nhắn cho người dùng 30 | P a g e Scale 10 Scrollbar 11 Text … Nó sử dụng để cung cấp trượt cho người dùng Nó cung cấp cuộn cho người dùng để người dùng cuộn cửa sổ lên xuống Nó khác với Entry cung cấp trường văn nhiều dòng cho người dùng để người dùng viết văn chỉnh sửa văn bên Ngồi cịn số Widget khác Bảng 3.1 Một số Widget Tkinter chức chúng o Phương thức bày trí Widget Phương thức pack(), hay cịn gọi đóng gói, sử dụng để tổ chức widget theo khối Vị trí widget thêm vào GUI phương thức pack() kiểm sốt cách sử dụng tùy chọn khác định lệnh gọi phương thức Phương thức gird(), xếp widget dạng bảng Chúng ta định hàng cột định khoảng cột (chiều rộng) chiều dài hàng (chiều cao) widget Phương thức place() xếp widget theo tọa độ x y o Mẫu Hình 21 Giao diện xây dựng từ Tkinter • Module smtplib Module smtplib thư viện tích hợp Python để gửi email đến thiết bị Internet có trình nghe SMTP ESMTP Để gửi Email, ta tham khảo code mẫu sau 31 | P a g e • Module datetime Trong Python có thư viện cho phép trích xuất thời gian thực thư viện datetime • Module threading Khi chương trình phải chạy nhiều nhiệm vụ phụ, gửi Email, gửi liệu lên Firebase, … nhiệm vụ phụ khơng ảnh hưởng đến nhiệm vụ ta cho nhiệm vụ phụ chạy luồng khác với nhiệm vụ 3.3 Xây dựng hàm • Hàm processing_img(img) (Xử lí ảnh) Hình 22 Hàm xử lí ảnh 32 | P a g e Đầu vào ảnh cần xử lí, bước ta phải chuyển ảnh thang màu xám tức trở thành mảng chiều để dễ dàng xử lí Sau chuyển, ta cần bước tiền xử lí làm mở ảnh dùng hàm cv2.GaussianBlur để giảm nhiễu làm trơn ảnh Sau đó, ta chuyển ảnh dạng nhị phân tức pixel giá trị Sau chuyển dạng nhị phân, ta thấy cịn chấm pixel khơng cần thiết ta sử dụng lọc làm mờ trung vị (medianBlur) Cuối cùng, ta sử dụng hàm cv2.dilate để tạo thêm pixel lân cận, giúp gia tăng khoảng cách số lượng pixil chỗ có xe khơng có xe, hàm trả ảnh • Hàm checkParkingSpace(imgProcess, img, lstFree) (Hàm kiểm tra vị trí trống) Hình 23 Hàm kiểm tra vị trí trống 33 | P a g e Đầu vào gồm ảnh qua xử lí (imgProcess) ảnh gốc (img) Nguyên lý hàm sau: - Với danh sách posList bao gồm tọa độ kết hợp với chiều dài chiều rộng vị trí đỗ xe lấy từ Firebase Ta cắt ảnh nhỏ (imgCrop) - imgProcess tương ứng với vị trí đỗ xe Tiếp theo ta đếm số lượng điểm ảnh imgCrop, số lượng điểm ảnh lớn pixel_of_cars, có xe ngược lại Ngồi ra, vị trí trống mà đặt trước xóa tọa độ vị trí khỏi lstFree, tương tự vị trí đặt trước mà xe đến (trường hợp lí tưởng khơng có khách hàng để xe vào chỗ có người đặt trước) loại - bỏ vị trí khỏi lstPosDatTruoc Cuối sau xử lí toàn imgCrop, ta cho hiển thị lên ảnh gốc (img) thơng báo số lượng vị trí cịn trống, vị trí có xe ta đánh dấu màu đỏ, khơng có xe ta đánh dấu màu xanh đặt trước ta đánh dấu màu xanh nước biển • Hàm entry_window() Để nhập liệu GUI, ta sử dụng widget entry Tkinter Hình 24 Hàm tạo nhập liệu entry Lần lượt có nhập liệu Họ tên, số điện thoại, Email, Vị trí 34 | P a g e • Hàm dat_truoc() (Hàm thực nhấn nút nhấn) Hình 25 Hàm thực nút nhấn 35 | P a g e Hàm gọi lên ta thao tác với GUI, cụ thể nhấn vào đăng ký Nguyên lý sau: - Mỗi lần nhấn nút “Gửi” nút nhấn bị vơ hiệu xử lí xong, em để sau 2s enable lại nút nhấn để tránh bị spam giúp cho - chương trình chạy dễ dàng Hàm lấy thông tin từ entry(), nơi nhập liệu thư viện tkinter để lưu trữ số thơng tin vị trí, họ tên, gmail, số điện thoại, … - Hàm kiểm tra thơng tin vị trí, gmail, số điện thoại Nếu không hợp lệ thông báo GUI để người dùng biết - Khi thông tin hợp lệ, khách hàng đặt trước thành cơng gửi Email cho khách hàng qua luồng phụ để tránh làm ảnh hưởng đến chương trình • Tổ hợp hàm off() Hình 26 Tổ hợp hàm off Như đề cập trên, lần nhấn nút nhấn “Gửi” nút nhấn bị vơ hiệu khoảng thời gian 2s, sau 2s hàm off gọi lên để Enable lại nút nhấn Có hàm off() đặc biệt dành cho trường hợp đặt trước thành công, đặt trước thành công, vị trí đặt trước lưu vào lstPosDatTruoc, sau gửi thơng tin khách hàng lên Firebase thông qua luồng phụ Cuối reset lại ô nhập liệu entry lần đặt trước Các hàm off1(), off2(), off3(), off4(), off5() gọi lên vị trí có xe, thiếu thơng tin, sai địa email, vị trí khơng hợp lệ số điện thoại không hợp lệ 36 | P a g e • Hàm setup_email() (Hàm thiết lập gửi Gmail) Hình 27 Hàm thiết lập gửi Email Tương tự giới thiệu module smtplib, để gửi email ta cần phải làm số bước thiết lập, hàm setup_email() thêm bước kiểm tra xem email có hợp lệ hay không in thông báo lên GUI 37 | P a g e • Hàm up_customer_to_firebase() (Hàm gửi thơng tin khách hàng lên Firebase) Hình 28 Hàm gửi thông tin khách hàng lên Firebase Sau đặt trước thành công, thông tin khách hàng lưu Firebase sau: Hình 29 Thơng tin khách hàng lưu Firebase 38 | P a g e 3.4 Tích hợp vận dụng hàm vào chương trình Sau giới thiệu đầy đủ module, thư viện hàm cần thiết, phần này, bọn em vào sử dụng tích hợp chúng cho đáp ứng yêu cầu toán Đầu tiên, bọn em tóm tắt ngun lí tồn tốn: - Làm để nhận biết vị trí có xe với vị trí khơng có xe ? Thì q trình chuyển ảnh dạng nhị phân, ta thấy rõ số lượng điểm ảnh vị trí có xe lớn hẳn vị trí khơng có xe - Việc chuyển ảnh dạng nhị phân có hàm processing_img đảm nhiệm, sau ta đẩy ảnh xử lí ảnh gốc vào hàm checkParkingSpace để kiểm tra xem vị trí có xe hay chưa, với tọa độ kích thước vị trí lấy từ Firebase Tại Firebase lại có tọa độ kích thước vị trí ? Thì phần - giới thiệu hàm cv2.setMouseCallback, em trích ví dụ từ dự án mình, nhấn chuột trái vào điểm ảnh, ta có tọa độ điểm kêt hợp với chiều dài chiều rộng khai báo ngoài, ta vẽ hình chữ nhật Chiều dài chiều rộng ta khảo sát thay đổi cho khớp với vị trí đỗ xe Mỗi lần thế, tọa độ lưu vào - posList đẩy lên Firebase với chiều dài chiều rộng Và tất thao tác trên, bọn em để chương trình phụ hay thao tác trước chương trình Khi đó, chương trình ta việc lấy tọa độ kích thước lưu Firebase Hình 30 Lấy tọa độ vị trí Firebase Hình 31 Lấy kich thước vị trí Firebase 39 | P a g e - Ở toàn bước để kết hợp thuật tốn xử lí, ta sử dụng - hàm entry_window, widget Tkinter để tạo nên giao diện GUI giúp cho người dùng quan sát sử dụng Kết hợp thêm hàm off, hàm dat_truoc, hàm up_customer_to_firebase, setup_email, giới thiệu để xử lí thao tác giao diện Đầu tiên, ta phải thiết lập số câu lệnh để kết nối với Firebase: Sau đó, ta lấy tọa độ kích thước vị trí để xe Firebase Kế đến, ta thiết lập đọc camera: Ứng dụng hàm vào hàm main() sau: Hình 32 Hàm main Đầu tiên, ta trích xuất thông tin thời gian thực ngày, tháng, năm Sau đó, tạo lstFree rỗng để chứa vị trí khơng có xe Tiếp theo, ta lưu khung ảnh đọc từ camera vào img (chuyển từ mảng chiều mảng chiều) 40 | P a g e Do ảnh đọc từ camera ảnh màu RGB mà thư viện OpenCV lại xử lí ảnh hệ màu BGR nên ta phải đổi hệ màu để xử lí ảnh Sau đó, ta chỉnh kích thước ảnh cho phù hợp với giao diện mục đích sử dụng, chuyển ảnh dạng nhị phân kiểm tra vị trí để xe Cuối cùng, để hiển thị ảnh giao diện, ta cần phải đổi ảnh hệ màu RGB hệ màu mà Tkinter hỗ trợ sử dụng Nhưng ảnh trích xuất thời điểm đọc khung ảnh từ camera, sau 10ms ta chạy lại hàm main giúp cho khung ảnh đọc liên tục Cấu hình GUI: Hình 33 Cấu hình GUI 41 | P a g e Cuối cùng, chạy hàm main vòng lặp GUI: Kết quả: Hình 34 Kết 42 | P a g e Phần 4: Kết luận Và tồn dự án bọn em, không cần thiết phải áp dụng thứ cầu kỳ học máy, học sâu, nơ ron nhân tạo, … để nhận biết có xe hay khơng Chỉ cần hiểu rõ từ thứ đơn giản module mà sử dụng áp dùng xử lí tốn Tuy hệ thống cịn nhiều sơ sài phải áp dụng trường hợp lí tưởng, bước đầu Nếu tích hợp thêm nhận dạng biển số xe, hay kết hợp với số động để điều khiển đóng mở cửa tự động hồn tồn áp dụng hệ thống vào thực tiễn Nhưng khuôn khổ môn học giới hạn kiến thức nên hệ thống bọn em dừng lại đây, bọn em mong học tập thêm để phát triển thêm hệ thống ... INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D ENABLE_NEON=ON \ -D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D... -p ~/opencv_build/opencv/build && cd ~/opencv_build/opencv/build Thiết lập cấu hình dựng OpenCV với cmake: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=OFF... build-essential cmake git pkg-config libgtk-3-dev "libcanberra-gtk*" sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcoredev libx264-dev sudo apt install libjpeg-dev