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

◆ assemble()

Kinesis::Vision::VisionAnalysis MayaFlux::Yantra::VisionAnalyzer::assemble ( const std::vector< Kinesis::Vision::ResolvedSequence > &  resolved,
const std::vector< Kinesis::Vision::VisionResult > &  results,
uint32_t  w,
uint32_t  h 
)
private

Route every completed sequence result into one VisionAnalysis, apply context filtering and run the GPU reductions.

Definition at line 547 of file VisionAnalyzer.cpp.

551{
552 Kinesis::Vision::VisionAnalysis analysis;
553 std::optional<std::vector<Kinesis::Vision::TrackResult>> raw_tracks;
554 std::optional<std::vector<Kinesis::Vision::Keypoint>> raw_keypoints;
555
556 for (size_t lane = 0; lane < results.size(); ++lane) {
557 const auto& result = results[lane];
558 const auto& entry = resolved[lane];
559
560 collect_into(raw_tracks, raw_keypoints, analysis, result);
561
562 if (result.images.sobel) {
563 const auto& gray = result.gray || !entry.seed_field ? result.gray : results[entry.seed_lane].gray;
564 analysis.measure_appearance = measure_appearance(result, gray, w, h);
565 }
566 }
567
568 if (raw_tracks && m_context.track_objects) {
569 const auto& ctx = *m_context.track_objects;
570 if (ctx.subject_track_id) {
571 const auto id = *ctx.subject_track_id;
572 std::erase_if(*raw_tracks, [&](const auto& t) { return t.id != id; });
573 } else if (ctx.subject_bounds) {
574 const auto& bounds = *ctx.subject_bounds;
575 std::erase_if(*raw_tracks, [&](const auto& t) { return !inside(bounds, t.position); });
576 }
577 }
578
579 if (raw_tracks)
580 analysis.track_objects = reduce_tracks(*raw_tracks, w, h);
581
582 if (raw_keypoints && m_context.detect_features_bounds) {
583 const auto& bounds = *m_context.detect_features_bounds;
584 std::erase_if(*raw_keypoints, [&](const auto& k) { return !inside(bounds, k.position); });
585 }
586
587 if (raw_keypoints)
588 analysis.detect_features = reduce_keypoints(*raw_keypoints);
589
590 if (analysis.find_elements)
591 compute_shapes(*analysis.find_elements, w, h);
592
593 return analysis;
594}
uint32_t h
Definition InkPress.cpp:29
Kinesis::Vision::MeasureAppearanceAnalysis measure_appearance(const Kinesis::Vision::VisionResult &result, const std::shared_ptr< Core::VKImage > &gray, uint32_t w, uint32_t h)
MeasureAppearance's whole-frame gradient sample (region_sample.comp over result.images....
void compute_shapes(Kinesis::Vision::FindElementsAnalysis &fe, uint32_t w, uint32_t h)
Shape descriptors (element_shape.comp) and nearest-neighbour distances (nearest_neighbor....
Kinesis::Vision::DetectFeaturesAnalysis reduce_keypoints(const std::vector< Kinesis::Vision::Keypoint > &keypoints)
Dispatch track_reduce.comp over keypoint positions (fed as their own previous, so velocity reduces to...
Kinesis::Vision::VisionAnalysisContext m_context
Kinesis::Vision::TrackObjectsAnalysis reduce_tracks(const std::vector< Kinesis::Vision::TrackResult > &tracks, uint32_t w, uint32_t h)
Dispatch track_reduce.comp over tracks and fill centroid/velocity/bounds/mean_speed_px/age stats on t...
std::optional< TrackObjectsContext > track_objects
std::optional< BoundingBox > detect_features_bounds

References compute_shapes(), MayaFlux::Kinesis::Vision::VisionAnalysis::detect_features, MayaFlux::Kinesis::Vision::VisionAnalysisContext::detect_features_bounds, MayaFlux::Kinesis::Vision::VisionAnalysis::find_elements, h, m_context, MayaFlux::Kinesis::Vision::VisionAnalysis::measure_appearance, measure_appearance(), reduce_keypoints(), reduce_tracks(), MayaFlux::Kinesis::Vision::VisionAnalysisContext::track_objects, and MayaFlux::Kinesis::Vision::VisionAnalysis::track_objects.

Referenced by advance(), and analyze_resolved().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: