Dùng ngôn ngữ Python lập trình trên phầm mềm pycharm sử dụng thuận toán kNN và thư viện YOLO v3 để lập trình hướng đối tượng, nhận diện đối tượng và bám đối tượng theo thời gian thực. Dành cho lĩnh vực xử lí ảnh, thị giác máy tính.
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH KHOA CƠNG NGHỆ ĐIỆN TỬ NGHIÊN CỨU CÔNG NGHỆ NHẬN DIỆN ĐỐI TƯỢNG VÀ BÁM ĐỐI TƯỢNG THEO THỜI GIAN THỰC Khoa: Công nghệ điện tử Bộ môn: Điện tử - Tự động Chuyên ngành: Hệ thống thơng minh Lớp: DHDTMT13B THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 MỤC LỤC MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC TỪ VIẾT TẮT MỞ ĐẦU .6 CHƯƠNG 1.1 TỔNG QUAN VỀ CÔNG NGHỆ NHẬN DIỆN Giới thiệu nhận diện đối tượng 1.1.1 Thực trạng nhận diện đối tượng 1.1.2 Tương lai công nghệ nhận diện đối tượng .8 1.2 Nhận diện đối tượng so với phát đối tượng 1.3 Các công nghệ nhận diện đối tượng 1.3.1 Nhận diện đối tượng cách sử dụng Deep learning(học sâu) 1.3.2 Nhận diện đối tượng cách sử dụng Machine learning(học máy) 10 1.3.3 So sánh Machine Learning với Deep learning 11 CHƯƠNG 2.1 CƠ SỞ LÝ THUYẾT .12 Tổng quan ngôn ngữ Python phầm mềm lập trình PyCharm 12 2.1.1 Ngơn ngữ lập trình hướng đối tượng Python 12 2.1.2 Phầm mềm lập trình PyCharm 13 2.2 Giới thiệu thuận toán k-Nearest Neighbors (kNN) 14 2.2.1 Phương pháp rút trích đặc trưng SIFT 14 2.2.2 Hướng dẫn rút trích ảnh theo đặc trưng SIFT .15 2.3 Giới thiệu phương pháp YOLO v3 16 2.3.1 YOLO v3 có trội kNN ? 16 2.3.2 Đối tượng nhận dạng YOLO v3 .17 2.3.3 Hướng dẫn nhận diện đối tượng YOLO v3 giải thích code 18 CHƯƠNG PHÂN TÍCH VÀ CHẠY CHƯƠNG TRÌNH MƠ PHỎNG 30 3.1 Yêu cầu đạt đề tài 30 3.2 Lưu đồ giải thuật chương trình .31 3.3 Hình ảnh chạy mô thực tế 32 CHƯƠNG 4.1 KẾT LUẬN VÀ ĐÁNH GIÁ 36 Ưu điểm nhược điểm 36 4.1.1 Ưu điểm 36 4.1.2 Nhược điểm 36 4.2 Hướng phát triển đề tài 37 TÀI LIỆU THAM KHẢO 38 PHỤ LỤC(code mô phỏng) 39 DANH MỤC HÌNH ẢNH Hình 1.1 Hình ảnh sau nhận diện đối tượng Hình 1.2 Cách thức hoạt động Deep learning Machine learning .11 Hình 2.1 Ngơn ngữ lập trình Python 12 Hình 2.2 Phầm mềm lập trình PyCharm 13 Hình 2.3 Hình ảnh chưa trích rút đặc trưng SIFT 15 Hình 2.4 Hình ảnh sau trích rút đặc trưng SIFT 15 Hình 2.5 Nhóm đối tượng di chuyển trước nhận dạng 18 Hình 2.6 Nhóm đối tượng phương tiện sau nhận diện 19 Hình 2.7 Nhóm đối tượng động vật trước nhận diện .20 Hình 2.8 Nhóm đối tượng động vật sau nhận diện .21 Hình 2.9 Nhóm đối tượng đồ vật trước nhận diện 22 Hình 2.10 Nhóm đối tượng đồ vật sau nhận diện 23 Hình 2.11 Nhóm đối tượng đồ ăn, trái trước nhận diện 24 Hình 2.12 Nhóm đối tượng đồ ăn, trái sau nhận diện 25 Hình 3.1: Lưu đồ giải thuật 31 Hình 3.2: Nhậm diện đối tượng gấu bơng 32 Hình 3.3: Nhận diện đối tượng diều .33 Hình 3.4: Nhận diện đối tượng hotdog 33 Hình 3.5: Nhận diện đối tượng bàn phím chuột .34 Hình 3.6: Nhận diện nhiều đối tượng khung ảnh 35 Hình 3.7: Nhận diện đối tượng có mật độ đông 35 DANH MỤC TỪ VIẾT TẮT DL Deep learning kNN k-Nearest Neighbors ML Machine learning KLTN Khoá luận tốt nghiệp MỞ ĐẦU Trong thời đại công nghiệp 4.0, giới không ngừng phát triển ngày đạt nhiều thành tựu lĩnh vực Và lĩnh vực chuyên ngành em lĩnh vực coi trọng tâm cách mạng cơng nghệp lần lĩnh vực “Trí tuệ nhân tạo” chuyên ngành “Hệ thống thông minh” Để theo kịp với tốc độ phát triển này, em học tập nghiên cứu đề tài “Nghiên cứu công nghệ nhận diện đối tượng bám đối tượng theo thời gian thực” nhằm ứng dụng vào lĩnh vực sống, xe tự hành, phân loại hàng hóa, kiểm tra hàng tồn kho, … Mục tiêu đề tài phát đối tượng bám đối tượng theo thời gian thực Thực mô lap top, máy tính Đối tượng nghiên cứu: tất đối tượng, vật thể xung quanh sống thường ngày người Ý nghĩa đề tài sở để phát triển ngành liên quan đến “Trí tuệ nhân tạo” trao dồi thêm kiến thức xử lí ảnh, áp dụng kiến thức học vào thực tế CHƯƠNG 1.1 TỔNG QUAN VỀ CÔNG NGHỆ NHẬN DIỆN Giới thiệu nhận diện đối tượng Nhận diện đối tượng kỹ thuật thị giác máy tính để xác định đối tượng hình ảnh video Nhận diện đối tượng đầu thuật tốn học máy (Machine Learing) học sâu (Deep Learing) Khi người nhìn vào ảnh xem đoạn video, dễ dàng phát người, đồ vật, cảnh chi tiết trực quan Mục đích để dạy máy tính làm tự nhiên đến với người: đạt mức độ hiểu hình ảnh chứa Nhận diện đối tượng công nghệ quan trọng đằng sau ô tô không người lái, cho phép chúng nhận biển báo dừng để phân biệt người với cột đèn Nó hữu ích nhiều ứng dụng khác xác định bệnh phân tích sinh học, kiểm tra cơng nghiệp thị giác robot Hình 1.1 Hình ảnh sau nhận diện đối tượng 1.1.1 Thực trạng nhận diện đối tượng Trên giới phương pháp nhận diện đối tượng sử dụng rộng rãi nhiều lĩnh vực sống, góp phần làm đa dạng hóa nhu cầu sử dụng người Nhờ sử dụng phương pháp mang đến nhiều tiện nghi cho người sử dụng Giúp nhà máy giảm bớt nhân công, điểm mạnh phương pháp máy móc hoạt động liên tục, nên nhiều doanh nghiệp hướng tới phát triển Còn Việt Nam phương pháp chưa sử dụng rộng rãi, giảng dạy trường đại học, cao đẳng, nghề, … Chưa sử dụng rộng rãi cịn nhiều khó khăn Các doanh nghiệp chưa mạnh tay đầu tư vào cơng nghệ cịn nhiều vướng mắc tới pháp lý Hiện nay, có tập đồn Vinfast nghiên cứu đưa cơng nghệ vào xe Đây bước khởi đầu thuận lợi cho công nghệ nhận diện đối tượng thâm nhập vào thị trường Việt Nam 1.1.2 Tương lai công nghệ nhận diện đối tượng Với lợi ích, thuận tiện mà công nghệ mang lại cho sống người, kì vọng vào tương lai công nghệ nhận diện Đi kèm lợi ích đó, có hạn chế theo Đó nhu cầu việc làm bị giảm bớt đa số cơng nghệ sử dụng máy móc, khơng cần đến cơng nhân nhiều Kèm theo vấn đề pháp lý, Việt Nam chưa có điều luật sử dụng Trí tuệ nhân tạo (AI) Tuy nhiên, hy vọng tương lai khơng xa với cơng nghệ Vì giới giai đoạn công nghiệp 4.0 Những công nghệ mẻ hứa hẹn mang đến ngành nghề, nhu cầu việc làm mới, … cho 1.2 Nhận diện đối tượng so với phát đối tượng Phát đối tượng nhận diện đối tượng kỹ thuật tương tự để xác định đối tượng, chúng khác cách thực Phát đối tượng trình tìm kiếm thể đối tượng ảnh Trong trường hợp học sâu, phát đối tượng tập hợp nhận diện đối tượng, nơi đối tượng khơng xác định mà cịn nằm hình ảnh Điều cho phép nhiều đối tượng xác định định vị hình ảnh 1.3 Các công nghệ nhận diện đối tượng 1.3.1 Nhận diện đối tượng cách sử dụng Deep learning(học sâu) Kỹ thuật học sâu trở thành phương pháp phổ biến để thực nhận dạng đối tượng Các mơ hình học sâu chẳng hạn mạng nơ-ron tích tụ CNN, sử dụng để tự động tìm hiểu tính vốn có đối tượng nhằm xác định đối tượng Ví dụ: CNN học cách xác định khác biệt mèo chó cách phân tích hàng nghìn hình ảnh huấn luyện tìm hiểu đặc điểm khiến chó mèo khác Có hai cách tiếp cận để thực nhận dạng đối tượng cách sử dụng học sâu: • Đào tạo mơ hình từ đầu: Để đào tạo mạng sâu từ đầu, bạn thu thập tập liệu có nhãn lớn thiết kế kiến trúc mạng tìm hiểu tính xây dựng mơ hình Kết ấn tượng, cách tiếp cận yêu cầu lượng lớn liệu đào tạo bạn cần thiết lập lớp trọng số CNN • Sử dụng mơ hình học sâu đào tạo trước: Hầu hết ứng dụng học sâu sử dụng phương pháp học tập chuyển giao, quy trình bao gồm việc tinh chỉnh mơ hình đào tạo trước Bạn bắt đầu với mạng có, chẳng hạn AlexNet GoogLeNet cấp liệu chứa lớp chưa biết trước Phương pháp tốn thời gian cung cấp kết nhanh mơ hình đào tạo hàng nghìn hàng triệu hình ảnh Học sâu mang lại mức độ xác cao yêu cầu lượng lớn liệu để đưa dự đốn xác 1.3.2 Nhận diện đối tượng cách sử dụng Machine learning(học máy) Các kỹ thuật học máy phổ biến để nhận dạng đối tượng cung cấp cách tiếp cận khác với học sâu Các ví dụ phổ biến kỹ thuật học máy là: • Trích xuất tính HOG với mơ hình học máy SVM • Mơ hình Bag-of-words với tính SURF MSER • Thuật tốn Viola-Jones, sử dụng để nhận dạng nhiều đối tượng, bao gồm khn mặt thân Quy trình công việc học máy: Để thực nhận dạng đối tượng cách sử dụng phương pháp học máy tiêu chuẩn, bạn bắt đầu với sưu tập hình ảnh (hoặc video) chọn tính có liên quan hình ảnh Ví dụ: thuật tốn trích xuất đối tượng trích xuất đối tượng địa lý cạnh góc sử dụng để phân biệt lớp liệu bạn Các tính thêm vào mơ hình học máy, mơ hình tách tính thành danh mục riêng biệt chúng sau sử dụng thơng tin phân tích phân loại đối tượng Bạn sử dụng nhiều thuật toán học máy phương pháp trích xuất tính năng, đưa nhiều cách kết hợp để tạo mơ hình nhận dạng đối tượng xác 10 output_layers_names = net.getUnconnectedOutLayersNames() layersOutputs = net.forward(output_layers_names) boxes = [] confidences = [] class_ids = [] #setup ve khung hinh va hien ten doi tuong for output in layersOutputs: for detection in output: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) x = int(center_x - w / 2) y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append((float(confidence))) class_ids.append(class_id) indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.5) font = cv2.FONT_HERSHEY_PLAIN if len(indexes) > 0: for i in indexes.flatten(): x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) confidence = str(round(confidences[i], 2)) cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2) cv2.putText(img, label + "" + confidence, (x, y + 20), font, 2, (0, 255, 255), 2) #ham xuat hinh anh de quan sat cv2.imshow('frame', img) #tam dung hinh anh lại de quan sat cv2.waitKey(0) 27 Trên vi dụ hướng dẫn nhận diện đối tượng cho ảnh tĩnh Đối với nhận diện đối tượng theo thời gian thực thêm hàm đọc camera thay đầu vào đoạn video sử dụng camera lap top, webcam máy bàn Dưới mã nguồn code mô nhận diện đối tượng theo thời gian thực sử dụng camera lap top làm nguồn liệu import cv2 import numpy as np # Load Yolo net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") classes = [] with open("dulieu.names", "r") as f: classes = f.read().splitlines() cap = cv2.VideoCapture(0) #img = cv2.imread('person.jpg') while True: _, img = cap.read() height, width, _ = img.shape blob = cv2.dnn.blobFromImage(img, 1/255, (416,416), (0,0,0), swapRB=True, crop=False) net.setInput(blob) output_layers_names = net.getUnconnectedOutLayersNames() layersOutputs = net.forward(output_layers_names) boxes = [] confidences = [] 28 class_ids = [] for output in layersOutputs: for detection in output: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0]*width) center_y = int(detection[1]*height) w = int(detection[2]*width) h = int(detection[3]*height) x = int(center_x - w/2) y = int(center_y - h/2) boxes.append([x, y, w, h]) confidences.append((float(confidence))) class_ids.append(class_id) indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.5) font = cv2.FONT_HERSHEY_PLAIN if len(indexes) > 0: for i in indexes.flatten(): x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) confidence = str(round(confidences[i], 2)) cv2.rectangle(img, (x, y), (x+w,y+h), (255, 255, 0), 2) cv2.putText(img, label + "" + confidence, (x, y+20), font, 2, (0,255,255), 2) cv2.imshow('frame', img) cv2.waitKey(0) 29 CHƯƠNG PHÂN TÍCH VÀ CHẠY CHƯƠNG TRÌNH MƠ PHỎNG 3.1 u cầu đạt đề tài Sau thời gian tìm hiểu, nghiên cứu đề tài “Nghiên cứu công nghệ nhận diện đối tượng bám đối tượng theo thời gian thực” em đạt yêu cầu sau: • Nhận diện đối tượng riêng lẻ đối tượng bị đè chồng lên • Nhận diện nhiều nhóm đối tượng lúc • Khoanh vùng đốn tên đối tượng có khung hình • Nhận diện đối tượng theo thời gian thực bám theo đối tượng Tuy nhiên q trình nhận diện, chương trình cịn chưa hồn hảo, gặp lỗi nhận diện số đối tượng giống bị nhầm Ví dụ nhầm bàn ăn với ván, … 30 3.2 Lưu đồ giải thuật chương trình Hình 3.1: Lưu đồ giải thuật 31 3.3 Hình ảnh chạy mơ thực tế Hình 3.2: Nhậm diện đối tượng gấu bơng 32 Hình 3.3: Nhận diện đối tượng diều Hình 3.4: Nhận diện đối tượng hotdog 33 Hình 3.5: Nhận diện đối tượng bàn phím chuột 34 Hình 3.6: Nhận diện nhiều đối tượng khung ảnh Hình 3.7: Nhận diện đối tượng có mật độ đơng 35 CHƯƠNG KẾT LUẬN VÀ ĐÁNH GIÁ 4.1 Ưu điểm nhược điểm Qua trình học tập, nghiên cứu, tìm hiểu đề tài “Cơng nghệ nhận diện đối tượng bám đối tượng theo thời gian thực” em nhận nhiều điều hay ho, mẻ từ công nghệ Song dừng lại mức độ nghiên cứu nên cịn gặp nhiều khó khăn hạn chế công nghệ 4.1.1 Ưu điểm Về phần ưu điểm công nghệ nhận diện đối tượng bám đối tượng theo thời gian thực này, em làm sau: • Phát đối tượng cần nhận diện theo thư viện cài sẵn • Có thể phát lúc nhiều đối tượng khác khung ảnh • Tỉ lệ đốn mục tiêu có độ xác cao • Bám theo đối tượng theo thời gian thực, đối tượng chuyển bám theo 4.1.2 Nhược điểm Công nghệ nhận diện đối tượng bám đối tượng theo thời gian thực đạt kết định Nhưng số hạn chế như: • Tốc độ bám theo đối tượng cịn chậm, thường bị delay chậm giây so với thực tế • Vẫn cịn sai sót bị phát nhầm hình ảnh đối tượng • Chưa có hội để ứng dụng vào thực tế cịn gặp nhiều vướng mắc, khó khăn 36 4.2 Hướng phát triển đề tài Với kết đạt q trình nghiên cứu cơng nghệ nhận diện đối tượng bám đối tượng theo thời gian thực Trong tương lai áp dụng vào nhiều lĩnh vực đời sống ngành công nghiệp ô tô, lĩnh vực xe không người lái Nhờ công nghệ xe nhận đối tượng cần tránh, đâu đối tượng cần dừng, đâu đối tượng qua Từ tự đưa định điều khiển mà khơng cần có người vận hành Hoặc lĩnh vực phân loại hàng hóa, sử dụng cơng nghệ để phân loại sản phẩm, kiểm tra sản phẩm để phục vụ trình lưu chuyển kho, giúp người đỡ phải tốn thời gian nhiều 37 TÀI LIỆU THAM KHẢO [1] L M HÀ, "Giáo Trình Thị Giác Máy Tính Và Ứng Dụng," Nhà Xuất Bản Đại Học Quốc Gia Thành Phố Hồ Chí Minh, 2019 [2] Y v3, "YOLO," [Online] Available: https://pjreddie.com/darknet/yolo/ 38 PHỤ LỤC(CODE MÔ PHỎNG) Code nhận diện đối tượng ảnh tĩnh import cv2 import numpy as np net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") classes = [] with open("dulieu.names", "r") as f: classes = f.read().splitlines() img = cv2.imread('giao.jpg') height, width, _ = img.shape blob = cv2.dnn.blobFromImage(img, / 255, (416, 416), (0, 0, 0), swapRB=True, crop=False) net.setInput(blob) output_layers_names = net.getUnconnectedOutLayersNames() layersOutputs = net.forward(output_layers_names) boxes = [] confidences = [] class_ids = [] for output in layersOutputs: for detection in output: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) x = int(center_x - w / 2) 39 y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append((float(confidence))) class_ids.append(class_id) indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.5) font = cv2.FONT_HERSHEY_PLAIN if len(indexes) > 0: for i in indexes.flatten(): x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) confidence = str(round(confidences[i], 2)) cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2) cv2.putText(img, label + "" + confidence, (x, y + 20), font, 2, (0, 255, 255), 2) cv2.imshow('frame', img) cv2.waitKey(0) Code nhận diện đối tượng theo thời gian thực: import cv2 import numpy as np # Load Yolo net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") classes = [] with open("dulieu.names", "r") as f: classes = f.read().splitlines() #print(classes) cap = cv2.VideoCapture(0) #img = cv2.imread('person.jpg') while True: _, img = cap.read() height, width, _ = img.shape 40 blob = cv2.dnn.blobFromImage(img, 1/255, (416,416), (0,0,0), swapRB=True, crop=False) net.setInput(blob) output_layers_names = net.getUnconnectedOutLayersNames() layersOutputs = net.forward(output_layers_names) boxes = [] confidences = [] class_ids = [] for output in layersOutputs: for detection in output: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0]*width) center_y = int(detection[1]*height) w = int(detection[2]*width) h = int(detection[3]*height) x = int(center_x - w/2) y = int(center_y - h/2) boxes.append([x, y, w, h]) confidences.append((float(confidence))) class_ids.append(class_id) indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.5) font = cv2.FONT_HERSHEY_PLAIN if len(indexes) > 0: for i in indexes.flatten(): x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) confidence = str(round(confidences[i], 2)) cv2.rectangle(img, (x, y), (x+w,y+h), (255, 255, 0), 2) cv2.putText(img, label + "" + confidence, (x, y+20), font, 2, (0,255,255), 2) cv2.imshow('frame', img) cv2.waitKey(0) [1] 41