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

◆ sample_regions()

std::vector< Kinesis::Vision::FieldSample > MayaFlux::Yantra::VisionExtractor::sample_regions ( const std::shared_ptr< Core::VKImage > &  source,
const Kinesis::Vision::VisionAnalysis &  analysis,
uint32_t  source_w,
uint32_t  source_h 
)

sample() for every find_elements box in one dispatch, in box order.

Definition at line 504 of file VisionExtractor.cpp.

508{
509 if (!analysis.find_elements || analysis.find_elements->boxes.empty())
510 return {};
511
512 const auto& boxes = analysis.find_elements->boxes;
513 const auto count = static_cast<uint32_t>(boxes.size());
514
515 std::vector<uint32_t> rects;
516 rects.reserve(boxes.size() * 4);
517 for (const auto& b : boxes) {
518 const auto rect = pixel_rect(b, source_w, source_h);
519 rects.insert(rects.end(), rect.begin(), rect.end());
520 }
521
522 auto& ctx = reduce_context();
523 use_shader(ctx, "region_sample_batch.comp.spv", k_wg_reduce, sizeof(BatchCountPC));
524 ctx.stage_image(source);
525 ctx.set_binding_data(3, std::span<const uint32_t>(rects));
526 ctx.set_push_constants(BatchCountPC { .count = count });
527
528 const auto raw = dispatch_reduce(ctx, 256U * count, static_cast<size_t>(count) * 3 * sizeof(glm::vec4));
529 std::vector<Kinesis::Vision::FieldSample> out;
530 if (raw.size() < static_cast<size_t>(count) * 12)
531 return out;
532
533 out.reserve(count);
534 for (uint32_t i = 0; i < count; ++i)
535 out.push_back(field_sample(raw.data() + static_cast<size_t>(i) * 12));
536 return out;
537}
size_t b
std::vector< float > * out
size_t count
TextureExecutionContext & reduce_context()

References b, count, MayaFlux::Kinesis::Vision::VisionAnalysis::find_elements, out, and reduce_context().

Referenced by run_operation().

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