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

báo cáo bài tập lớn xử lý ảnh đề tài nhận dạng đối tượng thời gian thực và điều khiển bàn xoay

28 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

- Nội dung sơ sài- Trình bầy kém, mắc nhiều lỗi chính tả- Nội dung khá sơ sài và hạn chế- Trình bầy còn hạn chế- Mắc tương đối nhiều lỗi chính tả- Bố cục rõ ràng- Nội dung khá đầyđủ chín

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘITRƯỜNG CƠ KHÍ

KHOA CƠ ĐIỆN TỬ

Giảng viên hướng dẫn: TS Dương Văn Lạc

Sinh viên thực hiện: Trần Ngọc Thuận 20195192 Vũ Duy Minh 20195100 Hoàng Xuân Đích 20194946

Hà Nội, 1/2024

Trang 2

- Nội dung sơ sài- Trình bầy kém, mắc nhiều lỗi chính tả

- Nội dung khá sơ sài và hạn chế- Trình bầy còn hạn chế

- Mắc tương đối nhiều lỗi chính tả

- Bố cục rõ ràng- Nội dung khá đầyđủ chính xác- Trình bầy tương đối tốt- Mắc ít lỗi chính tả

- Bố cục của bài viết rõ ràng

- Nội dung đầy đủ, chính xác- Trình bầy tốt

- Sản phẩm sơ sài,chức năng chưa đầy đủ- Tính thẩm mỹ còn kém- Sản phẩm hoạt động

- Sản phẩm tương đối sơ sài, chức năng còn hạn chế- Tính thẩm mỹ còn hạn chế- Sản phẩm hoạt động

- Sản phẩm tương đối hoàn thiện, chức năng khá đầy đủ

- Sản phẩm có tínhthẩm mỹ- Sản phẩm hoạt động tốt

- Sản phẩm hoàn thiện, chức năng đầy đủ- Sản phẩm có tính thẩmmỹ

- Sản phẩm hoạt động tin cậy

- Trả lời các câu hỏi còn nhiều hạnchế

- Hiểu, vận dụng các kiếm thức cònnhiều hạn chế

- Trả lời các câu hỏi còn hạn chế- Hiểu, vận dụng các kiếm thức đã học còn hạn chế

- Trả lời tương đối tốt các câu hỏi- Hiểu, vận dụng các kiếm thức đã học tương đối tốt

- Trả lời đúng và đầy đủ tất các các câu hỏi- Hiểu, vận dụng tốt kiếm thức đã học- Có khả năng phân tích,đánh giá, sáng tạo

II ĐIỂM ĐÁNH GIÁ CHÍNH THỨC

STTHọ tênMSSV Điểm quyểnbáo cáo ĐBC

Điểm sảnphẩm ĐSP

(40%)Điểmbảo vệ*

ĐIỂM KẾT QUẢĐKQ=10%Đ +40%Đ +50%ĐBCSPBV

1Trần Ngọc Thuận 201951922Vũ Duy Minh 201951003Hoàng Xuân Đích 20194946

*Lưu ý: ĐBV ≤ min {ĐBC, ĐSP}.

Trang 3

PHÂN CÔNG NHIỆM VỤ

Tìm hiểu thời gianthực, viết codechương trình nhậndạng python, chuẩn bị

phần cứng

Tìm hiểu về thuật toánchương trình python vàarduino, chuẩn bị báo

3 Hoàng Xuân Đích 20194946

Viết chương trìnharduino, chuẩn bị báo

cáo

Trang 4

Trang 3

LỜI MỞ ĐẦU

Công nghệ thông tin ngày càng phát triển và có vai trò hết sức quan trọng không thểthiếu trong cuộc sống hiện đại Con người ngày càng tạo ra những cỗ máy thông minhcó khả năng tự nhận biết và xử lí được các công việc một cách tự động, phục vụ cho lợiích của con người Trong những năm gần đây, một trong những bài toán nhận đượcnhiều sự quan tâm và tốn nhiều công sức nhất của lĩnh vực công nghệ thông tin, đóchính là bài toán nhận dạng

