1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

25 9 0

Đ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

Tiêu đề Tạo Công Cụ Bảng Viết Ảo Bằng Ngôn Ngữ Lập Trình Python
Tác giả Đoàn Lê Thiên Bảo, Vũ Hoàng Danh
Người hướng dẫn TS. Nguyễn Văn Thái
Trường học Trường Đại Học Sư Phạm Kỹ Thuật TP. Hồ Chí Minh
Chuyên ngành Xử Lý Ảnh
Thể loại Báo cáo
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 25
Dung lượng 1,11 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Dựa theo kiến thức học được trong môn xử lý ảnh cùng với việc nghiên cứu thêm tàiliệu bên ngoài, nhóm quyết định lựa chọn và thực hiện đề tài “Tạo công cụ bảng viết ảo sửdụng ngôn ngư lậ

Trang 1

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

Trang 2

Lời cảm ơn

Để hoàn thành được đề tài này trước hết nhóm sinh viên thực hiện 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 và quý thầy cô bộ mônĐiều khiển tự động nói riêng sự 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ẫnnhóm trong việc lựa chọn đề tài nghiên cứu, giúp đỡ cũng như giải quyết những khó khăntrong quá trình thực hiện đến lúc hoàn thành bài báo cáo đồ án này lời cảm ơn chân thànhnhất

Việc lần đầu tiên tiếp cận và thực hiện đề tài “tạo công cụ bảng viết ảo bằng ngônngữ lập trình Python” với thời xcxzc cũng như kiến thức còn phần hạn chế, nhóm đãnghiêm túc và cố gắng hoàn thành đề tài, tuy nhiên không thể tránh khỏi những sai sóttrong quá trình thực híện Nhóm rất mong nhận được sự chỉ bảo, đóng góp ý kiến của cácthầy để có điều kiện bổ sung, nâng cao kiến thức để hoàn thiện tốt hơn

Sau cùng, nhóm xin kính chúc thầy có thật nhiều sức khoẻ, thành công trong côngviệc giảng dạy, đào tạo ra những thế hệ sinh viên Chúc các anh chị cùng các bạn trongkhoá 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ươnglai

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 hiện

Đoàn Lê Thiên Bảo- Vũ Hoàng Danh

Trang 3

Nhận xét của 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

Trang 4

MỤC LỤC

Lời cảm ơn i

Nhận xét của giảng viên ii

Chương 1 TỔNG QUAN 1

1.1 Đặt vấn đề 1

1.2 Mục tiêu 1

1.3 Nội dung nghiên cứu 1

1.4 Giới hạn 2

Chương 2 CƠ SỞ LÝ THUYẾT 3

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

2.2 Thư viện Opencv 4

2.3 Thư viện Numpy 5

2.4 Thư viện Mediapipe 5

2.5 Drawing with Hands Gestures 6

Chương 3 THIẾT KẾ ỨNG DỤNG 8

3.1 Lập trình hướng đối tượng 8

3.2 Thiết kế giao diện mở đầu 10

3.3 Chương trình chính (Main program) 11

Chương 4 KẾT QUẢ THỰC HIỆN 19

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

4.2 Kết luận 20

4.3 Hạn chế của đề tài 20

4.4 Hướng phát triển của đề tài 21

TÀI LIỆU THAM KHẢO 22

Trang 5

Chương 1 TỔNG QUAN

1.1 Đặt vấn đề

Trong tình hình dịch bệnh đang căng thẳng và kéo dài như hiện nay, các công việcnhư họp hành, học tập đều được tổ chức thông qua hình thức trực tuyến Việc không cócác bảng biểu để ghi chú đồng thời phải sử dụng phần mềm thứ ba để viết khiến cho thiết

bị có thể mất an toàn và thao tác rườm rà Xuất phát từ vấn đề đó, nhóm có ý tưởng sẽ tạo

ra một công bảng viết ảo có thể thao tác dễ dàng ngay trên màn hình hiển thị Từ đó cóthể phát triển lên thêm thành các thao tác không chạm trên các thiết bị để hạn chế việcphải tiếp xúc trực tiếp vào các vật dùng chung như nút bấm thang máy

Dựa theo kiến thức học được trong môn xử lý ảnh cùng với việc nghiên cứu thêm tàiliệu bên ngoài, nhóm quyết định lựa chọn và thực hiện đề 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 sự hướng dẫn của thầy TS Nguyễn Văn Thái

1.2 Mục tiêu

Nhóm thực hiện đề tài với mục tiêu chính là sử dụng ngôn ngữ lập trình Python đểtạo ra một bảng viết ảo hiển thị ngay trên màn hình webcam của người sử dụng Ngoài racòn những mục tiêu khác của đề tài đặt ra như sau:

- Tìm hiểu về các thư viện hỗ trợ xử lý ảnh, các thuật toán

