Simd Library Documentation. (original) (raw)
Contains Framework for motion detection.
#include
#include
#include
#include "opencv2/opencv.hpp"
#include "opencv2/core/utils/logger.hpp"
#ifndef SIMD_OPENCV_ENABLE
#define SIMD_OPENCV_ENABLE
#endif
#include "Simd/SimdMotion.hpp"
typedef std::list EventList;
const Color Red(0, 0, 255), Yellow(0, 255, 255), White(0, 255, 255);
void Annotate(const Metadata & metadata, const Simd::Font & font, EventList & events, View & image)
{
for (size_t i = 0; i < metadata.objects.size(); i++)
{
bool alarmed = false;
for (size_t j = 0; j < metadata.events.size(); ++j)
{
if (event.objectId == object.id)
{
alarmed = true;
break;
}
}
Color color = alarmed ? Red : Yellow;
int width = alarmed ? 2 : 1;
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)
Simd::DrawLine(image, object.trajectory[j - 1].point, object.trajectory[j].point, color, width);
}
for (size_t i = 0; i < metadata.events.size(); ++i)
{
events.push_front(metadata.events[i]);
events.pop_back();
}
for (EventList::const_iterator it = events.begin(); it != events.end(); ++it)
{
std::stringstream ss;
Color color = White;
switch (it->type)
{
ss << "in " << it->objectId;
break;
ss << "out " << it->objectId;
break;
ss << "SABOTAGE ON";
color = Red;
break;
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], output = argc > 2 ? argv[2] : "";
cv::VideoCapture capture;
cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);
if (source == "0")
capture.open(0);
else
capture.open(source);
if (!capture.isOpened())
{
std::cout << "Can't capture '" << source << "' !" << std::endl;
return 1;
}
cv::VideoWriter writer;
if (output.size())
{
writer.open(output, cv::VideoWriter::fourcc('F','M','P','4'), capture.get(cv::CAP_PROP_FPS),
cv::Size((int)capture.get(cv::CAP_PROP_FRAME_WIDTH), (int)capture.get(cv::CAP_PROP_FRAME_HEIGHT)));
if (!writer.isOpened())
{
std::cout << "Can't open output file '" << output << "' !" << std::endl;
return 1;
}
}
EventList events;
Simd::Font font((int)capture.get(cv::CAP_PROP_FRAME_HEIGHT) / 32);
#if 0
#endif
const char * WINDOW_NAME = "MotionDetector";
cv::namedWindow(WINDOW_NAME, 1);
for (;;)
{
cv::Mat frame;
if (!capture.read(frame))
break;
View image = frame;
Frame input(image, false, capture.get(cv::CAP_PROP_POS_MSEC) * 0.001);
Annotate(metadata, font, events, image);
cv::imshow(WINDOW_NAME, frame);
if (writer.isOpened())
writer.write(frame);
if (cv::waitKey(1) == 27)
break;
}
return 0;
}
The Font class provides text drawing.
Definition: SimdFont.hpp:64
size_t Height() const
Definition: SimdFont.hpp:113
bool Draw(View &canvas, const String &text, const Point &position, const Color &color) const
Definition: SimdFont.hpp:145
Class Detector.
Definition: SimdMotion.hpp:590
bool SetOptions(const Simd::Motion::Options &options)
Definition: SimdMotion.hpp:613
bool NextFrame(const Frame &input, Metadata &metadata, Frame *output=NULL)
Definition: SimdMotion.hpp:639
bool SetModel(const Model &model)
Definition: SimdMotion.hpp:625
SIMD_INLINE void DrawLine(View< A > &canvas, ptrdiff_t x1, ptrdiff_t y1, ptrdiff_t x2, ptrdiff_t y2, const Color &color, size_t width=1)
Draws a line at the image.
Definition: SimdDrawing.hpp:49
SIMD_INLINE void DrawRectangle(View< A > &canvas, ptrdiff_t left, ptrdiff_t top, ptrdiff_t right, ptrdiff_t bottom, const Color &color, size_t width=1)
Draws a rectangle at the image.
Definition: SimdDrawing.hpp:89
SIMD_INLINE String ToString(Id id)
Converts ID to string.
Definition: SimdMotion.hpp:326
Contains Framework for motion detection.
Definition: SimdMotion.hpp:201
Simd::Point< double > FSize
ONVIF 2D-size (width and height). ONVIF size is restricted by range [0, 2].
Definition: SimdMotion.hpp:209
Simd::Point< ptrdiff_t > Point
screen point (x and y).
Definition: SimdMotion.hpp:206
Event structure.
Definition: SimdMotion.hpp:367
@ SabotageOff
A disappearing of too big motion on the screen.
Definition: SimdMotion.hpp:378
@ ObjectIn
An appearing of new object.
Definition: SimdMotion.hpp:375
@ ObjectOut
A disappearing of object.
Definition: SimdMotion.hpp:376
@ SabotageOn
An appearing of too big motion on the screen.
Definition: SimdMotion.hpp:377
Model structure.
Definition: SimdMotion.hpp:419
FSize size
A minimal size of object to detect. ONVIF size is restricted by range [0, 2].
Definition: SimdMotion.hpp:423
Object structure.
Definition: SimdMotion.hpp:353
Options structure.
Definition: SimdMotion.hpp:511
int DifferenceDxFeatureWeight
A weight of X-gradient feature for difference estimation. By default it is equal to 18.
Definition: SimdMotion.hpp:515
double ClassificationShiftMin
A minimal shift (in screen diagonals) of motion region to detect object. By default it is equal to 0....
Definition: SimdMotion.hpp:535
double TrackingAdditionalLinking
A coefficient to boost trajectory linking. By default it is equal to 0.
Definition: SimdMotion.hpp:532
double ClassificationTimeMin
A minimal life time (in seconds) of motion region to detect object. By default it is equal to 1 secon...
Definition: SimdMotion.hpp:536
int DifferenceDyFeatureWeight
A weight of Y-gradient feature for difference estimation. By default it is equal to 18.
Definition: SimdMotion.hpp:516
24-bit BGR pixel.
Definition: SimdPixel.hpp:55
T y
Specifies the y-coordinate of a point.
Definition: SimdPoint.hpp:76
const size_t height
A height of the image.
Definition: SimdView.hpp:143