Tiêu đề: Điều Chỉnh Kích Thước Chữ Phù Hợp với Mắt Dựa vào Xác Định Khoảng Cách giữa Mắt và Camera Mô tả: Ứng dụng Điều Chỉnh Kích Thước Chữ Phù Hợp là một ứng dụng sáng tạo giúp tối ưu hóa trải nghiệm đọc cho người dùng, bằng cách điều chỉnh kích thước của văn bản hiển thị dựa trên khoảng cách giữa mắt và camera. Bằng cách sử dụng công nghệ xử lý ảnh và máy học, ứng dụng này cung cấp một phương tiện độc đáo để cải thiện khả năng đọc của người dùng trên các thiết bị di động và máy tính cá nhân. Chức Năng Chính: Xác Định Khoảng Cách: Ứng dụng sử dụng camera trên thiết bị để xác định khoảng cách hiện tại giữa mắt của người dùng và màn hình. Điều này được thực hiện thông qua việc phân tích hình ảnh và đánh giá các đặc trưng không gian của khuôn mặt. Điều Chỉnh Kích Thước Chữ: Dựa trên dữ liệu về khoảng cách đã xác định, ứng dụng điều chỉnh kích thước của văn bản hiển thị trên màn hình. Nó tăng kích thước chữ khi khoảng cách giảm và giảm kích thước chữ khi khoảng cách tăng, nhằm đảm bảo rằng văn bản luôn đủ lớn để đọc một cách thoải mái. Tuỳ Chỉnh và Tùy Biến: Người dùng có thể tuỳ chỉnh các thiết lập để điều chỉnh cách thức ứng dụng phản hồi với các thay đổi trong khoảng cách hoặc tuỳ chỉnh kích thước chữ theo sở thích cá nhân. Giao Diện Thân Thiện: Giao diện người dùng thân thiện và dễ sử dụng, với các tùy chọn cấu hình rõ ràng và hướng dẫn đơn giản, giúp người dùng dễ dàng tận dụng các tính năng của ứng dụng. Công Nghệ và Công Cụ: Sử dụng ngôn ngữ lập trình Python và thư viện xử lý ảnh như OpenCV để xác định kích thước khuôn mặt và khoảng cách từ camera. Áp dụng các kỹ thuật máy học và học sâu để dự đoán và điều chỉnh kích thước chữ dựa trên dữ liệu từ camera. Tương tác với API hoặc framework giao diện người dùng để hiển thị văn bản với kích thước phù hợp. Ứng dụng này sẽ là một công cụ hữu ích cho những người dùng muốn có trải nghiệm đọc thoải mái và tiện lợi trên các thiết bị di động và máy tính cá nhân, đặc biệt là khi sử dụng trong các điều kiện ánh sáng và khoảng cách thay đổi.
Trang 1KHOA ĐIỆN – ĐIỆN TỬ NGÀNH CNKT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA
-BÁO CÁO CUỐI KỲ
ĐỀ TÀI ĐIỀU CHỈNH CỠ CHỮ PHÙ HỢP VỚI MẮT DỰA VÀO XÁC ĐỊNH
KHOẢNG CÁCH GIỮA MẮT VÀ CAMERA
NHÓM 04:
TRẦN THÀNH ĐĂNG 21151217 NGÔ XUÂN THỨC 21151360
VÕ VĂN TỊNH 2115167
GVHD: TS NGUYỄN VĂN THÁI
Tp Hồ Chí Minh, tháng 06 năm 2023
Trang 2………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
……… Chữ Ký Giảng Viên
Trang 3MỤC LỤC
YI PHẦN MỞ Đ
1.1 Lý do chọn đề tài 2
1.2 Mục tiêu nghiên cứu 2
1.3 Phương pháp nghiên cứu 3
II QUY TRÌNH THỰC HIỆN 4
2.1 Tìm và xác định khuôn mặt 4
2.1.1 Thư viện Mediapipe 4
2.1.2 Mô hình FaceMesh 5
2.2 Xác định khoảng cách từ mắt người đến camera 6
2.3 Thay đổi kích cỡ chữ 7
2.4 Lập trình và kết quả 8
2.4.1 Lập trình 8
2.4.2 Kết quả 13
III KẾT LUẬN 15
3.1 Kết quả thực hiện 15
3.2 Hướng phát triển đề tài 15
Trang 4LỜI CẢM ƠN
Đây là đề tài nghiên cứu của chúng em khi học môn Xử lí ảnh, với những kiến thức được lĩnh hội, chúng em đều áp dụng vào đề tài này Trong quá trình thực hiện đề tài, đã nhận được sự giúp đỡ, ủng hộ rất nhiều từ phía thầy cô, gia đình và bạn bè
Qua đó, chúng em xin được gửi lời cảm ơn sâu sắc đến những người đã
hỗ trợ chúng em hoàn thành đồ án này, đặc biệt là thầy T.S Nguyễn Văn Thái,
thầy là người đã luôn theo dõi, hướng dẫn, chỉ bảo rất tận tình trong suốt quá trình nhóm em thực hiện đề tài Thầy đã dạy dỗ, trau dồi và cung cấp những kiến thức, kỹ năng cần thiết để chúng em hoàn thành tốt đề tài này Gia đình và bạn bè, những người đã động viên, khích lệ, cổ vũ để chúng em có thêm động lực học tập và làm việc
Trong đề tài chắc chắn sẽ còn nhiều thiếu sót, rất mong nhận được những đóng góp quý báu từ phía quý Thầy Cô và các bạn đọc để đề tài hoàn thiện hơn
Trang 5I. PHẦN MỞ ĐẦU
1.1 Lý do chọn đề tài
Kích thước chữ được hiển thị trên màn hình có ảnh hưởng đáng kể đến trải nghiệm người dùng Khi kích thước chữ không phù hợp, người dùng có thể gặp khó khăn trong việc đọc và nhận biết thông tin Bằng cách điều chỉnh cỡ chữ phù hợp với mắt dựa vào khoảng cách giữa mắt và camera, đề tài này giúp cải thiện trải nghiệm người dùng và làm cho việc đọc trên màn hình trở nên dễ dàng và thoải mái hơn
Một kích thước chữ phù hợp giúp tối ưu hóa độ phân giải của màn hình Khi kích thước chữ quá nhỏ, người dùng có thể gặp khó khăn trong việc đọc và nhìn rõ các chi tiết Ngược lại, khi kích thước chữ quá lớn, không gian trên màn hình sẽ bị lãng phí và thông tin có thể bị che khuất Đề tài này giúp điều chỉnh
cỡ chữ sao cho phù hợp, tối ưu hóa độ phân giải và hiển thị thông tin một cách
rõ ràng và dễ nhìn
I.2 Mục tiêu nghiên cứu
Xác định và đo lường khoảng cách giữa mắt và camera: Mục tiêu đầu tiên
là sử dụng các phương pháp computer vision và xử lý ảnh để xác định khoảng cách chính xác giữa mắt của người dùng và camera Việc này có thể được thực hiện bằng cách sử dụng các công cụ và thuật toán nhận diện khuôn mặt để tìm kiếm và xác định các điểm đặc trưng trên khuôn mặt, từ đó tính toán khoảng cách mắt và camera
Điều chỉnh cỡ chữ dựa vào khoảng cách mắt và camera: Mục tiêu tiếp theo là sử dụng thông tin về khoảng cách đã xác định để điều chỉnh kích thước chữ trên màn hình Phương pháp điều chỉnh cỡ chữ có thể dựa trên tỷ lệ tương
Trang 6quan giữa khoảng cách và kích thước chữ, sao cho người dùng có thể dễ dàng đọc và nhìn rõ thông tin trên màn hình
1.3 Phương pháp nghiên cứu
Sử dụng phương pháp thực nghiệm khoa học: Là phương pháp các nhà khoa học chủ động tác động vào đối tượng và quá trình diễn biến sự kiện mà đối tượng tham gia để hướng sự phát triển của chúng theo tham vọng dự kiến của mình
Sử dụng phương pháp nghiên cứu lý thuyết: Là phương pháp thu thập thông tin khoa học trên cơ sở nghiên cứu các văn bản, tải liệu đã có và bằng các thao tác tư duy logic để rút ra tóm lại khoa học cần thiết
Trang 7II. QUY TRÌNH THỰC HIỆN 2.1.Tìm và xác định khuôn mặt
2.1.1 Thư viện Mediapipe
Mediapipe là một thư viện mã nguồn mở được phát triển bởi Google, cung cấp các công cụ và giải thuật cho việc xử lý dữ liệu đa phương tiện như video, âm thanh và hình ảnh Mediapipe chủ yếu được sử dụng trong các ứng dụng thị giác máy tính và trí tuệ nhân tạo
Các tính năng chính của Mediapipe bao gồm:
Xử lý dữ liệu video và hình ảnh: Mediapipe cung cấp các công cụ cho việc xử lý dữ liệu video và hình ảnh như trích xuất khung hình, phân đoạn hình ảnh, nhận diện đối tượng, theo dõi vị trí, và trích xuất các đặc trưng từ dữ liệu
Xử lý dữ liệu âm thanh: Mediapipe hỗ trợ xử lý dữ liệu âm thanh như trích xuất âm đồ, nhận diện tiếng nói, và phân tích tín hiệu âm thanh
Truyền dữ liệu trong thời gian thực: Mediapipe cho phép truyền dữ liệu qua các đường ống xử lý (pipeline) để thực hiện các tác vụ xử lý đa
phương tiện trong thời gian thực
Tích hợp phần cứng: Mediapipe hỗ trợ tích hợp phần cứng xử lý đa
phương tiện như GPU và TPU để tăng tốc quá trình xử lý
Cấu trúc module và đồ thị xử lý: Mediapipe sử dụng cấu trúc module để xây dựng và tổ chức các công cụ và giải thuật Đồ thị xử lý trong
Mediapipe cho phép sắp xếp và kết nối các module lại với nhau để tạo thành các pipeline xử lý phức tạp
Thư viện Mediapipe cung cấp rất nhiều module và công cụ cho việc xử lý dữ liệu đa phương tiện Một số module phổ biến của Mediapipe bao gồm nhận diện khuôn mặt (FaceMesh), theo dõi vị trí tay (HandTracking), nhận diện đồ vật (Objectron), và nhiều công cụ khác cho các tác vụ khác nhau
Trang 8Để sử dụng Mediapipe trong Python, bạn cần cài đặt thư viện mediapipe bằng lệnh
pip install mediapipe
2.1.2 Mô hình FaceMesh
Mô hình FaceMesh là một trong những mô hình nhận diện khuôn mặt trong thư viện Mediapipe Nó được sử dụng để xác định các điểm đặc trưng trên khuôn mặt của một người trong ảnh hoặc video
FaceMesh sử dụng mạng neural học sâu để dự đoán vị trí của các điểm đặc trưng trên khuôn mặt như mắt, mũi, miệng, và các điểm trên viền khuôn mặt Cụ thể, mô hình sẽ tạo ra một ma trận điểm 3D (x, y, z) đại diện cho vị trí của các điểm đặc trưng trên khuôn mặt
Mô hình FaceMesh trong Mediapipe đã được huấn luyện trên một lượng lớn dữ liệu ảnh khuôn mặt đa dạng, cho phép nó nhận diện các điểm đặc trưng với độ chính xác cao và ổn định trong nhiều tình huống khác nhau
Để sử dụng mô hình FaceMesh trong Mediapipe, bạn cần import module face_mesh và tạo một instance của class FaceMesh Sau đó, bạn có thể truyền ảnh hoặc video vào mô hình để nhận diện và lấy các điểm đặc trưng trên khuôn mặt
Dưới đây là một ví dụ minh họa về cách sử dụng mô hình FaceMesh trong Mediapipe:
# Khởi tạo mô hình FaceMesh
face_mesh = mp.solutions.face_mesh.FaceMesh()
# Đọc ảnh
image = cv2.imread('image.jpg')
Trang 9# Chuyển đổi ảnh sang định dạng RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Nhận diện các điểm đặc trưng trên khuôn mặt
results = face_mesh.process(image_rgb)
# Trích xuất các điểm đặc trưng từ kết quả nhận diện
if results.multi_face_landmarks:
for face_landmarks in results.multi_face_landmarks:
for landmark in face_landmarks.landmark:
# Xử lý các điểm đặc trưng trên khuôn mặt
# Hiển thị ảnh với các điểm đặc trưng được vẽ lên
cv2.imshow('Face Landmarks', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Trong ví dụ trên, chúng ta khởi tạo mô hình FaceMesh, đọc ảnh, và chuyển đổi ảnh sang định dạng RGB để phù hợp với đầu vào của mô hình Sau đó, chúng ta gửi ảnh vào mô hình để nhận diện
2.2.Xác định khoảng cách từ mắt người đến camera
Trang 10Camera máy là 1 thấu kính hội tụ Có tiêu cự là 1 hằng số nhất định Đầu tiên chúng ta lấy 1 khoảng cách d cố định Giá trị w và W đã được xác định bằng công thức trước đó Từ đó tìm ra khoảng tiêu cự trung bình của camera
Từ đó có tiêu cự chúng ta sẽ thế ngược lên công thức Distance để tìm ra khoảng cách từ mắt người đến camera máy tính
2.3.Thay đổi kích cỡ chữ
Đầu tiên, sau khi xác định khoảng cách từ mắt đến camera, ta có một giá trị khoảng cách cụ thể
Tiếp theo, dựa vào giá trị khoảng cách, ta có thể áp dụng các quy tắc hoặc thuật toán để điều chỉnh kích cỡ chữ
Cách thức cụ thể để thay đổi kích cỡ chữ có thể được thực hiện bằng cách tăng hoặc giảm kích cỡ dựa trên tỷ lệ tương quan với khoảng cách Ví dụ, nếu khoảng cách tăng lên, kích cỡ chữ có thể được giảm để đảm bảo tính rõ ràng và
dễ đọc Ngược lại, nếu khoảng cách giảm, kích cỡ chữ có thể được tăng để đảm bảo khả năng đọc tốt hơn
Trang 11Đoạn code sẽ chứa các hàm tính toán và logic để thực hiện việc điều chỉnh kích cỡ chữ dựa trên giá trị khoảng cách đã xác định
2.4.Lập trình và kết quả
2.4.1 Lập trình
Các thư viện được sử dụng
import cv2
import mediapipe as mp
import numpy as np
import cvzone
from cvzone.FaceMeshModule import FaceMeshDetector
import tkinter as tk
from tkinter import Tk, Frame,Label
from PIL import Image,ImageTk
cv2: Thư viện OpenCV (Open Source Computer Vision) được sử dụng để
xử lý hình ảnh và video
mediapipe: Thư viện Mediapipe được phát triển bởi Google, cung cấp
các công cụ và lớp để xử lý thị giác máy tính và phân tích dữ liệu hình ảnh
numpy (import numpy as np): Thư viện Python hỗ trợ các phép toán và
công cụ cho việc làm việc với mảng nhiều chiều và ma trận
cvzone: Một thư viện bổ sung cho OpenCV, cung cấp các công cụ và
chức năng phục vụ cho việc phát triển ứng dụng thị giác máy tính
tkinter: Thư viện Python chuẩn để phát triển giao diện người dùng đồ
họa
PIL (from PIL import Image, ImageTk): Thư viện Pillow, một thư
Trang 12Giao diện
Giao diện trang giới thiệu
Code tạo nên giao diện
window=tk.Tk()
window.geometry("1000x750")
window.title("nhom4")
anh=Image.open("NGÀNH-KỸ-THUẬT-ĐIỀU-KHIỂN-VÀ-TỰ-ĐỘNG
Trang 13resizeimage=anh.resize((1000,750))
imagebia=ImageTk.PhotoImage(resizeimage)
i1=Label(image=imagebia)
i1.grid(column=0,row=0)
Btn=tk.Button(window,text="build code",font=("times new
romen",20),command=hamcon)
Btn.grid(column=0 ,row=0)
window.mainloop()
Hàm tính toán chính
Khởi tạo các đối tượng và thiết lập mô hình:
Tạo module mp_face_mesh từ mô hình FaceMesh trong thư viện
mediapipe
Khởi tạo đối tượng face_mesh từ đối tượng mp_face_mesh
mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh()
Lấy hình ảnh từ camera và khởi tạo mảng chứa văn bản:
Sử dụng cv2.VideoCapture() để khởi tạo đối tượng cap để chứa hình
ảnh từ camera
Đặt danh sách các chuỗi văn bản textList để hiển thị trên hình ảnh.
cap = cv2.VideoCapture(0)
textList = ["tao mot doi tuong", "videocapture de",
"lay video tu thiet bi","trong truong hop", "nay la camera voi chi so "]
Trang 14 Sử dụng cap.read() để đọc hình ảnh từ camera và gán nó vào biến image.
Khởi tạo mảng numpy chưa văn bản hiển thị
Lấy kích thước khung hình
Chuyển đổi ảnh từ định dạng BGR sang RGB
while True:
ret,image = cap.read()
imgText = np.zeros_like(image,)
height,width,_ = image.shape
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
Xử lý khuôn mặt và tính toán khoảng cách:
Sử dụng face_mesh.process() để nhận diện và xác định các điểm đặc
trưng trên khuôn mặt
Lặp qua các khuôn mặt được nhận diện và trích xuất các điểm đặc trưng
để tính toán khoảng cách
Qua thực nghiệm ta có khoảng cách trung bình giữa 2 mắt người là
W=6.3 cm Lấy thông tin về vị trí của các điểm thứ 145(Mắt trái),
374(Mắt phải), 10( Trán) Sau đó tính khoảng cách giữa 2 mắt (w đơn vị pixel) bằng cách tính khoảng cách 2 điểm 145 và 374
Tìm ra giá trị trung bình của f(đơn vị pixel) Thế vào công thức và tìm ra khoảng cách giữa mắt và camera d (đơn vị cm) In ra màn hình giá trị d
result = face_mesh.process(rgb_image)
if result.multi_face_landmarks:
for facial_landmarks in result.multi_face_landmarks:
pt1 = facial_landmarks.landmark[145]
x1 = int(pt1.x*width)
Trang 15y1 = int(pt1.y*height)
pt2 = facial_landmarks.landmark[374]
x2 = int(pt2.x*width)
y2 = int(pt2.y*height)
pt3 = facial_landmarks.landmark[10]
x3 = int(pt3.x*width)
y3 = int(pt3.y*height)
w = np.sqrt((x1-x2)**2+(y1-y2)**2)
W = 6.3
f = 840
d = (W * f) / w
print(d)
Điều chỉnh kích thước chữ và hiển thị văn bản:
Tính toán kích thước chữ và khoảng cách giữa các dòng của văn bản dựa trên khoảng cách tính được và các tham số khác
Sử dụng cv2.putText() để hiển thị văn bản.
Khai báo biến sen có thể thay đổi giá trị Giá trị sen này sẽ điều khiển độ nhạy của dòng chữ khi chúng ta thay đổi khoảng cách giữa mắt và camera
sen = 25
for i, text in enumerate(textList):
singleHeight = 20 + int((int(d/sen)*sen)/4)
scale = 0.4 + (int(d/sen)*sen)/75
cv2.putText(imgText, text, (50, 50 + (i * singleHeight)),
cv2.FONT_ITALIC, scale, (255, 255, 255), 2)
Trang 16Hiển thị hình ảnh:
Sử dụng cvzone.stackImages() để xếp chồng hình ảnh gốc và hình ảnh
chứa văn bản
Sử dụng cv2.imshow() để hiển thị kết quả.
imgStacked = cvzone.stackImages([image, imgText], 2, 1)
cv2.imshow("Image",imgStacked)
Kết thúc vòng lặp và giải phóng dữ liệu:
Sử dụng cv2.waitKey() để chờ và xử lý các thao tác từ bàn phím.
Giải phóng dữ liệu bằng cách sử dụng cap.release() và
cv2.destroyAllWindows().
2.4.2 Kết quả
Khi chạy chương trình, camera sẽ được khởi động và bắt đầu đọc các khung hình từ camera Sau đó, mô hình FaceMesh sẽ được áp dụng để nhận diện và xác định các điểm đặc trưng trên khuôn mặt trong từng khung hình Từ
đó, khoảng cách từ mắt đến camera được tính toán dựa trên các điểm đặc trưng trên khuôn mặt
Kết quả sẽ được hiển thị trực tiếp trên video Mỗi khung hình sẽ có văn bản cho biết khoảng cách tính được từ mắt đến camera Đồng thời, kích thước chữ sẽ được điều chỉnh phù hợp với khoảng cách này Bạn có thể quan sát kết quả trực tiếp trên cửa sổ hiển thị
Trang 18III. KẾT LUẬN 3.1.Kết quả thực hiện
Tóm lại, sau khi thực hiện đề tài này, chúng em được hiểu rõ hơn về quy trình nhận diện hình ảnh Để nhận diện chính xác phụ thuộc vào nhiều yếu tố ánh sáng, môi trường, khoảng cách v.v Đề tài "Điều chỉnh cỡ chữ phù hợp với mắt dựa vào xác định khoảng cách giữa mắt và camera" là một đề tài thú vị và
có tính ứng dụng cao trong việc cải thiện trải nghiệm người dùng khi đọc văn bản trên video Tuy nhiên, để đánh giá và cải thiện chất lượng chương trình, cần thực hiện thêm các thử nghiệm và tối ưu hóa các tham số, ví dụ như cách tính toán kích thước chữ dựa trên khoảng cách Cũng cần xem xét việc mở rộng chức năng và ứng dụng của chương trình trong các tình huống thực tế khác
3.2.Hướng phát triển đề tài
Có một số hướng phát triển tiềm năng cho đề tài "Điều chỉnh cỡ chữ phù hợp với mắt dựa vào xác định khoảng cách giữa mắt và camera" Dưới đây là một số
ý tưởng:
Tăng cường tính năng: Bổ sung các tính năng bổ sung như thay đổi màu sắc, kiểu chữ, độ đậm nhạt của văn bản dựa trên khoảng cách và góc nhìn của mắt Điều này có thể tăng tính tương tác và linh hoạt của ứng dụng
Đa ngôn ngữ: Mở rộng ứng dụng để hỗ trợ nhiều ngôn ngữ khác nhau Điều này cho phép người dùng có thể chọn ngôn ngữ mà họ muốn đọc và hiển thị văn bản phù hợp
Tối ưu hóa hiệu suất: Nâng cao hiệu suất của ứng dụng để xử lý video và tính toán khoảng cách một cách nhanh chóng và mượt mà Có thể sử dụng kỹ thuật tối ưu hóa mã để giảm thời gian phản hồi và tăng tốc độ xử lý