- Công cụ được tạo ra hoạt động chính xác và ổ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 chính sẽ được thực hiện trong đề tài:

- Chương 1: Tổng quan

- Chương 2: Cơ sở lý thuyết

Trang 6

- Chương 3: Thiết kế ứng dụng

- Chương 4: Kết quả thực hiện

1.4 Giới hạn

Trong khuôn khổ đề tài này, chỉ xét và nghiên cứu:

Trang 7

Chương 2 CƠ SỞ LÝ THUYẾT

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

Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, doGuido van Rossum tạo ra và lần đầu ra mắt vào năm 1991 Python được thiết kế với ưuđiểm mạnh là dễ đọc, dễ học và dễ nhớ Python là ngôn ngữ có hình thức rất sáng sủa, cấutrúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học; đượcdùng rộng rãi trong phát triển trí tuệ nhân tạo Cấu trúc của Python còn 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 là ngôn ngữ ứng dụng đa dạng trong các lĩnh vực:

- Làm trang Web với Framework của Python

- Python dùng để tạo nguyên mẫu phần mềm

- Ứng dụng trong khoa học và tính toán

- Viết tool để tự động hóa công việc

Trang 8

- 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à ngôn ngữ được sử dụng cho mục đích giảng dạy

2.2 Thư viện Opencv

Project OpenCV được bắt đầu từ Intel năm 1999 bởi Gary Bradsky OpenCV viết tắtcho Open Source Computer Vision Library OpenCV là thư viện nguồn mở hàng đầu choComputer Vision và Machine Learning, và hiện có thêm tính năng tăng tốc GPU cho cáchoạt động theo real-time

OpenCV được phát hành theo giấy phép BSD, do đó nó miễn phí cho cả học tập và

sử dụng với mục đích thương mại Nó có trên các giao diện C++, C, Python và Java và hỗtrợ Windows, Linux, Mac OS, iOS và Android 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ếttrên C/C++ tối ưu, thư viện này có thể tận dụng được bộ xử lý đa lõi (multi-coreprocessing)

OpenCV có một cộng đồng người dùng khá hùng hậu hoạt động trên khắp thế giớibởi nhu cầu cần đến nó ngày càng tăng theo xu hướng chạy đua về sử dụng computervision của các công ty công nghệ OpenCV hiện được ứng dụng rộng rãi toàn cầu, với

Trang 9

cộng đồng hơn 47.000 người, với nhiều mục đích và tính năng khác nhau từ interactive art, đến khai thác mỏ, khai thác web map hoặc qua robotic cao cấp.

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

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, videostab)

- Computational photography (photo, video, superres)

- Machine learning & clustering (ml, flann)

- CUDA acceleration (gpu)

2.3 Thư viện Numpy

Numpy (Numeric Python): là một thư viện toán học phổ biến và mạnh mẽ củaPython Cho phép làm việc hiệu quả với ma trận và mảng, đặc biệt là dữ liệu ma trận vàmảng lớn với tốc độ xử lý nhanh hơn nhiều lần khi chỉ sử dụng “core Python” đơn thuần

Trang 10

2.4 Thư viện Mediapipe

AI (Trí tuệ nhân tạo) đang dần "xâm chiếm" hầu như tất cả các lĩnh vực trong cuộcsống Với tính chất tự động hóa cao, có thể thực hiện các công việc khó và có độ chínhxác ngày càng được cải thiện, AI đang dần trở thành một công cụ khó có thể thay thếđược Tuy nhiên, các mô hình AI hiện tại được đánh giá là "nặng, yêu cầu phần cứng cao"khiến cho việc áp dụng vào trong các dự án thực tế trở nên khá khó khăn, nhất là với cácthiết bị mobile hoặc edge devices - xu thế hiện tại Vì vậy, Google đã đưa ra một giảipháp, chính xác hơn là một bộ công cụ, cung cấp các công cụ cho các bài toán AI/ML đãđược tối ưu để chạy trên nhiều nền tảng khác nhau, với tên gọi là MediaPipe

2.4.1 Giới thiệu về Mediapipe

Về tổng quan, MediaPipe là tập hợp của một loạt các giải pháp Machine Learning đanền tảng, có thể can thiệp được và cực kỳ lightweight Một số ưu điểm có thể kể tới củagiải pháp này bao gồm:

- 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

- 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

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

2.4.2 Các giải pháp trong Mediapipe

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được Google cài đặt trong MediaPipe:

Trang 11

- Hands Detection

2.5 Drawing with Hands Gestures

Với ứng dụng Hands Detection, ta có thể xây dựng một mô hình skeleton tay với cácđiểm như sau:

Trang 12

Chương 3 THIẾT KẾ ỨNG DỤNG

3.1 Lập trình hướng đối tượng

3.1.1 Class HandTracker

