MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ result()

std::shared_ptr< const Kinesis::Vision::VisionResult > MayaFlux::Yantra::Vision::VisionMatrix::result ( Kinesis::Vision::VisionIntent  intent)

The VisionResult of the sequence that served intent in the last completed analysis, or null when the query has no such sequence or nothing has completed yet.

TrackObjects and EstimateMotion share one sequence. Images that hold their own op's output at the end of each sequence:

  • FindElements: gray or rgba_to_hsv, the threshold image.
  • DetectEdges: canny. Its gray holds the edges too.
  • MeasureAppearance: gray, sobel.
  • DetectFeatures, TrackObjects: harris_response. Their gray holds blurred gradients.
  • EstimateMotion: flow, flow_visualization, and gray when TrackObjects is not set.

The result stays valid however long it is held. Its images are rewritten in place when that sequence runs again.

Definition at line 98 of file VisionMatrix.cpp.

99{
101
102 const auto analyzer_op = analyzer();
103 const auto results = analyzer_op->get_shared_results();
104 const auto resolved = Kinesis::Vision::resolve(analyzer_op->get_query());
105 const size_t lanes = std::min(results->size(), resolved.size());
106
107 for (size_t lane = 0; lane < lanes; ++lane) {
108 const auto& steps = resolved[lane].sequence.steps;
109 const auto has = [&steps](VisionOp op) {
110 return std::ranges::any_of(steps, [op](const auto& step) { return step.op == op; });
111 };
112
113 bool serves = false;
114 switch (intent) {
115 case VisionIntent::FindElements:
116 serves = has(VisionOp::ConnectedComponents);
117 break;
118 case VisionIntent::TrackObjects:
119 serves = has(VisionOp::TrackKeypoints);
120 break;
121 case VisionIntent::DetectFeatures:
122 serves = has(VisionOp::HarrisResponse) && !has(VisionOp::TrackKeypoints);
123 break;
124 case VisionIntent::DetectEdges:
125 serves = has(VisionOp::Canny);
126 break;
127 case VisionIntent::EstimateMotion:
128 serves = has(VisionOp::OpticalFlowDense);
129 break;
130 case VisionIntent::MeasureAppearance:
131 serves = has(VisionOp::Sobel);
132 break;
133 default:
134 break;
135 }
136
137 if (serves)
138 return { results, &(*results)[lane] };
139 }
140
141 return nullptr;
142}
const std::vector< Kinesis::Vision::VisionResult > & results()
The VisionResult of every sequence the analyzer's last completed analysis ran, with each step's image...
std::shared_ptr< VisionAnalyzer > analyzer()
The matrix's "analyze" operation.
VisionOp
Named operations available in a VisionSequence.
Definition VisionOp.hpp:30
std::vector< ResolvedSequence > resolve(const VisionQuery &query)
Resolve a VisionQuery into the ResolvedSequences needed to satisfy every active intent.

References analyzer(), MayaFlux::Kinesis::Vision::resolve(), and results().

+ Here is the call graph for this function: