Tải bản đầy đủ (.docx) (19 trang)

Python + Code : Đ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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (897.88 KB, 19 trang )

KHOA Đ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

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

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………


……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

Chữ Ký Giảng Viên

Y

MỤ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 khn 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

LỜ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 q

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 hồ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 q báu từ phía q Thầy Cơ và các bạn đọc để đề tài hoàn thiện hơn.

1

I. 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ữ q 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ữ q 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 tốn nhận diện khn mặt để tìm
kiếm và xác định các điểm đặc trưng trên khn 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

2

quan 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.

3

II. QUY TRÌNH THỰC HIỆN


2.1.Tìm và xác định khn 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.

4

Để 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 khn 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ự đố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 khn
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 khn 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 khn 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')

5

# 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

6

Camera 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 tố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.

7


Đoạn code sẽ chứa các hàm tính tố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 tố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ư
viện Python để làm việc với hình ảnh.

8

Giao 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

9

(1).jpg")
resizeimage=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 tố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 "]

Bắt đầu vịng lặp vơ hạn để xử lý từng khung hình từ camera:

10

 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 tố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 tố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)

11

y1 = 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 tố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)
cv2.putText(image,f'Depth: {int(d)}cm',(x3-100,y3-50),0,1,(0,255,100))

12

Hiể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 tốn dựa trên các điểm đặc trưng
trên khn 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ị.

13

14

III. 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
tố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 tố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ý.

15

 Giao diện người dùng cải tiến: Tạo một giao diện người dùng đẹp mắt và
dễ sử dụng, cho phép người dùng tùy chỉnh các thiết lập như kích thước
chữ, màu sắc và kiểu chữ.


 Ứng dụng thực tế: Mở rộng ứng dụng để áp dụng vào các lĩnh vực cụ thể
như giáo dục, y tế, công nghiệp, nơi việc điều chỉnh kích thước chữ phù
hợp với mắt có thể mang lại lợi ích rõ rệt.

 Tương tác thêm: Kết hợp với công nghệ nhận diện cử chỉ hoặc nhận diện
khn mặt để tăng tính tương tác và điều khiển chức năng của ứng dụng
thông qua cử chỉ hoặc di chuyển mắt.

16


×