You are on page 1of 32

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT


KHOA ĐIỆN – ĐIỆN TỬ

ĐỒ ÁN 2
NGÀNH: KỸ THUẬT ĐIỆN TỬ VIỄN THÔNG
CHUYÊN NGÀNH: ĐIỆN TỬ VIỄN THÔNG

ĐỀ TÀI: NHẬN DIỆN NGƯỜI ĐEO KHẨU


TRANG SỬ DỤNG RASPBERRY PI

Người hướng dẫn : Nguyễn Linh Nam


Sinh viên thực hiện : Bùi Xuân Quang 1911505410148
Trần Duy Tân 1911505410153
Lớp: 19DT1

Đà Nẵng,…/2022
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1
1.1. Tổng quan......................................................................................................1
1.2. Lý do chọn đề tài........................................................................................2
1.3. Vấn đề giải quyết.......................................................................................3
1.4. Nội dung thực hiện....................................................................................3
CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT4
2.1 Giới thiệu là Máy tính nhúng Raspiberry Pi 3 Model B+ và Camera
5MP.......................................................................................................................4
2.1.1 Raspberry Pi là gì ?................................................................................4
2.1.2 Raspberry Pi dùng để làm gì ?..............................................................5
2.1.3 Một số hệ điều hành chạy trên Raspiberry Pi....................................6
2.1.4 Ưu điểm của Rasberry Pi là gì ?...........................................................7
2.2 Giới thiệu về Raspiberry pi 3 B+.................................................................7
2.3 Rasberry Camera........................................................................................12
2.3.1 Khái niệm..............................................................................................12
2.3.2 Ứng dụng...............................................................................................13
2.4 Một số khái niệm cơ bản về xử lý ảnh ......................................................13
2.4.1 Xử lý ảnh...............................................................................................13
2.4.2 Nhận dạng hình ảnh.............................................................................15
2.5 Giới thiệu về ngôn ngữ lập trình Python và OpenCV..............................15
2.5.1 Giới thiệu OpenCV...............................................................................15
2.5.2 Ngôn ngữ Python..................................................................................16
CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 25
3.1 Thuật toán thu thập dữ liệu........................................................................25
3.2 Thuật toán huấn luyện mô hình.................................................................32
3.3 Thuật toán phát hiện người đeo khẩu trang.............................................32
CHƯƠNG 4: Chạy mô phỏng và kết quả...........................................................32
4.1 Chương trình mô phỏng.............................................................................33
4.1.1 Chương trình mô phỏng......................................................................33
4.1.2 Kết quả..................................................................................................34
MỞ ĐẦU
Ngày nay khoa học công nghệ ngày càng đạt được những thành
tựu to lớn, kéo theo đó là sự phát triển vượt bậc trong các ngành nghề có
ứng dụng khoa học kỹ thuật. Những năm gần đây, khái niệm về Internet
of thing (IoT) không còn xa lạ trong cuộc sống của chúng ta nữa. Nhất là
khi hiện nay, các thiết bị IoT đã được sử dụng tràn ngập, rộng rãi khắp
thế giới. Điều đó cho ta thấy được lợi ích của các thiết bị này như thế
nào trong cuộc sống con người.
Với sự phát triển nhanh chóng của học sâu, đặc biệt là mạng nơ-
ron tích chập (CNN), thị giác máy tính đã đạt được những tiến bộ đáng
kể trong những năm gần đây về nhận dạng và phát hiện đối tượng [2][3].
Việc kết hợp một sản phẩm IoT có ứng dụng của trí tuệ nhân tạo
là tất yếu cũng là xu hướng hiện nay. Với đề tài “Phát hiện người đeo
khẩu trang ” của nhóm chúng em đang thực hiện, chính là sự kết hợp
đó với mong muốn tìm hiểu và phát triển một sản phẩm công nghệ theo
xu hướng nhưng ứng dụng hiệu quả trong ngành y tế nói riêng và ngành
y tế nói chung.
CHƯƠNG I: TỔNG QUAN ĐỀ TÀI

I. Tổng quan
1. Lí do chọn đề tài:
Việc đeo khẩu trang nơi công cộng đã góp phần hạn chế được sự lây lan của
dịch bệnh covid 19 trên toàn cầu. Giám sát người dân thực hiện đúng chủ trương,
chính sách của Nhà nước trong việc đeo khẩu trang nơi công cộng hoàn toàn có thể
được thực hiện một cách tự động. Bằng việc ứng dụng công nghệ xử lý ảnh, nhóm
em đã cùng nhau xây dựng nên chương trình phát hiện người dân có đeo khẩu
trang hay không và nhắc nhở. Chương trình dựa trên ngôn ngữ python và một số
thư viện mã nguồn mở như Open CV, Keras,... Mô hình được thực hiện đạt độ
chính xác cao lên đến 98, 99% khi tiến hành phát hiện người đeo khẩu trang trên
tập dữ liệu thử nghiệm.
2. Vấn đề cần giả quyết:
Với đề tài này chúng ta xác định mục tiêu là người có đeo khẩu trang hay
không. Yêu cầu đặt ra này gồm các tiêu chí:
- Nhận diện có độ chính xác cao
- Cho phép lưu khuôn mặt vào dữ liệu hệ thống.
- Tốc độ xử lý nhanh, khi có người không đeo khẩu trang đứng trong khung
hình của camera lập tức có kòi báo .
- Sản phẩm có tính thẩm mỹ,nhỏ gọn.

3. Nội dung thực hiện:


Sử dụng các kiến thức đã học trong 2 học phần môn vi điều khiển và trí tuệ
nhân tạo để tìm hiểu:
- Tiến hành thiết lập sơ đồ khối hệ thống.
- Xử lí các quá trình nhận diện và thông báo đúng lúc.
- Thực hiện lắp đặt phần cứng và viết nạp code theo yêu cầu chức năng.

