Spaces:
Running
Running
File size: 4,135 Bytes
d33203e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# ๐ Refactored Code Structure
The application has been refactored into modular components for better maintainability and understanding.
## ๐๏ธ File Structure
```
๐ฆ Bahngleiserfassung/
โโโ ๐ฏ app.py # Main Streamlit application (refactored)
โโโ ๐น video_processing.py # Video frame extraction and repair utilities
โโโ ๐ง ontology_integration.py # Ontology-based scene analysis and risk assessment
โโโ ๐ค model_processing.py # Local and remote AI model processing
โโโ ๐ฅ๏ธ ui_components.py # Streamlit UI components and rendering
โโโ ๐งฎ ontology_eval.py # Core ontology evaluation logic (unchanged)
โโโ ๐ฌ local_models.py # Local AI models (ViT, BLIP) (unchanged)
โโโ ๐พ app_original_backup.py # Backup of original monolithic app.py
```
## ๐ Module Responsibilities
### ๐ฏ `app.py` - Main Application
- **Purpose**: Main entry point and orchestration
- **Functions**:
- Application initialization and layout
- Model setup and configuration
- Main processing workflow coordination
- Input validation and error handling
### ๐น `video_processing.py` - Video Processing
- **Purpose**: Video frame extraction and repair
- **Functions**:
- `extract_frames_from_video()` - Extract frames at specified FPS
- `repair_video_with_ffmpeg()` - Repair corrupted video files
- Handle various video formats (MP4, AVI, MOV, MKV)
### ๐ง `ontology_integration.py` - Ontology Analysis
- **Purpose**: Scene analysis using ontology-based risk assessment
- **Functions**:
- `analyze_scene_with_ontology()` - Main ontology analysis function
- `_extract_ontology_features()` - Extract features from scene descriptions
- `_calculate_person_on_track_confidence()` - Calculate specific risk confidence
- `extract_scene_description()` - Extract text from model results
### ๐ค `model_processing.py` - Model Processing
- **Purpose**: Handle local and remote AI model processing
- **Functions**:
- `process_image_locally()` - Process images using local models
- `query_huggingface_api()` - Process images using remote HF API
- `process_frame()` - Unified frame processing interface
- `image_to_base64()` - Image conversion utilities
### ๐ฅ๏ธ `ui_components.py` - UI Components
- **Purpose**: Streamlit UI components and rendering
- **Functions**:
- `render_sidebar_config()` - Configuration sidebar
- `render_input_section()` - Video upload interface
- `render_frame_result()` - Display frame analysis results
- `render_validation_errors()` - Show validation messages
- Various helper rendering functions
## ๐ Data Flow
```mermaid
graph TD
A[app.py] --> B[ui_components.py]
A --> C[video_processing.py]
A --> D[model_processing.py]
A --> E[ontology_integration.py]
C --> F[Extract Frames]
D --> G[Process with AI Models]
E --> H[Ontology Risk Assessment]
F --> G
G --> H
H --> B
I[local_models.py] --> D
J[ontology_eval.py] --> E
```
## โจ Benefits of Refactoring
1. **๐งฉ Modularity**: Each module has a single responsibility
2. **๐ง Maintainability**: Easier to update and debug individual components
3. **๐ Readability**: Clear separation of concerns and smaller, focused files
4. **๐งช Testability**: Each module can be tested independently
5. **๐ Reusability**: Components can be reused in other projects
6. **๐ฅ Collaboration**: Multiple developers can work on different modules
## ๐ Usage
The refactored application works exactly the same as before:
```bash
streamlit run app.py
```
All functionality remains identical:
- โ
NONE / ๐ข LOW / ๐ MEDIUM / โ ๏ธ HIGH / ๐จ CRITICAL classification
- Toggle ontology analysis on/off
- Support for local and remote AI models
- Video processing with automatic repair
## ๐ Backwards Compatibility
- Original functionality is preserved
- API and interface remain unchanged
- Configuration and settings work the same way
- The original monolithic code is backed up as `app_original_backup.py` |