Để thực hiện tốt công việc nhận dạng và phân tích này, đòi hỏi người nghiên cứu phải am hiểu nhiều lĩnh vực trong đó đặc biệt là các lĩnh vực liên quan tới cảm biến, các hệ thống xử lý ả
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN MÔN HỌC
NHẬN DẠNG ĐỐI TƯỢNG BẰNG KHUNG ẢNH
TRONG VIDEO
Giảng viên giảng dạy: Hà Minh Tân
Sinh viên thực hiện : Trần Đinh Hồng Hưng
Trang 2LỜI CẢM ƠN
Trường Đại học Nguyễn Tất Thành không chỉ là một ngôi trường nơi nhận được kiến thức chất lượng và sự hỗ trợ tận tâm từ đội ngũ giảng dạy, mà còn là một môi trường thúc đẩy sự sáng tạo và phát triển cá nhân Đây là nơi đã trang bị cho chúng em những kiến thức nền tảng và kỹ năng quan trọng để thực hiện nghiên cứu này.
Và em cũng muốn cảm ơn các anh chị khoá trên đã tận tình giúp đỡ em trong việc nghiên cứu và thực hiện đề tài này
Trân trọng cảm ơn
Sinh viên thực hiện
Trần Đinh Hồng Hưng 2
Trang 3TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
TRUNG TÂM KHẢO THÍ
KỲ THI KẾT THÚC HỌC PHẦN HỌC KỲ III NĂM HỌC 2022 - 2023
PHIẾU CHẤM THI TIỂU LUẬN/ĐỒ ÁN
Môn thi: Xử lý ngôn ngữ tự nhiên Lớp học phần: 20DTH1A
Nhóm sinh viên thực hiện:
1.Trần Đinh Hồng Hưng Tham gia đóng góp: 100%
2 Tham gia đóng góp:
3 .Tham gia đóng góp:
4 Tham gia đóng góp:
5 Tham gia đóng góp:
6 Tham gia đóng góp:
7 Tham gia đóng góp:
8 Tham gia đóng góp:
Ngày thi: 25/08/2023 Phòng thi: L.401
Đề tài tiểu luận/báo cáo của sinh viên: Sử dụng Roberta và LSTM vào bài toán phân tích cảm xúc
Phần đánh giá của giảng viên (căn cứ trên thang rubrics của môn học):
Tiêu chí (theo
Điểm tối đa
Điểm đạt được
Cấu trúc của
báo cáo
Nội dung
- Các nội
dung thành
phần
- Lập luận
- Kết luận
Trình bày
4
Trang 4
BM-ChT-TỔNG ĐIỂM
Giảng viên chấm thi
(ký, ghi rõ họ tên)
5
Trang 5LỜI MỞ ĐẦU
Trong những năm gần đây, xử lý hình ảnh (image processing) đã đạt được nhiều thành tựu và tiến bộ vượt bậc Trong đó, nhận dạng và phân loại hình ảnh là một trong những lĩnh vực được theo đuổi một cách tích cực nhất Ý tưởng cốt lõi của việc nhận dạng và phân loại hình ảnh là phân tích ảnh từ các dữ liệu thu được bởi các cảm biến hình ảnh như camera, Webcam… Nhờ các hệ thống xử lý ảnh, con người đã giảm được khối lượng công việc cũng như tăng sự chính xác trong việc đưa ra các quyết định liên quan đến xử lý hình ảnh trên nhiều lĩnh vực: quân sự và quốc phòng, các hệ thống kỹ nghệ hoá sinh, giải phẫu, các hệ thống giao thông thông minh, robotics, các hệ thống an ninh, dây chuyền sản xuất tự động… Nhận dạng và phân tích ảnh là một lĩnh vực liên ngành Để thực hiện tốt công việc nhận dạng và phân tích này, đòi hỏi người nghiên cứu phải am hiểu nhiều lĩnh vực trong đó đặc biệt là các lĩnh vực liên quan tới cảm biến, các hệ thống xử lý ảnh, các giải thuật xử lý hình ảnh/tín hiệu, phần cứng và phần mềm, các hệ thống tích hợp…
Và em sử dụng trương trình PYCHARM để chạy trương trình cùng với thư viện numpy, opencv-python và thuật toán YOLOv3
Bởi thời gian hạn hẹp cũng và nhiều hạn chế về kiến thức trong lĩnh vực hết sức mới mẻ này, em mong báo cáo này sẽ trình bày một sự hiểu biết tương đối về
xử lý ảnh nói chung và nhận dạng vật thể nói riêng Đồng thời, hy vọng rằng trong một tương lai không xa sẽ có điều kiện ứng dụng những nghiên cứu đã đạt được trong báo cáo này vào thực tế sản xuất.
6
Trang 6NHẬN XÉT CỦA GIẢNG VIÊN GIẢNG DẠY
Tp.HCM, Ngày tháng năm 2023
Giảng viên giảng dạy
(Ký tên và ghi rõ họ tên)
7
Trang 7MỤC LỤC
Catalog
LỜI CẢM ƠN 1
LỜI MỞ ĐẦU 3
NHẬN XÉT CỦA GIẢNG VIÊN GIẢNG DẠY 4
DANH MỤC CÁC TỪ VIẾT TẮT 6
CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI 6
1 Giới thiệu đề tài 7
2 Lý do chọn đề tài 7
3 Mục tiêu của đề tài 7
4 Công nghệ áp dụng 7
CHƯƠNG II CƠ SỞ LÝ THUYẾT 7
1.1 Giới thiệu YOLOv3 8
1.2 Cách thức hoạt động của YOLOv3 9
CHƯƠNG III XÂY DỰNG MÔ HÌNH 11
1 Load model YOLOv3 11
Đầu tiên, chương trình tải mô hình YOLOv3 bằng hàm cv2.dnn.readNet(), với các tham số là đường dẫn đến tệp trọng số (yolov3-tiny.weights) và tệp cấu hình (yolov3-tiny.cfg) Mô hình này được huấn luyện để phát hiện các đối tượng trong ảnh hoặc video 11
2 Ghi và lấy dữ liệu từ webcam 12
CHƯƠNG V KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 20
1 Kết luận 20
2 Hướng phát triển 20
Tài liệu tham khảo 21
1 OpenCV tại trang chủ của nó: https://opencv.org/ 22
2 Mô hình YOLO tại trang chủ của nó: https://pjreddie.com/darknet/yolo/ 22
3 Web tham khảo tài liệu:https://viso.ai/deep-learning/yolov3-overview/ 22
9
Trang 9CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI
1 Giới thiệu đề tài
Lĩnh vực xử lý ảnh và thị giác máy đang ngày càng được nghiên cứu và ứng dụng trong nhiều lĩnh vực của cuộc sống và sản xuất nhờ vào sự phát triển mạnh mẽ của các hệ thống máy tính Từ thực tế đó việc xây dựng các chương trình hoạt động cho các hệ thống phân loại sản phẩm là thiết yếu, đặc biệt là các hệ thống phân loại sản phẩm theo hình dạng
3 Mục tiêu của đề tài
Có thể xác định được vật thể trong video và gắn tên của vật đó cùng với khung hình
4 Công nghệ áp dụng
thuật toán YOLOv3 để nhận diện vật thể
1
Trang 10CHƯƠNG II CƠ SỞ LÝ THUYẾT
1 Trình các khái niệm liên quan về lý thuyết áp dụng
1.1 Giới thiệu YOLOv3
YOLOv3 (Bạn chỉ nhìn một lần, Phiên bản 3) là thuật toán phát hiện đối tượng theo thời gian thực nhằm xác định các đối tượng cụ thể trong video, nguồn cấp dữ liệu trực tiếp hoặc hình ảnh
Thuật toán học máy YOLO sử dụng các tính năng được học bởi mạng
nơ ron tích chập sâu để phát hiện một đối tượng Phiên bản 1-3 của YOLO được tạo bởi Joseph Redmon và Ali Farhadi và phiên bản thứ
ba của thuật toán học máy YOLO là phiên bản chính xác hơn của thuậttoán ML gốc
Phiên bản đầu tiên của YOLO được tạo ra vào năm 2016 và phiên bản
3, được thảo luận rộng rãi trong bài viết này, được tạo ra hai năm sau
đó vào năm 2018 YOLOv3 là phiên bản cải tiến của YOLO và YOLOv2
YOLO được triển khai bằng thư viện học sâu Keras hoặc OpenCV Người kế nhiệm chính thức của YOLOv3 là YOLOv4 và YOLOv7 mới được phát hành (2022), đánh dấu máy dò vật thể hiện đại nhất vàonăm 2023
3
Trang 11Hệ thống phân loại đối tượng được các chương trình Trí tuệ nhân tạo (AI) sử dụng để nhận biết các đối tượng cụ thể trong một lớp là đối tượng quan tâm Các hệ thống sắp xếp các đối tượng trong hình ảnh thành các nhóm trong đó các đối tượng có đặc điểm tương tự được đặt cùng nhau, trong khi các đối tượng khác bị bỏ qua trừ khi được lập trình để làm khác.
1.2 Cách thức hoạt động của YOLOv3
YOLO là Mạng thần kinh chuyển đổi (CNN) để thực hiện phát hiện đối tượng trong thời gian thực
CNN là các hệ thống dựa trên bộ phân loại có thể xử lý hình ảnh đầu vào dưới dạng mảng dữ liệu có cấu trúc và nhận dạng các mẫu giữa chúng
YOLO có ưu điểm là nhanh hơn nhiều so với các mạng khác mà vẫn duy trì được độ chính xác Nó cho phép mô hình xem toàn bộ hình ảnhtại thời điểm thử nghiệm, do đó các dự đoán của nó được thông báo dựa trên bối cảnh chung trong hình ảnh
YOLO và các thuật toán mạng thần kinh tích chập khác “chấm điểm” các vùng dựa trên sự tương đồng của chúng với các lớp được xác định
4
Trang 12trước Các khu vực có điểm cao được ghi nhận là sự phát hiện tích cực
về bất kỳ lớp nào mà chúng xác định rõ ràng nhất
Ví dụ: trong nguồn cấp dữ liệu giao thông trực tiếp, YOLO có thể được sử dụng để phát hiện các loại phương tiện khác nhau tùy thuộc vào khu vực nào của video có điểm cao so với các loại phương tiện được xác định trước
Trong trường hợp nhận dạng đối tượng trong video, YOLOv3 có thể theo dõi các đối tượng trên các khung hình bằng cách sử dụng kỹ thuậtgọi là "sắp xếp sâu" (Theo dõi trực tuyến đơn giản và thời gian thực)
Kỹ thuật này sử dụng kết hợp các thuật toán theo dõi và phát hiện đối tượng để theo dõi các đối tượng theo thời gian
Giải thuật YOLOv3 tách một hình ảnh thành một lưới và mỗi ô lưới
dự đoán một số lượng hộp giới hạn (còn được gọi là anchor box) xung quanh các đối tượng được phân loại trước Mỗi hộp giới hạn có điểm tin cậy tương ứng về độ chính xác của dự đoán và chỉ phát hiện một đối tượng trên mỗi hộp giới hạn
5
Trang 13Các hộp giới hạn được tạo ra bằng cách gom cụm các kích thước của các hộp thực tế từ tập dữ liệu ban đầu để tìm các hình dạng và kích thước phổ been nhất YOLO khác với các hệ thống như R-CNN và Fast R-CNN bởi vì nó được huấn luyện để thực hiện phân loại và hồi quy hộp giới hạn cùng một lúc.
6
Trang 14CHƯƠNG III XÂY DỰNG MÔ HÌNH
1 Load model YOLOv3
Đầu tiên, chương trình tải mô hình YOLOv3 bằng hàm
cv2.dnn.readNet(), với các tham số là đường dẫn đến tệp trọng số (yolov3-tiny.weights) và tệp cấu hình (yolov3-tiny.cfg) Mô hình này được huấn luyện để phát hiện các đối tượng trong ảnh hoặc video
Tiếp theo, chương trình đọc danh sách các lớp được định nghĩa trong tệp coco.names bằng hàm open() và readlines(), sau đó lưu vào biến classes Mỗi lớp tương ứng với một đối tượng cần phát hiện
Sau đó, chương trình lấy danh sách các tên lớp của mô hình bằng hàm net.getLayerNames(), và lấy danh sách các lớp đầu ra không kết nối
7
Trang 15bằng hàm net.getUnconnectedOutLayers() Các lớp này sẽ được sử dụng để tính toán các dự đoán của mô hình.
Cuối cùng, chương trình khởi tạo một mảng màu ngẫu nhiên để sử dụng cho việc vẽ hộp giới hạn xung quanh các đối tượng được phát hiện Kích thước của mảng màu phụ thuộc vào số lượng lớp được địnhnghĩa trong tệp coco.names
2 Ghi và lấy dữ liệu từ webcam
Đầu tiên, chương trình khởi tạo một đối tượng VideoCapture của OpenCV với tham số là số 0, để mở kết nối với webcam được cài đặt trên máy tính Nếu muốn đọc video từ một tệp, ta chỉ cần thay số 0 bằng tên tệp
8
Trang 16Tiếp theo, chương trình khởi tạo một font để hiển thị lên khung hình bằng biến cv2.FONT_HERSHEY_SIMPLEX Chương trình cũng khởitạo biến starting_time để lưu thời điểm bắt đầu chạy chương trình và biến frame_id để đếm số khung hình đã xử lý.
Trong vòng lặp, chương trình đọc khung hình từ webcam hoặc video bằng phương thức read() của đối tượng VideoCapture Kết quả trả về gồm hai giá trị, giá trị đầu tiên là một biến boolean cho biết việc đọc khung hình có thành công hay không, giá trị thứ hai là một mảng NumPy chứa dữ liệu khung hình
Sau đó, chương trình tăng biến frame_id lên 1 và tính toán kích thước của khung hình bằng thuộc tính shape của mảng khung hình Kích thước này sẽ được sử dụng trong việc tính toán các hộp giới hạn và vẽ chúng lên khung hình
9
Trang 173 Xử lý hình ảnh nhận được
Đầu tiên, chương trình tạo một blob từ khung hình hiện tại bằng hàm cv2.dnn.blobFromImage() Blob là một khối dữ liệu đầu vào cho mô hình YOLOv3, được chuẩn hóa và chuyển đổi từ định dạng khung hình ban đầu sang định dạng mà mô hình có thể sử dụng được
Trong đó, tham số đầu tiên là khung hình hiện tại, tham số thứ hai là tỉ
lệ chuẩn hóa, tham số thứ ba là kích thước của blob, tham số thứ tư là giá trị trung bình của các kênh màu và tham số thứ năm là cờ để xác định xem có cắt ảnh thành các phần nhỏ hay không
Tiếp theo, chương trình đưa blob vào mô hình YOLOv3 bằng hàm net.setInput() Sau đó, chương trình tính toán các dự đoán của mô hìnhbằng hàm net.forward(), với các tham số là danh sách các lớp đầu ra không kết nối Kết quả trả về gồm một danh sách các tensor chứa thông tin về các đối tượng được phát hiện trong khung hình
10
Trang 184 xử lý các dự đoán của mô hình để trích xuất thông tin
Đầu tiên, chương trình khởi tạo ba danh sách rỗng: class_ids,
confidences và boxes Các danh sách này sẽ được sử dụng để lưu thông tin về lớp của đối tượng, độ tin cậy của dự đoán và vị trí của hộpgiới hạn xung quanh đối tượng
Sau đó, chương trình bắt đầu vòng lặp qua danh sách các tensor outs, chứa thông tin về các đối tượng được phát hiện trong khung hình Trong mỗi tensor out, chương trình tiếp tục vòng lặp qua từng phần tử detection
11
Trang 19Trong vòng lặp này, chương trình trích xuất điểm số (scores) từ phần
tử detection bằng cách lấy 5 phần tử cuối cùng của nó Điểm số này biểu thị độ tin cậy của mô hình cho mỗi lớp đối tượng
Tiếp theo, chương trình tìm ra chỉ số (class_id) của lớp có điểm số cao nhất bằng hàm np.argmax() Điều này giúp xác định lớp của đối tượng được phát hiện
Sau đó, chương trình lấy điểm số tương ứng với lớp đã xác định (confidence) và kiểm tra xem điểm số này có lớn hơn 0.1 hay không Nếu có, tức là mô hình có độ tin cậy cao về việc phát hiện đối tượng thuộc lớp này, chương trình tiếp tục xử lý thông tin về đối tượng này
5 tính toán tọa độ và kích thước của các hộp xung quanh các vật thể được nhận dạng trong video
Cụ thể, mô hình YOLO trả về một danh sách các detection, mỗi detection được biểu diễn dưới dạng một vector gồm 85 phần tử đã có sẵn của YOLO
12
Trang 20Các phần tử này bao gồm tọa độ và kích thước của bounding box, điểm số (confidence score) của detection và xác suất của các lớp được phát hiện.
Đoạn code trên sử dụng các phần tử đầu tiên của vector detection để tính toán tọa độ và kích thước của bounding box Cụ thể, detection[0]
và detection[1] lần lượt là tọa độ tâm của bounding box trên trục x và
y, được tính dựa trên chiều rộng và chiều cao của khung hình (frame) detection[2] và detection[3] lần lượt là chiều rộng và chiều cao của bounding box, cũng được tính dựa trên chiều rộng và chiều cao của khung hình
13
Trang 216 Xử lý và gắn hộpcho vật thể phát hiện được
Đầu tiên, chương trình tính toán tọa độ của tâm (center_x, center_y) của hộp giới hạn và chiều rộng (w) và chiều cao (h) của nó Điều này được thực hiện bằng cách lấy thông tin từ phần tử detection trong tensor outs
Sau đó, chương trình tính toán tọa độ của góc trái trên (x, y) của hộp giới hạn bằng cách lấy tọa độ của tâm và kích thước của hộp giới hạn
Tiếp theo, chương trình thêm thông tin về vị trí, độ tin cậy và lớp của đối tượng vào các danh sách boxes, confidences và class_ids Thông tin về vị trí được lưu trữ dưới dạng một danh sách gồm tọa độ x, y, w
và h của hộp giới hạn Độ tin cậy được lưu trữ dưới dạng một số thực
và lớp được lưu trữ dưới dạng một số nguyên biểu thị chỉ số của lớp trong danh sách các lớp
14
Trang 227 Hiển thị kết quả của giải thuật ra khung hình
Đầu tiên, chương trình lặp qua từng phần tử trong danh sách boxes để
vẽ hộp giới hạn xung quanh các đối tượng trên khung hình Nếu phần
tử hiện tại có chỉ số nằm trong danh sách các chỉ số được giữ lại (indexes), chương trình sẽ lấy thông tin về vị trí, lớp và độ tin cậy của đối tượng từ các danh sách boxes, class_ids và confidences Sau đó, chương trình vẽ một hộp giới hạn xung quanh đối tượng bằng cách sử
15
Trang 23dụng hàm cv2.rectangle() và hiển thị nhãn lớp và độ tin cậy bằng cách
sử dụng hàm cv2.putText()
Tiếp theo, chương trình tính toán thời gian đã trôi qua từ khi bắt đầu
xử lý (starting_time) đến hiện tại và tính toán số khung hình trên giây (FPS) Sau đó, chương trình hiển thị thông tin về FPS và hướng dẫn sửdụng trên khung hình
Cuối cùng, chương trình sử dụng hàm cv2.imshow() để hiển thị khung hình và chờ người dùng nhấn phím để thoát Nếu phím được nhấn là phím Esc (key == 27), chương trình sẽ dừng việc ghi hình và kết thúc
16
Trang 248 Kết quả thực nghiệm
Trang 25CHƯƠNG V KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1. Kết luận
Báo cáo mô tả chương trình xử lý ảnh nhận dạng và phân lại chitiết theo hình dạng sử dụng YOLOv3 và opencv-python Xây dựngđược một chương trình nhận dạng vật thể
Tiến hành nhận dạng trên nhiều mẫu thử khác nhau : nhiều hìnhđơn lẻ, luôn nhận biết chính xác đối tượng chi tiết xử lý với bất kỳ cácgóc quay kích thước to nhỏ khác nhau
Tiếp thu được nhiều kiến thức mới kiến thức bổ ích về xử lý ảnh Trong quá trình thực hiện các thí nghiệm và chạy chương trình, donhiều yếu tố khách quan cũng như chủ quan tác động nên kết quả thuđược chưa phải là lý tưởng Các yếu tố này bao gồm:
* Chất lượng của camera dùng để tiến hành thí nghiệm không phải
là cao Do đó khi ta thực hiện bắt ảnh thường bị nhiễu và chấtlượng hình ảnh không tốt
* Điều kiện tiến hành thí nghiệm không lý tưởng: điều kiện về độsáng, độ chói, góc quay…
* Các bước tiền xử lý đang còn đơn giản do đó chưa hỗ trợ tốt choquá trình xử lý ảnh
* Thuật toán giải quyết vấn đề chưa phải là lý tưởng dẫn đến việc
xử lý chưa đạt được tối ưu
18