Социальное дистанцирование стало горячей темой пандемии коронавируса. Многие крупные компании и торговые центры пытаются подтвердить социальное дистанцирование. Есть много интересных проектов, чтобы обеспечить социальное дистанцирование. Здесь мы построим нашу систему, чтобы продемонстрировать социальное дистанцирование.

Здесь нам понадобятся OpenCV и Numpy для базовой настройки. Итак, давайте сделаем базовую настройку для запуска проекта.

OpenCV Python

OpenCV - это библиотека для обработки изображений. Он предназначен для решения задач компьютерного зрения. OpenCV - это библиотека C / C ++, расширенная в Python.

Чтобы установить OpenCV, Здесь.

NumPy

Библиотека NumPy используется для поддержки многомерных массивов, матриц и т. Д. На языке программирования Python. Это цифровая библиотека Python с открытым исходным кодом.

Numpy предоставляет:

  1. инструменты для интеграции программ на C / C ++ и Fortran
  2. сложные функции
  3. Мощный элемент N-мерного массива.
  4. Полезные возможности линейной алгебры, преобразования Фурье, случайных чисел и многое другое.

Чтобы установить Numpy, зайдите сюда.

Теперь создайте файл, например SocialDistancing.py.

Сюда мы импортируем все необходимые библиотеки. Также импортируйте cv2, time, imutils, numpy, math, itertools и centroidtracker.

import cv2
import datetime
import imutils
import numpy as np
from centroidtracker import CentroidTracker
from itertools import combinations
import math

Затем нам нужно объявить файлы модели и прототипа. Вы можете получить их по следующей ссылке.

  1. MobileNetSSD_deploy.prototxt
  2. MobileNetSSD_deploy.caffemodel

Объявим их с локального пути.

protopath = "MobileNetSSD_deploy.prototxt"
modelpath = "MobileNetSSD_deploy.caffemodel"
detector = cv2.dnn.readNetFromCaffe(prototxt=protopath, caffeModel=modelpath)

Количество занятий здесь.

CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
"sofa", "train", "tvmonitor"]
tracker = CentroidTracker(maxDisappeared=40, maxDistance=50)

Затем определите функцию main ().

Функция VideoCapture.read () читает ([, image]) изображение, здесь возвращается видеокадр. Если кадры не были захвачены, изображение будет пустым.

cv2.putText(img, text, org, fontFace, fontScale, color[ , thickness[ , lineType[, bottomLeftOrigin]]])

Здесь объясняются параметры.

  1. img: input Рисует текстовую строку,
  2. text: текстовая строка, которую нужно нарисовать.
  3. org: нижний левый угол текстовой строки на изображении.
  4. fontFace: тип шрифта ,
  5. fontScale: коэффициент масштабирования шрифта, умноженный на базовый размер шрифта.
  6. color: цвет текста.
  7. thickness: Толщина линий, используемых для рисования текста.
  8. lineType: Тип линии.
  9. bottomLeftOrigin: при значении true , источник данных изображения находится в нижнем левом углу. В противном случае , он находится в верхнем левом углу.

Полный исходный код SocialDistancing.py. Это еще не все; мы только что завершили базовую настройку. Далее приступим к основной части.

Теперь создайте файл, например centroidTracker.py.

Прежде всего, импортируйте необходимые пакеты.

from scipy.spatial import distance as dist
from collections import OrderedDict
import numpy as np

Затем объявите класс вроде CentroidTracker

инициализировать следующий уникальный идентификатор объекта вместе с двумя упорядоченными словарями, используемыми для отслеживания сопоставления данного объекта, идентификатора с его центроидом и ряда последовательных кадров, которые были помечены как «исчезнувшие» соответственно.

self.nextObjectID = 0
self.objects = OrderedDict()
self.disappeared = OrderedDict()
self.bbox = OrderedDict()

Сохраните максимальное количество последовательных кадров, для данного объекта разрешено быть помеченным как «исчезнувший» до тех пор, пока нам не потребуется отменить регистрацию объекта из отслеживания.

self.maxDisappeared = maxDisappeared

сохранить максимальное расстояние между центроидами, чтобы связать объект - если расстояние больше этого максимального расстояния, мы начнем отмечать объект как «исчезнувший».

self.maxDistance = maxDistance

регистр

Создайте функцию под названием register для регистрации объекта. Мы будем использовать следующий доступный идентификатор объекта для хранения центроида.

Отменить регистрацию

Создайте функцию с именем deregister, и тем самым мы сможем отменить регистрацию объектов.

Соберем их все вместе.

Полный код

Просто создайте файл с именем. Centroidtracker.py

Выход:

Заключение

Здесь я только что объяснил полный проект социального дистанцирования. Вы можете расширять базовый проект по мере необходимости. Надеюсь, это будет вам полезно. Большое спасибо за чтение.

Хорошего дня.

Больше контента на plainenglish.io