1. Trang chủ
  2. » Thể loại khác

ĐỒ ÁN CHUYÊN NGÀNH 2 ĐỀ TÀI: XÂY DỰNG HỆ THỐNG BÃI GIỮ XE THÔNG MINH. Giảng viên hướng dẫn : PGS.TS. HUỲNH CÔNG PHÁP

39 9 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 2,47 MB

Nội dung

Trang 1

ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀNKHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CHUYÊN NGÀNH 2

ĐỀ TÀI:

XÂY DỰNG HỆ THỐNG BÃI GIỮ XE THÔNG MINH

Sinh viên thực hiện : NGUYỄN VĂN NHỚ 17IT022 HỒ VĂN HƯNG THỊNH 17IT030Giảng viên hướng dẫn : PGS.TS HUỲNH CÔNG PHÁP

Đà nẵng, tháng 05 năm 2021

Trang 2

ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN

KHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CHUYÊN NGÀNH 1

ĐỀ TÀI:

XÂY DỰNG HỆ THỐNG BÃI GIỮ XE THÔNG MINH

Trang 3

Đà nẵng, tháng 05 năm 2021

LỜI CẢM ƠN

Lời đầu tiên, chúng em xin chân thành cám ơn đến quý thầy cô giảng viên Đại học công nghệ thông tin và truyền thông Việt-Hàn đã tận tình giúp đỡ em trong suốt quá trình học tập và hoàn thành bài đồ án chuyên ngành 2

Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc đến PGS.TS.Huỳnh Công Pháp đã dành nhiều thời giann, tâm huyết để trực tiếp hướng dẫn tận tình và tạo điều kiện thuận lợi cho em trong suốt quá trình thực hiện đề tài và hoàn chỉnh đồ án chuyên ngành 2.

Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện, quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành đồ án chuyên ngành 2.

Trang 4

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Trang 5

MỤC LỤC

Chương 1 Tổng quan 9

1.1 Đối tượng và phạm vi nghiên cứu 9

1.1.1 Đối tượng nghiên cứu 9

1.1.2 Phạm vi nghiên cứu 9

1.2 Cơ sở lý thuyết 10

1.2.1 Bài toán nhận diện khuôn mặt 10

1.2.2 Bài toán nhận diện biển số 13

1.2.3 Ngôn ngữ lập trình Python 15

1.2.4 Thư viện OpenCV 17

1.2.5 Thư viện pyQt5 19

1.2.6 Flask Templates Python 21

Chương 3 Triển khai xây dựng 28

3.1 Xây dựng môi trường làm việc 28

3.1.1 Cài đặt OpenCV và các công cụ phát triển 28

3 Cài đặt thư viện OpenCV 29

Trang 6

DANH MỤC HÌNH

Hình 1 Nhận diện khuôn mặt 11

Hình 2 Nhận diện biển số xe 14

Hình 3 Các bước nhận diện biển số 15

Hình 4 Logo ngôn ngữ lập trình Python 16

Hình 5 Thư viện OpenCV 18

Hình 6 Thư viện pyQt5 20

Hình 7 Flask là gì ? 22

Hình 8 Cách hoạt động của Flask Framework 23

Hình 9 Phần mềm Visual Studio Code 24

Hình 10 Phần mềm SQLite 26

Hình 11 Cài đặt Visual Studio Code 29

Hình 12 Kiểm tra version Python 30

Hình 13 pip search “opencv” 30

Hình 14 install opencv-python 31

Hình 15 Kiểm tra cài đặt opencv 31

Hình 16 Cài đặt SQLite 31

Hình 17 Tạo cơ sở dữ liệu 32

Hình 18 Kiểm tra cài đặt Flask 32

Hình 19 Xây dựng giao diện với QtDesigner 33

Hình 20 Dữ liệu được lưu trong Sqlite 35

Hình 21 Ảnh để training 35

Trang 7

DANH MỤC CỤM TỪ VIẾT TẮT

