Итак, ребята, в сегодняшнем блоге мы увидим, как мы можем выполнить обнаружение объектов с помощью 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, посетите мой блог.



Итак, это все для этого блога, ребята, спасибо за то, что прочитали его, и я надеюсь, что вы возьмете что-то с собой после прочтения этого и до следующего раза 👋…