Итак, ребята, в сегодняшнем блоге мы увидим, как мы можем выполнить обнаружение объектов с помощью SSD самым простым способом. Твердотельные накопители очень быстры в обнаружении объектов по сравнению с такими большими мальчиками, как R-CNN или Fast R-CNN и т. д. Это будет очень увлекательный проект с бесконечным количеством вариантов использования. Так что без каких-либо дополнительных должностей.
Полную статью с исходным кодом читайте здесь —https://machinelearningprojects.net/object-detection-using-ssd/
Код для обнаружения объектов с использованием SSD…
from imutils.video import FPS import numpy as np import argparse import imutils import cv2 use_gpu = True live_video = False confidence_level = 0.5 fps = FPS().start() ret = True CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"] COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3)) net = cv2.dnn.readNetFromCaffe('ssd_files/MobileNetSSD_deploy.prototxt', 'ssd_files/MobileNetSSD_deploy.caffemodel') if use_gpu: print("[INFO] setting preferable backend and target to CUDA...") net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA) print("[INFO] accessing video stream...") if live_video: vs = cv2.VideoCapture(0) else: vs = cv2.VideoCapture('test.mp4') while ret: ret, frame = vs.read() if ret: frame = imutils.resize(frame, width=400) (h, w) = frame.shape[:2] blob = cv2.dnn.blobFromImage(frame, 0.007843, (300, 300), 127.5) net.setInput(blob) detections = net.forward() for i in np.arange(0, detections.shape[2]): confidence = detections[0, 0, i, 2] if confidence > confidence_level: idx = int(detections[0, 0, i, 1]) box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100) cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2) y = startY - 15 if startY - 15 > 15 else startY + 15 cv2.putText(frame, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2) cv2.imshow('Live detection',frame) if cv2.waitKey(1)==27: break fps.update() fps.stop() print("[INFO] elasped time: {:.2f}".format(fps.elapsed())) print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
- Строка 1–5 — Импорт библиотек, необходимых для обнаружения объектов с использованием SSD.
- Строка 7–15 — определение некоторых констант и массива классов. Наша модель SSD обучена этим 21 классу.
- Строка 17 — Определение массива цветов, где каждому классу случайным образом назначается цвет.
- Строка 19 — Чтение сети в переменной с именем net с использованием cv2.dnn.readNetFromCaffe.
- Строка 21–24 — если для параметра use_gpu установлено значение TRUE, установите серверную часть и цель на Cuda.
- Строка 27–31 — Инициализируйте объект VideoCapture либо с 0 для живого видео, либо с именем видеофайла.
- Строка 34. Давайте войдем в бесконечный массив и прочитаем кадры.
- Строка 35 — Если ret говорит, что если объект VideoCapture возвращает True, то только продолжать.
- Строка 36–37 — измените размер кадра и получите его высоту и ширину.
- Строка 39–41 — Создайте большой двоичный объект из изображения, установите его в качестве входных данных и передайте его дальше по сети с помощью cv2.blobFromImage.
Для дальнейшего объяснения кода и исходного кода посетите здесь —
Чтобы узнать больше о машинном обучении, глубоком обучении, компьютерном зрении, НЛП и проектах Flask, посетите мой блог.
Итак, это все для этого блога, ребята, спасибо за то, что прочитали его, и я надеюсь, что вы возьмете что-то с собой после прочтения этого и до следующего раза 👋…