2 Principle Components Analysis PCA 3 Linear Discriminant Analysis LDA

5 Structured Query Language SQL 6 Relational Database Management System RDBMS

8 Hypertext Preprocessor PHP 9 Hypertext Markup Language HTML 10 Graphical User Interface GUI 11 Cascading Style Sheet CSS

Trang 8

MỞ ĐẦU

1 Giới thiệu

Ngày nay, với sự phát triển mạnh mẽ của khoa học công nghệ, công nghệ thông tin là một trong những ngành có vị thế dẫn đầu và có vai trò rất lớn trong sự phát triển chung đó Các ứng dụng của công nghệ thông tin được áp dụng trong mọi lĩnh vực nghiên cứu khoa học cũng như trong mọi lĩnh vực của đời sống

Việc chúng ta phải mất quá nhiều thời gian vào việc gửi xe tại các bãi giữ xe đã trở nên lãng phí, một sự lãng phí mà chúng ta hoàn toàn có thể bù đắp bằng cách áp dụng sự tiến bộ của khoa học, sự phát triển của công nghệ thông tin Thay vì như trước đây, chúng ta phải mất từ năm đến mười phút cho một quy trình gửi xe thủ công, thì giờ đây công việc đó chỉ mất khoảng năm đến mười giây khi chúng ta áp dụng công nghệ thông tin vào các bãi giữ xe thông minh Và hiện tại các bãi giữ xe này đang được áp dụng rộng rãi tại các trung tâm thương mại, siêu thị, nhà sách, … Chúng em muốn tìm hiểu và đưa ra một giải pháp tốt nhằm giải quyết công việc gửi xe tại các bãi giữ xe Qua việc lựa chọn và mong muốn áp dụng những kiến

thức đã học vào thực tế nên chúng em đã chọn thực hiện đề tài “XÂY DỰNG HỆ

THỐNG BÃI GIỮ XE THÔNG MINH”2 Mục tiêu của đề tài

Hệ thống sẽ bao gồm ứng dụng cho phép người dùng có thể kiểm soát vào ra của các xe dựa trên thuật toán nhận diện khuôn mặt và nhận diện biển số xe, để có thể thực hiện một mô hình bãi giữ xe mang tính tự động hóa cao.

Hệ thống mang lại rất nhiều lợi ích như: giải quyết vấn đề nhân công, mang lại sự an toàn cho mọi người, tránh mất mát; giải quyết vấn đề vé xe bằng giấy, dễ bị nhàu nát hay mất, ghi nhầm biển số xe; kiểm soát được thời gian vào ra của xe và chủ sở hữu,…

3 Nội dung và kết hoạch thực hiện

Hoàn thành được một chương trình với chức năng:

Trang 9

 Ứng dụng sẽ hoạt động ổn định

 Hoàn thành các chức năng dành cho người dùng và người quản lý

 Hiểu các thuật toán nhận diện nhận diện khuôn mặt và nhận diện biển số  Hiểu về ngôn ngữ lập trình Python, OpenCV, framework Flask

 Cách sử dụng phần mềm Visual Studio Code, pyQt5, SQLite.

4 Bố cục báo cáo

Quá trình xây dựng và hoàn thành đồ án tiến hành qua các quy trình sau:  Chương 1: Tổng quan

 Chương 2: Phân tích và thiết kế hệ thống  Chương 3: Triển khai xây dựng

 Chương 4: Kết luận và hướng phát triển

Trang 10

Chương 1 Tổng quan

1.1 Đối tượng và phạm vi nghiên cứu

1.1.1Đối tượng nghiên cứu