4
II. Công nghệ nhận dạng khuôn mặt.
Nhận dạng khuôn mặt là một ứng dụng máy tính tự động xác định hoặc nhận
dạng một người nào đó từ một bức hình ảnh kỹ thuật số hoặc một khung hình
video từ một nguồn video. Một trong những cách để thực hiện điều này là so sánh
các đặc điểm khuôn mặt chọn trước từ hình ảnh và một cơ sở dữ liệu về khuôn
mặt.
Hệ thống này thường được sử dụng trong các hệ thống an ninh và có thể được so
sánh với các dạng sinh trắc học khác như các hệ thống nhận dạng vân tay hay tròng
mắt.
- Nhận dạng truyền thống.
Một số thuật toán nhận dạng khuôn mặt xác định các đặc điểm khuôn mặt bằng
cách trích xuất các ranh giới, hoặc đặc điểm, từ một hình ảnh khuôn mặt của đối
tượng. Ví dụ, một thuật toán có thể phân tích các vị trí tương đối, kích thước,
và/hoặc hình dạng của mắt, mũi, gò má, và cằm. Những tính năng này sau đó được
sử dụng để tìm kiếm các hình ảnh khác với các tính năng phù hợp. Các thuật toán
bình thường hóa một bộ sưu tập các hình ảnh khuôn mặt và sau đó nén dữ liệu
khuôn mặt, chỉ lưu dữ liệu hình ảnh nào là hữu ích cho việc nhận dạng khuôn mặt.
Một hình ảnh mẫu sau đó được so sánh với các dữ liệu khuôn mặt. Một trong
những hệ thống thành công sớm nhất dựa trên các kỹ thuật phù hợp với mẫu áp
dụng cho một tập hợp các đặc điểm khuôn mặt nổi bật, cung cấp một dạng đại diện
của khuôn mặt được nén.
Các thuật toán nhận dạng có thể được chia thành hai hướng chính, là hình học,
đó là nhìn vào tính năng phân biệt, hoặc trắc quang (đo sáng), là sử dụng phương
pháp thống kê để 'chưng cất' một hình ảnh thành những giá trị và so sánh các giá trị
với các mẫu để loại bỏ chênh lệch.

- Nhận dạng 3D
Một xu hướng mới nổi lên, tuyên bố cải thiện được độ chính xác, là nhận dạng
khuôn mặt ba chiều. Kỹ thuật này sử dụng các cảm biến 3D để nắm bắt thông tin
về hình dạng của khuôn mặt. Thông tin này sau đó được sử dụng để xác định các
tính năng đặc biệt trên bề mặt của một khuôn mặt, chẳng hạn như các đường viền
của hốc mắt, mũi và cằm.

5
Một lợi thế của nhận dạng khuôn mặt 3D là nó không bị ảnh hưởng bởi những
thay đổi trong ánh sáng như các kỹ thuật khác. Nó cũng có thể xác định một khuôn
mặt từ một loạt các góc nhìn, trong đó có góc nhìn nghiêng. Các điểm dữ liệu ba
chiều từ một khuôn mặt cải thiện lớn độ chính xác cho nhận dạng khuôn mặt.
Nghiên cứu 3D được tăng cường bởi sự phát triển của các bộ cảm biến tinh vi giúp
nắm bắt hình ảnh chụp khuôn mặt 3D được tốt hơn. Các cảm biến hoạt động bằng
cách chiếu ánh sáng có cấu trúc lên gương mặt. Hàng chục hoặc nhiều hơn nữa các
bộ cảm biến hình ảnh này có thể được đặt lên trên cùng một con chip CMOS-mỗi
cảm biến sẽ thu một phần khác nhau của hình ảnh.

6
CHƯƠNG II: CƠ SỞ LÝ THUYẾT

I. Hệ thống nhận diện khuôn mặt


1. Cấu trúc chương trình
Hệ thống nhận dạng mặt người là một hệ thống nhận vào một ảnh hoặc đoạn
video (một dòng gồm các ảnh liên tục). Qua quá trình xử lí, tính toán hệ thống
xác định vị trí mặt người có trong ảnh và xác định là người nào trong số những
người mà hệ thống biết (qua quá trình học) hoặc người lạ.

Cấu trúc chương trình gồm 3 bước được thể hiện trên Hình 1.
Bước 1: Thu thập dữ liệu: Sử dụng mã nguồn mở OpenCV để phát
hiện, lưu trữ 500 bức ảnh của người đeo khẩu trang và 500 bức ảnh của
người không đeo khẩu trang.
Bước 2: Sử dụng nguồn dữ liệu đã thu thập được ở bước 1 để huấn
luyện mô hình dựa trên mô hình mạng nơron tích chập CNN.
Bước 3: Phát hiện người đeo khẩu trang hay không. Bước này sẽ tiến
hành so sánh dữ liệu được trích xuất từ camera (sau khi đã được xử lý dữ
liệu đầu vào) với dữ liệu đã được huấn luyện để trích xuất kết quả và cảnh
báo bằng giọng nói.

2. Những tham số của hình ảnh khuôn mặt


Khuôn mặt con người vốn dĩ đa dạng. Điều này khiến cho hình ảnh thu được
của khuông mặt rất phong phú, có thể chỉ ra một số tham số cho các hình ảnh
này như:
- Góc quay xung quanh trục thẳng đứng: tham số này ảnh hưởng tới tính
đối xứng của khuôn mặt, đồng thời che lấp một con mắt và làm thay đổi
hình ảnh hiển thị của những chi tiết khác trên khuôn mặt.
- Góc quay xung quanh trục nằm ngang: ứng với tư thế ngẩng hay cúi đầu
của đối tượng thu nhập trước máy quay, tham số này ảnh hưởng tới sự
hiện diện của một số chi tiết quan trọng trên khuôn mặt như đôi mắt, vùng
trán hay vùng miệng.
7
- Góc quay xung quanh trục nối liền khuôn mặt với máy quay: tham số này
không biểu hiện đến những chi tiết trên khuôn mặt và có thể khôi phục về
vị trí thẳng đứng bằng phép xử lí quay hình.
- Kích thước khuôn mặt
- Tỉ lệ của các chiều của khuôn mặt
- Cảm xúc của khuôn mặt: tham số này làm thay đổi hình ảnh hiển thị của
những chi tiết trên khuôn mặt.

3. Giới thiệu về Raspberry Pi


3.1Raspberry Pi Foundation, một tổ chức từ thiện ở Anh được hỗ trợ
bởi Khoa Khoa học máy tính trường đại học Cambridge và hãng chip Broadcom,
đã thiết kế Raspberry Pi, với mong muốn thúc đẩy việc đưa khoa học máy tính
vào trường học  và giúp trẻ em ở các nước phát triển có "máy tính giá rẻ" để
học tập. Raspberry Pi chính thức trình làng công nghệ từ 2012, kể từ đó đến nay
các phiên bản Raspberry Pi đã được đưa ra với các cải thiện khác nhau

-Raspberry Pi là tên của một chuỗi các sản phẩm thuộc dòng máy tính đơn
board (single board computer) chạy hệ điều hành Linux.
-Raspberry Pi là một máy tính bảng đơn nhỏ. Bằng cách kết nối các thiết bị
ngoại vi như Bàn phím, chuột, màn hình với Raspberry Pi, nó sẽ hoạt động như
một máy tính cá nhân mini.
-Raspberry Pi được sử dụng phổ biến cho Xử lý hình ảnh/video thời gian
thực, ứng dụng dựa trên IoT và ứng dụng Robotics.
-Raspberry Pi chậm hơn máy tính xách tay hoặc máy tính để bàn nhưng vẫn là
một máy tính có thể cung cấp tất cả các tính năng hoặc khả năng mong đợi với
mức tiêu thụ điện năng thấp.

8
Hệ điều hành Raspbian là Hệ điều hành chính thức được cung cấp miễn
phí. Hệ điều hành này được tối ưu hóa hiệu quả để sử dụng với Raspberry
Pi. Raspbian có GUI bao gồm các công cụ để Duyệt web, lập trình Python, văn
phòng, trò chơi, v.v.
Raspberry Pi không chỉ là máy tính vì nó cung cấp quyền truy cập vào phần
cứng trên chip, tức là GPIO để phát triển ứng dụng. Bằng cách truy cập GPIO,
chúng ta có thể kết nối các thiết bị như đèn LED, động cơ, cảm biến, v.v. và cũng
có thể điều khiển chúng.Nó có SoC Bộ xử lý Broadcom dựa trên ARM cùng với
GPU trên chip (Bộ xử lý đồ họa).Tốc độ CPU của Raspberry Pi thay đổi từ 700
MHz đến 1,2 GHz. Ngoài ra, nó có SDRAM tích hợp trong khoảng từ 256 MB đến
1 GB.Raspberry Pi cũng cung cấp các mô-đun SPI, I2C, I2S và UART trên chip.
Phần cứng Raspiberry Pi

3.2 Raspberry Pi dùng để làm gì ?

Với khả năng tùy biến cao, Raspberry Pi có thể biến thành rất nhiều thiết bị từ
phần cứng đến phần mềm, có thể kể đến một số công dụng như sau:

- Đầu coi phim HD giống như TV Box, hỗ trợ KODI đầy đủ.

- Máy chơi game cầm tay, console, game thùng. Chơi như máy điện tử băng ngày xưa,
giả lập được nhiều hệ máy.

- Cắm máy tải Torrent 24/24.

9
- Dùng làm VPN cá nhân.

- Biến ổ cứng bình thường thành ổ cứng mạng (NAS).

- Làm camera an ninh, quan sát từ xa.

- Hiển thị thời tiết, hiển thị thông tin mạng nội bộ…

- Máy nghe nhạc, máy đọc sách.

- Làm thành một cái máy Terminal di động có màn hình, bàn phím, pin dự phòng để sử
dụng mọi lúc mọi nơi, dò pass WiFi…

- Làm thiết bị điều khiển SmartHome, điều khiển mọi thiết bị điện tử trong nhà.

- Điều khiển robot, máy in không dây từ xa, AirPlay…

Trên đây chỉ là một vài ứng dụng dễ thấy của Raspberry Pi, chúng có thể được sử dụng
cho vô vàn những mục đích khác nhau.

3.3 Một số hệ điều hành chạy trên Raspiberry Pi

Raspberry Pi được thiết kế cho hệ điều hành Linux, và nhiều bản phân phối Linux
hiện cũng có phiên bản tối ưu hóa Raspberry Pi. Hai trong số các lựa chọn phổ biến nhất
là Raspbian Jessie, dựa trên hệ điều hành Debian, và Pidora, dựa trên hệ điều hành
Fedora.

Trên thực tế cả 2 tùy chọn này đều hoạt động tốt, lựa chọn Raspbian Jessie hay Pidora là
do sở thích của mỗi người. Khi khởi động đầu tiên từ thẻ SD, bạn sẽ được cung cấp menu
có nhiều phân phối (bao gồm cả Raspbian và Pidora) để lựa chọn.

Chúng ta vẫn còn những lựa chọn khác: OpenELEC và RaspBMC là 2 hệ điều hành phân
phối dựa trên Linux, nhắm mục tiêu hướng tới sử dụng Raspberry Pi làm trung tâm
truyền thông. Ngoài ra còn có các hệ thống không phải Linux, chẳng hạn như RISC OS,
chạy trên Pi

