mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-13 04:37:14 -05:00
Add helper classes to more easily handle video condition parameters
This commit is contained in:
@@ -23,6 +23,8 @@ target_sources(
|
||||
macro-condition-video.hpp
|
||||
opencv-helpers.cpp
|
||||
opencv-helpers.hpp
|
||||
paramerter-wrappers.cpp
|
||||
paramerter-wrappers.hpp
|
||||
preview-dialog.cpp
|
||||
preview-dialog.hpp
|
||||
threshold-slider.cpp
|
||||
|
||||
112
src/macro-external/opencv/paramerter-wrappers.cpp
Normal file
112
src/macro-external/opencv/paramerter-wrappers.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "paramerter-wrappers.hpp"
|
||||
|
||||
bool PatternMatchParameters::Save(obs_data_t *obj) const
|
||||
{
|
||||
auto data = obs_data_create();
|
||||
obs_data_set_bool(data, "useForChangedCheck", useForChangedCheck);
|
||||
obs_data_set_double(data, "threshold", threshold);
|
||||
obs_data_set_bool(data, "useAlphaAsMask", useAlphaAsMask);
|
||||
obs_data_set_obj(obj, "patternMatchData", data);
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PatternMatchParameters::Load(obs_data_t *obj)
|
||||
{
|
||||
// TODO: Remove this fallback in a future version
|
||||
if (!obs_data_has_user_value(obj, "patternMatchData")) {
|
||||
useForChangedCheck =
|
||||
obs_data_get_bool(obj, "usePatternForChangedCheck");
|
||||
threshold = obs_data_get_double(obj, "threshold");
|
||||
useAlphaAsMask = obs_data_get_bool(obj, "useAlphaAsMask");
|
||||
return true;
|
||||
}
|
||||
auto data = obs_data_get_obj(obj, "patternMatchData");
|
||||
useForChangedCheck = obs_data_get_bool(data, "useForChangedCheck");
|
||||
threshold = obs_data_get_double(data, "threshold");
|
||||
useAlphaAsMask = obs_data_get_bool(data, "useAlphaAsMask");
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ObjDetectParamerts::Save(obs_data_t *obj) const
|
||||
{
|
||||
auto data = obs_data_create();
|
||||
obs_data_set_string(data, "modelPath", modelPath.c_str());
|
||||
obs_data_set_double(data, "scaleFactor", scaleFactor);
|
||||
obs_data_set_int(data, "minNeighbors", minNeighbors);
|
||||
minSize.Save(data, "minSize");
|
||||
maxSize.Save(data, "maxSize");
|
||||
obs_data_set_obj(obj, "objectMatchData", data);
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isScaleFactorValid(double scaleFactor)
|
||||
{
|
||||
return scaleFactor > 1.;
|
||||
}
|
||||
|
||||
bool isMinNeighborsValid(int minNeighbors)
|
||||
{
|
||||
return minNeighbors >= minMinNeighbors &&
|
||||
minNeighbors <= maxMinNeighbors;
|
||||
}
|
||||
|
||||
bool ObjDetectParamerts::Load(obs_data_t *obj)
|
||||
{
|
||||
// TODO: Remove this fallback in a future version
|
||||
if (!obs_data_has_user_value(obj, "patternMatchData")) {
|
||||
modelPath = obs_data_get_string(obj, "modelDataPath");
|
||||
scaleFactor = obs_data_get_double(obj, "scaleFactor");
|
||||
if (!isScaleFactorValid(scaleFactor)) {
|
||||
scaleFactor = 1.1;
|
||||
}
|
||||
minNeighbors = obs_data_get_int(obj, "minNeighbors");
|
||||
if (!isMinNeighborsValid(minNeighbors)) {
|
||||
minNeighbors = minMinNeighbors;
|
||||
}
|
||||
minSize.Load(obj, "minSize");
|
||||
maxSize.Load(obj, "maxSize");
|
||||
return true;
|
||||
}
|
||||
auto data = obs_data_get_obj(obj, "objectMatchData");
|
||||
modelPath = obs_data_get_string(data, "modelPath");
|
||||
scaleFactor = obs_data_get_double(data, "scaleFactor");
|
||||
if (!isScaleFactorValid(scaleFactor)) {
|
||||
scaleFactor = 1.1;
|
||||
}
|
||||
minNeighbors = obs_data_get_int(data, "minNeighbors");
|
||||
if (!isMinNeighborsValid(minNeighbors)) {
|
||||
minNeighbors = minMinNeighbors;
|
||||
}
|
||||
minSize.Load(data, "minSize");
|
||||
maxSize.Load(data, "maxSize");
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AreaParamters::Save(obs_data_t *obj) const
|
||||
{
|
||||
auto data = obs_data_create();
|
||||
obs_data_set_bool(data, "enabled", enable);
|
||||
area.Save(data, "area");
|
||||
obs_data_set_obj(obj, "areaData", data);
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AreaParamters::Load(obs_data_t *obj)
|
||||
{
|
||||
// TODO: Remove this fallback in a future version
|
||||
if (!obs_data_has_user_value(obj, "areaData")) {
|
||||
enable = obs_data_get_bool(obj, "checkAreaEnabled");
|
||||
area.Load(obj, "checkArea");
|
||||
return true;
|
||||
}
|
||||
auto data = obs_data_get_obj(obj, "areaData");
|
||||
enable = obs_data_get_bool(data, "enabled");
|
||||
area.Load(data, "area");
|
||||
obs_data_release(data);
|
||||
return true;
|
||||
}
|
||||
53
src/macro-external/opencv/paramerter-wrappers.hpp
Normal file
53
src/macro-external/opencv/paramerter-wrappers.hpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
#include "opencv-helpers.hpp"
|
||||
#include "area-selection.hpp"
|
||||
|
||||
#include <obs.hpp>
|
||||
#include <obs-module.h>
|
||||
|
||||
enum class VideoCondition {
|
||||
MATCH,
|
||||
DIFFER,
|
||||
HAS_NOT_CHANGED,
|
||||
HAS_CHANGED,
|
||||
NO_IMAGE,
|
||||
PATTERN,
|
||||
OBJECT,
|
||||
BRIGHTNESS,
|
||||
};
|
||||
|
||||
class PatternMatchParameters {
|
||||
public:
|
||||
bool Save(obs_data_t *obj) const;
|
||||
bool Load(obs_data_t *obj);
|
||||
|
||||
QImage image;
|
||||
bool useForChangedCheck = false;
|
||||
bool useAlphaAsMask = false;
|
||||
double threshold = 0.8;
|
||||
};
|
||||
|
||||
class ObjDetectParamerts {
|
||||
public:
|
||||
bool Save(obs_data_t *obj) const;
|
||||
bool Load(obs_data_t *obj);
|
||||
|
||||
std::string modelPath =
|
||||
obs_get_module_data_path(obs_current_module()) +
|
||||
std::string(
|
||||
"/res/cascadeClassifiers/haarcascade_frontalface_alt.xml");
|
||||
cv::CascadeClassifier cascade;
|
||||
double scaleFactor = defaultScaleFactor;
|
||||
int minNeighbors = minMinNeighbors;
|
||||
advss::Size minSize{0, 0};
|
||||
advss::Size maxSize{0, 0};
|
||||
};
|
||||
|
||||
class AreaParamters {
|
||||
public:
|
||||
bool Save(obs_data_t *obj) const;
|
||||
bool Load(obs_data_t *obj);
|
||||
|
||||
bool enable = false;
|
||||
advss::Area area{0, 0, 0, 0};
|
||||
};
|
||||
Reference in New Issue
Block a user