Khi dán nhãn, hệ thống xuất ra 1 file “.txt” chứa các thông tin của vật trong ảnh bao gồm:
1. Thứ tự của nhãn
2. Tọa độ tâm của hộp giới hạn
Thiết kế cụ thể
Do không gian máy giới hạn, chúng ta sử dụng Google Colab - là một sản phẩm từ Google Research, nó cho phép chạy các dịng code python thơng qua trình duyệt. Google Colab bộ nhớ đám mây 40GB với Ram ảo là 13GB cho phép chúng ta training dữ liệu một cách nhanh chóng và hiệu quả.
Sau khi tải lên dữ liệu ảnh đầu vào, Google Colab tự động training dữ liệu một cách ổn định và an toàn.
Nhược điểm: Do là tài khoản miễn phí nên Google Colab sẽ hủy toàn bộ dữ liệu của chúng ta sau 10 tiếng.
Ước tính thời gian training:
• Với mỗi ảnh chúng ta có 1 bounding box, YOLO sẽ cần dự đốn tổng cộng 3000 bounding boxes. Giả sử mỗi batch của chúng ta có kích thước 64 ảnh và số lượng max_batches = 6000. Như vậy chúng ta cần dự đoán 1,152 tỉ bounding boxes
• Thời gian huấn luyện dự đốn là 24h.
Kết quả khi thử nghiệm hệ thống
Chương trình được chạy thử nghiệm trên Laptop sử dụng camera 2D và cho ra kết quả với tỉ lệ chính xác cao.
Sau q trình xử lí ảnh, chương trình cho ra một kết quả nhận diện chính xác từng loại bánh kẹo, Những thơng tin của vật sẽ được hiển thị trên màn hình máy tính, bao gồm: • Bounding box • Label • Confidence • Fps Hình 3.12 Kết quả nhận diện
Thiết kế cụ thể
Hình 3.13 Kết quả nhận diện
Hình 3.14 Kết quả nhận diện
Thiết kế cụ thể
Hình 3.16 Kết quả nhận diện
3.1.4.6 Checklist Danh sách Chức năng Nguyên tắc làm việc Bố trí An toàn
Thiết kế cụ thể Sản xuất Kiểm tra chất lượng Lắp ráp Vận chuyển Bảo dưỡng Hoạt động Chi phí Lịch trình 47
3.2 Tích hợp hệ thống
Thiết kế cụ thể
3.3 Phác thảo hệ thống
Hình 3.19 Phác thảo hệ thống
Phần 4: Phụ lục
4.1 Chương trình lập trình
import cv2
import numpy as np
# Load Yolo
net = cv2.dnn.readNet("yolov4-tiny-custom_last.weights", "yolov4-tiny- custom.cfg") classes = []
with open("obj.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
print(classes)
layer_names = net.getLayerNames() #print(layer_names)
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] #print(output_layers)
colors = np.random.uniform(0, 255, size=(len(classes), 3))
# Loading image
img = cv2.imread("chocopie.jpg")
#img = cv2.resize(img, None, fx=0.2, fy=0.2) height, width, channels = img.shape
Thiết kế cụ thể
# Detecting objects
blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)
#Showing informations on the screen class_ids = []
confidences = [] boxes = [] for out in outs:
for detection in out: scores = detection[5:] class_id = np.argmax(scores)
confidence = scores[class_id] if confidence > 0.5:
# Object detected
center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) # Rectangle coordinates 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) 51
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) print(indexes) font = cv2.FONT_HERSHEY_PLAIN for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) color = colors[class_ids[i]]
cv2.rectangle(img, (x, y), (x + w, y + h), color, 2) cv2.putText(img, label, (x, y + 30), font, 3, color, 3)
cv2.imshow("Image", img) cv2.waitKey(0)
4.2 Bản vẽ
Hình 4.1 Bản vẽ hệ thống đẩy phân loại
Hình 4.3 Biên dạng khung