Tuy mới xuất hiện chưa lâu nhưng nó đã rất được quan tâm vì tính ứng dụng thực tếcủa bài toán cũng như sự phức tạp của nó Bài toán nhận dạng có rất nhiều lĩnh vựcnhư: nhận dạng vật chất (nước, lửa, đất, đá, gỗ, ), nhận dạng chữ viết, nhận dạnggiọng nói, nhận dạng vật thể, nhận dạng khuôn mặt, trong đó phổ biến và được ứngdụng nhiều hơn cả là bài toán nhận dạng vật thể Các ứng dụng liên quan đến nhận dạngvật thể có thể kể như: Nhận dạng phương tiện giao thông, Nghiên cứu về việc nhận dạngvà phân loại các đối tượng trong môi trường công nghiệp, hệ thống tìm kiếm thông tintrên ảnh, video dựa trên nội dung, Cho đến tận bây giờ, các nhà nghiên cứu vẫn chưađạt được sự ưng ý trong việc giải quyết các khó khăn của bài toán và cho kết quả hoàntoàn đúng Tuy nhiên, những gì đã đạt được cũng đủ để chúng ta áp dụng rộng rãi vàđem lại những lợi ích to lớn trong cuộc sống.

Với sự hấp dẫn của bài toán và những thách thức còn đang ở phía trước, với niềmđam mê công nghệ hiện đại và những ứng dụng thực tế tuyệt với của nó, với khát khaokhám phá và chinh phục những tri thức mới mẻ, nhóm em đã chọn đề tài nghiên cứu:“Nhận dạng đối tượng thời gian thực và điều khiển bàn xoay” làm để tài bài tập lớnmôn Xử lý ảnh Em xin cảm ơn các thầy cô bộ môn của Trường Cơ khí-Đại học BáchKhoa Hà Nội đã trang bị đầy đủ những kiến thức chuyên ngành cần thiết, đặc biệt emxin gửi lời cảm ơn đến thầy Dương Văn Lạc, đã tận tình hướng dẫn, trực tiếp đánh giá,nhận xét giúp đỡ em rất nhiều trong quá trình hoàn thiện bài tập lớp môn học.

Chúng em xin chân thành cảm ơn!

Trang 5

MỤC LỤC

Trang 6

Trang 5

CHƯƠNG 1: KẾT QUẢ1.1 Nội dung bài toán

Đầu vào: Ảnh và thông tin kèm theo của những người tham gia thực nghiệm.

Đầu ra: Nhận diện được khuôn mặt và trả về thông tin của người nhận dạng được.

1.2 Các thành phần cơ bản

Phần cứng:Camera

Máy tính

Trang 7

Chúng ta có thể chạy PyCharm trên Windows, Linux hoặc Mac OS.

Trang 8

Trang 7Ngoài ra, nó chứa các module và các package giúp các lập trình viên pháttriển phần mềm bằng Python tiết kiệm thời gian và công sức Hơn nữa, nócũng có thể được tùy chỉnh theo yêu cầu của các nhà phát triển.

+Python 3.9.10

Trang 9

+ Firebase.

Firebase là một nền tảng do Google cung cấp để hỗ trợ việc phát triểncác ứng dụng web và di động1 Firebase có nhiều chức năng như lưu trữ dữliệu thời gian thực, phân tích ứng dụng, tiếp thị sản phẩm và khắc phục sự cố.Firebase có nhiều dịch vụ khác nhau cho các nhà phát triển ứng dụng Mộttrong số dịch vụ nổi bật là “Realtime Database: lưu trữ và đồng bộ dữ liệungười dùng theo thời gian thực”

+Thư viện Opencv

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

OpenCV được phát hành theo giấy phép BSD, do đó nó miễn phí chocả 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ết trê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-core processing).

Trang 10

Trang 9+Thư viện Face-Recognition

