diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..da674533ab77be24c473b2d732d5fa4680333a44 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Deviant Behaviour Manager + +Ð’ данном проекте предÑтавлен менеджер анализа видеозапиÑей, который взаимодейÑтвует Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°Ð¼Ð¸ машинного +воÑприÑÑ‚Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Kafka. Пример конфигураций, путь к которым можно задать через переменную +Ñреды DEVBEH_DBM_DATA_PATH, предÑтавлен в директории example. \ No newline at end of file diff --git a/example/application.yaml b/example/application.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d54852ebc819ae0ad0ada895cf9a7b4070618b08 --- /dev/null +++ b/example/application.yaml @@ -0,0 +1,38 @@ +logging.level.com: "INFO" +logging.file: "./logs/devbeh.logs" +server.port: 8089 + +dbm.max-fps: 10 +dbm.bootstrap-server: "91.151.187.51:9095" +dbm.dev-beh-detections-dir-path: "detections" +dbm.dev-beh-detections-start-frame-id: 0 +dbm.perception-result-dir-path: "perception" +dbm.perception-initial-consumed-frame-id: 0 +dbm.perception-visualization-enabled: true +dbm.kb-history-interval-sec: 120 +dbm.max-occluded-duration-sec: 5 +dbm.general-kb-rules-file-path: "./simple_interaction.pl" +dbm.max-action-duration-sec: 4 +dbm.max-processing-frames: 6000 +dbm.max-queued-frames: 6000 +dbm.file-video-providers: + - name: "A52" + file-path: "./videos/S001C001P001R001A052_rgb.avi" + focalLengthMm: 2.8 + pixelSizeMm: 0.0028 + cameraHeightMm: 2360 + - name: "A55" + file-path: "./videos/S001C001P001R001A055_rgb.avi" + focalLengthMm: 2.8 + pixelSizeMm: 0.0028 + cameraHeightMm: 2360 + - name: "A56" + file-path: "./videos/S001C001P001R001A056_rgb.avi" + focalLengthMm: 2.8 + pixelSizeMm: 0.0028 + cameraHeightMm: 2360 + - name: "A57" + file-path: "./videos/S001C001P001R001A057_rgb.avi" + focalLengthMm: 2.8 + pixelSizeMm: 0.0028 + cameraHeightMm: 2360 diff --git a/example/simple_interaction.pl b/example/simple_interaction.pl new file mode 100644 index 0000000000000000000000000000000000000000..43512b479f8067421cbe1e86c8b917c0f210a301 --- /dev/null +++ b/example/simple_interaction.pl @@ -0,0 +1,67 @@ +% Итерирует от MinIter до MaxIter включительно Ñ ÑˆÐ°Ð³Ð¾Ð¼ Step. +iter(MinIter, _Step, MaxIter, _Iter) :- + MinIter > MaxIter, + !, fail. +iter(MinIter, _Step, _MaxIter, MinIter). +iter(MinIter, Step, MaxIter, Iter) :- + NextMinIter is MinIter + Step, + iter(NextMinIter, Step, MaxIter, Iter). + +% Задает времÑ, большее StartTime, но не более чем на MaxTimeInt +timeGreater(MinTime, MaxTimeDifference, GreaterTime) :- + timeSlice(MinTime), + timeStep(TimeStep), + toMillis(MaxTimeDifference, MaxTimeDifferenceMillis), + iter(TimeStep, TimeStep, MaxTimeDifferenceMillis, TimeInt), + GreaterTime is MinTime + TimeInt. + +timeSmaller(MaxTime, MaxTimeDiff, SmallerTime) :- + timeSlice(MaxTime), + timeStep(TimeStep), + toMillis(MaxTimeDiff, MaxTimeDifferenceMillis), + iter(TimeStep, TimeStep, MaxTimeDifferenceMillis, TimeInt), + SmallerTime is MaxTime - TimeInt, + SmallerTime >= 0. + +timeBetween(StartTime, FinishTime, Time) :- + timeStep(TimeStep), + timeSlice(StartTime), + timeSlice(FinishTime), + StartTime =< FinishTime, + MaxTimeInt is FinishTime - StartTime, + iter(0, TimeStep, MaxTimeInt, TimeInt), + Time is StartTime + TimeInt. + +devBeh(interacted(Pers1, Pers2), StartTime, FinishTime) :- + timeStep(TimeStep), + interact(Pers1, Pers2, StartTime), + StartTimePrev is StartTime - TimeStep, + timeSlice(StartTimePrev), + \+ (interact(Pers1, Pers2, StartTimePrev)), + interact(Pers1, Pers2, FinishTime), + StartTime =< FinishTime, + FinishTimeNext is FinishTime + TimeStep, + timeSlice(FinishTimeNext), + \+ (interact(Pers1, Pers2, FinishTimeNext)). + +interact(Pers1, Pers2, Time) :- + person(Pers1, Time), + bounds(Pers1, Box1, Time), + person(Pers2, Time), + bounds(Pers2, Box2, Time), + boxIntersection(Box1, Box2, BoxInt), + area(BoxInt, IntersecArea), + IntersecArea > 0.01. + +boxIntersection(box(Xf1, Yf1, Xf2, Yf2), box(Xs1, Ys1, Xs2, Ys2), box(XInt1, YInt1, XInt2, YInt2)) :- + XInt1 is max(Xf1, Xs1), + YInt1 is max(Yf1, Ys1), + XInt2 is min(Xf2, Xs2), + YInt2 is min(Yf2, Ys2). + +area(box(X1, Y1, X2, Y2), Area) :- + X1 < X2, + Y1 < Y2, + Area is (X2 - X1) * (Y2 - Y1), + !. +area(box(_, _, _, _), 0). diff --git a/example/videos/S001C001P001R001A052_rgb.avi b/example/videos/S001C001P001R001A052_rgb.avi new file mode 100644 index 0000000000000000000000000000000000000000..fbb6a855178ca30e715e2175b1e2a550e987db5c Binary files /dev/null and b/example/videos/S001C001P001R001A052_rgb.avi differ diff --git a/example/videos/S001C001P001R001A055_rgb.avi b/example/videos/S001C001P001R001A055_rgb.avi new file mode 100644 index 0000000000000000000000000000000000000000..911f6618e8059be2f3fbad8b0c6f82097368618c Binary files /dev/null and b/example/videos/S001C001P001R001A055_rgb.avi differ diff --git a/example/videos/S001C001P001R001A056_rgb.avi b/example/videos/S001C001P001R001A056_rgb.avi new file mode 100644 index 0000000000000000000000000000000000000000..57a5b1a34a2bae000bab06d19713185127e2649f Binary files /dev/null and b/example/videos/S001C001P001R001A056_rgb.avi differ diff --git a/example/videos/S001C001P001R001A057_rgb.avi b/example/videos/S001C001P001R001A057_rgb.avi new file mode 100644 index 0000000000000000000000000000000000000000..f63c4c44fa5ce3267e9c37e6af17dd94e896f8ca Binary files /dev/null and b/example/videos/S001C001P001R001A057_rgb.avi differ