Đối tượng nghiên cứu gồm:

 Nghiên cứu và xây dựng thuật toán nhận diện khuôn mặt và thuật toán nhận diện biển số xe

 Ngôn ngữ lập trình Python

 Thư viện OpenCV, framework Flask

 Phần mềm Visual Studio Code, pyQt5, MySQL Server

 Tìm hiểu về công cụ phát triển

 Tìm hiểu, nghiên cứu về ngôn ngữ lập trình Python và thư viện OpenCV  Tìm hiểu về phần mềm Visual Studio Code, pyQt5, MySQL Server  Tìm hiểu xây dựng hệ thống trên nền tảng Desktop app

Trang 11

1.2 Cơ sở lý thuyết

1.2.1Bài toán nhận diện khuôn mặt

1.2.1.1Giới thiệu về bài toán nhận diện khuôn mặt

Hình 1 Nhận diện khuôn mặt

Nhận diện khuôn mặt (Face Recognition) là một phương pháp sinh trắc để xác định hoặc xác minh một cá nhân nào đó bằng cách so sánh dữ liệu hình ảnh chụp trực tiếp hoặc hình ảnh kỹ thuật số với bản ghi được lưu trữ cho người đó.Nó được xem là một lĩnh vực nghiên cứu của ngành Biometrics (tương tự như nhận dạng vân tay – Fingerprint Recognition, hay nhận dạng mống mắt – Iris Recognition) Xét về nguyên tắc chung, nhận dạng khuôn mặt có sự tương đồng rất lớn với nhận dạng vân tay và nhận dạng mống mắt, tuy nhiên sự khác biệt nằm ở bước trích chọn đặt trưng (feature extraction) của mỗi lĩnh vực Trong khi nhận dạng vân tay và mống mắt đã đạt tới độ chín, tức là có thể áp dụng trên thực tế một cách rộng rãi thì nhận dạng khuôn mặt người vẫn còn nhiều thách thức và vẫn là một lĩnh vực nghiên cứu thú vị với nhiều người.So với nhận dạng vân tay và mống mắt, nhận dạng khuôn mặt có nguồn dữ liệu phong phú hơn (chúng ta có thể nhìn thấy mặt người ở bất cứ tấm ảnh, video clip nào liên quan tới con người trên mạng) và ít đòi hỏi sự tương tác có kiểm soát hơn (để thực hiện nhận dạng vân tay hay mống mắt, dữ liệu input lấy từ con người đòi hỏi có sự hợp tác trong môi trường có kiểm soát).

Các hệ thống nhận dạng khuôn mặt thường được sử dụng cho các mục đích an ninh như kiểm soát an ninh tại tòa nhà, sân bay, máy ATM, tra cứu thông tin của tội

Trang 12

phạm, phát hiện tội phạm ở nơi công cộng, và ngày càng được ứng dụng rộng rãi trong cuộc sống Bên cạnh những thành công đã được ghi nhận thì nhận dạng khuôn mặt cũng còn gặp nhiều khó khăn như về độ sáng, hướng nghiêng, kích thước hình ảnh, diện mạo, biểu hiện cảm xúc của khuôn mặt hay ảnh hưởng của tham số môi trường Để xây dựng một hệ thống nhận dạng khuôn mặt có đầu vào của hệ thống là một hình ảnh kỹ thuật số hay một khung hình video từ một nguồn video Đầu ra là xác định hoặc xác minh người ở trong bức hình hoặc trong video đó là ai Hướng tới mục tiêu này chúng ta thường chia thủ tục nhận dạng khuôn mặt gồm ba bước: Phát hiện khuôn mặt, trích rút đặc trưng và nhận dạng khuôn mặt.

