Как найти движение в кадре

Есть ли программа для детектирования движения в видео?

Всем привет!
Есть камера которая смотрит вход на работу. Видит она следующие gmvg1n9uLNne92.jpg
Иногда мне нужно посмотреть кто и когда приходит на работу. Для этого я пересматриваю 4 часа видео в ускоренном темпе.
Решил что проще будет если видеоплеер сам будет находить движение и ставить видео на паузу или еще что нибудь, но не могу найти ничего подобного!
Подскажите существует ли такой софт?


  • Вопрос задан

    более трёх лет назад

  • 9542 просмотра

Попробуйте VLC плеер – кое-что он умеет из коробки

Используйте опцию командной строки:
vlc –video-filter=motion <файл>

Или менюшками.
Tools -> Effects and Filters -> Video Effects -> Advanced -> Motion Detect.

Пригласить эксперта


  • Показать ещё
    Загружается…

21 мая 2023, в 14:29

2000 руб./за проект

21 мая 2023, в 13:31

350 руб./за проект

21 мая 2023, в 12:40

5000 руб./за проект

Минуточку внимания

Как найти видео с движением в определенной части кадра

Изучая записи с камер наблюдения, осуществляя поиск нужного момента в длительном архиве, отбирая только полезные кадры можно потратить очень много времени и при этом пропустить необходимое видео. Вот случаи, когда важно найти нужное место в большом архиве:

  • товар небольших размеров с полки оказался украденным, и это заметили не сразу;
  • никто не заметил пропажу документов, которые лежали на столе;
  • кто открывал сейф и брал деньги и т.п.
  • кто входил в большой кабинет через одну из открытых дверей;
  • когда ответственный сотрудник находился на своем рабочем месте, а когда нет;

и таких примеров может быть очень много.
Как же облегчить поиск полезной информации в видеозаписях? Используя облачные архивы Glazok вы можете легко решать такие задачи с помощью поиска видео по зонам детекции движения.

На видео мы показали, как воспользоваться данной функцией.

Как сделать умный поиск нужной записи на камере наблюдения?

Чтобы сделать поиск по зонам детекции, нужно открыть камеру в личном кабинете и выбрать кнопку поиска записей:

Как найти видео с движением в определенной части кадра

В настройках поиска видео с детектором движения можно указать параметры, которые позволят сузить зону поиска и временной интервал, а также исключить незначительные движения с помощью настройки чувствительности:

Как найти видео с движением в определенной части кадра 1

Результаты будут отображаться в правой части экрана. Например, мы сделали поиск записей, чтобы понять, кто и когда взял документы со стола:

Как найти видео с движением в определенной части кадра 2

Другой пример, мы хотим найти записи с камеры, когда кто-то пересекал определенную область в кадре:

Как найти видео с движением в определенной части кадра 3

Поиск записи с движением можно сделать также в приложении Camera Viewer в версии Desktop:

Как найти видео с движением в определенной части кадра 4

В отличии от камер, в которых встроены умные функции – пересечение линии или вход в зону, в облаке Glazok нет необходимости определять параметры поиска заранее, т.е. рисовать линии и области отслеживания перед записью. При этом вы можете использовать обычные камеры без smart функций.

Функция интеллектуального поиска записей видео с детектором движения доступна на облачных тарифах «ОБЛАЧНЫЙ 30 PRO» и «РАСШИРЕННЫЙ PRO 60».

Вы сможете получить консультацию по облаку Glazok позвонив нам или отправив заявку на обратный звонок:

Умный поиск событий в видеозаписях

С помощью функции Поиска записей, вы можете найти архивные записи, на которых было зафиксировано движение в определенной области кадра.

Функция доступна:

  • в личном кабинете на сайте;

  • в приложении Ivideon Client для ПК.

NB! Умный поиск событий доступен только для на тарифе с облачным хранением архива 30 и более дней.

Поиск доступен для следующих режимов записи в облако:

  • Постоянная запись.

  • Запись по детекции.

Поиск недоступен:

  • Для локального архива.

  • Для архива, загруженного в облако с помощью режима отложенной записи.

1. Поиск в личном кабинете

1. Откройте для просмотра выбранную камеру и нажмите кнопку Поиск в архиве:

d449c719954d21d92a60d1710441f1db.png