10
3.4 Ưu điểm của Rasberry Pi là gì ?
Giá rẻ: chỉ từ 5 USD thôi là bạn đã mua được một cái Pi. • Đơn giản, dễ dùng, tiết
kiệm không gian: dùng làm các công việc văn phòng đơn giản, gõ Word, Excel hay tạo
PowerPoint, lướt web. • Tiêu thụ rất ít điện • Có tính di động cao: có thể bỏ vào túi mang
đi khắp nơi, thích hợp để làm máy nghe nhạc di động, máy đọc ebook, máy dò pass Wi-
Fi, máy chơi game cầm tay. Raspberry Pi 3 có cấu hình cao nhất hiện nay (trước đó có Pi,
Pi 2, ngoài ra còn có bản siêu nhỏ: Pi Zero và Pi Zero W). Pi 3 có giá chỉ 35 USD nhưng
thường là chúng ta sẽ mua thêm các phụ kiện ví dụ như case cho Pi 3, tản nhiệt cho chip,
adapter nguồn, thẻ nhớ.
Giới thiệu về Raspiberry pi 3 B+

Raspberry Pi 3 Model B+ là một phiên bản nâng cấp của Raspberry Pi 3 Model B
Cụ thể, điểm nâng cấp chính của Raspberry Pi 3 Model B+ là vi xử lý và kết nối mạng.
Model B+ dùng vi xử lý Broadcom BCM2837B0 4 nhân 1.4GHz (cao hơn so với
BCM2837 1.2GHz trên Pi 3 Model B).

Với các công việc đòi hỏi tốc độ mạng nhanh, Pi 3 Model B+ có thể đáp ứng với kết nối
Wi-Fi 2 băng tần 2.4GHz và 5GHz (dual band), Ethernet gigabit (qua cổng USB 2.0) tốc
độ lên đến 300Mbps, gấp 3 lần so với Pi 3 Model B. Thiết bị cũng hỗ trợ Bluetooth 4.2
và Bluetooth LE giúp kết nối tốt hơn với các thiết bị thông minh khác.

Cuối cùng, Model B+ còn có Power over Ethernet (PoE) giúp cung cấp nguồn điện cho
thiết bị thông qua dây cắm Ethernet nhưng phải thông qua một HAT mở rộng.

11
Cấu hình chi tiết Raspberry Pi 3 Model B+:

 SoC: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1,4


GHz
 RAM: 1 GB LPDDR2 SDRAM
 Wi-Fi b/g/n/ac
 Bluetooth 4.2, BLE
 Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
 40-pin GPIO
 HDMI
 4 x cổng USB 2.0
 Khe cắm thẻ Micro SD
 Hỗ trợ Power-over-Ethernet (PoE)
 Cải thiện PXE network và USB mass-storage booting
 Tản nhiệt tốt hơn Model B

Một số Thành phần Phần cứng hiển thị ở trên được đề cập bên dưới:

12
1. HDMI (Giao diện đa phương tiện độ nét cao): Nó được sử dụng để truyền dữ
liệu âm thanh kỹ thuật số hoặc video không nén tới Màn hình máy tính, TV kỹ
thuật số, v.v. Nói chung, cổng HDMI này giúp kết nối Raspberry Pi với TV kỹ
thuật số.
2. Giao diện máy ảnh CSI: Giao diện CSI (Giao diện nối tiếp máy ảnh) cung cấp
kết nối giữa Bộ xử lý Broadcom và máy ảnh Pi. Giao diện này cung cấp các kết
nối điện giữa hai thiết bị.
3. Giao diện hiển thị DSI: Giao diện hiển thị DSI (Giao diện nối tiếp hiển thị)
được sử dụng để kết nối LCD với Raspberry Pi bằng cáp ruy băng 15 chân. DSI
cung cấp giao diện hiển thị độ phân giải cao nhanh được sử dụng đặc biệt để gửi
dữ liệu video trực tiếp từ GPU đến màn hình LCD.
4. Đầu ra âm thanh và video tổng hợp: Cổng đầu ra âm thanh và video tổng hợp
mang video cùng với tín hiệu âm thanh đến hệ thống âm thanh/video.
5. Đèn LED nguồn: Đó là đèn LED màu ĐỎ được sử dụng để chỉ báo Nguồn. Đèn
LED này sẽ BẬT khi Nguồn được kết nối với Raspberry Pi. Nó được kết nối trực
tiếp với 5V và sẽ bắt đầu nhấp nháy bất cứ khi nào điện áp nguồn giảm xuống
dưới 4,63V.
6. ACT PWR: ACT PWR là đèn LED màu xanh lá cây hiển thị hoạt động của thẻ
SD.

Các chân GPIO của Raspberry Pi

Các chân GPIO của raspiberry pi 3 gồm có :


13
 2 chân có mức điện áp 3.3 V ( chân số1 vàchân số17) .
 2 chân có mức điện áp 5V ( chân số2, chân số4) .
 8 chân Ground ( 0V ) ( chân số 6 ,9, 14, 20, 25, 30, 34 và 39)
 28 chân GPIO

Các chân I2C


Raspberry Pi sử dụng chuẩn giao tiếp I2C để giao tiếp với các thiết bị tương thích với
Inter-Integrated Circuit (một giao thức truyền thông nối tiếp hai dây tốc độ thấp). Chuẩn
giao tiếp này yêu cầu vai trò chủ-tớ giữa cả hai thiết bị. I2C có hai kết nối: SDA (Serial
Data) và SCL (Serial Clock). Chúng hoạt động bằng cách gửi dữ liệu đến và sử dụng kết
nối SDA, và tốc độ truyền dữ liệu được điều khiển thông qua chân SCL.
 Data: (GPIO 2), Clock (GPIO 3)
 EEPROM Data: (GPIO 0), EEPROM Clock (GPIO 1)

Các chân UART