Thư viện Face-Recognition là một thư viện nhận dạng khuôn mặt rấtnổi tiếng và độ chính xác khá tốt xây dựng dựa trên dlib của python và đượcviết bằng C++1 Thư viện này có thể thực hiện các bài toán như:

Face Detection: phát hiện khuôn mặt trong ảnh hoặc video2.Face Embedding: biểu diễn khuôn mặt bằng một vector số2.

Face Recognition: xác định hoặc xác minh người trong ảnh hoặc video23.

Độ chính xác của thư viện này trên tập Labeled Faces in the Wild là 99,38%

1.3 Chương trình nhận diện khuân mặt thời gian thực

Tải dữ liệu lên firebase

Trang 11

counter = 1modeType = 1

ifcounter== 0If matches [matchI ndex]matchIndex

counter = 0modeType = 3Tải dữ li u mói c p nh t lên firebase

Nếu khoảngcách giữu 2 lần ghi nh n liêp tiếp

trueNếu cókhuân m t trong camera

trueif counter <=

trueif 10 < counter

Chạy chương trình nhận diện

counter += 1

Trang 12

Vẫn còn xảy ra hiện tượng giật lag do sự truyền tải dữ liệu thời gianthực giữa thiết bị và Firebase.

Một số kết quả thực nghiệm như sau:

Trang 13

1.5 Thảo luận kết quả thực nghiệm

Sau 4 tháng học môn Xử lý ảnh kết hợp với sự tìm tòi, học hỏi, nghiêncứu từ bạn bè, thầy cô giáo và mạng Internet, nhóm đã đạt được mục tiêu đềra:

Sử dụng tốt ngôn ngữ Python, thư viện OpenCV và face_recognition,tìm hiểu và áp dụng thành công cơ sở dữ liệu Firebase, hoàn thiện các thuậttoán đáp ứng yêu cầu đề ra.

Đây là lần đầu nhóm thực hiện mô hình nên còn nhiều thiếu xót, cũngnhư chưa hoàn thiện về giao diện phần mềm và các thiết bị về hệ thống cơkhí.

Trang 14

Trang 13

CHƯƠNG 3: KẾT LUẬN3.1 Kết luận

Sau thời gian nghiên cứu dưới sự hướng dẫn của PGS.TS Mạc ThịThoa, hệ thống đã đáp ứng các yêu cầu đề ra Các khối chức năng hoạt độngđúng, đảm bảo cập nhật đầy đủ dữ liệu, hệ thống chạy ổn định trong thời giandài không phát sinh lỗi hoặc xác suất thấp Hệ thống thu được kết quả với độchính xác cao nhưng vẫn chưa xử lý được hiện tượng giật lag Nhu cầu về cácbài toán nhận dạng khuôn mặt đang rất cấp thiết trong cuộc sống, hệ thốngnày tuy còn sơ khai nhưng là bước đầu để xây dựng nên một hệ thống nhậndạng hoàn chỉnh với sự chính xác, tốc độ ưu việt và quy mô cơ sở dữ liệurộng hơn.

3.2 Hướng phát triển đề tài trong tương lai

Xử lý nhiễu với các luồng sáng khác nhau.

Thiết kế hệ thống cơ khí hoàn chỉnh cho toàn bộ hệ thống.

Nhận dạng được khuôn mặt khi đeo khẩu trang hoặc bị che một phầnkhuôn mặt.

Phát triển trợ lý ảo hướng dẫn cũng như đưa ra thông tin trong quá trìnhnhận dạng.

Trang 15

CHƯƠNG 4: TÀI LIỆU THAM KHẢO

Trang 16

-Trang 15

CHƯƠNG 5: PHỤ LỤC

1.Chương trình tải thông tin lên firebase import firebase_adminfrom firebase_admin import credentials from firebase_admin import db

