diff --git a/camera-management-api/README.md b/camera-management-api/README.md index a6ca74a..d7a5911 100644 --- a/camera-management-api/README.md +++ b/camera-management-api/README.md @@ -142,9 +142,9 @@ Ensure the `camera_sdk` directory contains the mvsdk library for your GigE camer ### 4. Configure Storage Directory ```bash # Create storage directory (adjust path as needed) -mkdir -p ./storage +mkdir -p ./mnt/nfs_share # Or for system-wide storage: -# sudo mkdir -p /storage && sudo chown $USER:$USER /storage +# sudo mkdir -p /mnt/nfs_share && sudo chown $USER:$USER /mnt/nfs_share ``` ### 5. Setup Time Synchronization (Recommended) @@ -169,7 +169,7 @@ Edit `config.json` to match your setup: { "name": "camera1", "machine_topic": "machine1", - "storage_path": "./storage/camera1", + "storage_path": "./mnt/nfs_share/camera1", "enabled": true } ] @@ -201,7 +201,7 @@ Edit `config.json` to match your setup: { "name": "camera1", "machine_topic": "vibratory_conveyor", - "storage_path": "./storage/camera1", + "storage_path": "./mnt/nfs_share/camera1", "exposure_ms": 1.0, "gain": 3.5, "target_fps": 3.0, diff --git a/camera-management-api/config.compose.json b/camera-management-api/config.compose.json index 4f258b4..444391c 100644 --- a/camera-management-api/config.compose.json +++ b/camera-management-api/config.compose.json @@ -10,7 +10,7 @@ } }, "storage": { - "base_path": "/storage", + "base_path": "/mnt/nfs_share", "max_file_size_mb": 1000, "max_recording_duration_minutes": 60, "cleanup_older_than_days": 30 @@ -29,7 +29,7 @@ { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, @@ -60,7 +60,7 @@ { "name": "camera2", "machine_topic": "vibratory_conveyor", - "storage_path": "/storage/camera2", + "storage_path": "/mnt/nfs_share/camera2", "exposure_ms": 0.2, "gain": 2.0, "target_fps": 0, diff --git a/camera-management-api/config.json b/camera-management-api/config.json index 4f258b4..444391c 100644 --- a/camera-management-api/config.json +++ b/camera-management-api/config.json @@ -10,7 +10,7 @@ } }, "storage": { - "base_path": "/storage", + "base_path": "/mnt/nfs_share", "max_file_size_mb": 1000, "max_recording_duration_minutes": 60, "cleanup_older_than_days": 30 @@ -29,7 +29,7 @@ { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, @@ -60,7 +60,7 @@ { "name": "camera2", "machine_topic": "vibratory_conveyor", - "storage_path": "/storage/camera2", + "storage_path": "/mnt/nfs_share/camera2", "exposure_ms": 0.2, "gain": 2.0, "target_fps": 0, diff --git a/camera-management-api/convert_avi_to_mp4.sh b/camera-management-api/convert_avi_to_mp4.sh index 4be2d0c..f4165a4 100755 --- a/camera-management-api/convert_avi_to_mp4.sh +++ b/camera-management-api/convert_avi_to_mp4.sh @@ -1,7 +1,7 @@ #!/bin/bash # Script to convert AVI files to MP4 using H.264 codec -# Converts files in /storage directory and saves them in the same location +# Converts files in /mnt/nfs_share directory and saves them in the same location # Colors for output RED='\033[0;31m' @@ -54,19 +54,19 @@ if ! command -v ffmpeg &> /dev/null; then exit 1 fi -# Check if /storage directory exists -if [ ! -d "/storage" ]; then - print_error "/storage directory does not exist." +# Check if /mnt/nfs_share directory exists +if [ ! -d "/mnt/nfs_share" ]; then + print_error "/mnt/nfs_share directory does not exist." exit 1 fi -# Check if we have read/write permissions to /storage -if [ ! -r "/storage" ] || [ ! -w "/storage" ]; then - print_error "No read/write permissions for /storage directory." +# Check if we have read/write permissions to /mnt/nfs_share +if [ ! -r "/mnt/nfs_share" ] || [ ! -w "/mnt/nfs_share" ]; then + print_error "No read/write permissions for /mnt/nfs_share directory." exit 1 fi -print_status "Starting AVI to MP4 conversion in /storage directory..." +print_status "Starting AVI to MP4 conversion in /mnt/nfs_share directory..." # Counter variables total_files=0 @@ -74,7 +74,7 @@ converted_files=0 skipped_files=0 failed_files=0 -# Find all AVI files in /storage directory (including subdirectories) +# Find all AVI files in /mnt/nfs_share directory (including subdirectories) while IFS= read -r -d '' avi_file; do total_files=$((total_files + 1)) @@ -163,7 +163,7 @@ while IFS= read -r -d '' avi_file; do echo # Add blank line between files -done < <(find /storage -name "*.avi" -type f -print0) +done < <(find /mnt/nfs_share -name "*.avi" -type f -print0) # Print summary echo @@ -174,7 +174,7 @@ echo "Skipped (MP4 exists): $skipped_files" echo "Failed conversions: $failed_files" if [ $total_files -eq 0 ]; then - print_warning "No AVI files found in /storage directory." + print_warning "No AVI files found in /mnt/nfs_share directory." elif [ $failed_files -eq 0 ] && [ $converted_files -gt 0 ]; then print_success "All conversions completed successfully!" elif [ $failed_files -gt 0 ]; then diff --git a/camera-management-api/docs/API_DOCUMENTATION.md b/camera-management-api/docs/API_DOCUMENTATION.md index 81ac03f..eeec44c 100644 --- a/camera-management-api/docs/API_DOCUMENTATION.md +++ b/camera-management-api/docs/API_DOCUMENTATION.md @@ -196,7 +196,7 @@ GET /cameras/{camera_name}/config { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, @@ -306,7 +306,7 @@ GET /storage/stats **Response**: `StorageStatsResponse` ```json { - "base_path": "/storage", + "base_path": "/mnt/nfs_share", "total_files": 150, "total_size_bytes": 5368709120, "cameras": { diff --git a/camera-management-api/docs/CURRENT_CONFIGURATION.md b/camera-management-api/docs/CURRENT_CONFIGURATION.md index 905c657..6e48372 100644 --- a/camera-management-api/docs/CURRENT_CONFIGURATION.md +++ b/camera-management-api/docs/CURRENT_CONFIGURATION.md @@ -20,7 +20,7 @@ This document shows the exact current configuration structure of the USDA Vision } }, "storage": { - "base_path": "/storage", + "base_path": "/mnt/nfs_share", "max_file_size_mb": 1000, "max_recording_duration_minutes": 60, "cleanup_older_than_days": 30 @@ -39,7 +39,7 @@ This document shows the exact current configuration structure of the USDA Vision { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, @@ -70,7 +70,7 @@ This document shows the exact current configuration structure of the USDA Vision { "name": "camera2", "machine_topic": "vibratory_conveyor", - "storage_path": "/storage/camera2", + "storage_path": "/mnt/nfs_share/camera2", "exposure_ms": 0.2, "gain": 2.0, "target_fps": 0, @@ -121,7 +121,7 @@ This document shows the exact current configuration structure of the USDA Vision ### Storage Settings | Field | Value | Description | |-------|-------|-------------| -| `base_path` | `"/storage"` | Root storage directory | +| `base_path` | `"/mnt/nfs_share"` | Root storage directory | | `max_file_size_mb` | `1000` | Maximum file size (1GB) | | `max_recording_duration_minutes` | `60` | Maximum recording duration | | `cleanup_older_than_days` | `30` | Auto-cleanup threshold | @@ -144,7 +144,7 @@ This document shows the exact current configuration structure of the USDA Vision | **Basic Settings** | | | | `name` | `"camera1"` | Camera identifier | | `machine_topic` | `"blower_separator"` | MQTT topic to monitor | -| `storage_path` | `"/storage/camera1"` | Video storage location | +| `storage_path` | `"/mnt/nfs_share/camera1"` | Video storage location | | `exposure_ms` | `0.3` | Exposure time (milliseconds) | | `gain` | `4.0` | Camera gain multiplier | | `target_fps` | `0` | Target FPS (0 = unlimited) | @@ -176,7 +176,7 @@ This document shows the exact current configuration structure of the USDA Vision |---------|-------|--------------------------| | `name` | `"camera2"` | Different identifier | | `machine_topic` | `"vibratory_conveyor"` | Different MQTT topic | -| `storage_path` | `"/storage/camera2"` | Different storage path | +| `storage_path` | `"/mnt/nfs_share/camera2"` | Different storage path | | `exposure_ms` | `0.2` | Faster exposure (0.2 vs 0.3) | | `gain` | `2.0` | Lower gain (2.0 vs 4.0) | | `wb_red_gain` | `1.01` | Different red balance (1.01 vs 0.94) | diff --git a/camera-management-api/docs/MP4_FORMAT_UPDATE.md b/camera-management-api/docs/MP4_FORMAT_UPDATE.md index ecae663..bbe8725 100644 --- a/camera-management-api/docs/MP4_FORMAT_UPDATE.md +++ b/camera-management-api/docs/MP4_FORMAT_UPDATE.md @@ -78,7 +78,7 @@ const videoUrl = `/api/videos/${videoId}/stream`; { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, diff --git a/camera-management-api/docs/REACT_INTEGRATION_GUIDE.md b/camera-management-api/docs/REACT_INTEGRATION_GUIDE.md index 29170f9..97974e0 100644 --- a/camera-management-api/docs/REACT_INTEGRATION_GUIDE.md +++ b/camera-management-api/docs/REACT_INTEGRATION_GUIDE.md @@ -100,7 +100,7 @@ const CameraConfigForm = () => { { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, diff --git a/camera-management-api/docs/api/CAMERA_CONFIG_API.md b/camera-management-api/docs/api/CAMERA_CONFIG_API.md index d65f0f8..76e2860 100644 --- a/camera-management-api/docs/api/CAMERA_CONFIG_API.md +++ b/camera-management-api/docs/api/CAMERA_CONFIG_API.md @@ -41,7 +41,7 @@ GET /cameras/{camera_name}/config { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 0.3, "gain": 4.0, "target_fps": 0, diff --git a/camera-management-api/docs/camera/BLOWER_CAMERA_CONFIG.md b/camera-management-api/docs/camera/BLOWER_CAMERA_CONFIG.md index adc0540..f98cb12 100644 --- a/camera-management-api/docs/camera/BLOWER_CAMERA_CONFIG.md +++ b/camera-management-api/docs/camera/BLOWER_CAMERA_CONFIG.md @@ -65,7 +65,7 @@ The current config.json for camera1 includes: { "name": "camera1", "machine_topic": "blower_separator", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 1.0, "gain": 3.5, "target_fps": 0, diff --git a/camera-management-api/docs/camera/CONVEYOR_CAMERA_CONFIG.md b/camera-management-api/docs/camera/CONVEYOR_CAMERA_CONFIG.md index 8b4580a..5e49776 100644 --- a/camera-management-api/docs/camera/CONVEYOR_CAMERA_CONFIG.md +++ b/camera-management-api/docs/camera/CONVEYOR_CAMERA_CONFIG.md @@ -61,7 +61,7 @@ The current config.json for camera2 includes: { "name": "camera2", "machine_topic": "vibratory_conveyor", - "storage_path": "/storage/camera2", + "storage_path": "/mnt/nfs_share/camera2", "exposure_ms": 0.5, "gain": 0.3, "target_fps": 0, diff --git a/camera-management-api/docs/legacy/README_SYSTEM.md b/camera-management-api/docs/legacy/README_SYSTEM.md index 932f632..0996e16 100644 --- a/camera-management-api/docs/legacy/README_SYSTEM.md +++ b/camera-management-api/docs/legacy/README_SYSTEM.md @@ -57,8 +57,8 @@ This system integrates MQTT machine monitoring with automated video recording fr 3. **Setup Storage Directory**: ```bash - sudo mkdir -p /storage - sudo chown $USER:$USER /storage + sudo mkdir -p /mnt/nfs_share + sudo chown $USER:$USER /mnt/nfs_share ``` ## Configuration @@ -79,7 +79,7 @@ Edit `config.json` to configure your system: { "name": "camera1", "machine_topic": "vibratory_conveyor", - "storage_path": "/storage/camera1", + "storage_path": "/mnt/nfs_share/camera1", "exposure_ms": 1.0, "gain": 3.5, "target_fps": 3.0, @@ -117,7 +117,7 @@ The system provides a REST API on port 8000: - `GET /machines` - All machine states - `POST /cameras/{name}/start-recording` - Manual recording start - `POST /cameras/{name}/stop-recording` - Manual recording stop -- `GET /storage/stats` - Storage statistics +- `GET /mnt/nfs_share/stats` - Storage statistics - `WebSocket /ws` - Real-time updates ### Dashboard Integration @@ -131,7 +131,7 @@ The system is designed to integrate with your existing React + Vite + Tailwind + ## File Organization ``` -/storage/ +/mnt/nfs_share/ ├── camera1/ │ ├── camera1_recording_20250726_143022.avi │ └── camera1_recording_20250726_143155.avi diff --git a/camera-management-api/start_system.sh b/camera-management-api/start_system.sh index ecd7f9f..d50c7a4 100755 --- a/camera-management-api/start_system.sh +++ b/camera-management-api/start_system.sh @@ -29,11 +29,11 @@ if [ ! -f "config.json" ]; then fi # Check storage directory -if [ ! -d "/storage" ]; then +if [ ! -d "/mnt/nfs_share" ]; then echo "📁 Creating storage directory..." - sudo mkdir -p /storage - sudo chown $USER:$USER /storage - echo "✅ Storage directory created at /storage" + sudo mkdir -p /mnt/nfs_share + sudo chown $USER:$USER /mnt/nfs_share + echo "✅ Storage directory created at /mnt/nfs_share" fi # Check time synchronization diff --git a/camera-management-api/usda_vision_system/core/config.py b/camera-management-api/usda_vision_system/core/config.py index f4fbc6d..d2f0264 100644 --- a/camera-management-api/usda_vision_system/core/config.py +++ b/camera-management-api/usda_vision_system/core/config.py @@ -85,7 +85,7 @@ class CameraConfig: class StorageConfig: """Storage configuration""" - base_path: str = "/storage" + base_path: str = "/mnt/nfs_share" max_file_size_mb: int = 1000 # Max size per video file max_recording_duration_minutes: int = 60 # Max recording duration cleanup_older_than_days: int = 30 # Auto cleanup old files diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 9c48fbe..e3c8f44 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -6,7 +6,7 @@ services: working_dir: /app volumes: - ./camera-management-api:/app - - /storage:/storage + - /mnt/nfs_share:/mnt/nfs_share - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro environment: diff --git a/docker-compose.yml b/docker-compose.yml index c11aae9..dc70893 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,7 @@ services: working_dir: /app volumes: - ./camera-management-api:/app - - /storage:/storage + - /mnt/nfs_share:/mnt/nfs_share - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro environment: @@ -62,5 +62,3 @@ services: - "host.docker.internal:host-gateway" ports: - "8080:8080" - - diff --git a/management-dashboard-web-app/API Documentations/docs/CURRENT_CONFIGURATION.md b/management-dashboard-web-app/API Documentations/docs/CURRENT_CONFIGURATION.md index 905c657..891f7e6 100755 --- a/management-dashboard-web-app/API Documentations/docs/CURRENT_CONFIGURATION.md +++ b/management-dashboard-web-app/API Documentations/docs/CURRENT_CONFIGURATION.md @@ -121,7 +121,7 @@ This document shows the exact current configuration structure of the USDA Vision ### Storage Settings | Field | Value | Description | |-------|-------|-------------| -| `base_path` | `"/storage"` | Root storage directory | +| `base_path` | `"/mnt/nfs_share"` | Root storage directory | | `max_file_size_mb` | `1000` | Maximum file size (1GB) | | `max_recording_duration_minutes` | `60` | Maximum recording duration | | `cleanup_older_than_days` | `30` | Auto-cleanup threshold | @@ -144,7 +144,7 @@ This document shows the exact current configuration structure of the USDA Vision | **Basic Settings** | | | | `name` | `"camera1"` | Camera identifier | | `machine_topic` | `"blower_separator"` | MQTT topic to monitor | -| `storage_path` | `"/storage/camera1"` | Video storage location | +| `storage_path` | `"/mnt/nfs_share/camera1"` | Video storage location | | `exposure_ms` | `0.3` | Exposure time (milliseconds) | | `gain` | `4.0` | Camera gain multiplier | | `target_fps` | `0` | Target FPS (0 = unlimited) |