Các chân tiếp xúc tiếp nối đuôi nhau hoặc UART ( Universal Asynchronous
Receiver / Transmitter – Bộ thu / phát không đồng nhất đa năng ) cung ứng phương pháp
tiếp xúc giữa hai bộ vi điều khiển và tinh chỉnh hoặc máy tính. Chân TX được sử dụng để
truyền tài liệu tiếp nối đuôi nhau và chân RX được sử dụng để nhận tài liệu tiếp nối đuôi
nhau đến từ một thiết bị tiếp nối đuôi nhau khác. Có 2 chân tương quan đến tiếp xúc
UART .
 TX (GPIO14)
 RX (GPIO15)

Các chân SPI


SPI (Serial Peripheral Interface) là một giao thức được sử dụng cho giao tiếp chủ-tớ.
Raspberry Pi sử dụng giao thức này để giao tiếp nhanh chóng giữa một hoặc nhiều thiết
bị ngoại vi. Dữ liệu được đồng bộ hóa bằng đồng hồ (SCLK tại chân GPIO 11) từ thiết bị
chính (Raspberry Pi) và dữ liệu được gửi từ Raspberry Pi tới thiết bị SPI bằng
chân MOSI (Master Out Slave In). Nếu thiết bị SPI cần giao tiếp lại với Raspberry Pi, thì
nó sẽ gửi dữ liệu trở lại bằng chân MISO (Master In Slave Out). Có 5 chân liên quan đến
giao tiếp SPI:
 GND: Kết nối tất cả các chân GND của tất cả các thành phần tớ (slave) và bo
mạch Raspberry Pi 3 với nhau.
 SCLK: Tín hiệu đồng hồ của SPI. Kết nối tất cả các chân SCLK với nhau.
 MOSI (Master Out Slave In): Chân này được sử dụng để gửi dữ liệu từ chủ
(master) đến tớ (slave).

14
 MISO (Master In Slave Out): Chân này được sử dụng để nhận dữ liệu từ slave đến
master.
 CE (Chip Enable): Chúng tôi cần kết nối một chân CE cho mỗi thiết bị slave (hoặc
các thiết bị ngoại vi) trong mạch của chúng ta. Theo mặc định, chúng ta có hai
chân CE nhưng chúng ta có thể cấu hình nhiều chân CE hơn từ các chân GPIO có
sẵn khác.

Các chân SPI trên bo mạch Raspberry Pi 3 :


 SPI0: GPIO 9 (MISO), GPIO 10 (MOSI), GPIO 11 (SCLK), GPIO 8 (CE0),
GPIO 7 (CE1)
 SPI1: GPIO 19 (MISO), GPIO 20 (MOSI), GPIO 21 (SCLK), GPIO 18 (CE0),
GPIO 17 (CE1), GPIO 16 (CE2)
Các chân PWM 
PWM (Pulse Width Modulation – Điều chế độ rộng xung) là một kỹ thuật phổ biến
được sử dụng để thay đổi độ rộng của các xung trong một chuỗi xung. PWM có nhiều
ứng dụng như điều khiển độ sáng của đèn LED, điều khiển tốc độ của động cơ DC, điều
khiển động cơ servo hoặc nơi bạn phải lấy ngõ ra analog bằng các thiết bị kỹ thuật số.
 Phần mềm PWM có sẵn trên tất cả các chân
 Phần cứng PWM chỉ khả dụng trên các chân này: GPIO 12, GPIO 13, GPIO 18,
GPIO 19.
2.3 Rasberry Camera

2.3.1 Khái niệm

Raspberry Pi Camera là module camera durợc chính Raspberry Pi Foundation thiết


kế và đưa vào sản xuất đại trà từ tháng 5/2013. Camera Iodule ra đời đã thoả lòng rất
nhiều tín đồ yêu thích Raspberry. Trước khi xuất hiện camera, điều duy nhất bạn có thể
làm để thêm khả năng nhận biết hình ảnh, quay phim, chụp hình cho Rơi là sử dụng 1
webcam cắm vào cổng USB. Với các webcam Logotech tích hợp sẵn định dạng xuất
mjpeg sẽ giúp Raspberry xử lý nhanh hơn. Nhưng các webcatel Logitech lại có giá thành
khá cao, nhất là các webcam có độ phân giải lớn. Bạn không tốn thêm cổng USB in ảo
cho Camera vị Camera được gắn chắc chắn vào socket CSI. Diều này giúp hạn chế tình
trạng nghìn băng thông cho chip xử lý USB trên mạch Raspberry. Chiều dài cáp nối
camera đã được tính toán cẩn thận khi vừa đạt được độ dài cần thiết trong khi vẫn đảm
bảo tốc độ truyền hình ảnh từ module về Raspberry Pi.[9] Raspberry Pi Camera Module
V2 có một cảm biến 8 megapixel của Sony IMX219 (so với cảm biến 5 megapixel
OmniVision 05647 trên Camera Module phiên bản cũ)

15
Camera Module có thể được sử dụng để quay video độ nét cao, cũng như chụp
hình ảnh tĩnh. Nó cũng khá dễ dàng để sử dụng cho người mới bắt đầu, nhưng cũng có rất
nhiều giải pháp mở rộng để cung cấp cho người dùng yêu cầu cao. Có rất nhiều demo của
người dùng về công dụng của Camera Module như chụp Time-Lapse, SlowMotion và rất
nhiều ứng dụng khác. Raspberry Pi Camera Module V2 là một bước nhảy vọt về chất
lượng hình ảnh, màu sắc trung thực và hiệu suất ánh sáng thấp. Đặc biệt nó hỗ trợ video
lên tới 1080P30, 720P60 và video Iode VGA90, cũng như chế độ chụp hình. Dĩ nhiên, nó
vẫn sử dụng đoạn cáp 15cm qua cổng CSI trên Raspberry Pi.

Thông tin cấu hình Camera Pi v2.1

 Ống kính tiêu cự cố định - Cảm biến độ phân giải 8 megapixel cho khả năng