Phát hiện khuôn mặt (Face Detection): Chức năng chính của bước này là phát hiện ra khuôn mặt xem nó có xuất hiện ở trong một bức hình hay một đoạn video hay không? Tỉ lệ phát hiện ra khuôn mặt phụ thuộc nhiều vào điều kiện về độ sáng, hướng khuôn mặt, biểu hiện cảm xúc trên khuôn mặt hay các yếu tố môi trường khác Để hệ thống nhận dạng hoạt động đạt hiệu quả cao thì hình ảnh khuôn mặt sau khi được phát hiện cần chuẩn hóa về kích thước, ánh sáng Trích rút đặc trưng (Feature Extraction): Sau khi phát hiện ra khuôn mặt trong bức ảnh, chúng ta tiến hành trích rút những đặc 6 trưng của khuôn mặt Bước này trích xuất ra một vector đặc trưng đại diện cho một khuôn mặt Nó phải đảm bảo được tính duy nhất của một khuôn mặt Nhận dạng khuôn mặt (Face Recognition): Với hình ảnh đầu vào sau khi phát hiện ra khuôn mặt, trích rút các đặc trưng của khuôn mặt và đem so sánh các đặc trưng này với cơ sở dữ liệu khuôn mặt Bài toán nhận dạng khuôn mặt được ứng dụng nhiều trong các lĩnh vực đời sống đặc biệt ở những lĩnh vực công nghệ cao, yêu cầu về an ninh, bảo mật Do đó để hệ thống nhận dạng khuôn mặt hoạt động mạnh mẽ với tốc độ và độ tin cậy thì có rất nhiều các phương pháp về nhận dạng khuôn mặt được đưa ra Các phương pháp có thể được phân loại theo các tiêu chí khác nhau như nhận dạng với dữ liệu ảnh đầu vào là ảnh tĩnh 2D (Elastic Bunch Graph, Active Appearance Model) Phương pháp này là phổ biến nhất và tương lai sẽ là 3D (3D Morphable Model) Tuy nhiên trên thực tế người ta hay chia phương pháp nhận dạng khuôn mặt ra thành 2 loại:

Trang 13

 Nhận dạng dựa trên các đặc trưng của các phần tử trên khuôn mặt (Feature Base Face Recognition)

 Nhận dạng dựa trên xét tổng thể toàn khuôn mặt (Appearance Based Face Recognition)

1.2.1.2Nhận dạng dựa trên các đặc trưng khuôn mặt

Đây là phương pháp nhận dạng khuôn mặt dựa trên việc xác định các đặc trưng hình học của các chi tiết trên khuôn mặt như vị trí, diện tích, khoảng cách của mắt, mũi, miệng, ….và mỗi quan hệ giữa chúng ví dụ như khoảng cách giữa hai mắt Ưu điểm của phương pháp này là nó gần với cách mà con người sử dụng để nhận biết khuôn mặt Hơn nữa với việc xác định đặc tính và các mối quan hệ, phương pháp này cho kết quả tốt trong 7 các điều kiện không có kiểm soát Nhược điểm của phương pháp này là cài đặt thuật toán phức tạp do việc xác định mối quan hệ giữa các đặc tính, đòi hỏi các thuật toán phức tạp và phương pháp này sẽ hoạt động không hiệu quả khi kích thước hình ảnh nhỏ vì rất khó phân biệt được các đặc tính

1.2.1.3Nhận dạng dựa trên xét toàn bộ khuôn mặt

Nội dụng chính của hướng tiếp cận này là xem mỗi ảnh có kích thước R x C là một vector trong không gian có R x C chiều Ta xây dựng một không gian mới có chiều nhỏ hơn sao cho khi biểu diễn trong không gian đó các đặc điểm chính trên khuôn mặt không bị mất đi Trong không gian đó các ảnh của cùng một người sẽ được tập trung lại thành một nhóm gần nhau và cách xa so với các nhóm khác Hai phương pháp thường được sử dụng trong hướng tiếp cận này là: - PCA (Principle Components Analysis) - LDA (Linear Discriminant Analysis)

Trang 14

1.2.2Bài toán nhận diện biển số1.2.2.1Giới thiệu

Hình 2 Nhận diện biển số xe

