Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
1,11 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO BÁO CÁO CUỐI KỲ MÔN HỌC: XỬ LÝ ẢNH ĐỀ TÀI: TẠO CÔNG CỤ BẢNG VIẾT ẢO BẰNG NGƠN NGỮ LẬP TRÌNH PYTHON GVHD : Nhóm SVTH : TS Nguyễn V Đoàn Lê Thiên Bảo 1915106 Vũ Hồng Danh 1915107 TP Hồ Chí Minh, tháng năm 2022 Lời cảm ơn Để hoàn thành đề tài trước hết nhóm sinh viên thực xin gửi đến quý thầy, cô giảng viên trường Đại học Sư phạm Kỹ Thuật nói chung q thầy mơn Điều khiển tự động nói riêng tri ân sâu sắc Đặc biệt, nhóm xin gửi đến thầy Nguyễn Văn Thái, người tận tình hướng dẫn nhóm việc lựa chọn đề tài nghiên cứu, giúp đỡ giải khó khăn q trình thực đến lúc hoàn thành báo cáo đồ án lời cảm ơn chân thành Việc lần tiếp cận thực đề tài “tạo công cụ bảng viết ảo ngơn ngữ lập trình Python” với thời xcxzc kiến thức phần hạn chế, nhóm nghiêm túc cố gắng hồn thành đề tài, nhiên tránh khỏi sai sót q trình thực híện Nhóm mong nhận bảo, đóng góp ý kiến thầy để có điều kiện bổ sung, nâng cao kiến thức để hồn thiện tốt Sau cùng, nhóm xin kính chúc thầy có thật nhiều sức khoẻ, thành cơng công việc giảng dạy, đào tạo hệ sinh viên Chúc anh chị bạn khoá sức khoẻ, học tập thật tốt để chuẩn bị kiến thức vững vàng cho công việc tương lai Chúng em xin chân thành cảm ơn Tp Hồ Chí Minh, tháng 07 năm 2023 Sinh viên thực Đoàn Lê Thiên Bảo- Vũ Hoàng Danh i Nhận xét giảng viên TP Hồ Chí Minh, ngày … tháng … năm 2023 Giảng viên hướng dẫn TS Nguyễn Văn Thái ii MỤC LỤC Lời cảm ơn i Nhận xét giảng viên ii Chương TỔNG QUAN 1.1 Đặt vấn đề 1.2 Mục tiêu 1.3 Nội dung nghiên cứu 1.4 Giới hạn Chương CƠ SỞ LÝ THUYẾT 2.1 Ngơn ngữ lập trình Python 2.2 Thư viện Opencv 2.3 Thư viện Numpy 2.4 Thư viện Mediapipe 2.5 Drawing with Hands Gestures Chương THIẾT KẾ ỨNG DỤNG 3.1 Lập trình hướng đối tượng 3.2 Thiết kế giao diện mở đầu 10 3.3 Chương trình (Main program) 11 Chương KẾT QUẢ THỰC HIỆN 19 4.1 Kết chạy chương trình 19 4.2 Kết luận 20 4.3 Hạn chế đề tài 20 4.4 Hướng phát triển đề tài 21 TÀI LIỆU THAM KHẢO 22 iii Chương TỔNG QUAN 1.1 Đặt vấn đề Trong tình hình dịch bệnh căng thẳng kéo dài nay, công việc họp hành, học tập tổ chức thơng qua hình thức trực tuyến Việc khơng có bảng biểu để ghi đồng thời phải sử dụng phần mềm thứ ba để viết khiến cho thiết bị an toàn thao tác rườm rà Xuất phát từ vấn đề đó, nhóm có ý tưởng tạo cơng bảng viết ảo thao tác dễ dàng hình hiển thị Từ phát triển lên thêm thành thao tác không chạm thiết bị để hạn chế việc phải tiếp xúc trực tiếp vào vật dùng chung nút bấm thang máy Dựa theo kiến thức học môn xử lý ảnh với việc nghiên cứu thêm tài liệu bên ngồi, nhóm định lựa chọn thực đề tài “Tạo công cụ bảng viết ảo sử dụng ngơn ngư lập trình Python” với hướng dẫn thầy TS Nguyễn Văn Thái 1.2 Mục tiêu Nhóm thực đề tài với mục tiêu sử dụng ngơn ngữ lập trình Python để tạo bảng viết ảo hiển thị hình webcam người sử dụng Ngồi cịn mục tiêu khác đề tài đặt sau: - Tìm hiểu thư viện hỗ trợ xử lý ảnh, thuật tốn - Cơng cụ tạo hoạt động xác ổn định - Giao diện sử dụng hài hòa, dễ thao tác 1.3 Nội dung nghiên cứu Các nội dung thực đề tài: - Chương 1: Tổng quan - Chương 2: Cơ sở lý thuyết - Chương 3: Thiết kế ứng dụng - Chương 4: Kết thực 1.4 Giới hạn Trong khuôn khổ đề tài này, xét nghiên cứu: - Chỉ sử dung ngôn ngữ lập trình Python viết phần mềm VScode - Sử dụng thư viện hỗ trợ có sẵn opencv, mediapipe - Chỉ thực vẽ nét tự theo vị trí ngón tay trỏ người sử dụng Chương CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngữ lập trình Python Python ngơn ngữ lập trình bậc cao cho mục đích lập trình đa năng, Guido van Rossum tạo lần đầu mắt vào năm 1991 Python thiết kế với ưu điểm mạnh dễ đọc, dễ học dễ nhớ Python ngơn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người học lập trình ngơn ngữ lập trình dễ học; dùng rộng rãi phát triển trí tuệ nhân tạo Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu Thực tế Python ngôn ngữ ứng dụng đa dạng lĩnh vực: - Làm trang Web với Framework Python - Python dùng để tạo nguyên mẫu phần mềm - Ứng dụng khoa học tính tốn - Viết tool để tự động hóa cơng việc - Khoa học máy tính - Lĩnh vực IoT – Internet Vạn Vật - Làm dự án Blockchain với Python - Làm game với PyGame - Machine Learning - Là ngơn ngữ sử dụng cho mục đích giảng dạy 2.2 Thư viện Opencv Project OpenCV Intel năm 1999 Gary Bradsky OpenCV viết tắt cho Open Source Computer Vision Library OpenCV thư viện nguồn mở hàng đầu cho Computer Vision Machine Learning, có thêm tính tăng tốc GPU cho hoạt động theo real-time OpenCV phát hành theo giấy phép BSD, miễn phí cho học tập sử dụng với mục đích thương mại Nó có giao diện C++, C, Python Java hỗ trợ Windows, Linux, Mac OS, iOS Android OpenCV thiết kế để hỗ trợ hiệu tính tốn chun dùng cho ứng dụng real-time (thời gian thực) Nếu viết C/C++ tối ưu, thư viện tận dụng xử lý đa lõi (multi-core processing) OpenCV có cộng đồng người dùng hùng hậu hoạt động khắp giới nhu cầu cần đến ngày tăng theo xu hướng chạy đua sử dụng computer vision công ty công nghệ OpenCV ứng dụng rộng rãi toàn cầu, với cộng đồng 47.000 người, với nhiều mục đích tính khác từ interactive art, đến khai thác mỏ, khai thác web map qua robotic cao cấp OpenCV sử dụng cho đa dạng nhiều mục đích ứng dụng khác bao gồm: - Hình ảnh street view - Kiểm tra giám sát tự động - Robot xe tự lái - Phân tích hình ảnh y học - Tìm kiếm phục hồi hình ảnh/video - Phim – cấu trúc 3D từ chuyển động - Nghệ thuật đặt tương tác Theo tính ứng dụng OpenCV, chia thư viện thánh nhóm tính module tương ứng sau: Xử lý hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui) - Phát vật thể (objdetect, features2d, nonfree) - Geometry-based monocular stereo computer vision (calib3d, stitching, videostab) - Computational photography (photo, video, superres) - Machine learning & clustering (ml, flann) - CUDA acceleration (gpu) 2.3 Thư viện Numpy Numpy (Numeric Python): thư viện toán học phổ biến mạnh mẽ Python Cho phép làm việc hiệu với ma trận mảng, đặc biệt liệu ma trận mảng lớn với tốc độ xử lý nhanh nhiều lần sử dụng “core Python” đơn 2.4 Thư viện Mediapipe AI (Trí tuệ nhân tạo) dần "xâm chiếm" tất lĩnh vực sống Với tính chất tự động hóa cao, thực cơng việc khó có độ xác ngày cải thiện, AI dần trở thành cơng cụ khó thay Tuy nhiên, mơ hình AI đánh giá "nặng, yêu cầu phần cứng cao" khiến cho việc áp dụng vào dự án thực tế trở nên khó khăn, với thiết bị mobile edge devices - xu Vì vậy, Google đưa giải pháp, xác công cụ, cung cấp cơng cụ cho tốn AI/ML tối ưu để chạy nhiều tảng khác nhau, với tên gọi MediaPipe 2.4.1 Giới thiệu Mediapipe Về tổng quan, MediaPipe tập hợp loạt giải pháp Machine Learning đa tảng, can thiệp lightweight Một số ưu điểm kể tới giải pháp bao gồm: - Cung cấp giải pháp inference nhanh chóng: Google khẳng định cơng cụ chạy ổn định hầu hết cấu hình phần cứng thông dụng - Dễ dàng cài đặt triển khai: Việc cài đặt dễ dàng tiện lợi, triển khai nhiều tảng khác Mobile (Android/iOS), Desktop/Cloud, Web IoT devices - Mã nguồn mở miễn phí: Tồn source code cơng khai MediaPipe, người dùng hồn tồn sử dụng tùy chỉnh trực tiếp để phù hợp với tốn 2.4.2 Các giải pháp Mediapipe Hầu hết toán bật lĩnh vực Computer Vision - Thị giác máy tính, Google cài đặt MediaPipe: - Face Detection - Face Mesh - Hands Detection - Human Pose Estimation 2.5 Drawing with Hands Gestures Với ứng dụng Hands Detection, ta xây dựng mơ hình skeleton tay với điểm sau: Chương THIẾT KẾ ỨNG DỤNG 3.1 Lập trình hướng đối tượng 3.1.1 Class HandTracker Ở phần ta thiết lập đối tượng Handtracker ứng dựng thư viện Mediappipe để nhận diện bàn tay thực dự đoán, vẽ lại khung xương điểm đốt tay Đồng thời lấy tọa độ ngón tay xác định trạng thái ngón tay để tiến hành xử lý Đầu tiên ta khai báo thuộc tính đối tượng thơng qua hàm init : Tiếp đến nhận diện hình ảnh bàn tay từ webcam vẽ lại khung xương bàn tay: Sau bàn tay vẽ khung xương tiến hành bắt điểm vẽ 21 lanmarks bàn tay: Sau nhận diện trạng thái ngón tay, duỗi trả True, co lại trả False: 3.1.2 Class ColorRect Ta tiếp tục thiết lập đối tượng khác để vẽ chọn bảng, màu bút vẽ, kích thước ngịi bút Đầu tiên khai báo thuộc tính chọn: Sau hàm vẽ chọn lên hình webcam: Sau hàm để nhận biết ngón tay nằm hay ngồi vùng chọn, trả True, nằm trả False: 3.2 Chương trình (Main program) Sau nhấn nút Run Program chương trình thực thi Đầu tiên khởi tạo thông số ban đầu gồm: tỉ lệ dự đoán bàn tay, kích thước khung hình web cam, tọa độ bút ban đầu, kích cỡ bút tẩy, khung canvas để vẽ: 10 Tiếp đến tạo nút chọn màu ô màu để chọn cho màu bút, ô tẩy xóa xóa tồn Tất sau tạo bỏ vào mảng colors: 11 Ta tiến hành vẽ chọn kích cỡ bút bỏ vào mảng pens, sau tạo nút chọn kích cỡ bút, nút bảng trắng bảng trắng class ColorRect: Tiếp đến, biến coolingCounter tạo nhằm làm trễ vòng lặp while True nhằm để người sử dụng kịp thời thao tác với nút nhấn Các biến hideBoard (ẩn bảng), hideColors (ẩn chọn màu), hidePenSizes (ẩn kích thước) ban đầu đặt True Phần lập trình đưa vào vòng lặp while True: nhằm để cập nhật liên tục thao tác người dùng Đầu tiên biến coolingCounter giảm dần, hình ảnh đọc từ webcam gán vào biến frame, không đọc hình ảnh chương trình dừng lập tức, cịn nhận hình ảnh hình lật ngược lại để người sử dụng dễ nhìn thao tác qua lệnh cv2.flip() Đồng thời hình thu từ web cam truyền cho hàm class HandTracker để nhận diện bàn tay 12 Nếu upFingers trả True lúc tọa độ đầu ngón trỏ gán cho biến x, y Nếu lúc ngón trỏ duỗi vị trí đầu ngón trỏ nằm ngồi bảng trắng tọa độ bút vẽ gán (0, 0): tiếp tục sau gán tọa độ cho bút vẽ, bảng chọn kích cỡ bút đầu ngón trỏ vị trí kích cỡ biến brushSize gán kích cỡ tương ứng đồng thời thơng số alpha tức màu đậm lại đưa tay khỏi màu trở lại bình thường tạo cho người dùng cảm giác nút nhấn Nút chọn màu hoạt động tương tự có thêm phần ngón trỏ di vào nút clear tạo lại khung canvas đồng nghĩa tồn nét vẽ bị xóa đi: 13 Tiếp đến nút để mở chọm màu, chọn kích thước bảng trắng Với nút mở bảng màu ta đưa ngón trỏ vào vị trí nút đảo trạng thái từ True thành False ngược lại biến hideColors, đồng thời bảng màu đóng nút chữ Colors bên trong, màu đổi thành chữ Hide, nút nhấn đậm lên ngón trỏ đưa vào bút trở bình thường dời ngón trỏ Tương tự cho nút mở chọn kích cỡ bút nút mở bảng; 14 Khi ngón trỏ duỗi ngón gập lại, bảng trắng mở ngón trỏ nằm diện tích bảng trắng lanmark tơ màu theo màu bút có kích thước kích thước bút, tọa độ bút lấy tọa độ lanmark Nếu màu bút màu đen thực chức tẩy, màu sắc khác thực vẽ nét theo di chuyển đầu ngón trỏ: 15 Bây ta tiến hành vẽ nút nhấn lên hình webcam lệnh cv2.retangle() với thuộc tính đối tượng class ColorRect: Tiếp đến vẽ ô chọn màu, chọn kích thước bảng trắng nút tương ứng chọn: 16