chụp ảnh kích thước 3280 x 2464.
 Hỗ trợ video 1080p30, 720p60 và 640x480290.
 Kích thước 25mm x 23mm x 9mm.
 Trọng lượng chỉ hơn 3g. Kết nối với Raspberry Pi thông qua cáp ribbon đi
kèm dài 15cm

16
2.3.2 Ứng dụng.

Bạn có thể dùng Camera và Raspberry để thiết lập hệ thống phát hiện chuyển
động. Hệ thống hoạt động bằng cách sử dụng hình ảnh từ Camera kết hợp với chương
trình xử lý hình ảnh và đưa ra lệnh điều khiển nếu phát hiện thấy có chuyển động. Đặt
biệt hữu ích với các bạn yêu thích làm phim, bạn có thể sử dụng để quay những góc quay
khó hoặc những cảnh quay độc mà chỉ với máy quay gọn nhẹ nhất mới làm được. Ngoài
ra, bạn có thể sử dụng camera để quay các đoạn phim tinue-lapse (ghép nhiều hình lại với
nhau) đang được rất nhiều người dùng trên thế giới thực hiện
2.4 Một số khái niệm cơ bản về xử lý ảnh .

2.4.1 Xử lý ảnh

Xử lý ảnh là lĩnh vực với nhiều kiến thức cơ sở khác nhau được áp dụng vào trong
công việc tăng cường và xử lý ảnh thu nhận được từ các thiết bị như camera, webcam….
Vì vậy, xử lý ảnh đã được ứng dụng và phát triển trong các nhiều lĩnh vực như:
 Trong lĩnh vực quân sự được sử dụng để xử lí ảnh và nhận dạng ảnh, xử lý
âm thanh đồ họa
 Trong lĩnh vực an toàn bảo mật dùng nhận diện khuôn mặt người, nhận diện
vân tay hay là mẫu mắt…
 Trong các lĩnh vực giải trí như trò chơi điện tử
 Trong lĩnh vực y tế áp dụng vào chụp chụp X quang, MRI…

Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng: nâng cao chất lượng và
phân tích ảnh. Vấn đề nâng cao chất lượng ảnh có ảnh hưởng đến tới phân bố mức
sáng và độ phân giải của ảnh. Máy tính phát triển nhanh tạo điều kiện cho quá trình
xử lí ảnh được thuận tiện và sắc nét nhiều màu hơn. Năm 1964, máy tính đã có
chức năng xử lý và nâng cao được chất lượng ảnh của mặt trăng và vệ tinh như:
làm nổi đường biên, lưu lại ảnh. Từ năm 1964 đến nay, các thiết bị xử lý, nâng cao
về chất lượng, nhận dạng hình ảnh phát triển không ngừng. Các phương pháp liên
quan đến tri thức nhân tạo như mạng Nơ-ron nhân tạo, các công cụ nén ảnh, thuật

17
toán xử lý hiện đại, được cải tiến và ngày một áp dụng rộng rãi và đem lại nhiều
kết quả khả quan.
Sau đây, ta sẽ xét các bước cần thiết cho quá trình xử lí ảnh. Đầu tiên từ thế
giới bên ngoài được thu nhận qua các thiết bị thu như (Camera, máy chụp ảnh).
Gần đây với sự phát triển của khoa học công nghệ, các ảnh màu hoặc đen trắng
được lấy ra từ Camera, sau đó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho
việc xử lý tiếp theo. Ngoài ra, ảnh có thể quét từ vệ tinh chụp trực tiếp bằng máy
quét ảnh.

2.4.2 Nhận dạng hình ảnh

Nhiều cải tiến công nghệ mới gần đây dựa vào công nghệ nhận dạng hình ảnh –
Image Recognition. Công nghệ đằng sau tính năng nhận dạng khuôn mặt trong điện thoại
thông minh của chúng ta, chế độ tự hành trong xe tự lái và chẩn đoán hình ảnh trong
chăm sóc sức khỏe,… đã có những bước tiến lớn trong những năm gần đây. Tất cả chúng
đều sử dụng các giải pháp giúp cảm nhận về các vật thể trước mặt chúng. Những máy
tính này có thể đưa ra quyết định chính xác dựa trên những gì chúng nhìn thấy.
Bản chất của nhận dạng các vật thể có trong hình là trong việc cung cấp một thuật
toán có thể lấy một hình ảnh đầu vào và sau đó nhận ra những gì trên hình ảnh này và
hiển thị rõ từng vật thể lên. Cần lưu ý rằng máy móc không thể nhìn thấy và cảm nhận
hình ảnh như chúng ta làm. Đối với máy, đó là tất cả về toán học, và bất kỳ đối tượng nào
sẽ trông như thế này:

18
2. OpenCV

- OpenCV là thư viện nguồn mở hàng đầu cho Computer Vision và


Machine Learning, và hiện có thêm tính năng tăng tốc GPU cho các
hoạt động theo real-time.
- Nó có trên các giao diện C++, C, Python và Java và hổ trợ Windows,
Linus, Mac OS,... OpenCV được thiết kế để hổ trợ hiệu quả về tính
toán và chuyên dùng cho các ứng dụng real-time (thời gian thực). Nếu
được viết trên C/C++ tối ưu, thư viện này có thể tận dụng được bộ cử
lý đa lõi( multi-core processing ).
Chức năng:
- OpenCV đa dạng, khá nhiều về tính năng như:
+ Xử lý và hiển thị hình ảnh/Video/I/O( core, imgpoc, highgui)
+ Phát hiện các vật thể ( objdetect, features2d, nonfree)
+ Machine learning và clustering (ml, flann)
+ CUDA acceleration
- OpenCV hiện được ứng dụng rộng rãi trên toàn cầu, với nhiều mục
đích và tính năng khác nhau từ interactive art, đến khai thác web map