cred = credentials.Certificate("serviceAccountKey.json") firebase_admin.initialize_app(cred, {

'databaseURL':"https://faceattendacerealtime-49075-default- rtdb.firebaseio.com/"

ref = db.reference('Students')

data = {"20195124":

"name": " Nguyễn Văn Nhất ","major" : " Mechatronics ", "starting_year": 2019,"total_attendance": 6,"Class": "ME1-02",

"last_attendance_time": "2022-12-11 00:54:34"},

Trang 17

"name": " Nguyễn Văn Minh ","major" : " Mechatronics ", "starting_year": 2019,"total_attendance": 6,"Class": "ME1-02",

"last_attendance_time": "2022-12-11 00:54:34"},

"name": " Mạc Thị Thoa ", "major" : " Mechatronics Talent ","starting_year": 2019,

"total_attendance": 6,"Class": "ME1",

"last_attendance_time": "2022-12-11 00:54:34"},

for key, value in data.items():ref.child(key).set(value)

Trang 18

Trang 17

2.Chương trình tải ảnh lên firebaseimport cv2

import face_recognitionimport os

import pickleimport firebase_admin

from firebase_admin import credentials from firebase_admin import storage

cred = credentials.Certificate("serviceAccountKey.json") firebase_admin.initialize_app(cred,{

'databaseURL':"https://faceattendacerealtime-49075-default- rtdb.firebaseio.com/",

folderPath = 'imagesencode'

pathList = os.listdir(folderPath) #hàm trong thư viện OS hỗ trợ load tất cả các ảnh trong 1 list

print(pathList)imgList = [] studentIds = []for path in pathList:

Trang 19

imgList.append(cv2.imread(os.path.join(folderPath,path))) studentIds.append(os.path.splitext(path)[0])

#append : thêm nối đuôi ma trận của các ảnh vào studentIds#print(path)

# os.path.splitext(tên_ảnh) để tach tên ảnh và đuôi định dạng theo dấu '.'

fileName = f'{folderPath}/{path}'bucket = storage.bucket()blob = bucket.blob(fileName) blob.upload_from_filename(fileName)

def findEncodings(imagesList):encodeList = []

for img in imagesList:

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)encode = face_recognition.face_encodings(img)[0]encodeList.append(encode)

return encodeList print("Encoding Started ")

encodeListKnown = findEncodings(imgList)

Trang 20

Trang 19encodeListKnownWithIds = [encodeListKnown, studentIds]

print("Encoding Complette")

file = open("EncodeFile.p",'wb')

pickle.dump(encodeListKnownWithIds,file) file.close()

print("File Saved")

3.Chương trình nhận dạng khuân mặtimport pickle

import cv2import os

import face_recognitionimport cvzoneimport firebase_admin

from firebase_admin import credentials from firebase_admin import dbfrom firebase_admin import storageimport numpy as np

from datetime import datetimefrom gtts import gTTSimport playsound

from unidecode import unidecode

Trang 21

cred = credentials.Certificate("serviceAccountKey.json") firebase_admin.initialize_app(cred,{

'databaseURL':"https://faceattendacerealtime-49075-default- rtdb.firebaseio.com/",

bucket = storage.bucket() cap = cv2.VideoCapture(0)cap.set(3,640)

imgModeList.append(cv2.imread(os.path.join(folderModePath,path)))#print(modelPathList) #['1.png', '2.png', '3.png', '4.png']

# Load the encodeing fiefile = open('EncodeFile.p','rb')

Trang 22

Trang 21encodeListKnownWithIds = pickle.load(file)

encodeListKnown, studentIds = encodeListKnownWithIds #print(studentIds)

modeType = 0counter = 0id = 0 imgStudent = []

def voicetext(text):

output = gTTS(text, lang="vi", slow=False)output.save("voice.mp3")

playsound.playsound("voice.mp3", True) os.remove("voice.mp3")

while True:

ret, img = cap.read()

imgS = cv2.resize(img,(0,0),None, 0.25, 0.25) #giam kich thước ảnh để xử lý nhanh hơn

imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)

faceCurFrame = face_recognition.face_locations(imgS) #lấy từng khuân mặt và vị trí khuân mặt hiện tại

Trang 23

encodeCurFrame = face_recognition.face_encodings(imgS, faceCurFrame)

y1, x2, y2, x1 = y1*4, x2*4, y2*4, x1*4bbox = 55 + x1, 162+y1, x2-x1, y2-y1

imgBackground = cvzone.cornerRect(imgBackground, bbox, rt=0)

Trang 24

Trang 23id = studentIds[matchIndex]

if counter == 0: # nếu ko có lệnh if này thì counter sẽ luôn nhỏ 10 và2 lệnh đk 10< <=20 và >=20 ko đc thực thi

counter = 1modeType = 1if counter != 0:

if counter == 1:# get the data

studentInfo = db.reference(f'Students/{id}').get()#print(studentInfo)

# get the Image from the storage

blob = bucket.get_blob(f'imagesencode/{id}.jpg')

array = np.frombuffer(blob.download_as_string(), np.uint8) imgStudent = cv2.imdecode(array,cv2.COLOR_BGRA2BGR) #update data of attendance

datetime.strptime(studentInfo['last_attendance_time'], "%Y-%m-%d%H:%M:%S")

secondsElapsed =(datetime.now()-datetimeObject).total_seconds() #print(secondsElapsed)

Trang 25

else:counter = 0modeType = 3

imgBackground[44:44 + 633, 808:808 + 414] =imgModeList[modeType]

if modeType != 3: if counter <= 10:

imgBackground[44:44 + 633, 808:808 + 414] =imgModeList[modeType]

cv2.putText(imgBackground, str(studentInfo['total_attendance']),(861,125),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1)

cv2.putText(imgBackground, str(studentInfo['major']),

(1000, 550), cv2.FONT_HERSHEY_COMPLEX, 0.5,(255, 255, 255), 1)

cv2.putText(imgBackground, str(id),

(1006, 493), cv2.FONT_HERSHEY_COMPLEX, 0.5,(255, 255, 255), 1)

cv2.putText(imgBackground, str(studentInfo['Class']),

(910, 625), cv2.FONT_HERSHEY_COMPLEX, 0.5,(100,100,100), 1)

cv2.putText(imgBackground, str(studentInfo['total_attendance']),

Trang 26

Trang 25(1025, 625), cv2.FONT_HERSHEY_COMPLEX, 0.6,(100,100,100), 1)

cv2.putText(imgBackground, str(datetime.now().strftime("%H:%M:%S")),

(1125,625), cv2.FONT_HERSHEY_COMPLEX, 0.4,(100,100,100), 1)

(w,h), _ = cv2.getTextSize(studentInfo['name'],cv2.FONT_HERSHEY_COMPLEX, 1, 1)

#(width, height), baseline :baseline: vị trí của baseline trong vănbản.

# Baseline là đường thẳng ở phía dưới của các chữ cái.offset = (414 - w)//2

(808 + offset, 445), cv2.FONT_HERSHEY_COMPLEX,1, (50, 50, 50), 1)

imgBackground[175:175+216,909:909+216] = imgStudent

if 10 < counter <= 20:modeType = 2

imgBackground[44:44 + 633, 808:808 + 414] =imgModeList[modeType]

if counter>=20:counter = 0modeType = 0 studentInfo = []

Trang 27

imgStudent = []

imgBackground[44:44 + 633, 808:808 + 414] =imgModeList[modeType]

counter += 1else:

modeType = 0counter = 0

cv2.imshow("Face Attendance", imgBackground)if cv2.waitKey(1) == ord("s"):

break cv2.release()

cv2.destroyAllWindows()

Trang 28

Trang 27

MỤC LỤC

BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 1

PHÂN CÔNG NHIỆM VỤ 2

3.2 Hướng phát triển đề tài trong tương lai 11

CHƯƠNG 4: TÀI LIỆU THAM KHẢO 12

CHƯƠNG 5: PHỤ LỤC 13

Ngày đăng: 11/06/2024, 17:52

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w