Files
usda-vision/camera-management-api/docs/camera/PREVIEW_ENHANCEMENT.md

5.9 KiB

Camera Preview Enhancement

Overview

The camera preview/streaming functionality has been significantly enhanced to apply all default configuration settings from config.json, ensuring that preview images accurately represent what will be recorded.

Problem Solved

Previously, camera preview only applied basic settings (exposure, gain, trigger mode, frame rate), while recording applied the full configuration. This meant:

  • Preview images looked different from recorded videos
  • Color balance, sharpness, and other image quality settings were not visible in preview
  • Users couldn't accurately assess the final recording quality from the preview

Solution Implemented

The CameraStreamer class has been enhanced with comprehensive configuration methods that mirror those in CameraRecorder:

New Configuration Methods Added

  1. _configure_image_quality()

    • Applies sharpness settings (0-200)
    • Applies contrast settings (0-200)
    • Applies gamma correction (0-300)
    • Applies saturation for color cameras (0-200)
  2. _configure_color_settings()

    • Sets white balance mode (auto/manual)
    • Applies color temperature presets
    • Sets manual RGB gains for precise color tuning
  3. _configure_advanced_settings()

    • Enables/disables anti-flicker filtering
    • Sets light frequency (50Hz/60Hz)
    • Configures HDR settings when available
  4. _configure_noise_reduction()

    • Configures noise filter settings
    • Configures 3D denoising settings

Enhanced Main Configuration Method

The _configure_streaming_settings() method now calls all configuration methods:

def _configure_streaming_settings(self):
    """Configure camera settings from config.json for streaming"""
    try:
        # Basic settings (existing)
        mvsdk.CameraSetTriggerMode(self.hCamera, 0)
        mvsdk.CameraSetAeState(self.hCamera, 0)
        exposure_us = int(self.camera_config.exposure_ms * 1000)
        mvsdk.CameraSetExposureTime(self.hCamera, exposure_us)
        gain_value = int(self.camera_config.gain * 100)
        mvsdk.CameraSetAnalogGain(self.hCamera, gain_value)
        
        # Comprehensive configuration (new)
        self._configure_image_quality()
        self._configure_noise_reduction()
        if not self.monoCamera:
            self._configure_color_settings()
        self._configure_advanced_settings()
        
    except Exception as e:
        self.logger.warning(f"Could not configure some streaming settings: {e}")

Benefits

1. WYSIWYG Preview

  • What You See Is What You Get: Preview now accurately represents final recording quality
  • Real-time Assessment: Users can evaluate recording quality before starting actual recording
  • Consistent Experience: No surprises when comparing preview to recorded footage

2. Accurate Color Representation

  • Manual White Balance: RGB gains are applied to preview for accurate color reproduction
  • Color Temperature: D65 or other presets are applied consistently
  • Saturation: Color intensity matches recording settings

3. Proper Image Quality

  • Sharpness: Edge enhancement settings are visible in preview
  • Contrast: Dynamic range adjustments are applied
  • Gamma: Brightness curve corrections are active

4. Environmental Adaptation

  • Anti-Flicker: Artificial lighting interference is filtered in preview
  • Light Frequency: 50Hz/60Hz settings match local power grid
  • HDR: High dynamic range processing when enabled

Camera-Specific Impact

Camera1 (Blower Separator)

Preview now shows:

  • Manual exposure (1.0ms) and high gain (3.5x)
  • 50Hz anti-flicker filtering
  • Manual white balance with balanced RGB gains (1.0, 1.0, 1.0)
  • Standard image processing (sharpness: 100, contrast: 100, gamma: 100, saturation: 100)
  • D65 color temperature (6500K)

Camera2 (Conveyor/Cracker)

Preview now shows:

  • Manual exposure (0.5ms) and lower gain (0.3x)
  • Custom RGB color tuning (R:1.01, G:1.00, B:0.87)
  • No image sharpening (sharpness: 0)
  • Enhanced saturation (100) and proper gamma (100)
  • D65 color temperature with manual white balance

Technical Implementation Details

Error Handling

  • All configuration methods include try-catch blocks
  • Warnings are logged for unsupported features
  • Graceful degradation when SDK functions are unavailable
  • Streaming continues even if some settings fail to apply

SDK Compatibility

  • Checks for function availability before calling
  • Handles different SDK versions gracefully
  • Logs informational messages for unavailable features

Performance Considerations

  • Configuration is applied once during camera initialization
  • No performance impact on streaming frame rate
  • Separate camera instance for streaming (doesn't interfere with recording)

Usage

No changes required for users - the enhancement is automatic:

  1. Start Preview: Use existing preview endpoints
  2. View Stream: Camera automatically applies all config.json settings
  3. Compare: Preview now matches recording quality exactly

API Endpoints (unchanged)

  • GET /cameras/{camera_name}/stream - Get live MJPEG stream
  • POST /cameras/{camera_name}/start-stream - Start streaming
  • POST /cameras/{camera_name}/stop-stream - Stop streaming

Future Enhancements

Additional settings that could be added to further improve preview accuracy:

  1. Geometric Corrections

    • Lens distortion correction
    • Dead pixel correction
    • Flat fielding correction
  2. Image Transformations

    • Rotation (90°, 180°, 270°)
    • Horizontal/vertical mirroring
  3. Advanced Processing

    • Custom LUT (Look-Up Table) support
    • Advanced noise reduction algorithms
    • Real-time image enhancement filters

Conclusion

This enhancement significantly improves the user experience by providing accurate, real-time preview of camera output with all configuration settings applied. Users can now confidently assess recording quality, adjust settings, and ensure optimal camera performance before starting critical recordings.