Nhận dạng biển số xe chắc không còn xa lạ đối với chúng ta, hàng ngày đi gửi xe ở các chung cư hay trung tâm thương mại chúng ta đều có thể nhìn thấy một anh bảo vệ ngồi gần một chiếc máy tính soi đi soi lại trên màn hình cái gì đó, đôi khi bảo chúng ta tắt đèn xe mà chúng ta chẳng hiểu để làm gì Thực ra là có 1 camera ở phía sau chụp lại biển số xe của chúng ta Anh ta đang xem lại ảnh trên máy tính có mờ hay nhiễu gì không để máy tính có thể nhận dạng được các con số trên biển số xe của chúng ta Thuật toán nhận diện biển số sẽ là cách mà náy tính có thể nhận diện được các con số hay chữ cái trên biển số xe

Trang 15

1.2.2.2Xử lý bài toán nhận diện biển số

Hình 3 Các bước nhận diện biển số

Bước 1: Định vị biển số hay còn gọi là phát hiện biển số: tìm khung chữ nhật

gồm (x, y, width, height) bao lấy biển số trong ảnh Nếu tìm thấy thì crop biển số ra để xử lý bước tiếp theo, kết quả của bước này là ảnh biển số đã crop Bước này sử dụng thuật toán LBP cascade

Dùng Haar cascade học đặc trưng của 1 biển số, sau đó crop biển số Tuy nhiên bước này lại chưa chính xác lắm

Bước 2: Định vị ký tự hay còn gọi là tìm vị trí của ký tự trên biển số đã crop.

Kết quả của bước này là các ký tự màu đen, sau đó resize tất cả về cùng 1 kích thước Bước này dùng thuật toán Floodfill

Cùng dùng Haar cascade để tìm ra các ký tự trong biển số đã được crop

Bước 3: Nhận dạng ký tự bằng thuật toán Machine Learning, trong trường hợp

này là SVM để phân lớp các ký tự

Cuối cùng là dung SVM để nhận dạng ký tự

Bước 4: Sắp xếp các kết quả nhận dạng và hiển thị ký tự theo định dạng biển

số xe máy

Trang 16

1.2.3Ngôn ngữ lập trình Python1.2.3.1Giới thiệu Python

Hình 4 Logo ngôn ngữ lập trình Python

Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng (object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic semantics) Python hỗ trợ các module và gói (packages), khuyến khích chương trình module hóa và tái sử dụng mã Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do

1.2.3.2Đặc trưng của ngôn ngữ lập trình Python

Tính phổ biến: Python có sự phát triển rất nhanh trong những năm gần đây.

Theo một khảo sát vào năm 2018 trên trang web Stack Overflow, Python được xếp hạng thứ 7 trong những ngôn ngữ lập trình phổ biến nhất và xếp hạng thứ nhất trong những công nghệ được ưa thích nhất năm Không những vậy, những công ty phần mềm hàng đầu thế giới sử dụng Python trong các dự án của họ mỗi ngày.

Dễ học: Khi so sánh giữ Python và các ngôn ngữ lập trình cấp cao khác như

C++, C#, Javascript, Java,… thì việc học ngôn ngữ Python dễ hơn Hơn thế, Python còn được dạy cho trẻ nhỏ nhờ vào cú pháp đơn giản dễ hiểu và gần với ngôn ngữ giao tiếp thường ngày Chính vì vậy Python đã được nhiều trường học trên thế giới

Trang 17

Không tính phí và mã nguồn mở: Trình thông dịch của Python được phát

triển dưới giấy phép mã nguồn mở (OSI-approved open-source license), chính vì vậy ta có thể tải và cài đặt nó hoàn toàn miễn phí, kể cả dùng cho các mục đích thương mại khác

Ngôn ngữ hướng đối tượng: Hướng đối tượng là đặc trưng quan trọng của

ngôn ngữ Python và các ngôn ngữ bậc cao hiện nay Phương pháp lập trình hướng đối tượng mô tả bài toán dưới sự tác động giữa các đối tượng và hiện thực vào chương trình máy tính Các đặc trưng quan trọng của một ngôn ngữ hướng đối tượng là: tính trừu tượng hóa (Abstraction), tính đóng gói (Encapsulation), tính kế thừa (Inheritance), tính đa hình (Polymorphism)

