Contains Framework for motion detection. More...
Data Structures | |
class | Detector |
Class Detector. More... | |
struct | Event |
Event structure. More... | |
struct | Metadata |
Metadata structure. More... | |
struct | Model |
Model structure. More... | |
struct | Object |
Object structure. More... | |
struct | Options |
Options structure. More... | |
struct | Position |
Position structure. More... | |
Typedefs | |
typedef double | Time |
Time type. | |
typedef int | Id |
ID type. | |
typedef std::string | String |
String type. | |
typedef Simd::Point< ptrdiff_t > | Size |
screen 2D-size (width and height). | |
typedef Simd::Point< ptrdiff_t > | Point |
screen point (x and y). | |
typedef std::vector< Point > | Points |
Vector of screen 2D-points. | |
typedef Simd::Rectangle< ptrdiff_t > | Rect |
Screen rectangle. | |
typedef Simd::Point< double > | FSize |
ONVIF 2D-size (width and height). ONVIF size is restricted by range [0, 2]. | |
typedef Simd::Point< double > | FPoint |
ONVIF 2D-point (x and y). ONVIF coordinates are restricted by range [-1, 1]. | |
typedef std::vector< FPoint > | FPoints |
Vector of ONVIF 2D-points. | |
typedef Simd::View< Simd::Allocator > | View |
Image type. | |
typedef Simd::Frame< Simd::Allocator > | Frame |
Frame type. | |
typedef std::vector< Position > | Positions |
Vector of object positions. | |
typedef std::vector< Object > | Objects |
Vector of objects. | |
typedef std::vector< Event > | Events |
Vector of events. | |
Functions | |
SIMD_INLINE double | ScreenToOnvifX (ptrdiff_t x, ptrdiff_t screenWidth) |
Converts screen X-coordinate to ONVIF X-coordinate. More... | |
SIMD_INLINE double | ScreenToOnvifY (ptrdiff_t y, ptrdiff_t screenHeight) |
Converts screen Y-coordinate to ONVIF Y-coordinate. More... | |
SIMD_INLINE FPoint | ScreenToOnvif (const Point &point, const Point &screenSize) |
Converts screen 2D-coordinates to ONVIF 2D-coordinates. More... | |
SIMD_INLINE FSize | ScreenToOnvifSize (const Size &size, const Point &screenSize) |
Converts screen 2D-size to ONVIF 2D-size. More... | |
SIMD_INLINE ptrdiff_t | OnvifToScreenX (double x, ptrdiff_t screenWidth) |
Converts ONVIF X-coordinate to screen X-coordinate. More... | |
SIMD_INLINE ptrdiff_t | OnvifToScreenY (double y, ptrdiff_t screenHeight) |
Converts ONVIF Y-coordinate to screen Y-coordinate. More... | |
SIMD_INLINE Point | OnvifToScreen (const FPoint &point, const Point &screenSize) |
Converts ONVIF 2D-coordinates to screen 2D-coordinates. More... | |
SIMD_INLINE Size | OnvifToScreenSize (const FSize &size, const Point &screenSize) |
Converts ONVIF 2D-size to screen 2D-size. More... | |
SIMD_INLINE String | ToString (Id id) |
Converts ID to string. More... | |
Detailed Description
Contains Framework for motion detection.
- Note
- This is wrapper around low-level Motion Detection API.
Using example (motion detection in the video captured by OpenCV):
#include <iostream>
#include <string>
#include <list>
#include "opencv2/opencv.hpp"
#ifndef SIMD_OPENCV_ENABLE
#define SIMD_OPENCV_ENABLE
#endif
#include "Simd/SimdMotion.hpp"
using namespace Simd::Motion;
typedef std::list<Event> EventList;
typedef Simd::Pixel::Bgr24 Color;
const Color Red(0, 0, 255), Yellow(0, 255, 255), White(0, 255, 255);
{
{
bool alarmed = false;
{
if (event.objectId == object.id)
{
alarmed = true;
break;
}
}
Color color = alarmed ? Red : Yellow;
int width = alarmed ? 2 : 1;
Simd::DrawRectangle(image, object.rect, color, width);
font.Draw(image, ToString(object.id), Point(object.rect.left, object.rect.top - font.Height()), color);
for (size_t j = 1; j < object.trajectory.size(); ++j)
}
{
events.push_front(metadata.events[i]);
events.pop_back();
}
Point location;
for (EventList::const_iterator it = events.begin(); it != events.end(); ++it)
{
std::stringstream ss;
Color color = White;
switch (it->type)
{
case Event::ObjectIn:
ss << "in " << it->objectId;
break;
case Event::ObjectOut:
ss << "out " << it->objectId;
break;
case Event::SabotageOn:
ss << "SABOTAGE ON";
color = Red;
break;
case Event::SabotageOff:
ss << "SABOTAGE OFF";
color = Red;
break;
};
font.Draw(image, ss.str(), location, color);
}
}
int main(int argc, char * argv[])
{
if (argc < 2)
{
std::cout << "You have to set video source! It can be 0 for camera or video file name." << std::endl;
return 1;
}
std::string source = argv[1];
cv::VideoCapture capture;
if (source == "0")
capture.open(0);
else
capture.open(source);
if (!capture.isOpened())
{
std::cout << "Can't capture '" << source << "' !" << std::endl;
return 1;
}
EventList events;
Detector detector;
Simd::Font font;
const char * WINDOW_NAME = "MotionDetector";
cv::namedWindow(WINDOW_NAME, 1);
double time = 0;
for (;;)
{
cv::Mat frame;
capture >> frame;
View image = frame;
Frame input(image, false, time);
Metadata metadata;
detector.NextFrame(input, metadata);
Annotate(metadata, font, events, image);
cv::imshow(WINDOW_NAME, frame);
if (cvWaitKey(1) == 27)// "press 'Esc' to break video";
break;
time += 0.040;
}
return 0;
}