25 std::vector<Kinesis::Vision::BoundingBox>
boxes;
26 std::vector<Kinesis::Vision::Contour>
contours;
28 std::vector<Kinesis::Vision::TrackResult>
tracks;
61 const VisionAnalysis& analysis,
const std::string& qualifier);
95template <ComputeData InputType = std::vector<Kakshya::DataVariant>,
96 ComputeData OutputType = std::vector<Kakshya::DataVariant>>
162 return {
"default" };
168 return "VisionAnalyzer";
177 if (native_spans.empty()) {
178 error<std::runtime_error>(
181 std::source_location::current(),
182 "VisionAnalyzer: no pixel data in input");
187 for (
const auto& dim : structure_info.dimensions) {
189 w =
static_cast<uint32_t
>(dim.size);
191 h =
static_cast<uint32_t
>(dim.size);
195 w = Kakshya::get_metadata_value<uint32_t>(
input.metadata,
"width").value_or(0);
197 h = Kakshya::get_metadata_value<uint32_t>(
input.metadata,
"height").value_or(0);
199 if (w == 0 ||
h == 0) {
200 error<std::runtime_error>(
203 std::source_location::current(),
204 "VisionAnalyzer: width/height not resolvable from dimensions or metadata");
207 auto frame = std::visit([&](
const auto& span) -> std::span<const float> {
208 using ElemT =
typename std::decay_t<
decltype(span)>::value_type;
209 if constexpr (std::is_same_v<ElemT, float>) {
212 using VecT = std::vector<ElemT>;
213 VecT tmp(span.begin(), span.end());
221 error<std::runtime_error>(
224 std::source_location::current(),
225 "VisionAnalyzer: normalisation produced empty frame");
231 if (
const auto* v = std::get_if<std::vector<float>>(&vr.
pixel_image))
237 std::visit([&](
const auto& s) {
238 using T = std::decay_t<
decltype(s)>;
239 if constexpr (std::is_same_v<T, Kinesis::Vision::GradientResult>) {
241 }
else if constexpr (std::is_same_v<T, Kinesis::Vision::ComponentResult>) {
244 }
else if constexpr (std::is_same_v<T, std::vector<Kinesis::Vision::Contour>>) {
246 }
else if constexpr (std::is_same_v<T, std::vector<Kinesis::Vision::Keypoint>>) {
248 }
else if constexpr (std::is_same_v<T, std::vector<Kinesis::Vision::TrackResult>>) {
258 }
catch (
const std::exception& e) {
260 "VisionAnalyzer: {}", e.what());
263 err.
metadata[
"error"] = std::string(e.what());
278 std::vector<Kakshya::DataVariant> out_variants;
279 const auto* pix = std::get_if<std::vector<float>>(&vr.
pixel_image);
280 if (pix && !pix->empty())
281 out_variants.emplace_back(*pix);
284 std::vector<std::vector<double>> {}, info);
285 out.
data = OperationHelper::reconstruct_from_double<OutputType>({}, info);
287 if constexpr (std::is_same_v<OutputType, std::vector<Kakshya::DataVariant>>) {
288 out.
data = std::move(out_variants);
296 out.
metadata[
"source_analyzer"] = std::string(
"VisionAnalyzer");
309 std::vector<Kakshya::DataVariant>>;
313 std::vector<Kakshya::DataVariant>>;
317 std::vector<Kakshya::DataVariant>>;
#define MF_ERROR(comp, ctx,...)
Core::GlobalInputConfig input
Modern, digital-first universal analyzer framework for Maya Flux.
Dispatch engine for VisionSequence execution.
Declarative description of a Kinesis::Vision processing sequence.
void reset()
Clear stored inter-frame state.
VisionResult run(const VisionSequence &sequence, std::span< const float > frame, uint32_t w, uint32_t h)
Execute a VisionSequence on one frame.
Stateful executor for a VisionSequence.
output_type convert_result(std::vector< std::vector< double > > &result_data, DataStructureInfo &metadata)
Convert processed double data back to OutputType using metadata and optional callback.
static std::tuple< std::vector< Kakshya::DataSpanVariant >, DataStructureInfo > extract_structured_native(T &compute_data)
Extract native-typed channel spans and structure metadata from a Datum or direct ComputeData,...
std::any get_current_analysis() const
Access cached analysis from last operation.
std::any analyze_data(const input_type &data)
User-facing analysis method - returns analysis results directly.
void store_current_analysis(AnalysisResultType &&result) const
Template-flexible analyzer base with instance-defined I/O types.
void reset()
Clear stored optical flow state.
output_type analyze_implementation(const input_type &input) override
Pure virtual analysis implementation - derived classes implement this.
void set_sequence(Kinesis::Vision::VisionSequence sequence)
Replace the pipeline and reset inter-frame executor state.
VisionAnalyzer(Kinesis::Vision::VisionSequence sequence)
Construct with the VisionSequence to execute each call.
output_type create_pipeline_output(const input_type &input, const Kinesis::Vision::VisionResult &vr, const DataStructureInfo &info)
std::vector< std::string > get_available_methods() const override
Get available analysis methods for this analyzer.
Kinesis::Vision::VisionExecutor m_executor
VisionAnalysis analyze_vision(const input_type &data)
Type-safe vision analysis.
std::vector< float > m_float_storage
VisionAnalysis get_vision_analysis() const
Get the last VisionAnalysis result.
VisionAnalysis analyze_vision(const InputType &data)
AnalysisType get_analysis_type() const override
Gets the analysis type category for this analyzer.
Kinesis::Vision::VisionSequence m_sequence
std::string get_analyzer_name() const override
Get analyzer-specific name (derived classes override this)
UniversalAnalyzer that takes any pixel-bearing input, runs a VisionSequence via VisionExecutor,...
@ ComputeMatrix
Compute operations (Yantra - algorithms, matrices, DSP)
@ Yantra
DSP algorithms, computational units, matrix operations, Grammar.
std::span< const float > as_normalised_float(const DataVariant &variant, std::vector< float > &storage)
Extract a DataVariant holding pixel data as a normalised float span.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
@ IMAGE_2D
2D image (grayscale or single channel)
AnalysisType
Categories of analysis operations for discovery and organization.
@ SPATIAL
Multi-dimensional geometric analysis.
double extract_scalar_vision(const VisionAnalysis &analysis, const std::string &qualifier)
Extract a named scalar from a VisionAnalysis result.
static DataDimension spatial_2d(uint64_t width, uint64_t height)
Convenience constructor for a 2D spatial dimension.
@ SPATIAL_Y
Spatial Y axis.
@ SPATIAL_X
Spatial X axis (images, tensors)
Represents a point or span in N-dimensional space.
Result of connected component labelling.
Gradient maps produced by Sobel and Scharr operators.
Kakshya::DataVariant pixel_image
StructuredOutput structured
Result of executing a VisionSequence on one frame.
Ordered sequence of VisionSteps describing a complete vision pipeline.
Metadata about data structure for reconstruction.
T data
The actual computation data.
std::vector< Kakshya::DataDimension > dimensions
Data dimensional structure.
Kakshya::DataModality modality
Data modality (audio, image, spectral, etc.)
std::unordered_map< std::string, std::any > metadata
Associated metadata.
Input/Output container for computation pipeline data flow with structure preservation.
Kinesis::Vision::ComponentResult components
std::vector< Kinesis::Vision::Keypoint > keypoints
std::vector< Kinesis::Vision::Contour > contours
std::vector< Kinesis::Vision::BoundingBox > boxes
Kinesis::Vision::GradientResult gradient
std::vector< Kinesis::Vision::TrackResult > tracks
Flattened structured outputs from one VisionResult.
std::vector< float > pixel_image
Analysis result produced by VisionAnalyzer for one frame.