Ở phần này ta sẽ thiết lập một đối tượng Handtracker ứng dựng thư viện Mediappipe

để nhận diện được bàn tay và thực hiện dự đoán, vẽ lại khung xương và các điểm đốt tay Đồng thời lấy tọa độ ngón tay và xác định trạng thái các ngón tay để tiến hành xử lý.Đầu tiên ta khai báo các thuộc tính của đối tượng thông qua hàm init :

Tiếp đến sẽ nhận diện hình ảnh bàn tay từ webcam và vẽ lại khung xương bàn tay:

Sau khi bàn tay được vẽ khung xương sẽ tiến hành bắt điểm và vẽ 21 lanmarks của bàn tay:

Trang 13

Sau cùng là nhận diện trạng thái của các ngón tay, khi duỗi ra sẽ trả về True, co lại

sẽ trả về False:

3.1.2 Class ColorRect

Ta tiếp tục thiết lập một đối tượng khác để vẽ các ô 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 của các ô chọn:

Trang 14

Sau đó là hàm vẽ các ô chọn lên màn hình webcam:

Sau cùng là hàm để nhận biết ngón tay nằm trong hay ngoài vùng ô chọn, nếu ởtrong sẽ trả về True, nằm ngoài trả về False:

3.2 Chương trình chính (Main program)

Sau khi nhấn nút Run Program thì chương trình chính sẽ được thực thi Đầu tiên sẽ

là khởi tạo các thông số ban đầu gồm: tỉ lệ dự đoán bàn tay, kích thước khung hình webcam, tọa độ bút ban đầu, kích cỡ bút và tẩy, khung canvas để vẽ:

Trang 15

Tiếp đến là tạo nút chọn màu và các ô màu để chọn cho màu bút, ô tẩy xóa và ô xóa toàn bộ Tất cả ô sau khi được tạo ra thì bỏ vào mảng colors:

Trang 16

Ta tiến hành vẽ các ô chọn kích cỡ bút và bỏ vào mảng pens, sau nó tạo các nút chọnkích cỡ bút, nút bảng trắng và bảng trắng bằng class ColorRect:

Tiếp đến, một biến coolingCounter được tạo ra nhằm làm trễ vòng lặp trong whileTrue nhằm để người sử dụng kịp thời thao tác với các nút nhấn Các biến hideBoard (ẩnbảng), hideColors (ẩn thanh chọn màu), hidePenSizes (ẩn thanh kích thước) ban đầu đượcđặt là True Phần lập trình tiếp theo được đưa vào vòng lặp while True: nhằm để cập nhậtliên tục các thao tác của người dùng Đầu tiên biến coolingCounter sẽ giảm dần, tiếp theohình ảnh đọc từ webcam sẽ được gán vào biến frame, nếu không đọc được hình ảnh thìchương trình sẽ dừng lập tức, còn khi nhận được hình ảnh thì màn hình sẽ lật ngược lại đểngười sử dụng dễ nhìn và thao tác qua lệnh cv2.flip() Đồng thời hình thu được từ webcam sẽ truyền cho các hàm trong class HandTracker để nhận diện bàn tay

Trang 17

Nếu upFingers trả về True thì lúc này tọa độ của đầu ngón trỏ được gán cho biến x,

y Nếu lúc này ngón trỏ đang duỗi ra và vị trí đầu ngón trỏ nằm ngoài bảng trắng thì tọa

độ bút vẽ được gán bằng (0, 0):

tiếp tục sau khi gán tọa độ cho bút vẽ, nếu bảng chọn kích cỡ bút đang hiện ra thìđầu ngón trỏ đang ở vị trí của ô kích cỡ nào thì biến brushSize sẽ được gán bằng kích cỡtương ứng đồng thời là thông số alpha của ô đó sẽ bằng 0 tức là màu sẽ đậm lại và khi đưatay ra khỏi màu sẽ trở lại bình thường tạo cho người dùng cảm giác là nút đã được nhấn.Nút chọn màu cũng hoạt động tương tự như vậy nhưng sẽ có thêm phần khi ngón trỏ divào nút clear thì sẽ tạo lại khung canvas mới đồng nghĩa toàn bộ nét vẽ sẽ bị xóa đi:

Trang 18

Tiếp đến là các nút để mở thanh chọm màu, thanh chọn kích thước và bảng trắng.Với nút mở bảng màu khi ta đưa ngón trỏ vào vị trí nút sẽ đảo trạng thái từ True thànhFalse và ngược lại của biến hideColors, đồng thời khi bảng màu đóng thì nút này hiện chữColors bên trong, khi thanh màu hiện ra sẽ đổi thành chữ Hide, nút nhấn sẽ đậm lên khingón trỏ đưa vào bút và trở về bình thường khi dời ngón trỏ ra Tương tự cho nút mởthanh chọn kích cỡ bút và nút mở bảng;

