● Nền tảng phát triển: Hệ điều hành Window ● Hệ thống gợi ý: MediaPipe và OpenCV 1.2 Lý do chọn đề tài Đồ án của em, nghiên cứu về “Thị giác máy tính và ứng dụng trong phát triển Game” đ
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Giảng viên hướng dẫn : ThS Nguyễn Thị Thanh Trúc
Sinh viên thực hiện : Trần Quốc Huy - 2052554
Trang 2TP HỒ CHÍ MINH, THÁNG 12 NĂM 2023
Trang 3LỜI CẢM ƠN
Lời đầu tiên, Em xin cảm ơn ThS Nguyễn Thị Thanh Trúc đã tạo điều
kiện cung cấp những kiến thức cần thiết để hoàn thành môn Đồ Án 2
Em xin gửi lời cảm ơn đến gia đình, tất cả thầy cô trong khoa, bạn bè, tập thểlớp PMCL2020 là những người luôn sẵn sàng sẻ chia và giúp đỡ trong học tập và cuộcsống
Em xin thừa nhận trong thời gian làm đồ án đã không hay liên lạc với cô vì lúc
đó em đang đau đầu vấn đề thực tập tốt nghiệp, mong cô có thể bỏ qua, cám ơn cô rấtnhiều ạ
Trong quá trình làm Đồ án này chúng em không tránh khỏi được những sai sót,chúng em kính mong nhận được sự chỉ dẫn và góp ý của quý thầy cô để hoàn thiện vàphát triển các đồ án trong tương lai tốt hơn
Cuối cùng, xin kính chúc các thầy cô giảng viên bộ môn Công nghệ Phần mềm và cô Nguyễn Thị Thanh Trúc luôn có sức khỏe dồi dào, cuộc sống hạnh
phúc, tiếp tục hoàn thành sứ mệnh cao cả là truyền thụ tri thức cho thế hệ mai sau
Chúng em xin chân thành cảm ơn Xin chúc những điều tốt đẹp nhất sẽ luôn đồng hành cùng mọi người
Thành phố Hồ Chí Minh, tháng 12 năm 2023
Trang 4NHẬN XÉT
(Của giáo viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 5MỤC LỤC
N i dung ội dung
TP H CHÍ MINH, THÁNG 12 NĂM 2023 Ồ CHÍ MINH, THÁNG 12 NĂM 2023 2
M C L C ỤC LỤC ỤC LỤC 5
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 1: GI I THI U CHUNG ỚI THIỆU CHUNG ỆU CHUNG 6
1.1 T ng quan đ tài ổng quan đề tài ề tài 6
1.2 Lý do ch n đ tài ọn đề tài ề tài 6
1.3 Đ i t ối tượng sử dụng ượng sử dụng ng s d ng ử dụng ụng 7
1.4 Ph m vi nghiên c u ạm vi nghiên cứu ứu 7
1.4.1 Ph m vi môi tr ạm vi nghiên cứu ường 7 ng 1.4.2 Ph m vi ch c năng ạm vi nghiên cứu ứu 7
1.5 Công c áp d ng ụng ụng 7
1.6 N n t ng công ngh ề tài ảng công nghệ ệ 7
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 2 C S LÝ THUY T VÀ CÔNG NGH ƠNG 1: GIỚI THIỆU CHUNG Ở LÝ THUYẾT VÀ CÔNG NGHỆ ẾT VÀ CÔNG NGHỆ ỆU CHUNG 8
2.1 MediaPipe 8
2.2 OpenCV 9
2.3 Pygame 11
2.4 C s lý thuy t thu t toán ơ sở lý thuyết thuật toán ở lý thuyết thuật toán ết thuật toán ật toán 12
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 3 THI T K H TH NG ẾT VÀ CÔNG NGHỆ ẾT VÀ CÔNG NGHỆ ỆU CHUNG ỐNG 15
3.1 S đ ho t đ ng ơ sở lý thuyết thuật toán ồ hoạt động ạm vi nghiên cứu ộng 15
3.2 Di n gi i s đ ho t đ ng ễn giải sơ đồ hoạt động ảng công nghệ ơ sở lý thuyết thuật toán ồ hoạt động ạm vi nghiên cứu ộng 16
3.3 Đ c t ho t đ ng ặc tả hoạt động ảng công nghệ ạm vi nghiên cứu ộng 17
3.3.1 Detect hand landmark 17
3.3.1 Detect face landmarks 17
3.3.3 Calculate Hand Angle 18
3.3.4 Calculate Head offset 19
3.3.5 Draw bullet 19
3.3.6 Draw bird 20
3.3.7 Draw virus 21
3.3.8 Draw pipe 22
3.3.9 Detect Collision 22
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 4 THI T K GIAO DI N ẾT VÀ CÔNG NGHỆ ẾT VÀ CÔNG NGHỆ ỆU CHUNG 23
4.1 Danh sách màn hình 23
4.2 Chi ti t màn hình ết thuật toán 24
4.2.1 Màn hình “Menu” 24
Trang 64.2.2 Màn hình “Play” 25
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 5 CÀI Đ T VÀ KI M TH ẶT VÀ KIỂM THỬ ỂM THỬ Ử 26
5.1 Môi tr ường ng cài đ t và ki m th : ặc tả hoạt động ểm thử: ử dụng 26
5.2 K t qu ki m th : ết thuật toán ảng công nghệ ểm thử: ử dụng 26
CHUONG 6 K T LU N VÀ H ẾT VÀ CÔNG NGHỆ ẬN VÀ HƯỚNG PHÁT TRIỂN ƯỚI THIỆU CHUNG NG PHÁT TRI N ỂM THỬ 27
6.1 K t qu ết thuật toán ảng công nghệ 27
6.2 H n ch ạm vi nghiên cứu ết thuật toán 27
6.3 H ướng phát triển ng phát tri n ểm thử: 27
6.4 K t lu n ết thuật toán ật toán 27
CH ƯƠNG 1: GIỚI THIỆU CHUNG NG 7 TÀI LI U THAM KH O ỆU CHUNG ẢO 27
Trang 7CHƯƠNG 1: GIỚI THIỆU CHUNG1.1 Tổng quan đề tài
● Tên ứng dụng: Trash Doves
● Chủ đề chính: Một game sử dụng nhận diện hình ảnh từ camera người chơi để điều khiển nhân vật
● Nền tảng phát triển: Hệ điều hành Window
● Hệ thống gợi ý: MediaPipe và OpenCV
1.2 Lý do chọn đề tài
Đồ án của em, nghiên cứu về “Thị giác máy tính và ứng dụng trong phát triển Game” đãđược chọn với mục đích không chỉ là một dự án thú vị trong lĩnh vực công nghệ lập trìnhgame mà còn nhằm mục tiêu nâng cao kiến thức và kỹ năng của bản thân về các nguyên
lý và ứng dụng của thị giác máy tính, với hệ thống mã nguồn mở từ Mediapipe vàOpenCV, đồ án đã áp dụng hệ thống nhận diện cử chỉ tay và khuôn mặt, tạo ra một trảinghiệm mới lạ
Trang 8Tên của đồ án là Trash Doves được lấy cảm hứng từ một sticker trên facebook thịnh hànhlúc bấy giờ là một con chim bồ câu lắc cái đầu, cũng là một phần trong trò chơi khi ngườichơi phải lắc đầu đề điều khiển chú chim của mình Ngoài ra, các assest trong game đượclấy cảm hứng từ trò chơi Flappy Bird, việc chọn như này vừa đưa chúng ta quay về thờiquá khứ cũng như cải tiến trò chơi.
Trò chơi được tạo ra cũng là một đáp án trong ứng dụng thị giác máy tính trong việc cảithiện trải nghiệm người chơi và sự tương tác giữa người và máy Việc này không chỉ mở
ra những triển vọng trong việc phát triển sáng tạo trò chơi mà có thể qua lĩnh vực khácnhư giáo dục,y tế,…
● Xử lí và nhận dạng hai bàn tay của con người
● Nhận diện được một số điểm trên khuôn mặt
● Nhận diện được sự thay đổi trong góc độ tay của người dùng
● Tính toán sử dụng công thức để chuyển động của phía mình và phía địch
● Cung cấp những giờ giải lao cho người dùng
1.5 Công cụ áp dụng
● Công cụ phát triển: PyCharm Studio
● Công cụ dùng để phân tích, thiết kế: Figma, Itch.io
Trang 9● Công cụ quản lý dự án: Github.
● Công cụ trao đổi thông tin giữa thành viên nhóm: Không có
● Công cụ tham khảo: Mediapipe/Google, Udemy, ChatGPT
● Công cụ soạn thảo báo cáo: Microsoft Word
Trang 10CHƯƠNG 2 CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ2.1 MediaPipe
Mediapipe là một công cụ được Google thiết kế, là tập hợp của một loạt giải pháp MachineLearning đa nền tảng, có thể can thiệp được
Hầu hết các bài toán nổi bật trong lĩnh vực Computer Vision - Thị giác máy tính, đều đượcGoogle cài đặt trong MediaPipe
Ưu điểm:
● Mã nguồn mở và miễn phí: Toàn bộ source code được công khai trên
MediaPipe, người dùng hoàn toàn có thể sử dụng và tùy chỉnh trực tiếp để phù
hợp với bài toán của mình
● Dễ dàng cài đặt và triển khai: Việc cài đặt cực kỳ dễ dàng và tiện lợi, có thể
triển khai trên nhiều nền tảng khác nhau như Mobile (Android/iOS),Desktop/Cloud, Web và IoT devices
Trang 11● Cung cấp một giải pháp inference nhanh chóng: Google khẳng định rằng bộ
công cụ này có thể chạy ổn định trên hầu hết các cấu hình phần cứng thông dụng
Nhược điểm:
● Đây là phiên bản beta, còn nhiều thiếu sót
● Hạn chế trong các task sử dụng làm trung gian
● Thư viện còn khá ít, chỉ hỗ trợ model đơn giản
2.2 OpenCV
OpenCV, hay Open Source Computer Vision, là một thư viện mã nguồn mở hàng đầu trong
lĩnh vực thị giác máy tính và xử lý ảnh Được phát triển chủ yếu bằng C++ và có sẵn cho nhiều ngôn ngữ lập trình như Python, Java, và C#, OpenCV đã trở thành công cụ quan trọngtrong cộng đồng nghiên cứu và phát triển ứng dụng thị giác máy tính
Khả năng của OpenCV:
ảnh và video, từ các thao tác cơ bản như lọc ảnh đến các chức năng phức tạp như nhậndiện đối tượng và theo dõi chuyển động
Trang 12● Nhận diện Đối tượng và Khuôn mặt: OpenCV cung cấp các thuật toán và mô hình đểnhận diện và theo dõi đối tượng trong thời gian thực, bao gồm cả khuôn mặt, mắt, và đốitượng khác.
● Thao tác và Biến đổi hình ảnh: Các chức năng biến đổi hình ảnh, như xoay, co giãn, vàcắt cụ thể, giúp tối ưu hóa dữ liệu hình ảnh cho các ứng dụng khác nhau
dụng thị giác máy tính, từ việc xác định vị trí đối tượng đến nhận diện hành động và cửchỉ
Ưu điểm:
nghiên cứu và công nghiệp, có cộng đồng lớn hỗ trợ và phát triển
● Đa nền tảng: Hỗ trợ trên nhiều hệ điều hành và ngôn ngữ lập trình, giúp dễ dàng tíchhợp vào nhiều dự án
● Hiệu suất cao: Các thuật toán của OpenCV được tối ưu hóa để đảm bảo hiệu suất cao,đặc biệt là trong ứng dụng thời gian thực
Trang 132.3 Pygame
Pygame là một thư viện mã nguồn mở được xây dựng trên nền tảng SDL (Simple DirectMedia Layer) giúp đơn giản hóa việc phát triển trò chơi và ứng dụng đa phương tiện bằng ngôn ngữ lập trình Python Với sự linh hoạt và dễ sử dụng, Pygame là một lựa chọn phổ biến trong việc tạo các ứng dụng và trò chơi nhỏ đến trung bình
Khả Năng của Pygame:
● Xây dựng trò chơi đa phương tiện: Pygame giúp người phát triển tạo ra các trò chơi và ứng dụng đa phương tiện với khả năng xử lý hình ảnh, âm thanh và sự kiện người chơi
● Đồ họa và âm thanh: Thư viện hỗ trợ vẽ đồ họa, quản lý hình ảnh, và điều khiển
âm thanh, từ đó tạo nên trải nghiệm người dùng đầy đủ
● Đa nền tảng: Pygame hỗ trợ nhiều hệ điều hành, giúp người phát triển dễ dàng triển khai ứng dụng của họ trên nhiều nền tảng
Ưu điểm:
● Dễ học và bắt đầu: Pygame cung cấp một ngưỡng đầu vào thấp cho những người mới bắt đầu với lập trình trò chơi, giúp họ nhanh chóng tạo ra các ứng dụng đơn giản
● Cộng đồng hỗ trợ: Với cộng đồng sôi động, Pygame có nhiều tài liệu, diễn đàn vànguồn tư duy để giúp đỡ người dùng khi gặp vấn đề
Trang 14● Độ linh hoạt: Pygame linh hoạt đối với các dự án trò chơi từ nhỏ đến trung bình, đặc biệt là khi yêu cầu đồ họa và âm thanh không quá phức tạp.
Nhược điểm:
● Khả Năng Mở Rộng Hạn Chế: Pygame có thể gặp khó khăn khi áp dụng vào các
dự án lớn và phức tạp hơn, nơi cần sự quản lý tài nguyên và mô-đun chuyên sâu hơn
● Hiệu Suất: Với các trò chơi đòi hỏi hiệu suất cao, Pygame có thể không phải là lựa chọn tốt nhất so với các thư viện và framework chuyên sâu hơn
2.4 Cơ sở lý thuyết thuật toán
- Hand LandMark Detection
1 Xác định mô hình tay
- Một mô hình bàn tay lúc đầu sẽ được nhận diện thông qua thư viện opencv và được xử lí thông qua mediapipe để nhận diện được liệu rằng có phải bản tay không
+ min_hand_detection_confidence: Tỉ lệ tự tin trong việc nhận diện bàn tay ( có chỉ số chạy từ 0->1.0 ), khi nhận diện bàn tay, mediapipe sẽ tạo ra một bounding box để chứa đựng cả khung hình bàn tay, trong đồ án lần này, hệ số sẽ được set là0.5 ( khi tỉ lệ dự đoán >=50% sẽ xác định đó là bàn tay ) do camera của người phát triển game không đủ tốt
Trang 15+ min_tracking_confidence: Tỉ lệ theo dõi bàn tay thành công, có hệ số chạy từ 0 đến 1, việc tracking thành công là việc có thể dự đoán vị trí của 21 điểm trên bàn tay, khi nhận diện thiếu sót, nó sẽ tự dự đoán vị trí còn lại thông qua tư thế, khi không có bàn tay được nhận diện, nó sẽ bỏ qua, trong đồ án lần này, hệ số sẽ được set là 0.5 ( Khi tỉ lệ nhận dạng được 21 điểm trên bàn tay >= 50%) do camera của người phát triển game không đủ tốt.
+ Handness: Tỉ lệ để theo dõi tay trái hay tay phải
2 Xác định góc của tay
Trong game, người phát triển đã sử dụng ngón tay trỏ ( hanglandmark [5] -> handlandmark[8] ) để tạo thành một đường thẳng, áp dụng tính góc của đường thẳng này và đường thẳng ngang sẽ cho ra góc độ của bàn tay
- Face landmark detection
Trang 16-1 Xác định mô hình mặt
- Một hình ảnh khuông mặt lúc đầu sẽ được nhận diện thông qua thư viện opencv
và được xử lí thông qua mediapipe để nhận diện được liệu rằng có phải bản tay không
+ min_face_detection_confidence: Tỉ lệ tự tin trong việc nhận diện khuôn mặt ( có chỉ số chạy từ 0->1.0 ), khi nhận diện khuôn mặt, mediapipe sẽ tạo ra một bounding box để chứa đựng cả khung hình khuôn mặt, trong đồ án lần này, hệ số
sẽ được set là 0.5 ( khi tỉ lệ dự đoán >=50% sẽ xác định đó là khuôn mặt) do camera của người phát triển game không đủ tốt
+ min_tracking_confidence: Tỉ lệ theo dõi khuôn mặt thành công, có hệ số chạy
từ 0 đến 1, việc tracking thành công là việc có thể dự đoán vị trí của 367 điểm trên khuôn mặt, khi nhận diện thiếu sót, nó sẽ tự dự đoán vị trí còn lại thông qua
tư thế, khi không có khuôn mặt được nhận diện, nó sẽ bỏ qua, trong đồ án lần này, hệ số sẽ được set là 0.5 ( Khi tỉ lệ nhận dạng được 367 điểm trên khuôn mặt
>= 50%) do camera của người phát triển game không đủ tốt
Trang 172 Xác định điểm trên mặt
Trong game, người phát triển đã sử dụng vị trí hai mí mắt trên ( facelandmark [386] và facelandmark[159] ) để tạo thành một đường thẳng, vẽ một đường tròn ởgiữa, game sẽ tính trong một khoảng thời gian rằng điểm đỏ có nhấc lên đủ một khoảng cách nhất định trong một thời gian không
Trang 18CHƯƠNG 3 THIẾT KẾ HỆ THỐNG3.1 Sơ đồ hoạt động
3.2 Diễn giải sơ đồ hoạt động
STT Tên hoạt động chính Ý nghĩa / Ghi chú
cho bởi camera
cho bởi camera
của đạn
xét việc nhảy của chim
Trang 197 Draw Virus Vẽ chuyển động của virus
3.3 Đặc tả hoạt động
3.3.1 Detect hand landmark
Tên chức năng Nhận diện bàn tay từ hình ảnh
Đầu vào Bức ảnh được chụp có bàn tay trong ảnh
Tiền xử lí Chuyển đổi ảnh từ dạng BGR -> RGB
Xử lí
- Phân tích nhận diện model tay
- Xác định tay thuộc tay nào
- Đặt các landmard theo vị trí các đầu ngón tay
Đầu ra Các điểm landmark ở trên tay, đánh số từ 0-21
Điều kiện kích hoạt Khi game đang hoạt động
Dòng sự kiện thay thế - Khi có một tay: sẽ chỉ detect được 1 tay, cho ra
được list các landmard của bên tay đó
Dòng sự kiện ngoại lệ
- Không phát hiện tay: sẽ bỏ qua quy trình
3.3.1 Detect face landmarks
Tên chức năng Nhận diện khuôn mặt từ hình ảnh
Đầu vào Bức ảnh được chụp có khuôn mặt trong ảnh
Tiền xử lí Chuyển đổi ảnh từ dạng BGR -> RGB
Trang 20Xử lí
- Phân tích nhận diện model mặt
- Chọn landmard theo vị trí 2 mí mắt trên
- Vẽ một đường nối 2 mí mắt
- Vẽ một điểm trung tâm đường nối 2 mí mắt
Đầu ra Điểm trung tâm đại diện cho sự chuyển động của
phần đầu
Điều kiện kích hoạt Khi game đang hoạt động
Dòng sự kiện thay thế - Khi chỉ có một mí mắt: sẽ sử dụng phán đoán
cho ra mí mắt còn lại
Dòng sự kiện ngoại lệ
- Không phát hiện mắt/mặt: sẽ bỏ qua
3.3.3 Calculate Hand Angle
Tên chức năng Tính toán góc của ngón trỏ so với đường thẳng
Đầu vào List các landmark đã được xác định từ bước detect
- Nếu là tay trái: giới hạn góc nửa trái hình tròn
- Nếu là tay phải: giới hạn góc nửa phải hìnhtròn
Đầu ra Góc được tạo bởi 1 hoặc 2 tay
Điều kiện kích hoạt Khi phát hiện được 1 hoặc 2 tay
Dòng sự kiện thay thế - Khi có một tay: sẽ chỉ detect được 1 tay, tay
còn lại sẽ follow theo model chim và không
Trang 21hoạt động
Dòng sự kiện ngoại lệ
- Không phát hiện tay: sẽ bỏ qua quy trình
3.3.4 Calculate Head offset
Tên chức năng Tính toán chuyển động của phần đầu
Đầu vào Điểm trung tâm giữa 2 mí mắt trên
Tiền xử lí Cho thời gian chạy
Xử lí
- Tính vị trí sau – vị trí ban đầu của mí mắt
- Nếu kết quả cho ra là dương, chứng tỏ mắt đangđẩy lên phía trên, lúc này xét thời gian
- Nếu thời gian < thời gian cho phép sẽ cho làtrue
- Ngược lại là false
Đầu ra Flag kích hoạt sự kiện nhảy của chim
Điều kiện kích hoạt Khi phát hiện được điểm ở giữa 2 mí mắt
Dòng sự kiện thay thế Khi có một mí mắt sẽ phán đoán để cho ra được điểm
Dòng sự kiện ngoại lệ - Khi không phát hiện mí mắt sẽ bỏ qua
3.3.5 Draw bullet
Tên chức năng Vẽ các hình viên đạn dựa vào góc từ công đoạn tính
góc tay
Đầu vào Góc của bàn tay
Tiền xử lí Kết hợp các yếu tố cho sẵn như assest, tốc độ của đạn
Trang 22Xử lí
- Tính toán update+ Sau mỗi frame, đạn sẽ di chuyển với vận tốc xpixel/frame
+ Tính góc để cho đạn di chuyển
Đầu ra Đường đạn được update và vẽ liên tục
Điều kiện kích hoạt Khi phát hiện được tay
Dòng sự kiện thay thế Khi có một bên tay, chỉ bên tay đó được xử lí
Dòng sự kiện ngoại lệ - Khi không phát hiện tay sẽ bỏ qua
3.3.6 Draw bird
Tên chức năng Vẽ chim trên màn hình
Đầu vào Điểm giữa 2 mí mắt
Tiền xử lí Kết hợp gia tốc, vận tốc, assest
Xử lí
- Nếu đầu vào đủ điều kiện kích hoạt việc nhảy,chim sẽ nhảy với gia tốc x và vận tốc ypixel/frame
Đầu ra Hình ảnh chim được vẽ liên tục
Điều kiện kích hoạt Bất cứ lúc nào không game over
Dòng sự kiện thay thế Không có
Dòng sự kiện ngoại lệ Không có
3.3.7 Draw virus
Tên chức năng Vẽ các virus tấn công người chơi