1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

19 18 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 đề Đ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
Tác giả Trần Thành Đăng, Ngô Xuân Thức, Võ Văn Tịnh
Người hướng dẫn TS. Nguyễn Văn Thái
Trường học Khoa Điện – Điện Tử
Thể loại báo cáo
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 19
Dung lượng 2,96 MB
File đính kèm STT4.rar (4 MB)

Nội dung

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 1

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

Trang 2

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

……… Chữ Ký Giảng Viên

Trang 3

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 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 4

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 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 5

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ữ 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 6

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

Trang 7

II. 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 10

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 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 12

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

Trang 13

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 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 15

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 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 16

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 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 18

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 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ý

Ngày đăng: 03/03/2024, 00:10

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

TÀI LIỆU LIÊN QUAN

w