19
hoặc robotic cao cấp. Tuy nhiên ở trong đề tài chỉ sử dụng OpenCv để
xử lý và hiển thị hình ảnh.
3. Ngôn ngữ Python

Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web,
phát triển phần mềm, khoa học dữ liệu và máy học (ML). Các nhà phát triển sử dụng
Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau. Phần mềm
Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ
phát triển.
Một số thư viện Python
Matplotlib
Các nhà phát triển sử dụng Matplotlib để hiển thị dữ liệu dưới dạng đồ
họa hai và ba chiều (2D và 3D) chất lượng cao. Thư viện này thường được sử
dụng trong các ứng dụng khoa học. Với Matplotlib, bạn có thể trực quan hóa dữ
liệu bằng cách hiển thị dữ liệu dưới dạng các biểu đồ khác nhau, chẳng hạn như
biểu đồ cột và biểu đồ đường. Bạn cũng có thể hiển thị nhiều biểu đồ cùng lúc
và các chi tiết đồ họa có thể được di chuyển qua mọi nền tảng.
Pandas
Pandas cung cấp cấu trúc dữ liệu được tối ưu hóa và linh hoạt mà bạn có
thể sử dụng để thao tác với dữ liệu chuỗi thời gian và dữ liệu có cấu trúc, chẳng
hạn như bảng và nhóm. Ví dụ, bạn có thể sử dụng Pandas để đọc, ghi, hợp nhất,
lọc và nhóm dữ liệu. Thư viện này được nhiều người sử dụng cho các tác vụ
khoa học dữ liệu, phân tích dữ liệu và ML.
NumPy
NumPy là một thư viện phổ biến mà các nhà phát triển sử dụng để dễ
dàng tạo và quản lý nhóm, thao tác với các hình dạng logic và thực hiện các
phép toán đại số tuyến tính. NumPy hỗ trợ tích hợp với nhiều ngôn ngữ như C
và C ++.
Requests
Thư viện Requests cung cấp nhiều hàm hữu ích cần thiết để phát triển
web. Bạn có thể sử dụng thư viện này để gửi các yêu cầu HTTP, bổ sung tiêu

20
đề, thêm tham số URL, bổ sung dữ liệu và thực hiện nhiều tác vụ khác khi giao
tiếp với các ứng dụng web. 
OpenCV-Python
OpenCV-Python là một thư viện mà các nhà phát triển sử dụng để xử lý
hình ảnh cho các ứng dụng thị giác máy tính. Thư viện này cung cấp nhiều hàm
cho các tác vụ xử lý hình ảnh như đọc và ghi hình ảnh cùng lúc, xây dựng môi
trường 3D từ môi trường 2D cũng như chụp và phân tích hình ảnh từ video.
Keras
Keras là thư viện mạng nơ-ron chuyên sâu của Python với khả năng hỗ
trợ tuyệt vời cho việc xử lý dữ liệu, trực quan hóa và hơn thế nữa. Keras hỗ trợ
nhiều mạng nơ-ron. Thư viện này có cấu trúc mô-đun mang lại sự linh hoạt cho
việc lập trình các ứng dụng sáng tạo.

21
CHƯƠNG III: PHÂN TÍCH THIẾT KẾ HỆ THỐNG

I. Thuật toán thu thập dữ liệu.

Hình 1.Thuật toán thu thập dữ liệu

Để thu thập dữ liệu, thay vì lấy nguồn dữ liệu trên mạng, nhóm tác giả đã
thực hiện thu thập bằng chương trình được viết trên ngôn ngữ python, sử dụng thư
viện mã nguồn mở OpenCV để phát hiện khuôn mặt người.
Hình 1 Thể hiện thuật toán thu thập dữ liệu. Dữ liệu sau khi thu thập dưới
dạng file ảnh .jpg sẽ được lưu trữ ở hai file riêng biệt: Một file chứa 500 bức ảnh
mô tả khuôn mặt đeo khẩu trang và file còn lại chứa 500 bức ảnh mô tả khuôn mặt
không đeo khẩu trang. Mỗi file dữ liệu trên sẽ được chia làm hai phần chính nhờ
hàm split trong python, bao gồm:
- Tập dữ liệu phục vụ quá trình thử nghiệm cuối cùng - Testing set (chiếm 20%);
- Tập dữ liệu phục vụ quá trình huấn luyện (chiếm 80%).

22
II. Thuật toán huấn luyện mô hình

1. Import các thư


viện cần thiết
Nhập các thư viện cần thiết như OpenCV, Keras, Numpy (để xử lý dữ liệu),
Os (để quản lý file),…
2. Xử lý tiền dữ liệu và xử lý dữ liệu
Việc tiền xử lý dữ liệu nhằm đưa tất cả các ảnh về cùng kích thước, sau đó
các ảnh này sẽ được chuyển đổi để phục vụ cho quá trình xử lý ảnh ở bước sau.
3. Xây dựng các lớp cho mô hình
Các lớp được xây dựng dựa trên mô hình mạng nơron tích chập CNN (mạng
nơron tích chập được thiết kế đặc biệt để xử lý dữ liệu đầu vào). Kiến trúc của
CNN có ba phần chính:
-Một lớp phức hợp trích xuất các đặc trưng từ một hình ảnh nguồn. Để trích
xuất đặc tính từ ảnh ban đầu, ta tiến hành tích chập hai ma trận bao gồm ma trận
ảnh nguồn và bộ lọc với kích thước 3x3.
-Một lớp tổng hợp để giảm kích thước của nơron đi và tập trung vào các
phần tử quan trọng nhất. Trong phần này ta sử dụng lớp pooling có kích thước
(2x2) và sử dụng kiểu max pooling hay lấy giá trị lớn nhất.