2. Задайте параметры поиска: область поиска, дату и временной период, а также чувствительность (чем она выше, тем более мелкие движения будут обнаружены).

3. Установив нужные параметры нажмите кнопку Найти записи:

f83c497d2abd92cabdfe34c2b93dd498.png

4. Найденные фрагменты будут отображены в виде списка коротких видеороликов, а также отмечены на шкале таймлайна жёлтым цветом:

  • кликните по карточке видеоролика, чтобы просмотреть один из них;

  • кликните по подсвеченному фрагменту на таймлайне, чтобы воспроизвести архив за нужное время;

  • если установлена галочка Воспроизводить только найденное, плеер будет пропускать фрагменты, не отмеченные жёлтым цветом.

6af91d91094507e8e998821000b252a2.png

2. Поиск в Ivideon Client

Чтобы найти архивные записи с движением в определенной области:

1. Откройте просмотр с нужной камеры и в левом нижнем углу плеера нажмите Поиск записей.

9e3fb94b4a5e5d7749b6c7470ae256ba.png

2. В меню Настройки поиска задайте:

  • дату и интервал времени;

  • область поиска.

3. Чтобы повысить точность поиска, вы можете задать дополнительные параметры:

  • интенсивность движения – установите высокую интенсивность, чтобы отсеять незначительные движения;

  • продолжительность движения;

  • интервал склейки – если интервал между роликами меньше выбранного значения, то такие ролики будут объединены в один.

4. Нажмите Найти записи и дождитесь вывода результатов.

0bb63647fe686686f08a39dfcd3f6d6b.png

5. Найденные фрагменты видео будут отображены над окном просмотра. Чтобы начать просмотр, нажмите на нужное видео левой кнопкой мыши

537007b4131bf0e6b5b049d6efb07926.png

6. На временной шкале найденные фрагменты видео выделены желто-оранжевыми цветом. Чем темнее цвет, тем интенсивнее движение было в кадре.

4d7278c3e5974faa25bc05ccd0869276.jpg

Распознавание движения в Python OpenCV

В одной из прошлых статей по OpenCV мы узнали как выводить контуры изображения из видео потока и нормализовать их т.е. избавиться от лишних контуров. В этой статье мы познакомимся с концепцией вычитания кадров, т.е. нахождение разницы между двумя кадрами видео потока, а также познакомимся с некоторыми новыми методами библиотеки Opencv: absdiff(), threshold(), dilate(), findContours(), boundingRect(), contourArea().

Запустив данный скрипт, вы увидите как он распознает движение на видеопотоке, окружая движущийся объект зеленым контуром.


import cv2 # импорт модуля cv2

#cv2.VideoCapture("видеофайл.mp4"); вывод кадров из видео файла
cap = cv2.VideoCapture(0); # видео поток с веб камеры

cap.set(3,1280) # установка размера окна
cap.set(4,700)

ret, frame1 = cap.read() 
ret, frame2 = cap.read()

