feat: add Pagination component for video list navigation
- Implemented a reusable Pagination component with first/last, previous/next, and numbered page buttons. - Added PageInfo component to display current page and total items. - Integrated pagination into VideoList component, allowing users to navigate through video pages. - Updated useVideoList hook to manage current page and total pages state. - Modified videoApi service to support pagination with offset-based API. - Enhanced VideoCard styling for better UI consistency. - Updated Tailwind CSS configuration to include custom colors and shadows for branding. - Refactored video file settings to use 'h264' codec for better compatibility.
This commit is contained in:
@@ -1,27 +1,32 @@
|
||||
# API Changes Summary: Camera Settings and Video Format Updates
|
||||
|
||||
## Overview
|
||||
|
||||
This document tracks major API changes including camera settings enhancements and the MP4 video format update.
|
||||
|
||||
## 🎥 Latest Update: MP4 Video Format (v2.1)
|
||||
|
||||
**Date**: August 2025
|
||||
|
||||
**Major Changes**:
|
||||
- **Video Format**: Changed from AVI/XVID to MP4/MPEG-4 format
|
||||
|
||||
- **Video Format**: Changed from AVI/XVID to MP4/H.264 format
|
||||
- **File Extensions**: New recordings use `.mp4` instead of `.avi`
|
||||
- **File Size**: ~40% reduction in file sizes
|
||||
- **Streaming**: Better web browser compatibility
|
||||
|
||||
**New Configuration Fields**:
|
||||
|
||||
```json
|
||||
{
|
||||
"video_format": "mp4", // File format: "mp4" or "avi"
|
||||
"video_codec": "mp4v", // Video codec: "mp4v", "XVID", "MJPG"
|
||||
"video_codec": "h264", // Video codec: "h264", "mp4v", "XVID", "MJPG"
|
||||
"video_quality": 95 // Quality: 0-100 (higher = better)
|
||||
}
|
||||
```
|
||||
|
||||
**Frontend Impact**:
|
||||
|
||||
- ✅ Better streaming performance and browser support
|
||||
- ✅ Smaller file sizes for faster transfers
|
||||
- ✅ Universal HTML5 video player compatibility
|
||||
@@ -38,12 +43,14 @@ Enhanced the `POST /cameras/{camera_name}/start-recording` API endpoint to accep
|
||||
## Changes Made
|
||||
|
||||
### 1. API Models (`usda_vision_system/api/models.py`)
|
||||
|
||||
- **Enhanced `StartRecordingRequest`** to include optional parameters:
|
||||
- `exposure_ms: Optional[float]` - Exposure time in milliseconds
|
||||
- `gain: Optional[float]` - Camera gain value
|
||||
- `fps: Optional[float]` - Target frames per second
|
||||
|
||||
### 2. Camera Recorder (`usda_vision_system/camera/recorder.py`)
|
||||
|
||||
- **Added `update_camera_settings()` method** to dynamically update camera settings:
|
||||
- Updates exposure time using `mvsdk.CameraSetExposureTime()`
|
||||
- Updates gain using `mvsdk.CameraSetAnalogGain()`
|
||||
@@ -52,20 +59,23 @@ Enhanced the `POST /cameras/{camera_name}/start-recording` API endpoint to accep
|
||||
- Returns boolean indicating success/failure
|
||||
|
||||
### 3. Camera Manager (`usda_vision_system/camera/manager.py`)
|
||||
|
||||
- **Enhanced `manual_start_recording()` method** to accept new parameters:
|
||||
- Added optional `exposure_ms`, `gain`, and `fps` parameters
|
||||
- Calls `update_camera_settings()` if any settings are provided
|
||||
- **Automatic datetime prefix**: Always prepends timestamp to filename
|
||||
- If custom filename provided: `{timestamp}_{custom_filename}`
|
||||
- If no filename provided: `{camera_name}_manual_{timestamp}.avi`
|
||||
- If no filename provided: `{camera_name}_manual_{timestamp}.mp4`
|
||||
|
||||
### 4. API Server (`usda_vision_system/api/server.py`)
|
||||
|
||||
- **Updated start-recording endpoint** to:
|
||||
- Pass new camera settings to camera manager
|
||||
- Handle filename response with datetime prefix
|
||||
- Maintain backward compatibility with existing requests
|
||||
|
||||
### 5. API Tests (`api-tests.http`)
|
||||
|
||||
- **Added comprehensive test examples**:
|
||||
- Basic recording (existing functionality)
|
||||
- Recording with camera settings
|
||||
@@ -75,8 +85,9 @@ Enhanced the `POST /cameras/{camera_name}/start-recording` API endpoint to accep
|
||||
## Usage Examples
|
||||
|
||||
### Basic Recording (unchanged)
|
||||
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/start-recording
|
||||
POST http://vision:8000/cameras/camera1/start-recording
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
@@ -84,11 +95,13 @@ Content-Type: application/json
|
||||
"filename": "test.avi"
|
||||
}
|
||||
```
|
||||
|
||||
**Result**: File saved as `20241223_143022_test.avi`
|
||||
|
||||
### Recording with Camera Settings
|
||||
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/start-recording
|
||||
POST http://vision:8000/cameras/camera1/start-recording
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
@@ -99,13 +112,16 @@ Content-Type: application/json
|
||||
"fps": 5.0
|
||||
}
|
||||
```
|
||||
|
||||
**Result**:
|
||||
|
||||
- Camera settings updated before recording
|
||||
- File saved as `20241223_143022_high_quality.avi`
|
||||
|
||||
### Maximum FPS Recording
|
||||
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/start-recording
|
||||
POST http://vision:8000/cameras/camera1/start-recording
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
@@ -116,14 +132,17 @@ Content-Type: application/json
|
||||
"fps": 0
|
||||
}
|
||||
```
|
||||
|
||||
**Result**:
|
||||
|
||||
- Camera captures at maximum possible speed (no delay between frames)
|
||||
- Video file saved with 30 FPS metadata for proper playback
|
||||
- Actual capture rate depends on camera hardware and exposure settings
|
||||
|
||||
### Settings Only (no filename)
|
||||
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/start-recording
|
||||
POST http://vision:8000/cameras/camera1/start-recording
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
@@ -133,34 +152,41 @@ Content-Type: application/json
|
||||
"fps": 7.0
|
||||
}
|
||||
```
|
||||
**Result**:
|
||||
|
||||
**Result**:
|
||||
|
||||
- Camera settings updated
|
||||
- File saved as `camera1_manual_20241223_143022.avi`
|
||||
|
||||
## Key Features
|
||||
|
||||
### 1. **Backward Compatibility**
|
||||
|
||||
- All existing API calls continue to work unchanged
|
||||
- New parameters are optional
|
||||
- Default behavior preserved when no settings provided
|
||||
|
||||
### 2. **Automatic Datetime Prefix**
|
||||
|
||||
- **ALL filenames now have datetime prefix** regardless of what's sent
|
||||
- Format: `YYYYMMDD_HHMMSS_` (Atlanta timezone)
|
||||
- Ensures unique filenames and chronological ordering
|
||||
|
||||
### 3. **Dynamic Camera Settings**
|
||||
|
||||
- Settings can be changed per recording without restarting system
|
||||
- Based on proven implementation from `old tests/camera_video_recorder.py`
|
||||
- Proper error handling and logging
|
||||
|
||||
### 4. **Maximum FPS Capture**
|
||||
|
||||
- **`fps: 0`** = Capture at maximum possible speed (no delay between frames)
|
||||
- **`fps > 0`** = Capture at specified frame rate with controlled timing
|
||||
- **`fps` omitted** = Uses camera config default (usually 3.0 fps)
|
||||
- Video files saved with 30 FPS metadata when fps=0 for proper playback
|
||||
|
||||
### 5. **Parameter Validation**
|
||||
|
||||
- Uses Pydantic models for automatic validation
|
||||
- Optional parameters with proper type checking
|
||||
- Descriptive field documentation
|
||||
@@ -168,6 +194,7 @@ Content-Type: application/json
|
||||
## Testing
|
||||
|
||||
Run the test script to verify functionality:
|
||||
|
||||
```bash
|
||||
# Start the system first
|
||||
python main.py
|
||||
@@ -177,6 +204,7 @@ python test_api_changes.py
|
||||
```
|
||||
|
||||
The test script verifies:
|
||||
|
||||
- Basic recording functionality
|
||||
- Camera settings application
|
||||
- Filename datetime prefix handling
|
||||
@@ -185,22 +213,27 @@ The test script verifies:
|
||||
## Implementation Notes
|
||||
|
||||
### Camera Settings Mapping
|
||||
|
||||
- **Exposure**: Converted from milliseconds to microseconds for SDK
|
||||
- **Gain**: Converted to camera units (multiplied by 100)
|
||||
- **FPS**: Stored in camera config, used by recording loop
|
||||
|
||||
### Error Handling
|
||||
|
||||
- Settings update failures are logged but don't prevent recording
|
||||
- Invalid camera names return appropriate HTTP errors
|
||||
- Camera initialization failures are handled gracefully
|
||||
|
||||
### Filename Generation
|
||||
|
||||
- Uses `format_filename_timestamp()` from timezone utilities
|
||||
- Ensures Atlanta timezone consistency
|
||||
- Handles both custom and auto-generated filenames
|
||||
|
||||
## Similar to Old Implementation
|
||||
|
||||
The camera settings functionality mirrors the proven approach in `old tests/camera_video_recorder.py`:
|
||||
|
||||
- Same parameter names and ranges
|
||||
- Same SDK function calls
|
||||
- Same conversion factors
|
||||
|
||||
@@ -18,10 +18,13 @@ This document provides comprehensive documentation for all API endpoints in the
|
||||
## 🔧 System Status & Health
|
||||
|
||||
### Get System Status
|
||||
|
||||
```http
|
||||
GET /system/status
|
||||
```
|
||||
|
||||
**Response**: `SystemStatusResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"system_started": true,
|
||||
@@ -49,10 +52,13 @@ GET /system/status
|
||||
```
|
||||
|
||||
### Health Check
|
||||
|
||||
```http
|
||||
GET /health
|
||||
```
|
||||
|
||||
**Response**: Simple health status
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "healthy",
|
||||
@@ -63,16 +69,21 @@ GET /health
|
||||
## 📷 Camera Management
|
||||
|
||||
### Get All Cameras
|
||||
|
||||
```http
|
||||
GET /cameras
|
||||
```
|
||||
|
||||
**Response**: `Dict[str, CameraStatusResponse]`
|
||||
|
||||
### Get Specific Camera Status
|
||||
|
||||
```http
|
||||
GET /cameras/{camera_name}/status
|
||||
```
|
||||
|
||||
**Response**: `CameraStatusResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "camera1",
|
||||
@@ -97,12 +108,13 @@ GET /cameras/{camera_name}/status
|
||||
## 🎥 Recording Control
|
||||
|
||||
### Start Recording
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/start-recording
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"filename": "test_recording.avi",
|
||||
"filename": "test_recording.mp4",
|
||||
"exposure_ms": 2.0,
|
||||
"gain": 4.0,
|
||||
"fps": 5.0
|
||||
@@ -110,30 +122,36 @@ Content-Type: application/json
|
||||
```
|
||||
|
||||
**Request Model**: `StartRecordingRequest`
|
||||
|
||||
- `filename` (optional): Custom filename (datetime prefix will be added automatically)
|
||||
- `exposure_ms` (optional): Exposure time in milliseconds
|
||||
- `gain` (optional): Camera gain value
|
||||
- `fps` (optional): Target frames per second
|
||||
|
||||
**Response**: `StartRecordingResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Recording started for camera1",
|
||||
"filename": "20240115_103000_test_recording.avi"
|
||||
"filename": "20240115_103000_test_recording.mp4"
|
||||
}
|
||||
```
|
||||
|
||||
**Key Features**:
|
||||
|
||||
- ✅ **Automatic datetime prefix**: All filenames get `YYYYMMDD_HHMMSS_` prefix
|
||||
- ✅ **Dynamic camera settings**: Adjust exposure, gain, and FPS per recording
|
||||
- ✅ **Backward compatibility**: All existing API calls work unchanged
|
||||
|
||||
### Stop Recording
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/stop-recording
|
||||
```
|
||||
|
||||
**Response**: `StopRecordingResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
@@ -145,10 +163,13 @@ POST /cameras/{camera_name}/stop-recording
|
||||
## 🤖 Auto-Recording Management
|
||||
|
||||
### Enable Auto-Recording for Camera
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/auto-recording/enable
|
||||
```
|
||||
|
||||
**Response**: `AutoRecordingConfigResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
@@ -159,16 +180,21 @@ POST /cameras/{camera_name}/auto-recording/enable
|
||||
```
|
||||
|
||||
### Disable Auto-Recording for Camera
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/auto-recording/disable
|
||||
```
|
||||
|
||||
**Response**: `AutoRecordingConfigResponse`
|
||||
|
||||
### Get Auto-Recording Status
|
||||
|
||||
```http
|
||||
GET /auto-recording/status
|
||||
```
|
||||
|
||||
**Response**: `AutoRecordingStatusResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"running": true,
|
||||
@@ -179,6 +205,7 @@ GET /auto-recording/status
|
||||
```
|
||||
|
||||
**Auto-Recording Features**:
|
||||
|
||||
- 🤖 **MQTT-triggered recording**: Automatically starts/stops based on machine state
|
||||
- 🔄 **Retry logic**: Failed recordings are retried with configurable delays
|
||||
- 📊 **Per-camera control**: Enable/disable auto-recording individually
|
||||
@@ -187,10 +214,13 @@ GET /auto-recording/status
|
||||
## 🎛️ Camera Configuration
|
||||
|
||||
### Get Camera Configuration
|
||||
|
||||
```http
|
||||
GET /cameras/{camera_name}/config
|
||||
```
|
||||
|
||||
**Response**: `CameraConfigResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "camera1",
|
||||
@@ -225,6 +255,7 @@ GET /cameras/{camera_name}/config
|
||||
```
|
||||
|
||||
### Update Camera Configuration
|
||||
|
||||
```http
|
||||
PUT /cameras/{camera_name}/config
|
||||
Content-Type: application/json
|
||||
@@ -238,11 +269,13 @@ Content-Type: application/json
|
||||
```
|
||||
|
||||
### Apply Configuration (Restart Required)
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/apply-config
|
||||
```
|
||||
|
||||
**Configuration Categories**:
|
||||
|
||||
- ✅ **Real-time**: `exposure_ms`, `gain`, `target_fps`, `sharpness`, `contrast`, etc.
|
||||
- ⚠️ **Restart required**: `noise_filter_enabled`, `denoise_3d_enabled`, `bit_depth`, `video_format`, `video_codec`, `video_quality`
|
||||
|
||||
@@ -251,16 +284,21 @@ For detailed configuration options, see [Camera Configuration API Guide](api/CAM
|
||||
## 📡 MQTT & Machine Status
|
||||
|
||||
### Get All Machines
|
||||
|
||||
```http
|
||||
GET /machines
|
||||
```
|
||||
|
||||
**Response**: `Dict[str, MachineStatusResponse]`
|
||||
|
||||
### Get MQTT Status
|
||||
|
||||
```http
|
||||
GET /mqtt/status
|
||||
```
|
||||
|
||||
**Response**: `MQTTStatusResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"connected": true,
|
||||
@@ -275,10 +313,13 @@ GET /mqtt/status
|
||||
```
|
||||
|
||||
### Get MQTT Events History
|
||||
|
||||
```http
|
||||
GET /mqtt/events?limit=10
|
||||
```
|
||||
|
||||
**Response**: `MQTTEventsHistoryResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"events": [
|
||||
@@ -299,10 +340,13 @@ GET /mqtt/events?limit=10
|
||||
## 💾 Storage & File Management
|
||||
|
||||
### Get Storage Statistics
|
||||
|
||||
```http
|
||||
GET /storage/stats
|
||||
```
|
||||
|
||||
**Response**: `StorageStatsResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"base_path": "/storage",
|
||||
@@ -328,6 +372,7 @@ GET /storage/stats
|
||||
```
|
||||
|
||||
### Get File List
|
||||
|
||||
```http
|
||||
POST /storage/files
|
||||
Content-Type: application/json
|
||||
@@ -339,7 +384,9 @@ Content-Type: application/json
|
||||
"limit": 50
|
||||
}
|
||||
```
|
||||
|
||||
**Response**: `FileListResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"files": [
|
||||
@@ -356,6 +403,7 @@ Content-Type: application/json
|
||||
```
|
||||
|
||||
### Cleanup Old Files
|
||||
|
||||
```http
|
||||
POST /storage/cleanup
|
||||
Content-Type: application/json
|
||||
@@ -364,7 +412,9 @@ Content-Type: application/json
|
||||
"max_age_days": 30
|
||||
}
|
||||
```
|
||||
|
||||
**Response**: `CleanupResponse`
|
||||
|
||||
```json
|
||||
{
|
||||
"files_removed": 25,
|
||||
@@ -376,42 +426,55 @@ Content-Type: application/json
|
||||
## 🔄 Camera Recovery & Diagnostics
|
||||
|
||||
### Test Camera Connection
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/test-connection
|
||||
```
|
||||
|
||||
**Response**: `CameraTestResponse`
|
||||
|
||||
### Reconnect Camera
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/reconnect
|
||||
```
|
||||
|
||||
**Response**: `CameraRecoveryResponse`
|
||||
|
||||
### Restart Camera Grab Process
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/restart-grab
|
||||
```
|
||||
|
||||
**Response**: `CameraRecoveryResponse`
|
||||
|
||||
### Reset Camera Timestamp
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/reset-timestamp
|
||||
```
|
||||
|
||||
**Response**: `CameraRecoveryResponse`
|
||||
|
||||
### Full Camera Reset
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/full-reset
|
||||
```
|
||||
|
||||
**Response**: `CameraRecoveryResponse`
|
||||
|
||||
### Reinitialize Camera
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/reinitialize
|
||||
```
|
||||
|
||||
**Response**: `CameraRecoveryResponse`
|
||||
|
||||
**Recovery Response Example**:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
@@ -425,22 +488,27 @@ POST /cameras/{camera_name}/reinitialize
|
||||
## 📺 Live Streaming
|
||||
|
||||
### Get Live MJPEG Stream
|
||||
|
||||
```http
|
||||
GET /cameras/{camera_name}/stream
|
||||
```
|
||||
|
||||
**Response**: MJPEG video stream (multipart/x-mixed-replace)
|
||||
|
||||
### Start Camera Stream
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/start-stream
|
||||
```
|
||||
|
||||
### Stop Camera Stream
|
||||
|
||||
```http
|
||||
POST /cameras/{camera_name}/stop-stream
|
||||
```
|
||||
|
||||
**Streaming Features**:
|
||||
|
||||
- 📺 **MJPEG format**: Compatible with web browsers and React apps
|
||||
- 🔄 **Concurrent operation**: Stream while recording simultaneously
|
||||
- ⚡ **Low latency**: Real-time preview for monitoring
|
||||
@@ -450,8 +518,9 @@ For detailed streaming integration, see [Streaming Guide](guides/STREAMING_GUIDE
|
||||
## 🌐 WebSocket Real-time Updates
|
||||
|
||||
### Connect to WebSocket
|
||||
|
||||
```javascript
|
||||
const ws = new WebSocket('ws://localhost:8000/ws');
|
||||
const ws = new WebSocket('ws://vision:8000/ws');
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
const update = JSON.parse(event.data);
|
||||
@@ -460,6 +529,7 @@ ws.onmessage = (event) => {
|
||||
```
|
||||
|
||||
**WebSocket Message Types**:
|
||||
|
||||
- `system_status`: System status changes
|
||||
- `camera_status`: Camera status updates
|
||||
- `recording_started`: Recording start events
|
||||
@@ -468,6 +538,7 @@ ws.onmessage = (event) => {
|
||||
- `auto_recording_event`: Auto-recording status changes
|
||||
|
||||
**Example WebSocket Message**:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "recording_started",
|
||||
@@ -483,26 +554,28 @@ ws.onmessage = (event) => {
|
||||
## 🚀 Quick Start Examples
|
||||
|
||||
### Basic System Monitoring
|
||||
|
||||
```bash
|
||||
# Check system health
|
||||
curl http://localhost:8000/health
|
||||
curl http://vision:8000/health
|
||||
|
||||
# Get overall system status
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
|
||||
# Get all camera statuses
|
||||
curl http://localhost:8000/cameras
|
||||
curl http://vision:8000/cameras
|
||||
```
|
||||
|
||||
### Manual Recording Control
|
||||
|
||||
```bash
|
||||
# Start recording with default settings
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"filename": "manual_test.avi"}'
|
||||
|
||||
# Start recording with custom camera settings
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"filename": "high_quality.avi",
|
||||
@@ -512,28 +585,30 @@ curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
}'
|
||||
|
||||
# Stop recording
|
||||
curl -X POST http://localhost:8000/cameras/camera1/stop-recording
|
||||
curl -X POST http://vision:8000/cameras/camera1/stop-recording
|
||||
```
|
||||
|
||||
### Auto-Recording Management
|
||||
|
||||
```bash
|
||||
# Enable auto-recording for camera1
|
||||
curl -X POST http://localhost:8000/cameras/camera1/auto-recording/enable
|
||||
curl -X POST http://vision:8000/cameras/camera1/auto-recording/enable
|
||||
|
||||
# Check auto-recording status
|
||||
curl http://localhost:8000/auto-recording/status
|
||||
curl http://vision:8000/auto-recording/status
|
||||
|
||||
# Disable auto-recording for camera1
|
||||
curl -X POST http://localhost:8000/cameras/camera1/auto-recording/disable
|
||||
curl -X POST http://vision:8000/cameras/camera1/auto-recording/disable
|
||||
```
|
||||
|
||||
### Camera Configuration
|
||||
|
||||
```bash
|
||||
# Get current camera configuration
|
||||
curl http://localhost:8000/cameras/camera1/config
|
||||
curl http://vision:8000/cameras/camera1/config
|
||||
|
||||
# Update camera settings (real-time)
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"exposure_ms": 1.5,
|
||||
@@ -548,28 +623,33 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
### ✨ New in Latest Version
|
||||
|
||||
#### 1. Enhanced Recording API
|
||||
|
||||
- **Dynamic camera settings**: Set exposure, gain, and FPS per recording
|
||||
- **Automatic datetime prefixes**: All filenames get timestamp prefixes
|
||||
- **Backward compatibility**: Existing API calls work unchanged
|
||||
|
||||
#### 2. Auto-Recording Feature
|
||||
|
||||
- **Per-camera control**: Enable/disable auto-recording individually
|
||||
- **MQTT integration**: Automatic recording based on machine states
|
||||
- **Retry logic**: Failed recordings are automatically retried
|
||||
- **Status tracking**: Monitor auto-recording attempts and failures
|
||||
|
||||
#### 3. Advanced Camera Configuration
|
||||
|
||||
- **Real-time settings**: Update exposure, gain, image quality without restart
|
||||
- **Image enhancement**: Sharpness, contrast, saturation, gamma controls
|
||||
- **Noise reduction**: Configurable noise filtering and 3D denoising
|
||||
- **HDR support**: High Dynamic Range imaging capabilities
|
||||
|
||||
#### 4. Live Streaming
|
||||
|
||||
- **MJPEG streaming**: Real-time camera preview
|
||||
- **Concurrent operation**: Stream while recording simultaneously
|
||||
- **Web-compatible**: Direct integration with React/HTML video elements
|
||||
|
||||
#### 5. Enhanced Monitoring
|
||||
|
||||
- **MQTT event history**: Track machine state changes over time
|
||||
- **Storage statistics**: Monitor disk usage and file counts
|
||||
- **WebSocket updates**: Real-time system status notifications
|
||||
@@ -577,11 +657,13 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
### 🔄 Migration Notes
|
||||
|
||||
#### From Previous Versions
|
||||
|
||||
1. **Recording API**: All existing calls work, but now return filenames with datetime prefixes
|
||||
2. **Configuration**: New camera settings are optional and backward compatible
|
||||
3. **Auto-recording**: New feature, requires enabling in `config.json` and per camera
|
||||
|
||||
#### Configuration Updates
|
||||
|
||||
```json
|
||||
{
|
||||
"cameras": [
|
||||
@@ -613,22 +695,28 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
## 📞 Support & Integration
|
||||
|
||||
### API Base URL
|
||||
- **Development**: `http://localhost:8000`
|
||||
|
||||
- **Development**: `http://vision:8000`
|
||||
- **Production**: Configure in `config.json` under `system.api_host` and `system.api_port`
|
||||
|
||||
### Error Handling
|
||||
|
||||
All endpoints return standard HTTP status codes:
|
||||
|
||||
- `200`: Success
|
||||
- `404`: Resource not found (camera, file, etc.)
|
||||
- `500`: Internal server error
|
||||
- `503`: Service unavailable (camera manager, MQTT, etc.)
|
||||
|
||||
### Rate Limiting
|
||||
|
||||
- No rate limiting currently implemented
|
||||
- WebSocket connections are limited to reasonable concurrent connections
|
||||
|
||||
### CORS Support
|
||||
|
||||
- CORS is enabled for web dashboard integration
|
||||
- Configure allowed origins in the API server settings
|
||||
|
||||
```
|
||||
```
|
||||
|
||||
@@ -6,30 +6,30 @@ Quick reference for the most commonly used API endpoints. For complete documenta
|
||||
|
||||
```bash
|
||||
# Health check
|
||||
curl http://localhost:8000/health
|
||||
curl http://vision:8000/health
|
||||
|
||||
# System overview
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
|
||||
# All cameras
|
||||
curl http://localhost:8000/cameras
|
||||
curl http://vision:8000/cameras
|
||||
|
||||
# All machines
|
||||
curl http://localhost:8000/machines
|
||||
curl http://vision:8000/machines
|
||||
```
|
||||
|
||||
## 🎥 Recording Control
|
||||
|
||||
### Start Recording (Basic)
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"filename": "test.avi"}'
|
||||
```
|
||||
|
||||
### Start Recording (With Settings)
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"filename": "high_quality.avi",
|
||||
@@ -41,30 +41,30 @@ curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
|
||||
### Stop Recording
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/cameras/camera1/stop-recording
|
||||
curl -X POST http://vision:8000/cameras/camera1/stop-recording
|
||||
```
|
||||
|
||||
## 🤖 Auto-Recording
|
||||
|
||||
```bash
|
||||
# Enable auto-recording
|
||||
curl -X POST http://localhost:8000/cameras/camera1/auto-recording/enable
|
||||
curl -X POST http://vision:8000/cameras/camera1/auto-recording/enable
|
||||
|
||||
# Disable auto-recording
|
||||
curl -X POST http://localhost:8000/cameras/camera1/auto-recording/disable
|
||||
curl -X POST http://vision:8000/cameras/camera1/auto-recording/disable
|
||||
|
||||
# Check auto-recording status
|
||||
curl http://localhost:8000/auto-recording/status
|
||||
curl http://vision:8000/auto-recording/status
|
||||
```
|
||||
|
||||
## 🎛️ Camera Configuration
|
||||
|
||||
```bash
|
||||
# Get camera config
|
||||
curl http://localhost:8000/cameras/camera1/config
|
||||
curl http://vision:8000/cameras/camera1/config
|
||||
|
||||
# Update camera settings
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"exposure_ms": 1.5,
|
||||
@@ -77,41 +77,41 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
|
||||
```bash
|
||||
# Start streaming
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-stream
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-stream
|
||||
|
||||
# Get MJPEG stream (use in browser/video element)
|
||||
# http://localhost:8000/cameras/camera1/stream
|
||||
# http://vision:8000/cameras/camera1/stream
|
||||
|
||||
# Stop streaming
|
||||
curl -X POST http://localhost:8000/cameras/camera1/stop-stream
|
||||
curl -X POST http://vision:8000/cameras/camera1/stop-stream
|
||||
```
|
||||
|
||||
## 🔄 Camera Recovery
|
||||
|
||||
```bash
|
||||
# Test connection
|
||||
curl -X POST http://localhost:8000/cameras/camera1/test-connection
|
||||
curl -X POST http://vision:8000/cameras/camera1/test-connection
|
||||
|
||||
# Reconnect camera
|
||||
curl -X POST http://localhost:8000/cameras/camera1/reconnect
|
||||
curl -X POST http://vision:8000/cameras/camera1/reconnect
|
||||
|
||||
# Full reset
|
||||
curl -X POST http://localhost:8000/cameras/camera1/full-reset
|
||||
curl -X POST http://vision:8000/cameras/camera1/full-reset
|
||||
```
|
||||
|
||||
## 💾 Storage Management
|
||||
|
||||
```bash
|
||||
# Storage statistics
|
||||
curl http://localhost:8000/storage/stats
|
||||
curl http://vision:8000/storage/stats
|
||||
|
||||
# List files
|
||||
curl -X POST http://localhost:8000/storage/files \
|
||||
curl -X POST http://vision:8000/storage/files \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"camera_name": "camera1", "limit": 10}'
|
||||
|
||||
# Cleanup old files
|
||||
curl -X POST http://localhost:8000/storage/cleanup \
|
||||
curl -X POST http://vision:8000/storage/cleanup \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"max_age_days": 30}'
|
||||
```
|
||||
@@ -120,17 +120,17 @@ curl -X POST http://localhost:8000/storage/cleanup \
|
||||
|
||||
```bash
|
||||
# MQTT status
|
||||
curl http://localhost:8000/mqtt/status
|
||||
curl http://vision:8000/mqtt/status
|
||||
|
||||
# Recent MQTT events
|
||||
curl http://localhost:8000/mqtt/events?limit=10
|
||||
curl http://vision:8000/mqtt/events?limit=10
|
||||
```
|
||||
|
||||
## 🌐 WebSocket Connection
|
||||
|
||||
```javascript
|
||||
// Connect to real-time updates
|
||||
const ws = new WebSocket('ws://localhost:8000/ws');
|
||||
const ws = new WebSocket('ws://vision:8000/ws');
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
const update = JSON.parse(event.data);
|
||||
|
||||
@@ -1,20 +1,24 @@
|
||||
# 🎥 MP4 Video Format Update - Frontend Integration Guide
|
||||
|
||||
## Overview
|
||||
|
||||
The USDA Vision Camera System has been updated to record videos in **MP4 format** instead of AVI format for better streaming compatibility and smaller file sizes.
|
||||
|
||||
## 🔄 What Changed
|
||||
|
||||
### Video Format
|
||||
|
||||
- **Before**: AVI files with XVID codec (`.avi` extension)
|
||||
- **After**: MP4 files with MPEG-4 codec (`.mp4` extension)
|
||||
- **After**: MP4 files with H.264 codec (`.mp4` extension)
|
||||
|
||||
### File Extensions
|
||||
|
||||
- All new video recordings now use `.mp4` extension
|
||||
- Existing `.avi` files remain accessible and functional
|
||||
- File size reduction: ~40% smaller than equivalent AVI files
|
||||
|
||||
### API Response Updates
|
||||
|
||||
New fields added to camera configuration responses:
|
||||
|
||||
```json
|
||||
@@ -28,13 +32,17 @@ New fields added to camera configuration responses:
|
||||
## 🌐 Frontend Impact
|
||||
|
||||
### 1. Video Player Compatibility
|
||||
|
||||
**✅ Better Browser Support**
|
||||
|
||||
- MP4 format has native support in all modern browsers
|
||||
- No need for additional codecs or plugins
|
||||
- Better mobile device compatibility (iOS/Android)
|
||||
|
||||
### 2. File Handling Updates
|
||||
|
||||
**File Extension Handling**
|
||||
|
||||
```javascript
|
||||
// Update file extension checks
|
||||
const isVideoFile = (filename) => {
|
||||
@@ -50,7 +58,9 @@ const getVideoMimeType = (filename) => {
|
||||
```
|
||||
|
||||
### 3. Video Streaming
|
||||
|
||||
**Improved Streaming Performance**
|
||||
|
||||
```javascript
|
||||
// MP4 files can be streamed directly without conversion
|
||||
const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
@@ -63,7 +73,9 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
```
|
||||
|
||||
### 4. File Size Display
|
||||
|
||||
**Updated Size Expectations**
|
||||
|
||||
- MP4 files are ~40% smaller than equivalent AVI files
|
||||
- Update any file size warnings or storage calculations
|
||||
- Better compression means faster downloads and uploads
|
||||
@@ -71,9 +83,11 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
## 📡 API Changes
|
||||
|
||||
### Camera Configuration Endpoint
|
||||
|
||||
**GET** `/cameras/{camera_name}/config`
|
||||
|
||||
**New Response Fields:**
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "camera1",
|
||||
@@ -95,7 +109,9 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
```
|
||||
|
||||
### Video Listing Endpoints
|
||||
|
||||
**File Extension Updates**
|
||||
|
||||
- Video files in responses will now have `.mp4` extensions
|
||||
- Existing `.avi` files will still appear in listings
|
||||
- Filter by both extensions when needed
|
||||
@@ -103,42 +119,49 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
## 🔧 Configuration Options
|
||||
|
||||
### Video Format Settings
|
||||
|
||||
```json
|
||||
{
|
||||
"video_format": "mp4", // Options: "mp4", "avi"
|
||||
"video_codec": "mp4v", // Options: "mp4v", "XVID", "MJPG"
|
||||
"video_codec": "h264", // Options: "h264", "mp4v", "XVID", "MJPG"
|
||||
"video_quality": 95 // Range: 0-100 (higher = better quality)
|
||||
}
|
||||
```
|
||||
|
||||
### Recommended Settings
|
||||
- **Production**: `"mp4"` format, `"mp4v"` codec, `95` quality
|
||||
- **Storage Optimized**: `"mp4"` format, `"mp4v"` codec, `85` quality
|
||||
|
||||
- **Production**: `"mp4"` format, `"h264"` codec, `95` quality
|
||||
- **Storage Optimized**: `"mp4"` format, `"h264"` codec, `85` quality
|
||||
- **Legacy Mode**: `"avi"` format, `"XVID"` codec, `95` quality
|
||||
|
||||
## 🎯 Frontend Implementation Checklist
|
||||
|
||||
### ✅ Video Player Updates
|
||||
|
||||
- [ ] Verify HTML5 video player works with MP4 files
|
||||
- [ ] Update video MIME type handling
|
||||
- [ ] Test streaming performance with new format
|
||||
|
||||
### ✅ File Management
|
||||
|
||||
- [ ] Update file extension filters to include `.mp4`
|
||||
- [ ] Modify file type detection logic
|
||||
- [ ] Update download/upload handling for MP4 files
|
||||
|
||||
### ✅ UI/UX Updates
|
||||
|
||||
- [ ] Update file size expectations in UI
|
||||
- [ ] Modify any format-specific icons or indicators
|
||||
- [ ] Update help text or tooltips mentioning video formats
|
||||
|
||||
### ✅ Configuration Interface
|
||||
|
||||
- [ ] Add video format settings to camera config UI
|
||||
- [ ] Include video quality slider/selector
|
||||
- [ ] Add restart warning for video format changes
|
||||
|
||||
### ✅ Testing
|
||||
|
||||
- [ ] Test video playback with new MP4 files
|
||||
- [ ] Verify backward compatibility with existing AVI files
|
||||
- [ ] Test streaming performance and loading times
|
||||
@@ -146,11 +169,13 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
## 🔄 Backward Compatibility
|
||||
|
||||
### Existing AVI Files
|
||||
|
||||
- All existing `.avi` files remain fully functional
|
||||
- No conversion or migration required
|
||||
- Video player should handle both formats
|
||||
|
||||
### API Compatibility
|
||||
|
||||
- All existing API endpoints continue to work
|
||||
- New fields are additive (won't break existing code)
|
||||
- Default values provided for new configuration fields
|
||||
@@ -158,6 +183,7 @@ const videoUrl = `/api/videos/${videoId}/stream`;
|
||||
## 📊 Performance Benefits
|
||||
|
||||
### File Size Reduction
|
||||
|
||||
```
|
||||
Example 5-minute recording at 1280x1024:
|
||||
- AVI/XVID: ~180 MB
|
||||
@@ -165,12 +191,14 @@ Example 5-minute recording at 1280x1024:
|
||||
```
|
||||
|
||||
### Streaming Improvements
|
||||
|
||||
- Faster initial load times
|
||||
- Better progressive download support
|
||||
- Reduced bandwidth usage
|
||||
- Native browser optimization
|
||||
|
||||
### Storage Efficiency
|
||||
|
||||
- More recordings fit in same storage space
|
||||
- Faster backup and transfer operations
|
||||
- Reduced storage costs over time
|
||||
@@ -178,16 +206,19 @@ Example 5-minute recording at 1280x1024:
|
||||
## 🚨 Important Notes
|
||||
|
||||
### Restart Required
|
||||
|
||||
- Video format changes require camera service restart
|
||||
- Mark video format settings as "restart required" in UI
|
||||
- Provide clear user feedback about restart necessity
|
||||
|
||||
### Browser Compatibility
|
||||
|
||||
- MP4 format supported in all modern browsers
|
||||
- Better mobile device support than AVI
|
||||
- No additional plugins or codecs needed
|
||||
|
||||
### Quality Assurance
|
||||
|
||||
- Video quality maintained at 95/100 setting
|
||||
- No visual degradation compared to AVI
|
||||
- High bitrate ensures professional quality
|
||||
|
||||
@@ -97,11 +97,11 @@ python test_system.py
|
||||
### Dashboard Integration
|
||||
```javascript
|
||||
// React component example
|
||||
const systemStatus = await fetch('http://localhost:8000/system/status');
|
||||
const cameras = await fetch('http://localhost:8000/cameras');
|
||||
const systemStatus = await fetch('http://vision:8000/system/status');
|
||||
const cameras = await fetch('http://vision:8000/cameras');
|
||||
|
||||
// WebSocket for real-time updates
|
||||
const ws = new WebSocket('ws://localhost:8000/ws');
|
||||
const ws = new WebSocket('ws://vision:8000/ws');
|
||||
ws.onmessage = (event) => {
|
||||
const update = JSON.parse(event.data);
|
||||
// Handle real-time system updates
|
||||
@@ -111,13 +111,13 @@ ws.onmessage = (event) => {
|
||||
### Manual Control
|
||||
```bash
|
||||
# Start recording manually
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording
|
||||
|
||||
# Stop recording manually
|
||||
curl -X POST http://localhost:8000/cameras/camera1/stop-recording
|
||||
curl -X POST http://vision:8000/cameras/camera1/stop-recording
|
||||
|
||||
# Get system status
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
```
|
||||
|
||||
## 📊 System Capabilities
|
||||
@@ -151,7 +151,7 @@ curl http://localhost:8000/system/status
|
||||
### Troubleshooting
|
||||
- **Test Suite**: `python test_system.py`
|
||||
- **Time Check**: `python check_time.py`
|
||||
- **API Health**: `curl http://localhost:8000/health`
|
||||
- **API Health**: `curl http://vision:8000/health`
|
||||
- **Debug Mode**: `python main.py --log-level DEBUG`
|
||||
|
||||
## 🎯 Production Readiness
|
||||
|
||||
@@ -204,10 +204,10 @@ sudo systemctl restart usda-vision-camera
|
||||
### Check Status
|
||||
```bash
|
||||
# Check video module status
|
||||
curl http://localhost:8000/system/video-module
|
||||
curl http://vision:8000/system/video-module
|
||||
|
||||
# Check available videos
|
||||
curl http://localhost:8000/videos/
|
||||
curl http://vision:8000/videos/
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
@@ -185,7 +185,7 @@ POST /cameras/{camera_name}/apply-config
|
||||
|
||||
### Example 1: Adjust Exposure and Gain
|
||||
```bash
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"exposure_ms": 1.5,
|
||||
@@ -195,7 +195,7 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
|
||||
### Example 2: Improve Image Quality
|
||||
```bash
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"sharpness": 150,
|
||||
@@ -206,7 +206,7 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
|
||||
### Example 3: Configure for Indoor Lighting
|
||||
```bash
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"anti_flicker_enabled": true,
|
||||
@@ -218,7 +218,7 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
|
||||
### Example 4: Enable HDR Mode
|
||||
```bash
|
||||
curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
curl -X PUT http://vision:8000/cameras/camera1/config \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"hdr_enabled": true,
|
||||
@@ -232,7 +232,7 @@ curl -X PUT http://localhost:8000/cameras/camera1/config \
|
||||
```jsx
|
||||
import React, { useState, useEffect } from 'react';
|
||||
|
||||
const CameraConfig = ({ cameraName, apiBaseUrl = 'http://localhost:8000' }) => {
|
||||
const CameraConfig = ({ cameraName, apiBaseUrl = 'http://vision:8000' }) => {
|
||||
const [config, setConfig] = useState(null);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
@@ -56,27 +56,27 @@ When a camera has issues, follow this order:
|
||||
|
||||
1. **Test Connection** - Diagnose the problem
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/test-connection
|
||||
POST http://vision:8000/cameras/camera1/test-connection
|
||||
```
|
||||
|
||||
2. **Try Reconnect** - Most common fix
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/reconnect
|
||||
POST http://vision:8000/cameras/camera1/reconnect
|
||||
```
|
||||
|
||||
3. **Restart Grab** - If reconnect doesn't work
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/restart-grab
|
||||
POST http://vision:8000/cameras/camera1/restart-grab
|
||||
```
|
||||
|
||||
4. **Full Reset** - For persistent issues
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/full-reset
|
||||
POST http://vision:8000/cameras/camera1/full-reset
|
||||
```
|
||||
|
||||
5. **Reinitialize** - For cameras that never worked
|
||||
```http
|
||||
POST http://localhost:8000/cameras/camera1/reinitialize
|
||||
POST http://vision:8000/cameras/camera1/reinitialize
|
||||
```
|
||||
|
||||
## Response Format
|
||||
|
||||
@@ -38,7 +38,7 @@ When you run the system, you'll see:
|
||||
|
||||
### MQTT Status
|
||||
```http
|
||||
GET http://localhost:8000/mqtt/status
|
||||
GET http://vision:8000/mqtt/status
|
||||
```
|
||||
|
||||
**Response:**
|
||||
@@ -60,7 +60,7 @@ GET http://localhost:8000/mqtt/status
|
||||
|
||||
### Machine Status
|
||||
```http
|
||||
GET http://localhost:8000/machines
|
||||
GET http://vision:8000/machines
|
||||
```
|
||||
|
||||
**Response:**
|
||||
@@ -85,7 +85,7 @@ GET http://localhost:8000/machines
|
||||
|
||||
### System Status
|
||||
```http
|
||||
GET http://localhost:8000/system/status
|
||||
GET http://vision:8000/system/status
|
||||
```
|
||||
|
||||
**Response:**
|
||||
@@ -125,13 +125,13 @@ Tests all the API endpoints and shows expected responses.
|
||||
### 4. **Query APIs Directly**
|
||||
```bash
|
||||
# Check MQTT status
|
||||
curl http://localhost:8000/mqtt/status
|
||||
curl http://vision:8000/mqtt/status
|
||||
|
||||
# Check machine states
|
||||
curl http://localhost:8000/machines
|
||||
curl http://vision:8000/machines
|
||||
|
||||
# Check overall system status
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
```
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
@@ -40,13 +40,13 @@ Open `camera_preview.html` in your browser and click "Start Stream" for any came
|
||||
### 3. API Usage
|
||||
```bash
|
||||
# Start streaming for camera1
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-stream
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-stream
|
||||
|
||||
# View live stream (open in browser)
|
||||
http://localhost:8000/cameras/camera1/stream
|
||||
http://vision:8000/cameras/camera1/stream
|
||||
|
||||
# Stop streaming
|
||||
curl -X POST http://localhost:8000/cameras/camera1/stop-stream
|
||||
curl -X POST http://vision:8000/cameras/camera1/stop-stream
|
||||
```
|
||||
|
||||
## 📡 API Endpoints
|
||||
@@ -150,10 +150,10 @@ The system supports these concurrent operations:
|
||||
### Example: Concurrent Usage
|
||||
```bash
|
||||
# Start streaming
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-stream
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-stream
|
||||
|
||||
# Start recording (while streaming continues)
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"filename": "test_recording.avi"}'
|
||||
|
||||
@@ -232,8 +232,8 @@ For issues with streaming functionality:
|
||||
|
||||
1. Check the system logs: `usda_vision_system.log`
|
||||
2. Run the test script: `python test_streaming.py`
|
||||
3. Verify API health: `http://localhost:8000/health`
|
||||
4. Check camera status: `http://localhost:8000/cameras`
|
||||
3. Verify API health: `http://vision:8000/health`
|
||||
4. Check camera status: `http://vision:8000/cameras`
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -73,10 +73,10 @@ Edit `config.json` to customize:
|
||||
- System parameters
|
||||
|
||||
### API Access
|
||||
- System status: `http://localhost:8000/system/status`
|
||||
- Camera status: `http://localhost:8000/cameras`
|
||||
- Manual recording: `POST http://localhost:8000/cameras/camera1/start-recording`
|
||||
- Real-time updates: WebSocket at `ws://localhost:8000/ws`
|
||||
- System status: `http://vision:8000/system/status`
|
||||
- Camera status: `http://vision:8000/cameras`
|
||||
- Manual recording: `POST http://vision:8000/cameras/camera1/start-recording`
|
||||
- Real-time updates: WebSocket at `ws://vision:8000/ws`
|
||||
|
||||
## 📊 Test Results
|
||||
|
||||
@@ -146,18 +146,18 @@ The system provides everything needed for your React dashboard:
|
||||
|
||||
```javascript
|
||||
// Example API usage
|
||||
const systemStatus = await fetch('http://localhost:8000/system/status');
|
||||
const cameras = await fetch('http://localhost:8000/cameras');
|
||||
const systemStatus = await fetch('http://vision:8000/system/status');
|
||||
const cameras = await fetch('http://vision:8000/cameras');
|
||||
|
||||
// WebSocket for real-time updates
|
||||
const ws = new WebSocket('ws://localhost:8000/ws');
|
||||
const ws = new WebSocket('ws://vision:8000/ws');
|
||||
ws.onmessage = (event) => {
|
||||
const update = JSON.parse(event.data);
|
||||
// Handle real-time system updates
|
||||
};
|
||||
|
||||
// Manual recording control
|
||||
await fetch('http://localhost:8000/cameras/camera1/start-recording', {
|
||||
await fetch('http://vision:8000/cameras/camera1/start-recording', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ camera_name: 'camera1' })
|
||||
|
||||
@@ -192,13 +192,13 @@ Comprehensive error tracking with:
|
||||
|
||||
```bash
|
||||
# Check system status
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
|
||||
# Check camera status
|
||||
curl http://localhost:8000/cameras
|
||||
curl http://vision:8000/cameras
|
||||
|
||||
# Manual recording start
|
||||
curl -X POST http://localhost:8000/cameras/camera1/start-recording \
|
||||
curl -X POST http://vision:8000/cameras/camera1/start-recording \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"camera_name": "camera1"}'
|
||||
```
|
||||
@@ -246,4 +246,4 @@ This project is developed for USDA research purposes.
|
||||
For issues and questions:
|
||||
1. Check the logs in `usda_vision_system.log`
|
||||
2. Review the troubleshooting section
|
||||
3. Check API status at `http://localhost:8000/health`
|
||||
3. Check API status at `http://vision:8000/health`
|
||||
|
||||
@@ -76,7 +76,7 @@ timedatectl status
|
||||
### API Endpoints
|
||||
```bash
|
||||
# System status includes time info
|
||||
curl http://localhost:8000/system/status
|
||||
curl http://vision:8000/system/status
|
||||
|
||||
# Example response includes:
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user