23
-Một lớp được kết nối đầy đủ làm phẳng các đối tượng được xác định trong
các lớp trước đó thành một vectơ và dự đoán xác suất mà hình ảnh có thể thuộc về
nhãn nào đó.
III. Thuật toán phát hiện người đeo khẩu trang trong thời gian thực.

Để phát hiện khuôn mặt, sử dụng thuật toán phát hiện khuôn mặt trong
chương trình thu thập dữ liệu
Sau khi ảnh được cắt từ video, nó sẽ được định dạng lại kích thước giống
với kích thước của dữ liệu trong mô hình huấn luyện. Sau đó, ảnh này sẽ được
chuyển đổi thành những tham số có định dạnh giống mô hình mẫu. Khi đó các
tham số sinh ra được từ tập dữ liệu huấn luyện sẽ được sử dụng để thẩm định lại
tính thích hợp của mô hình trên tập dữ liệu của hình ảnh vừa được trích xuất. Dựa
vào kết quả thu được ta tiến hành hiển thị lên màn hình kết quả người dân có đeo
khẩu trang hay không.
Nếu người đó không đeo khẩu trang thì sẽ lập tức nhắc nhở người đó đeo
khẩu trang thông qua lời nói trực tiếp. Việc nhắc nhở này sẽ được thực thi nhờ sự

24
hỗ trợ của thư viện “pyttxs3” - thư viện hỗ trợ chuyển đổi văn bản thành giọng nói
trong python.
Chương trình đã thực hiện kiểm tra trong nhiều điều kiện khác nhau, bao
gồm cả những hình ảnh khuôn mặt được hiển thị cho ra kết quả khá chính xác.

Kết quả chạy chương trình

25
CHƯƠNG IV. CHẠY CHƯƠNG TRÌNH VÀ KẾT QUẢ

1.Mô phỏng chương trình


1.1. Cài đặt các gói thư viện cần thiết.
# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import os
1.2. Lấy danh sách hình ảnh trong thư mục và bắt đầu khởi tạo.
predIdxs = np.argmax(predIdxs, axis=1)

# show a nicely formatted classification report


print(classification_report(testY.argmax(axis=1), predIdxs,
target_names=lb.classes_))

# serialize the model to disk


print("[INFO] saving mask detector model...")
model.save("mask_detector.model", save_format="h5")

26
# plot the training loss and accuracy
N = EPOCHS
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["accuracy"], label="train_acc")
plt.plot(np.arange(0, N), H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig("plot.png")
detect_mask_video.py
1.3. Nhận dạng khuôn mặt trong khung hình có đeo khẩu trang hay
không.

# load the face mask detector model from disk


maskNet = load_model("mask_detector.model")

# initialize the video stream


print("[INFO] starting video stream...")
vs = VideoStream(src=0).start()

# loop over the frames from the video stream


while True:
# grab the frame from the threaded video stream and resize it
# to have a maximum width of 400 pixels
frame = vs.read()
frame = imutils.resize(frame, width=400)

# detect faces in the frame and determine if they are wearing a


# face mask or not
(locs, preds) = detect_and_predict_mask(frame, faceNet, maskNet)

# loop over the detected face locations and their corresponding


# locations
for (box, pred) in zip(locs, preds):
# unpack the bounding box and predictions
(startX, startY, endX, endY) = box
27
(mask, withoutMask) = pred

# determine the class label and color we'll use to draw


# the bounding box and text
label = "Mask" if mask > withoutMask else "No Mask"
color = (0, 255, 0) if label == "Mask" else (0, 0, 255)

# include the probability in the label


label = "{}: {:.2f}%".format(label, max(mask, withoutMask) * 100)

# display the label and bounding box rectangle on the output


# frame
cv2.putText(frame, label, (startX, startY - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.45, color, 2)
cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)

# show the output frame


cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF

# if the `q` key was pressed, break from the loop


if key == ord("q"):
break

# do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()

2.Chạy chương trình và kết quả

28
CHƯƠNG V : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

I. Kết luận 

         Đề tài đã xây dựng thành công phát hiện và nhắc nhở người không đeo
khẩu trang nhằm hổ trợ công tác giám sát người dân thực hiện đúng quy
định.Dựa vào kết quả thu được để xây dựng hệ thống giám sát và nhắc nhở
người dân đeo khẩu trang ở những nơi đông người như: trung tâm thương
mại, trường học,...

Tuy nhiên hệ thống vẫn còn một số hạn chế sau:  

o Hệ thống còn yếu trong nhận dạng ảnh động.


o Khả năng bảo mật yếu vì chỉ cần một tấm ảnh có thể qua mắt được hệ
thống.  
o Hoạt động chưa hoàn toàn hiệu quả với mắt kính thường nơi có ánh
sáng chiếu  

 
 
II. Hướng phát triển

Sau đây là một số các cải tiến có thể được thực hiện trong tương lai của hệ
thống này:

o Sản phẩm độc lập: Nó có thể được thực hiện như một sản phẩm độc
lập, có thể được cài đặt thành một thiết bị, có đèn màn hình hiển thị
hoặc nút bấm, mà không cần sử dụng tới trình duyệt.
o Nâng cao bảo mật bằng công nghệ mới, sử dụng camera 3D là phương
án tốt nhất để hạn chế về vấn đề bảo mật.  
o Có thể hoạt động tốt hơn trong môi trường thiếu sáng 

29
TÀI LIỆU THAM KHẢO 
 
 
 

[1] REAL TIME FACE MASK DETECTION, tạp chí khoa học công nghệ hàng
hải.

[2] Hệ thống nhận diện khuôn mặt, https://vi.wikipedia.org/wiki/he-thong-nhan-


dien-khuon-mat/    

[3] Mohammad Marufur Rahman, Md. Motaleb Hossen Manik, An Automated


System to Limit COVIC-19 Using Facial Mask Detection in Smart City Network,
2020 IEE International IOT.

30

You might also like