Hỗ trợ lập trình giao diện người dùng: Ngôn ngữ Python có các modules hỗ

trợ tạo giao diện trong lập trình như PyQt5, PyQt4, Tkinter giúp cho chương trình thu hút người dùng và trực quan hơn

Ngôn ngữ thông dịch: Hầu hết các ngôn ngữ lập trình đều chạy bằng trình

biên dịch, đều này có nghĩa là source code mà bạn viết ra cần phải được dịch qua mã máy (machine code) trước khi chạy được chương trình Tuy nhiên, những chương trình được viết bằng ngôn ngữ thông dịch sẽ bỏ qua bước đó mà chạy thẳng qua trình thông dịch Điều này giúp ích rất nhiều trong quy trình phát triển chương trình của bạn, bời vì bạn chỉ cần gõ code và chạy thôi, chứ không cần phải qua một quá trình biên dịch nào cả

Dễ dàng mở rộng: Tính năng mở rộng của Python đó là Python có để được

viết trong một ngôn ngữ khác và có thể dùng trình biên dịch/thông dịch để thực thi chương trình Ví dụ, chúng ta có thể viết mã nguồn Python và biên dịch nó bên trong ngôn ngữ C/C++

Ngôn ngữ không cần định nghĩa kiểu dữ liệu: Đây là một đặc trưng khác

biệt hoàn toàn so với các ngôn ngữ lập trình C, C++, Java,… Các biến trong chương trình Python khi khai báo không cần chỉ rõ kiểu dữ liệu cho nó và một biến có thể nắm giữ các đối tượng có kiểu dữ liệu khác nhau

Trang 18

1.2.4Thư viện OpenCV

Hình 5 Thư viện OpenCV

OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/ C++, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thời gian thực Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần

OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau bao gồm:

 Hình ảnh street view

 Kiểm tra và giám sát tự động  Robot và xe hơi tự lái

 Phân tích hình ảnh y học

 Tìm kiếm và phục hồi hình ảnh/video  Phim – cấu trúc 3D từ chuyển động  Nghệ thuật sắp đặt tương tác

Trang 19

Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các nhóm tính năng và module tương ứng như sau:

Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)

 Phát hiện các vật thể (objdetect, features2d, nonfree)

Geometry-based monocular hoặc stereo computer vision (calib3d, stitching,

Computational photography (photo, video, superres)

Machine learning & clustering (ml, flann)

CUDA acceleration (gpu)

Một số định nghĩa chi tiết các module phổ biến có sẵn

Core functionality (core): Module nhỏ gọn để xác định cấu trúc dữ liệu cơ

bản, bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản được sử dụng bởi tất cả các module khác.

Image Processing (imgproc): Module xử lý hình ảnh gồm cả lọc hình ảnh

tuyến tính và phi tuyến (linear and non-linear image filtering), phép biến đổi hình học (chỉnh size, afin và warp phối cảnh, ánh xạ lại dựa trên bảng chung), chuyển đổi không gian màu, biểu đồ, và nhiều cái khác.

Video Analysis (video): Module phân tích video bao gồm các tính năng ước

tính chuyển động, tách nền, và các thuật toán theo dõi vật thể

Camera Calibration and 3D Reconstruction (calib3d): Thuật toán hình

học đa chiều cơ bản, hiệu chuẩn máy ảnh single và stereo (single and stereo camera calibration), dự đoán kiểu dáng của đối tượng (object pose estimation), thuật toán thư tín âm thanh nổi (stereo correspondence algorithms) và các yếu tố tái tạo 3D.

2D Features Framework (features2d): Phát hiện các đặc tính nổi bật của

bộ nhận diện, bộ truy xuất thông số, thông số đối chọi.

Ngày đăng: 20/11/2021, 08:25

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w