Trang 19

Khi ngón trỏ đang duỗi ra và ngón giữa đang gập lại, nếu bảng trắng đang mở vàngón trỏ đang nằm trong diện tích của bảng trắng thì lanmark 8 sẽ được tô màu theo màubút và có kích thước bằng kích thước bút, tọa độ của bút cũng lấy tọa độ của lanmark 8.Nếu màu bút đang là màu đen sẽ thực hiện chức năng tẩy, nếu là màu sắc khác sẽ thựchiện vẽ các nét theo sự di chuyển của đầu ngón trỏ:

Trang 20

Bây giờ ta sẽ tiến hành vẽ các nút nhấn lên trên màn hình webcam bằng lệnh

cv2.retangle() với các thuộc tính của đối tượng trong class ColorRect:

Tiếp đến sẽ vẽ các ô chọn màu, chọn kích thước và bảng trắng khi các nút tương ứngđược chọn:

Trang 21

Để chuyển các đường vẽ từ canvas vào trong bảng trắng đầu tiên ta xét điều khiểnbảng đã mở chưa Nếu đã mở thì sẽ chuyển khung ảnh canvas sang ảnh xám rồi chuyểnsang ảnh nhị phân để tách nền và các nét vẽ Các nét vẽ lúc này sẽ mang giá trị 0 (bit 0) vànền mang giá trị 255 (bit 1) Sau đó hình nhị phân này được chuyển về không gian màuBGR và đem hợp với màn hình webcam bằng lệnh cv2.bitwise_and() ta thu được hìnhwebcam có các đường vẽ màu đen trên bảng Tiếp tục đem hình đó gộp với khung ảnhcanvas có các đường màu bằng lệnh cv2.bitwise_or() ta sẽ thu được kết quả cuối cùng làhình webcam có các đường vẽ màu ở trên bảng.

Cuối cùng, ta cho hình ảnh được xử lý sau cùng hiển thị lên bằng lệnh cv2.imshow().Đồng thời thiết lập khi nhấn phím ‘q’ thì sẽ dừng chương trình, thoát khỏi vòng lặp, giảiphóng camera và giải phóng bộ nhớ cấp cho cửa sổ hiển thị

Trang 22

Chương 4 KẾT QUẢ THỰC HIỆN

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

Hình 4.1 Hình hiển thị khi vừa chạy chương trình

Hình 4.2 Quá trình sử dụng công cụ

Trang 23

Hình 4.3 Hình vẽ trên khung canvas

4.2 Kết luận

Qua quá trình nghiên cứu và thực hiện đề tài nhóm xin tổng hợp lại những thành quả

đã đạt được:

- Lập trình hoàn thiện được công cụ bảng viết ảo

- Giao diện công cụ dễ nhìn, dễ sử dụng

- Ứng dụng được các kiến thức đã được học vào đề tài

- Các thành phần điện và vi điều khiển hoạt động tốt:

Tuy vậy do thời gian thực hiện có hạn nên đề tài vẫn còn nhiều hạn chế

4.3 Hạn chế của đề tài

Các mặt hạn chế còn gặp phải trong quá trình nghiên cứu đề tài là:

- Chất lượng hình ảnh còn bị hạn chế do chất lượng camera

- Vẫn còn bị nhiễu bởi yếu tố ánh sáng của môi trường

Trang 24

4.4 Hướng phát triển của đề tài

- Thiết kế thêm nhiều tính năng như chụp màn hình, vẽ các loại hình học, bổ sung máy tính ảo,

- Nâng cao chất lượng của hình ảnh bằng camera tốt hơn

- Phát triển lên thành các ứng dụng giao tiếp không chạm với người dùng như nút nhấn thang máy, nút nhấn chọn đồ ăn,

Trang 25

TÀI LIỆU THAM KHẢO

[1 ] https://codelearn.io/sharing/tim -hieu - thu-vien - numpy-trong -python[2 ] https://topdev.vn/blog/opencv -la - gi-hoc -computer- vision -khong- kho/ [3 ] https://viblo.asia/p/mediapipe -live - ml-solutions -va -ung- dung-ve -bang - hands gestures - gAm5ymOV5db

[4 ] https://google.github.io/mediapipe/

[5 ] https://docs.python.org/3/library/tkinter.html

Ngày đăng: 05/10/2023, 14:11

HÌNH ẢNH LIÊN QUAN

Hình 4.1 Hình hiển thị khi vừa chạy chương trình - 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
Hình 4.1 Hình hiển thị khi vừa chạy chương trình (Trang 22)
Hình 4.2 Quá trình sử dụng công cụ - 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
Hình 4.2 Quá trình sử dụng công cụ (Trang 22)
Hình 4.3 Hình vẽ trên khung canvas - 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
Hình 4.3 Hình vẽ trên khung canvas (Trang 23)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w