while cap.isOpened(): # метод isOpened() выводит статус видеопотока

  
  diff = cv2.absdiff(frame1, frame2) # нахождение разницы двух кадров, которая проявляется лишь при изменении одного из них, т.е. с этого момента наша программа реагирует на любое движение.

  
  gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) # перевод кадров в черно-белую градацию

  
  blur = cv2.GaussianBlur(gray, (5, 5), 0) # фильтрация лишних контуров

  
  _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY) # метод для выделения кромки объекта белым цветом

  
  dilated = cv2.dilate(thresh, None, iterations = 3) # данный метод противоположен методу erosion(), т.е. эрозии объекта, и расширяет выделенную на предыдущем этапе область

  
  
  сontours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # нахождение массива контурных точек 

  
    
  for contour in сontours:
    (x, y, w, h) = cv2.boundingRect(contour) # преобразование массива из предыдущего этапа в кортеж из четырех координат

    
    # метод contourArea() по заданным contour точкам, здесь кортежу, вычисляет площадь зафиксированного объекта в каждый момент времени, это можно проверить
    print(cv2.contourArea(contour))

    
    if cv2.contourArea(contour) < 700: # условие при котором площадь выделенного объекта меньше 700 px
      continue
    cv2.rectangle(frame1, (x, y), (x+w, y+h), (0, 255, 0), 2) # получение прямоугольника из точек кортежа
    cv2.putText(frame1, "Status: {}".format("Dvigenie"), (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 3, cv2.LINE_AA) # вставляем текст 

    
  #cv2.drawContours(frame1, сontours, -1, (0, 255, 0), 2) также можно было просто нарисовать контур объекта 

  
  cv2.imshow("frame1", frame1) 
  frame1 = frame2  # 
  ret, frame2 = cap.read() #  

  
  if cv2.waitKey(40) == 27:
    break

  
  
  

cap.release()
cv2.destroyAllWindows()

  • Создано 16.04.2020 13:45:30


  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

В этой статье мы специально рассмотрим обнаружение движения с помощью веб-камеры ноутбука или компьютера и создадим скрипт кода для работы на нашем компьютере и посмотрим его пример в реальном времени.

Обнаружение движения с помощью Python очень просто благодаря множеству библиотек с открытым исходным кодом, предоставляемых языком программирования Python. Обнаружение движения имеет множество реальных применений. Например, его можно использовать для наблюдения за онлайн-экзаменами или в целях безопасности в магазинах, банках и т. д.

Введение

Язык программирования Python — это язык с открытым исходным кодом, богатый библиотекой, который предоставляет пользователю множество приложений и имеет ряд пользователей. Таким образом, он быстро растет на рынке. Нет конца списку преимуществ языка Python благодаря его простому синтаксису, легко находимым ошибкам и быстрому процессу отладки, что делает его более удобным для пользователя. 

Python был разработан в 1991 году и разработан Python Software Foundation. Выпущено много версий Python. Из них наиболее известны python2 и python3. В настоящее время в основном используется python3, и число пользователей python3 быстро растет. В этом проекте или скрипте мы будем использовать python3. 

Что такое обнаружение движения?

Согласно физике, когда объект неподвижен и не имеет скорости, то он считается покоящимся, и как раз наоборот, когда объект не находится в полном покое и имеет какое-то движение или скорость в каком-то направлении, либо влево-вправо. вправо, вперед-назад или вверх-вниз, то считается, что он находится в движении. В этой статье мы попробуем его обнаружить.

Обнаружение движения имеет много реальных реализаций или применений, где оно может доказать свою ценность, например, для наблюдения за онлайн-экзаменами с помощью веб-камеры (которую мы реализуем в этой статье), в качестве охранника и т. д.

В этой статье мы попробуем реализовать скрипт, с помощью которого будем детектировать движение с помощью Web-камеры десктопа или ноутбука. Идея состоит в том, что мы возьмем два кадра видео и попытаемся найти между ними различия. Если между двумя кадрами есть какая-то разница, то ясно, что есть какое-то движение объекта перед камерой, которое и создает разницу. 

Важные библиотеки

Прежде чем мы начнем реализацию кода, давайте посмотрим на некоторые модули или библиотеки, которые мы будем использовать в нашем коде для обнаружения движения с помощью веб-камеры. Как мы уже говорили, библиотеки играют важную роль в славе Python, давайте посмотрим, что нам нужно:

  1. OpenCV
  2. Панды (pandas)

Обе вышеупомянутые библиотеки, OpenCV и Pandas, полностью основаны на python, являются бесплатными библиотеками с открытым исходным кодом, и мы собираемся использовать их с версией Python3 языка программирования python. 

1. OpenCV

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

2. Панды (pandas): 

Как мы уже говорили, « панды » — это библиотека Python с открытым исходным кодом, которая предоставляет богатые встроенные инструменты для анализа данных, благодаря чему она широко используется в области науки о данных и анализа данных. Нам предоставляются фреймы данных в виде структуры данных в pandas, которая полезна для манипулирования табличными данными и их хранения в двумерной структуре данных.

Оба обсуждаемых выше модуля не встроены в Python , и мы должны сначала установить их перед использованием. Помимо этого, есть еще два модуля, которые мы собираемся использовать в нашем проекте.

  1. Модуль даты и времени Python 
  2. Модуль времени Python

Оба этих модуля встроены в Python, и их не нужно устанавливать позже. Эти модули имеют дело с функциями, связанными с датой и временем, соответственно. 

Реализация кода 

До сих пор мы видели библиотеки, которые собираемся использовать в нашем коде, давайте начнем их реализацию с идеи, что видео — это просто комбинация множества статических изображений или кадров, и все эти кадры вместе создают видео

Как выполнить обнаружение движения с помощью Python

Импорт необходимых библиотек

В этом разделе мы импортируем все библиотеки, такие как pandas и panda. Затем мы импортируем функцию cv2, time и DateTime из модуля DateTime.

# Importing the Pandas libraries  
import pandas as panda  

# Importing the OpenCV libraries  
import cv2  

# Importing the time module  
import time  

# Importing the datetime function of the datetime module  
from datetime import datetime

Инициализация наших переменных данных

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

Мы определили список «motionTime» для хранения времени обнаружения движения и инициализировали список dataFrame с помощью модуля panda. 

# Assigning our initial state in the form of variable initialState as None for initial frames  
initialState = None  

# List of all the tracks when there is any detected of motion in the frames  
motionTrackList= [ None, None ]  

# A new list ‘time’ for storing the time when movement detected  
motionTime = []  

# Initialising DataFrame variable ‘dataFrame’ using pandas libraries panda with Initial and Final column  
dataFrame = panda.DataFrame(columns = ["Initial", "Final"])

Основной процесс захвата

В этом разделе мы выполним наши основные шаги обнаружения движения. Давайте разберемся с ними по шагам:

  1. Сначала мы начнем захват видео с помощью модуля cv2 и сохраним его в переменной video. 
  2. Затем мы будем использовать бесконечный цикл while для захвата каждого кадра из видео. 
  3. Мы будем использовать метод read() для чтения каждого кадра и сохранения их в соответствующих переменных. 
  4. Мы определили переменное движение и инициализировали его нулем. 
  5. Мы создали еще две переменные grayImage и grayFrame, используя cv2-функции cvtColor и GaussianBlur, чтобы найти изменения в движении. 
  6. Если наше InitialState равно None, тогда мы присваиваем текущему GrayFrame значение InitialState в противном случае и останавливаем следующий процесс, используя ключевое слово «продолжить». 
  7. В следующем разделе мы рассчитали разницу между начальным кадром и кадром в градациях серого, которые мы создали в текущей итерации. 
  8. Затем мы выделим изменения между начальным и текущим кадрами, используя функции порога cv2 и расширения. 
  9. Мы найдем контуры движущегося объекта на текущем изображении или кадре и укажем движущийся объект, создав вокруг него зеленую границу с помощью функции прямоугольника. 
  10. После этого мы добавим наш motionTrackList, добавив в него текущий обнаруженный элемент.
  11. Мы отобразили все кадры, такие как оттенки серого, исходные кадры и т. д., используя метод imshow. 
  12. Кроме того, мы создали ключ, используя метод witkey() модуля cv2, чтобы завершить процесс, и мы можем завершить наш процесс, используя клавишу «m». 
# starting the webCam to capture the video using cv2 module  
video = cv2.VideoCapture(0)  

# using infinite loop to capture the frames from the video 
while True:  

   # Reading each image or frame from the video using read function 

   check, cur_frame = video.read()  

   

   # Defining 'motion' variable equal to zero as initial frame 

   var_motion = 0  

   

   # From colour images creating a gray frame 

   gray_image = cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)  

   

   # To find the changes creating a GaussianBlur from the gray scale image  

   gray_frame = cv2.GaussianBlur(gray_image, (21, 21), 0)  

   

   # For the first iteration checking the condition

   # we will assign grayFrame to initalState if is none  

   if initialState is None:  

       initialState = gray_frame  

       continue  

       

   # Calculation of difference between static or initial and gray frame we created  

   differ_frame = cv2.absdiff(initialState, gray_frame)  

   

   # the change between static or initial background and current gray frame are highlighted 

   

   thresh_frame = cv2.threshold(differ_frame, 30, 255, cv2.THRESH_BINARY)[1]  

   thresh_frame = cv2.dilate(thresh_frame, None, iterations = 2)  

   

   # For the moving object in the frame finding the coutours 

   cont,_ = cv2.findContours(thresh_frame.copy(),   

                      cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  

   

   for cur in cont:  

       if cv2.contourArea(cur) < 10000:  

           continue  

       var_motion = 1  

       (cur_x, cur_y,cur_w, cur_h) = cv2.boundingRect(cur)  

       

       # To create a rectangle of green color around the moving object  

       cv2.rectangle(cur_frame, (cur_x, cur_y), (cur_x + cur_w, cur_y + cur_h), (0, 255, 0), 3)  

       

  # from the frame adding the motion status   

   motionTrackList.append(var_motion)  

   motionTrackList = motionTrackList[-2:]  

   

   # Adding the Start time of the motion 

   if motionTrackList[-1] == 1 and motionTrackList[-2] == 0:  

       motionTime.append(datetime.now())  

       

  # Adding the End time of the motion 

   if motionTrackList[-1] == 0 and motionTrackList[-2] == 1:  

       motionTime.append(datetime.now())  

       

  # In the gray scale displaying the captured image 

   cv2.imshow("The image captured in the Gray Frame is shown below: ", gray_frame)  

   

   # To display the difference between inital static frame and the current frame 

   cv2.imshow("Difference between the  inital static frame and the current frame: ", differ_frame)  

   

   # To display on the frame screen the black and white images from the video  

   cv2.imshow("Threshold Frame created from the PC or Laptop Webcam is: ", thresh_frame)  

   

   # Through the colour frame displaying the contour of the object

   cv2.imshow("From the PC or Laptop webcam, this is one example of the Colour Frame:", cur_frame)  

   

   # Creating a key to wait  

   wait_key = cv2.waitKey(1)  

   

   # With the help of the 'm' key ending the whole process of our system   

   if wait_key == ord('m'):  

       # adding the motion variable value to motiontime list when something is moving on the screen  

       if var_motion == 1:  

           motionTime.append(datetime.now())  

       break

Завершение кода

После закрытия цикла мы добавим наши данные из списков dataFrame и motionTime в файл CSV и, наконец, выключим видео.

# At last we are adding the time of motion or var_motion inside the data frame  
for a in range(0, len(motionTime), 2):  

   dataFrame = dataFrame.append({"Initial" : time[a], "Final" : motionTime[a + 1]}, ignore_index = True)  

   
# To record all the movements, creating a CSV file  
dataFrame.to_csv("EachMovement.csv")  

# Releasing the video   
video.release()  

# Now, Closing or destroying all the open windows with the help of openCV  
cv2.destroyAllWindows()

Краткое изложение процесса

Мы создали код; теперь давайте снова обсудим процесс вкратце.

Как выполнить обнаружение движения с помощью Python

Сначала мы снимали видео с помощью веб-камеры нашего устройства, затем брали начальный кадр входного видео в качестве эталона и время от времени проверяли следующие кадры. Если был найден кадр, отличный от первого, движение присутствовало. Это будет отмечено зеленым прямоугольником.

Объединить код

Мы видели код в разных разделах. Теперь давайте объединим это: 

# Importing the Pandas libraries  
import pandas as panda  

# Importing the OpenCV libraries  
import cv2  

# Importing the time module  
import time  

# Importing the datetime function of the datetime module  
from datetime import datetime 

# Assigning our initial state in the form of variable initialState as None for initial frames  
initialState = None  

# List of all the tracks when there is any detected of motion in the frames  
motionTrackList= [ None, None ]  

# A new list 'time' for storing the time when movement detected  
motionTime = []  

# Initialising DataFrame variable 'dataFrame' using pandas libraries panda with Initial and Final column  
dataFrame = panda.DataFrame(columns = ["Initial", "Final"])

# starting the webCam to capture the video using cv2 module  
video = cv2.VideoCapture(0)  

# using infinite loop to capture the frames from the video 
while True:  

   # Reading each image or frame from the video using read function 

   check, cur_frame = video.read()  

   

   # Defining 'motion' variable equal to zero as initial frame 

   var_motion = 0  

   

   # From colour images creating a gray frame 

   gray_image = cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)  

   

   # To find the changes creating a GaussianBlur from the gray scale image  

   gray_frame = cv2.GaussianBlur(gray_image, (21, 21), 0)  

   

   # For the first iteration checking the condition

   # we will assign grayFrame to initalState if is none  

   if initialState is None:  

       initialState = gray_frame  

       continue  

       

   # Calculation of difference between static or initial and gray frame we created  

   differ_frame = cv2.absdiff(initialState, gray_frame)  

   

   # the change between static or initial background and current gray frame are highlighted 

   

   thresh_frame = cv2.threshold(differ_frame, 30, 255, cv2.THRESH_BINARY)[1]  

   thresh_frame = cv2.dilate(thresh_frame, None, iterations = 2)  

   

   # For the moving object in the frame finding the coutours 

   cont,_ = cv2.findContours(thresh_frame.copy(),   

                      cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  

   

   for cur in cont:  

       if cv2.contourArea(cur) < 10000:  

           continue  

       var_motion = 1  

       (cur_x, cur_y,cur_w, cur_h) = cv2.boundingRect(cur)  

       

       # To create a rectangle of green color around the moving object  

       cv2.rectangle(cur_frame, (cur_x, cur_y), (cur_x + cur_w, cur_y + cur_h), (0, 255, 0), 3)  

       

  # from the frame adding the motion status   

   motionTrackList.append(var_motion)  

   motionTrackList = motionTrackList[-2:]  

   

   # Adding the Start time of the motion 

   if motionTrackList[-1] == 1 and motionTrackList[-2] == 0:  

       motionTime.append(datetime.now())  

       

  # Adding the End time of the motion 

   if motionTrackList[-1] == 0 and motionTrackList[-2] == 1:  

       motionTime.append(datetime.now())  

       

  # In the gray scale displaying the captured image 

   cv2.imshow("The image captured in the Gray Frame is shown below: ", gray_frame)  

   

   # To display the difference between inital static frame and the current frame 

   cv2.imshow("Difference between the  inital static frame and the current frame: ", differ_frame)  

   

   # To display on the frame screen the black and white images from the video  

   cv2.imshow("Threshold Frame created from the PC or Laptop Webcam is: ", thresh_frame)  

   

   # Through the colour frame displaying the contour of the object

   cv2.imshow("From the PC or Laptop webcam, this is one example of the Colour Frame:", cur_frame)  

   

   # Creating a key to wait  

   wait_key = cv2.waitKey(1)  

   

   # With the help of the 'm' key ending the whole process of our system   

   if wait_key == ord('m'):  

       # adding the motion variable value to motiontime list when something is moving on the screen  

       if var_motion == 1:  

           motionTime.append(datetime.now())  

       break 

# At last we are adding the time of motion or var_motion inside the data frame  
for a in range(0, len(motionTime), 2):  

   dataFrame = dataFrame.append({"Initial" : time[a], "Final" : motionTime[a + 1]}, ignore_index = True)  

   
# To record all the movements, creating a CSV file  
dataFrame.to_csv("EachMovement.csv")  

# Releasing the video   
video.release()  

# Now, Closing or destroying all the open windows with the help of openCV  
cv2.destroyAllWindows()

Полученные результаты

Результаты, полученные после запуска приведенного выше кода, будут аналогичны тем, что можно увидеть ниже.

Как выполнить обнаружение движения с помощью Python

Здесь мы видим, что движение мужчины на видео отслеживается. Таким образом, вывод можно увидеть соответственно.

Как выполнить обнаружение движения с помощью Python

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

Вывод

  • Язык программирования Python — это язык с открытым исходным кодом, богатый библиотекой, который предоставляет пользователю ряд приложений.
  • Когда объект неподвижен и не имеет скорости, он считается покоящимся, и, наоборот, когда объект не находится в полном покое, он считается движущимся.
  • OpenCV — это библиотека с открытым исходным кодом, которую можно использовать со многими языками программирования, и, интегрируя ее с библиотеками python panda/NumPy, мы можем наилучшим образом использовать функции OpenCV.
  • Основная идея заключается в том, что каждое видео — это просто комбинация множества статических изображений, называемых кадрами, и разница между кадрами используется для обнаружения.

Перевод статьи взятой отсюда

644 просмотров

Отказ от ответственности: Вся размещенная информация была взята из открытых источников и представлена исключительно в ознакомительных целях а также не несет призыва к действию. Создано лишь в образовательных и развлекательных целях. | Так же, если вы являетесь правообладателем размещенного на страницах портала материала, просьба написать нам через контактную форму жалобу на удаление определенной страницы, а также ознакомиться с инструкцией для правообладателей материалов. Спасибо за понимание.

Если вам понравились материалы сайта, вы можете поддержать проект финансово, переведя некоторую сумму с банковской карты, счёта мобильного телефона или из кошелька ЮMoney.

Добавить комментарий