use scirs2_core::ndarray::{Array1, Array2, Array3};
use std::collections::HashMap;
pub struct ActivityRecognitionEngine {
pub(super) action_detectors: Vec<ActionDetector>,
pub(super) sequence_analyzer: ActivitySequenceAnalyzer,
pub(super) interaction_recognizer: MultiPersonInteractionRecognizer,
pub(super) context_classifier: ContextAwareActivityClassifier,
pub(super) temporal_modeler: TemporalActivityModeler,
pub(super) hierarchical_decomposer: HierarchicalActivityDecomposer,
pub(super) knowledge_base: ActivityKnowledgeBase,
pub(super) previous_frame: std::cell::RefCell<Option<Array3<f32>>>,
}
#[derive(Debug, Clone)]
pub struct ActionDetector {
pub(super) name: String,
pub(super) action_types: Vec<String>,
pub(super) confidence_threshold: f32,
pub(super) temporal_window: usize,
pub(super) feature_method: String,
}
#[derive(Debug, Clone)]
pub struct ActivitySequenceAnalyzer {
pub(super) max_sequence_length: usize,
pub(super) pattern_models: Vec<SequencePattern>,
pub(super) transition_models: HashMap<String, TransitionModel>,
pub(super) anomaly_params: AnomalyDetectionParams,
}
#[derive(Debug, Clone)]
pub struct MultiPersonInteractionRecognizer {
pub(super) interaction_types: Vec<InteractionType>,
pub(super) tracking_params: PersonTrackingParams,
pub(super) social_distance_model: SocialDistanceModel,
pub(super) group_recognition: GroupActivityRecognition,
}
#[derive(Debug, Clone)]
pub struct ContextAwareActivityClassifier {
pub(super) context_features: Vec<ContextFeature>,
pub(super) environment_classifiers: Vec<EnvironmentClassifier>,
pub(super) object_associations: HashMap<String, Vec<String>>,
pub(super) scene_correlations: HashMap<String, ActivityDistribution>,
}
#[derive(Debug, Clone)]
pub struct TemporalActivityModeler {
pub(super) temporal_resolution: f32,
pub(super) memory_length: usize,
pub(super) rnn_params: RNNParameters,
pub(super) attention_mechanisms: Vec<TemporalAttention>,
}
#[derive(Debug, Clone)]
pub struct HierarchicalActivityDecomposer {
pub(super) hierarchy_levels: Vec<ActivityLevel>,
pub(super) decomposition_rules: Vec<DecompositionRule>,
pub(super) composition_rules: Vec<CompositionRule>,
}
#[derive(Debug, Clone)]
pub struct ActivityKnowledgeBase {
pub(super) activity_definitions: HashMap<String, ActivityDefinition>,
pub(super) ontology: ActivityOntology,
pub(super) common_patterns: Vec<ActivityPattern>,
pub(super) cultural_variations: HashMap<String, Vec<ActivityVariation>>,
}
#[derive(Debug, Clone)]
pub struct ActivityRecognitionResult {
pub activities: Vec<DetectedActivity>,
pub sequences: Vec<ActivitySequence>,
pub interactions: Vec<PersonInteraction>,
pub scene_summary: ActivitySummary,
pub timeline: ActivityTimeline,
pub confidence_scores: ConfidenceScores,
pub uncertainty: ActivityUncertainty,
}
#[derive(Debug, Clone)]
pub struct DetectedActivity {
pub activity_class: String,
pub subtype: Option<String>,
pub confidence: f32,
pub temporal_bounds: (f32, f32),
pub spatial_region: Option<(f32, f32, f32, f32)>,
pub involved_persons: Vec<PersonID>,
pub involved_objects: Vec<ObjectID>,
pub attributes: HashMap<String, f32>,
pub motion_characteristics: MotionCharacteristics,
}
#[derive(Debug, Clone)]
pub struct ActivitySequence {
pub sequence_id: String,
pub activities: Vec<DetectedActivity>,
pub sequence_type: String,
pub confidence: f32,
pub transitions: Vec<ActivityTransition>,
pub completeness: f32,
}
#[derive(Debug, Clone)]
pub struct PersonInteraction {
pub interaction_type: String,
pub participants: Vec<PersonID>,
pub strength: f32,
pub duration: f32,
pub proximity: f32,
pub attributes: HashMap<String, f32>,
}
#[derive(Debug, Clone)]
pub struct ActivitySummary {
pub dominant_activity: String,
pub diversity_index: f32,
pub energy_level: f32,
pub social_interaction_level: f32,
pub complexity_score: f32,
pub anomaly_indicators: Vec<AnomalyIndicator>,
}
#[derive(Debug, Clone)]
pub struct ActivityTimeline {
pub segments: Vec<TimelineSegment>,
pub resolution: f32,
pub flow_patterns: Vec<FlowPattern>,
}
#[derive(Debug, Clone)]
pub struct ConfidenceScores {
pub overall: f32,
pub per_activity: HashMap<String, f32>,
pub temporal_segmentation: f32,
pub spatial_localization: f32,
}
#[derive(Debug, Clone)]
pub struct ActivityUncertainty {
pub epistemic: f32,
pub aleatoric: f32,
pub temporal: f32,
pub spatial: f32,
pub confusion_matrix: Array2<f32>,
}
pub type PersonID = String;
pub type ObjectID = String;
#[derive(Debug, Clone)]
pub struct MotionCharacteristics {
pub velocity: f32,
pub acceleration: f32,
pub direction: f32,
pub smoothness: f32,
pub periodicity: f32,
}
#[derive(Debug, Clone)]
pub struct ActivityTransition {
pub from_activity: String,
pub to_activity: String,
pub probability: f32,
pub typical_duration: f32,
}
#[derive(Debug, Clone)]
pub struct AnomalyIndicator {
pub anomaly_type: String,
pub severity: f32,
pub description: String,
pub temporal_location: f32,
}
#[derive(Debug, Clone)]
pub struct TimelineSegment {
pub start_time: f32,
pub end_time: f32,
pub dominant_activity: String,
pub activity_mix: HashMap<String, f32>,
}
#[derive(Debug, Clone)]
pub struct FlowPattern {
pub pattern_type: String,
pub frequency: f32,
pub amplitude: f32,
pub phase: f32,
}
#[derive(Debug, Clone)]
pub struct SequencePattern {
pub pattern_name: String,
pub activity_sequence: Vec<String>,
pub temporal_constraints: Vec<TemporalConstraint>,
pub occurrence_probability: f32,
}
#[derive(Debug, Clone)]
pub struct TemporalConstraint {
pub constraint_type: String,
pub min_duration: f32,
pub max_duration: f32,
pub typical_duration: f32,
}
#[derive(Debug, Clone)]
pub struct TransitionModel {
pub source_activity: String,
pub transition_probabilities: HashMap<String, f32>,
pub typical_durations: HashMap<String, f32>,
}
#[derive(Debug, Clone)]
pub struct AnomalyDetectionParams {
pub detection_threshold: f32,
pub temporal_window: usize,
pub feature_importance: Array1<f32>,
pub novelty_detection: bool,
}
#[derive(Debug, Clone)]
pub enum InteractionType {
Conversation,
Collaboration,
Competition,
Following,
Avoiding,
Playing,
Fighting,
Helping,
Teaching,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct PersonTrackingParams {
pub max_tracking_distance: f32,
pub identity_confidence_threshold: f32,
pub re_identification_enabled: bool,
pub track_merge_threshold: f32,
}
#[derive(Debug, Clone)]
pub struct SocialDistanceModel {
pub personal_space_radius: f32,
pub social_space_radius: f32,
pub public_space_radius: f32,
pub cultural_factors: HashMap<String, f32>,
}
#[derive(Debug, Clone)]
pub struct GroupActivityRecognition {
pub min_group_size: usize,
pub max_group_size: usize,
pub cohesion_threshold: f32,
pub activity_synchronization: bool,
}
#[derive(Debug, Clone)]
pub enum ContextFeature {
SceneType,
TimeOfDay,
Weather,
CrowdDensity,
NoiseLevel,
LightingConditions,
ObjectPresence(String),
}
#[derive(Debug, Clone)]
pub struct EnvironmentClassifier {
pub environment_type: String,
pub typical_activities: Vec<String>,
pub activity_probabilities: HashMap<String, f32>,
pub contextual_cues: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ActivityDistribution {
pub activities: HashMap<String, f32>,
pub temporal_patterns: HashMap<String, TemporalPattern>,
pub confidence: f32,
}
#[derive(Debug, Clone)]
pub struct TemporalPattern {
pub pattern_type: String,
pub peak_times: Vec<f32>,
pub duration_distribution: Array1<f32>,
pub seasonality: Option<SeasonalityInfo>,
}
#[derive(Debug, Clone)]
pub struct SeasonalityInfo {
pub period: f32,
pub amplitude: f32,
pub phase_shift: f32,
}
#[derive(Debug, Clone)]
pub struct RNNParameters {
pub hidden_size: usize,
pub num_layers: usize,
pub dropout_rate: f32,
pub bidirectional: bool,
}
#[derive(Debug, Clone)]
pub struct TemporalAttention {
pub attention_type: String,
pub window_size: usize,
pub attention_weights: Array2<f32>,
pub learnable: bool,
}
#[derive(Debug, Clone)]
pub struct ActivityLevel {
pub level_name: String,
pub granularity: f32,
pub typical_duration: f32,
pub complexity: f32,
}
#[derive(Debug, Clone)]
pub struct DecompositionRule {
pub rule_name: String,
pub parent_activity: String,
pub child_activities: Vec<String>,
pub decomposition_conditions: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct CompositionRule {
pub rule_name: String,
pub component_activities: Vec<String>,
pub composite_activity: String,
pub composition_conditions: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ActivityDefinition {
pub activity_name: String,
pub description: String,
pub typical_duration: f32,
pub required_objects: Vec<String>,
pub typical_poses: Vec<String>,
pub motion_patterns: Vec<String>,
pub contextual_requirements: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ActivityOntology {
pub activity_hierarchy: HashMap<String, Vec<String>>,
pub activity_relationships: Vec<ActivityRelationship>,
pub semantic_similarity: Array2<f32>,
}
#[derive(Debug, Clone)]
pub struct ActivityRelationship {
pub source_activity: String,
pub target_activity: String,
pub relationship_type: String,
pub strength: f32,
}
#[derive(Debug, Clone)]
pub struct ActivityPattern {
pub pattern_name: String,
pub activity_sequence: Vec<String>,
pub temporal_structure: TemporalStructure,
pub context_requirements: Vec<String>,
pub occurrence_frequency: f32,
}
#[derive(Debug, Clone)]
pub struct TemporalStructure {
pub sequence_type: String,
pub timing_constraints: Vec<TimingConstraint>,
pub overlap_patterns: Vec<OverlapPattern>,
}
#[derive(Debug, Clone)]
pub struct TimingConstraint {
pub constraint_type: String,
pub activity_pair: (String, String),
pub min_delay: f32,
pub max_delay: f32,
}
#[derive(Debug, Clone)]
pub struct OverlapPattern {
pub activity_pair: (String, String),
pub overlap_type: String,
pub typical_overlap: f32,
}
#[derive(Debug, Clone)]
pub struct ActivityVariation {
pub variation_name: String,
pub base_activity: String,
pub cultural_context: String,
pub modifications: HashMap<String, String>,
pub prevalence: f32,
}
#[derive(Debug, Clone)]
pub struct ContextClassification {
pub scene_type: String,
pub environment_factors: HashMap<String, f32>,
pub temporal_context: HashMap<String, f32>,
}
#[derive(Debug, Clone)]
pub struct HierarchicalActivityStructure {
pub levels: Vec<ActivityLevel>,
pub activity_tree: ActivityTree,
pub decomposition_confidence: f32,
}
#[derive(Debug, Clone)]
pub struct ActivityTree {
pub root: ActivityNode,
pub nodes: Vec<ActivityNode>,
pub edges: Vec<ActivityEdge>,
}
#[derive(Debug, Clone)]
pub struct ActivityNode {
pub node_id: String,
pub activity_type: String,
pub level: usize,
pub children: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ActivityEdge {
pub parent: String,
pub child: String,
pub relationship_type: String,
}
#[derive(Debug, Clone)]
pub struct ActivityPrediction {
pub predicted_activity: String,
pub probability: f32,
pub expected_start_time: f32,
pub expected_duration: f32,
pub confidence_interval: (f32, f32),
}