A Multiclient and server system for recording, submitting, processing, and evaluating surgical procedures. This system consists of two main components: a client application for video capture and submission, and a server for processing and analysis.
┌─────────────────┐ ┌─────────────────┐ ┌───────────────┐
│ Client │ │ Server │ │ Email │
│ - Video capture │──────▶│ - Queue mgmt │──────▶│ Notification │
│ - User info │◀──────│ - Processing │ │ to User │
│ - Submission │ │ - Results │ └───────────────┘
└─────────────────┘ └─────────────────┘
- Video recording using webcam with start, pause, and stop controls
- User information capture (name, email, program, iteration, additional details)
- Video upload to analysis server with progress tracking
- Resilient network failure handling and automatic retries
- User-friendly interface with status updates
- REST API built with FastAPI for receiving video submissions
- Asynchronous processing queue for handling multiple submissions
- Email notifications for sending evaluation results
- Robust error handling and edge case management
- Network connectivity monitoring with automatic retries
-
Create a virtual environment (optional but recommended):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
Install dependencies:
pip install -r requirements.txt
-
Navigate to the server directory:
cd ../server -
Create a virtual environment (if not already created):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
Install dependencies:
pip install -r requirements.txt -
Update configuration settings in
config.pyif needed.
cd server
python main.pyBy default, the server will run on http://0.0.0.0:8000.
cd client
python main.pyEndpoint: POST /submit
Form Data:
video: Video file (required)name: User's name (required)email: User's email (required)iteration_number: Iteration number (required)program: Program name (required)additional_info: Additional information (optional)
Response:
{
"submission_id": "unique-id",
"status": "accepted",
"message": "Your video has been queued for processing",
"queue_position": 1,
"estimated_processing_time": 30
}Endpoint: GET /status/{submission_id}
Response:
{
"status": "queued",
"submission_time": "2023-05-01T12:00:00",
"queue_position": 1,
"estimated_processing_time": 30
}Possible status values:
queued: In queue waiting for processingprocessing: Currently being processedcompleted: Processing completedfailed: Processing failedwaiting_for_internet: Waiting for internet connectioncancelled: Submission was cancelled
- Cancel a Submission:
DELETE /submission/{submission_id} - Server Health Check:
GET /health - Queue Status:
GET /queue-status
The client application uses a flexible configuration system with multiple layers:
- Default Configuration: Default values are defined in
utils/config.py - Local Configuration Override: Create a
utils/local_config.pyfile to override default settings - Configuration File: Uses a
config.inifile for persistent configuration
- Server URL and endpoints
- Connection and upload timeouts
- Default video path and format
- Video quality settings
- UI refresh rates
- Retry settings and policies
All configuration options are in config.py:
# Server settings
HOST: str = "0.0.0.0"
PORT: int = 8000
DEBUG: bool = True
# Email settings
EMAIL_SERVER: str = "smtp.gmail.com"
EMAIL_PORT: int = 587
EMAIL_USERNAME: str = "your_email@gmail.com"
EMAIL_PASSWORD: str = "your_app_password"
EMAIL_FROM: str = "surgical.skills.system@example.com"
EMAIL_ENABLED: bool = False # Set to True to actually send emails
# Storage settings
VIDEO_STORAGE_PATH: str = "videos"
RESULTS_STORAGE_PATH: str = "results"
# Processing settings
MAX_CONCURRENT_JOBS: int = 3
PROCESSING_TIME: int = 30 # seconds
# Network check settings
NETWORK_CHECK_INTERVAL: int = 60 # seconds- Connection timeouts with automatic retries
- Server unavailability detection
- Upload interruptions with resumption
- Periodic connectivity checks on server
- Queuing of submissions during network outages
- Simultaneous video submissions handling
- Configurable concurrent processing limit
- Accurate queue position and processing time estimates
- Automatic retry mechanism when connectivity is lost
- Comprehensive error catching and logging
- Failed uploads and processing errors are properly reported
- Email delivery failures with retry mechanisms
- User-friendly error messages
- Video files storage organization
- Results maintenance and organization
- Server resources monitoring