evileye


Nameevileye JSON
Version 0.0.6 PyPI version JSON
download
home_pageNone
SummaryIntelligence video surveillance system
upload_time2025-10-08 06:44:29
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords surveillance computer-vision object-detection object-tracking video-processing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EvilEye

Intelligence video surveillance system with object detection, tracking, and multi-camera support.

## Features

- **Multi-camera support** - Process multiple video sources simultaneously
- **Object detection** - YOLO-based object detection with customizable models
- **Object tracking** - Advanced tracking algorithms with re-identification
- **Pipeline architecture** - Modular and extensible processing pipeline
- **GUI and CLI** - Both graphical and command-line interfaces
- **Database integration** - PostgreSQL support for event storage
- **Real-time processing** - Optimized for real-time video analysis

## Quick Start

### Installation

#### From PyPI (Users)

```bash
# Install from PyPI with all dependencies
pip install evileye

```

#### From Source (Developers)

```bash
# Clone the repository
git clone https://github.com/aicommunity/EvilEye.git
cd EvilEye

# Install in development mode
pip install -e "."

# Fix entry points
python fix_entry_points.py

Next you can use the 'evileye' command to work, or if the command does not work:
python3 -m evileye.cli_wrapper
```

### Basic Usage

EvilEye provides multiple entry points for different use cases:

```bash
# Deploy sample configurations (recommended for beginners)
evileye deploy-samples

# Deploy EvilEye system to current directory
evileye deploy

# List available configurations
evileye list-configs

# Run with configuration ('configs/' prefix may be omitted)
evileye run configs/my_config.json

# Create new configuration
evileye-create my_config --sources 2 --source-type video_file

# Launch main application with GUI
evileye-launch

# Open configuration editor
evileye-configure configs/my_config.json

# Direct process launcher
evileye-process --config configs/my_config.json
```

**Quick Start Options:**
- **GUI Users**: Use `evileye-launch` for the main application interface
- **CLI Users**: Use `evileye` commands for command-line operations
- **Configuration**: Use `evileye-configure` for visual configuration editing
- **Automation**: Use `evileye-process` for headless operation

#### After Running `evileye deploy`

The `deploy` command creates the following structure in your current directory:

```
your_project/
├── credentials.json          # Database and camera credentials
└── configs/                  # Configuration files directory
    └── (empty - ready for your configs)
```

#### After Running `evileye deploy-samples`

The `deploy-samples` command creates the following structure in your current directory:

```
your_project/
├── credentials.json          # Database and camera credentials
├── videos/                   # Sample video files
│   ├── planes_sample.mp4     # Single video with planes
│   ├── sample_split.mp4      # Video with two camera views
│   ├── 6p-c0.avi            # Multi-camera tracking (camera 0)
│   └── 6p-c1.avi            # Multi-camera tracking (camera 1)
└── configs/                  # Configuration files directory
    ├── single_video.json     # Single video processing
    ├── single_video_split.json # Video with 2-way split
    ├── multi_videos.json     # Multiple videos with tracking
    ├── single_ip_camera.json # IP camera processing
    ├── single_video_rtdetr.json # Single video with RT-DETR detector
    ├── multi_videos_rtdetr.json # Multiple videos with RT-DETR detector
    ├── single_video_rfdetr.json # Single video with RF-DETR detector
    └── README_SAMPLES.md     # Sample configurations guide
```

#### Credentials Configuration

The `credentials.json` file contains database and camera access credentials:

```json
{
  "sources": {
    "rtsp://camera1.example.com": {
      "username": "camera_user",
      "password": "camera_password"
    },
    "rtsp://camera2.example.com": {
      "username": "admin",
      "password": "admin123"
    }
  },
  "database": {
    "user_name": "postgres",
    "password": "your_db_password",
    "database_name": "evil_eye_db",
    "host_name": "localhost",
    "port": 5432,
    "default_database_name": "postgres",
    "default_password": "your_default_password",
    "default_user_name": "postgres",
    "default_host_name": "localhost",
    "default_port": 5432
  }
}
```

⚠️ **Security Warning**: The `credentials.json` file contains plain text passwords. Store this file securely and never commit it to version control. Consider using environment variables or a secure credential manager for production deployments.



## Configuration

EvilEye uses JSON configuration files for the **PipelineSurveillance** class. The configuration is divided into sections that define different components of the surveillance pipeline.

⚠️ **Important**: The configuration structure described above is specific to the **PipelineSurveillance** class. Other pipeline classes may have different configuration requirements and structure.

### Configuration Structure

```json
{
  "pipeline": {
    "pipeline_class": "PipelineSurveillance",
    "sources": [...],      // Video sources configuration
    "detectors": [...],    // Object detection configuration
    "trackers": [...],     // Object tracking configuration
    "mc_trackers": [...]   // Multi-camera tracking configuration
  },
  "controller": {
    "fps": 30,
    "show_main_gui": true
  }
}
```

### Sources Configuration

The `sources` section defines video input sources. Each source can be configured with different types and splitting options.

#### Source Types

**1. IP Camera (`IpCamera`)**
```json
{
  "source": "IpCamera",
  "camera": "rtsp://url",
  "apiPreference": "CAP_FFMPEG",
  "source_ids": [0],
  "source_names": ["Main Camera"]
}
```

**2. Video File (`VideoFile`)**
```json
{
  "source": "VideoFile",
  "camera": "/path/to/video.mp4",
  "apiPreference": "CAP_FFMPEG",
  "loop_play": true,
  "source_ids": [0],
  "source_names": ["Video Source"]
}
```

**3. Device Camera (`Device`)**
```json
{
  "source": "Device",
  "camera": 0,
  "apiPreference": "CAP_FFMPEG",
  "source_ids": [0],
  "source_names": ["USB Camera"]
}
```

#### Source Splitting Options

**Without Splitting (Single Output)**
```json
{
  "source": "IpCamera",
  "camera": "rtsp://url1",
  "split": false,
  "num_split": 0,
  "src_coords": [0],
  "source_ids": [0],
  "source_names": ["Camera1"]
}
```

**With Splitting (Multiple Outputs)**
```json
{
  "source": "IpCamera",
  "camera": "rtsp://url2",
  "split": true,
  "num_split": 2,
  "src_coords": [
    [0, 0, 2304, 1300],      // Top region: x, y, width, height
    [0, 1300, 2304, 1292]    // Bottom region: x, y, width, height
  ],
  "source_ids": [1, 2],
  "source_names": ["Camera2_Top", "Camera2_Bottom"]
}
```

#### Source Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `source` | string | Source type: `IpCamera`, `VideoFile`, `Device` | - |
| `camera` | string/int | Camera URL, file path, or device index | - |
| `apiPreference` | string | OpenCV API preference | `CAP_FFMPEG` |
| `split` | boolean | Enable source splitting | `false` |
| `num_split` | int | Number of split regions | `0` |
| `src_coords` | array | Coordinates for split regions | `[0]` |
| `source_ids` | array | Unique IDs for each output | - |
| `source_names` | array | Names for each output | - |
| `loop_play` | boolean | Loop video files | `true` |
| `desired_fps` | int | Target FPS for the source | `null` |

### Detectors Configuration

The `detectors` section configures object detection for each source.

#### YOLO Detector Configuration

```json
{
  "source_ids": [0],
  "model": "models/yolov8n.pt",
  "show": false,
  "inference_size": 640,
  "device": null,
  "conf": 0.4,
  "save": false,
  "stride_type": "frames",
  "vid_stride": 1,
  "classes": [0, 1, 24, 25, 63, 66, 67],
  "roi": [
    [[1790, 0, 500, 400], [1700, 0, 1000, 1045]]
  ]
}
```

#### Detector Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `source_ids` | array | Source IDs to process | - |
| `model` | string | YOLO model path | `models/yolov8n.pt` |
| `show` | boolean | Show detection results | `false` |
| `inference_size` | int | Model input size | `640` |
| `device` | string | Device for inference (`cpu`, `cuda:0`) | `null` |
| `conf` | float | Confidence threshold | `0.25` |
| `save` | boolean | Save detection results | `false` |
| `stride_type` | string | Stride type: `frames` | `frames` |
| `vid_stride` | int | Video stride | `1` |
| `classes` | array | Object classes to detect | `[0, 1, 24, 25, 63, 66, 67]` |
| `roi` | array | Regions of interest | `[[]]` |

#### RT-DETR Detector Configuration

RT-DETR (Real-Time Detection Transformer) provides high-accuracy object detection with transformer architecture:

```json
{
  "type": "ObjectDetectorRtdetr",
  "source_ids": [0],
  "model": "rtdetr-l.pt",
  "inference_size": 640,
  "conf": 0.25,
  "device": "cpu",
  "classes": [0, 1, 24, 25, 63, 66, 67],
  "roi": [[]],
  "vid_stride": 1,
  "num_detection_threads": 1
}
```

#### RF-DETR Detector Configuration

RF-DETR (Roboflow Detection Transformer) provides optimized transformer-based detection:

```json
{
  "type": "ObjectDetectorRfdetr",
  "source_ids": [0],
  "model": "rfdetr-nano",
  "inference_size": 640,
  "conf": 0.25,
  "device": "cpu",
  "classes": [0, 1, 24, 25, 63, 66, 67],
  "roi": [[]],
  "vid_stride": 1,
  "num_detection_threads": 1
}
```

#### Detector Types

| Detector Type | Model | Architecture | Speed | Accuracy |
|---------------|-------|--------------|-------|----------|
| YOLO | `yolov8n.pt` | CNN | Fast | Good |
| RT-DETR | `rtdetr-l.pt` | Transformer | Medium | High |
| RF-DETR | `rfdetr-nano` | Transformer | Fast | Good |

### Trackers Configuration

The `trackers` section configures object tracking for each source.

#### Botsort Tracker Configuration

```json
{
  "source_ids": [0],
  "fps": 30,
  "tracker_type": "botsort",
  "botsort_cfg": {
    "appearance_thresh": 0.25,
    "gmc_method": "sparseOptFlow",
    "match_thresh": 0.8,
    "new_track_thresh": 0.6,
    "proximity_thresh": 0.5,
    "track_buffer": 30,
    "track_high_thresh": 0.5,
    "track_low_thresh": 0.1,
    "with_reid": false
  }
}
```

#### Tracker Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `source_ids` | array | Source IDs to track | - |
| `fps` | int | Tracking FPS | `5` |
| `tracker_type` | string | Tracker type | `botsort` |
| `botsort_cfg` | object | Botsort configuration | See above |

### Multi-Camera Trackers Configuration

The `mc_trackers` section configures cross-camera object tracking.

#### Multi-Camera Tracking Configuration

```json
{
  "source_ids": [0, 1, 2],
  "enable": true
}
```

#### Multi-Camera Tracker Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `source_ids` | array | Source IDs for cross-camera tracking | - |
| `enable` | boolean | Enable multi-camera tracking | `false` |

### Complete Configuration Examples

#### IP Camera Configuration (poly-cameras.json)

```json
{
  "pipeline": {
    "sources": [
      {
        "source": "IpCamera",
        "camera": "rtsp://url1",
        "apiPreference": "CAP_FFMPEG",
        "split": false,
        "num_split": 0,
        "src_coords": [0],
        "source_ids": [0],
        "source_names": ["Cam1"]
      },
      {
        "source": "IpCamera",
        "camera": "rtsp://url2",
        "apiPreference": "CAP_FFMPEG",
        "split": true,
        "num_split": 2,
        "src_coords": [
          [0, 0, 2304, 1300],
          [0, 1300, 2304, 1292]
        ],
        "source_ids": [1, 2],
        "source_names": ["Cam2", "Cam3"]
      }
    ],
    "detectors": [
      {
        "source_ids": [0],
        "model": "models/yolov8n.pt",
        "show": false,
        "inference_size": 640,
        "device": null,
        "conf": 0.4,
        "save": false,
        "stride_type": "frames",
        "vid_stride": 1,
        "classes": [0, 1, 24, 25, 63, 66, 67]
      }
    ],
    "trackers": [
      {
        "source_ids": [0],
        "fps": 30,
        "tracker_type": "botsort"
      }
    ],
    "mc_trackers": [
      {
        "source_ids": [0, 1, 2],
        "enable": true
      }
    ]
  },
  "controller": {
    "fps": 30,
    "show_main_gui": true
  }
}
```

#### Video File Configuration (poly-videos.json)

```json
{
  "pipeline": {
    "sources": [
      {
        "source": "VideoFile",
        "camera": "/path/to/video1.mp4",
        "apiPreference": "CAP_FFMPEG",
        "split": false,
        "num_split": 0,
        "src_coords": [0],
        "source_ids": [0],
        "source_names": ["Video1"]
      },
      {
        "source": "VideoFile",
        "camera": "/path/to/video2.mp4",
        "apiPreference": "CAP_FFMPEG",
        "split": true,
        "num_split": 2,
        "src_coords": [
          [0, 0, 2304, 1300],
          [0, 1300, 2304, 1292]
        ],
        "source_ids": [1, 2],
        "source_names": ["Video2_1", "Video2_2"]
      }
    ],
    "detectors": [
      {
        "source_ids": [0],
        "model": "models/yolov8n.pt",
        "show": false,
        "inference_size": 640,
        "device": null,
        "conf": 0.4,
        "save": false,
        "stride_type": "frames",
        "vid_stride": 1,
        "classes": [0, 1, 24, 25, 63, 66, 67]
      }
    ],
    "trackers": [
      {
        "source_ids": [0],
        "fps": 30,
        "tracker_type": "botsort"
      }
    ],
    "mc_trackers": [
      {
        "source_ids": [0, 1, 2],
        "enable": true
      }
    ]
  },
  "controller": {
    "fps": 30,
    "show_main_gui": true
  }
}
```

## CLI Commands

EvilEye provides a comprehensive command-line interface for all operations through multiple entry points:

### Available Entry Points

EvilEye provides several command-line entry points for different operations:

| Command | Description | Usage |
|---------|-------------|-------|
| `evileye` | Main CLI interface with all commands | `evileye [COMMAND] [OPTIONS]` |
| `evileye-process` | Direct process launcher with GUI | `evileye-process [OPTIONS]` |
| `evileye-configure` | Configuration editor GUI | `evileye-configure [CONFIG_FILE]` |
| `evileye-launch` | Main application launcher GUI | `evileye-launch [CONFIG_FILE]` |
| `evileye-create` | Configuration file creator | `evileye-create [NAME] [OPTIONS]` |

### Main CLI Commands (`evileye`)

The main `evileye` command provides access to all system functionality:

```bash
# Deploy configuration files to current directory
evileye deploy

# Deploy sample configurations with working examples
evileye deploy-samples

# Create new configuration
evileye-create my_config --sources 2 --source-type video_file

# Run with configuration
evileye run configs/my_config.json

# Validate configuration file
evileye validate configs/my_config.json

# List available configurations
evileye list-configs

# Show system information
evileye info
```

### Process Launcher (`evileye-process`)

Direct launcher for the surveillance process with GUI support:

```bash
# Launch with configuration file
evileye-process --config configs/my_config.json

# Launch with GUI disabled (headless mode)
evileye-process --config configs/my_config.json --no-gui

# Launch with auto-close when video ends
evileye-process --config configs/my_config.json --autoclose

# Use preset for multiple video sources
evileye-process --sources_preset multi_camera
```

**Options:**
- `--config CONFIG_FILE` - Configuration file path
- `--gui` / `--no-gui` - Enable/disable GUI (default: enabled)
- `--autoclose` - Auto-close when video ends
- `--sources_preset PRESET` - Use preset for multiple sources

### Configuration Editor (`evileye-configure`)

Graphical configuration editor for creating and modifying configuration files:

```bash
# Open configuration editor
evileye-configure

# Open specific configuration file
evileye-configure configs/my_config.json

# Open configuration from any path
evileye-configure /path/to/config.json
```

**Features:**
- Visual configuration editor
- Real-time validation
- Template-based configuration creation
- Source, detector, and tracker configuration
- Multi-camera setup support

### Application Launcher (`evileye-launch`)

Main application launcher with integrated configuration management:

```bash
# Launch main application
evileye-launch

# Launch with specific configuration
evileye-launch configs/my_config.json
```

**Features:**
- Configuration file browser
- Process control (start/stop surveillance)
- Real-time status monitoring
- Log display and management
- Tabbed interface for different functions

### Configuration Creator (`evileye-create`)

Command-line tool for creating new configuration files:

```bash
# Create basic configuration
evileye-create my_config

# Create configuration with specific number of sources
evileye-create my_config --sources 3

# Create configuration with specific source type
evileye-create my_config --sources 2 --source-type ip_camera

# Create configuration with specific pipeline
evileye-create my_config --pipeline PipelineSurveillance

# List available pipeline classes
evileye-create --list-pipelines

# Create configuration in specific directory
evileye-create /path/to/custom_config
```

**Options:**
- `--sources N` - Number of video sources (default: 0)
- `--source-type TYPE` - Source type: `video_file`, `ip_camera`, `device`
- `--pipeline PIPELINE` - Pipeline class to use
- `--list-pipelines` - List available pipeline classes

The Configuration GUI provides:
- Configuration file browser and editor
- Process control (launch/stop surveillance system via process.py)
- Real-time status monitoring
- Log display and management
- Tabbed interface for configuration, logs, and controls

### Deployment Command Details

The `evileye deploy` command:

1. **Copies** `credentials_proto.json` to `credentials.json` (if `credentials.json` doesn't exist)
2. **Creates** `configs/` folder (if it doesn't exist)
3. **Prepares** your project directory for EvilEye configuration

**Created Files:**
- `credentials.json` - Database and camera access credentials
- `configs/` - Directory for your configuration files

**Next Steps After Deploy:**
1. Edit `credentials.json` with your actual credentials
2. Create configurations using `evileye-create`
3. Run the system with `evileye run`

### Configuration Management

```bash
# List available pipeline classes
evileye-create --list-pipelines

# Create configuration with specific pipeline
evileye-create my_config --sources 2 --pipeline PipelineSurveillance

# Available source types:
# - video_file: Video files (.mp4, .avi, etc.)
# - ip_camera: IP cameras (RTSP streams)
# - device: USB/web cameras

# Validate configuration file
evileye validate configs/my_config.json

# List available configurations
evileye list-configs
```

### Complete Workflow Example

```bash
# 1. Deploy files to new project directory
mkdir my_surveillance_project
cd my_surveillance_project
evileye deploy

# 2. Edit credentials.json with your actual credentials
#    - Add camera usernames/passwords
#    - Configure database connection

# 3. Create configuration for 2 IP cameras
evileye-create surveillance_config --sources 2 --source-type ip_camera

# 4. Edit configs/surveillance_config.json with your camera URLs
#    - Replace "rtsp://url" with actual camera URLs
#    - Configure detection and tracking parameters

# 5. Validate configuration
evileye validate configs/surveillance_config.json

# 6. Run the system (multiple options available)
evileye run configs/surveillance_config.json

# Alternative: Use direct process launcher
evileye-process --config configs/surveillance_config.json

# Alternative: Use GUI launcher for easier management
evileye-launch

# Alternative: Use configuration editor for fine-tuning
evileye-configure configs/surveillance_config.json
```

### Entry Point Usage Scenarios

**For Beginners:**
```bash
# Use the main launcher with GUI
evileye-launch
```

**For Advanced Users:**
```bash
# Use direct process launcher with specific options
evileye-process --config configs/my_config.json --no-gui --autoclose
```

**For Configuration Management:**
```bash
# Create new configurations
evileye-create my_config --sources 3 --source-type ip_camera

# Edit existing configurations
evileye-configure configs/my_config.json

# Validate configurations
evileye validate configs/my_config.json
```

**For Automation/Scripts:**
```bash
# Use main CLI for scripting
evileye run configs/automated_config.json

# Use process launcher for headless operation
evileye-process --config configs/headless_config.json --no-gui
```

## Development

### Project Structure

```
evileye/
├── core/                    # Core pipeline components
│   ├── pipeline.py         # Base pipeline class
│   ├── processor_base.py   # Base processor class
│   └── ...
├── pipelines/              # Pipeline implementations
│   └── pipeline_surveillance.py
├── object_detector/        # Object detection modules
├── object_tracker/         # Object tracking modules
├── object_multi_camera_tracker/  # Multi-camera tracking
├── events_detectors/       # Event detection
├── database_controller/    # Database integration
├── visualization_modules/  # Main application GUI components
├── configs/               # Configuration files
├── tests/                 # Test suite
├── evileye/               # Package entry points
│   ├── cli.py            # Command-line interface
│   ├── launch.py         # Configuration GUI launcher
│   └── __init__.py       # Package initialization
├── pyproject.toml        # Project configuration
├── Makefile              # Development commands
└── README.md             # This file
```

## Architecture

EvilEye uses a modular pipeline architecture:

1. **Sources** - Video capture from cameras, files, or streams
2. **Preprocessors** - Frame preprocessing and enhancement
3. **Detectors** - Object detection using YOLO models
4. **Trackers** - Object tracking and trajectory analysis
5. **Multi-camera Trackers** - Cross-camera object re-identification

Each component is implemented as a processor that can be configured and combined to create custom surveillance pipelines.

### Pipeline Classes

EvilEye supports multiple pipeline implementations:

- **PipelineSurveillance** - Full-featured pipeline with all components (sources, detectors, trackers, mc_trackers)
- **Custom Pipelines** - User-defined pipeline implementations

Pipeline classes are automatically discovered from:
- Built-in `evileye.pipelines` package
- Local `pipelines/` folder in working directory

#### Available Pipeline Classes

```bash
# List available pipeline classes
evileye-create --list-pipelines
```

#### Creating Custom Pipelines

Create custom pipelines by extending the base `Pipeline` class and placing them in a local `pipelines/` folder:

```python
from evileye.core.pipeline_processors import Pipeline


class MyCustomPipeline(Pipeline):
    def __init__(self):
        super().__init__()
        # Custom initialization

    def generate_default_structure(self, num_sources: int):
        # Custom configuration generation
        pass
```

Each pipeline class can define its own configuration structure and processing logic.

## Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

### Code Style

- Follow PEP 8 guidelines
- Use type hints
- Write docstrings for all functions and classes
- Run `make quality` before submitting PRs

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Support

- **Documentation**: [https://evileye.readthedocs.io/](https://evileye.readthedocs.io/)
- **Issues**: [https://github.com/evileye/evileye/issues](https://github.com/evileye/evileye/issues)
- **Discussions**: [https://github.com/evileye/evileye/discussions](https://github.com/evileye/evileye/discussions)

## Acknowledgments

- [Ultralytics](https://github.com/ultralytics/ultralytics) for YOLO models
- [OpenCV](https://opencv.org/) for computer vision
- [PyQt6](https://www.riverbankcomputing.com/software/pyqt/) for GUI

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "evileye",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "AI Community <palexab@gmail.com>",
    "keywords": "surveillance, computer-vision, object-detection, object-tracking, video-processing",
    "author": null,
    "author_email": "AI Community <palexab@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/37/7b/85db1f402227c3029a758a9d03ed87a9a27e8e13a4ebee649d7dd9702676/evileye-0.0.6.tar.gz",
    "platform": null,
    "description": "# EvilEye\n\nIntelligence video surveillance system with object detection, tracking, and multi-camera support.\n\n## Features\n\n- **Multi-camera support** - Process multiple video sources simultaneously\n- **Object detection** - YOLO-based object detection with customizable models\n- **Object tracking** - Advanced tracking algorithms with re-identification\n- **Pipeline architecture** - Modular and extensible processing pipeline\n- **GUI and CLI** - Both graphical and command-line interfaces\n- **Database integration** - PostgreSQL support for event storage\n- **Real-time processing** - Optimized for real-time video analysis\n\n## Quick Start\n\n### Installation\n\n#### From PyPI (Users)\n\n```bash\n# Install from PyPI with all dependencies\npip install evileye\n\n```\n\n#### From Source (Developers)\n\n```bash\n# Clone the repository\ngit clone https://github.com/aicommunity/EvilEye.git\ncd EvilEye\n\n# Install in development mode\npip install -e \".\"\n\n# Fix entry points\npython fix_entry_points.py\n\nNext you can use the 'evileye' command to work, or if the command does not work:\npython3 -m evileye.cli_wrapper\n```\n\n### Basic Usage\n\nEvilEye provides multiple entry points for different use cases:\n\n```bash\n# Deploy sample configurations (recommended for beginners)\nevileye deploy-samples\n\n# Deploy EvilEye system to current directory\nevileye deploy\n\n# List available configurations\nevileye list-configs\n\n# Run with configuration ('configs/' prefix may be omitted)\nevileye run configs/my_config.json\n\n# Create new configuration\nevileye-create my_config --sources 2 --source-type video_file\n\n# Launch main application with GUI\nevileye-launch\n\n# Open configuration editor\nevileye-configure configs/my_config.json\n\n# Direct process launcher\nevileye-process --config configs/my_config.json\n```\n\n**Quick Start Options:**\n- **GUI Users**: Use `evileye-launch` for the main application interface\n- **CLI Users**: Use `evileye` commands for command-line operations\n- **Configuration**: Use `evileye-configure` for visual configuration editing\n- **Automation**: Use `evileye-process` for headless operation\n\n#### After Running `evileye deploy`\n\nThe `deploy` command creates the following structure in your current directory:\n\n```\nyour_project/\n\u251c\u2500\u2500 credentials.json          # Database and camera credentials\n\u2514\u2500\u2500 configs/                  # Configuration files directory\n    \u2514\u2500\u2500 (empty - ready for your configs)\n```\n\n#### After Running `evileye deploy-samples`\n\nThe `deploy-samples` command creates the following structure in your current directory:\n\n```\nyour_project/\n\u251c\u2500\u2500 credentials.json          # Database and camera credentials\n\u251c\u2500\u2500 videos/                   # Sample video files\n\u2502   \u251c\u2500\u2500 planes_sample.mp4     # Single video with planes\n\u2502   \u251c\u2500\u2500 sample_split.mp4      # Video with two camera views\n\u2502   \u251c\u2500\u2500 6p-c0.avi            # Multi-camera tracking (camera 0)\n\u2502   \u2514\u2500\u2500 6p-c1.avi            # Multi-camera tracking (camera 1)\n\u2514\u2500\u2500 configs/                  # Configuration files directory\n    \u251c\u2500\u2500 single_video.json     # Single video processing\n    \u251c\u2500\u2500 single_video_split.json # Video with 2-way split\n    \u251c\u2500\u2500 multi_videos.json     # Multiple videos with tracking\n    \u251c\u2500\u2500 single_ip_camera.json # IP camera processing\n    \u251c\u2500\u2500 single_video_rtdetr.json # Single video with RT-DETR detector\n    \u251c\u2500\u2500 multi_videos_rtdetr.json # Multiple videos with RT-DETR detector\n    \u251c\u2500\u2500 single_video_rfdetr.json # Single video with RF-DETR detector\n    \u2514\u2500\u2500 README_SAMPLES.md     # Sample configurations guide\n```\n\n#### Credentials Configuration\n\nThe `credentials.json` file contains database and camera access credentials:\n\n```json\n{\n  \"sources\": {\n    \"rtsp://camera1.example.com\": {\n      \"username\": \"camera_user\",\n      \"password\": \"camera_password\"\n    },\n    \"rtsp://camera2.example.com\": {\n      \"username\": \"admin\",\n      \"password\": \"admin123\"\n    }\n  },\n  \"database\": {\n    \"user_name\": \"postgres\",\n    \"password\": \"your_db_password\",\n    \"database_name\": \"evil_eye_db\",\n    \"host_name\": \"localhost\",\n    \"port\": 5432,\n    \"default_database_name\": \"postgres\",\n    \"default_password\": \"your_default_password\",\n    \"default_user_name\": \"postgres\",\n    \"default_host_name\": \"localhost\",\n    \"default_port\": 5432\n  }\n}\n```\n\n\u26a0\ufe0f **Security Warning**: The `credentials.json` file contains plain text passwords. Store this file securely and never commit it to version control. Consider using environment variables or a secure credential manager for production deployments.\n\n\n\n## Configuration\n\nEvilEye uses JSON configuration files for the **PipelineSurveillance** class. The configuration is divided into sections that define different components of the surveillance pipeline.\n\n\u26a0\ufe0f **Important**: The configuration structure described above is specific to the **PipelineSurveillance** class. Other pipeline classes may have different configuration requirements and structure.\n\n### Configuration Structure\n\n```json\n{\n  \"pipeline\": {\n    \"pipeline_class\": \"PipelineSurveillance\",\n    \"sources\": [...],      // Video sources configuration\n    \"detectors\": [...],    // Object detection configuration\n    \"trackers\": [...],     // Object tracking configuration\n    \"mc_trackers\": [...]   // Multi-camera tracking configuration\n  },\n  \"controller\": {\n    \"fps\": 30,\n    \"show_main_gui\": true\n  }\n}\n```\n\n### Sources Configuration\n\nThe `sources` section defines video input sources. Each source can be configured with different types and splitting options.\n\n#### Source Types\n\n**1. IP Camera (`IpCamera`)**\n```json\n{\n  \"source\": \"IpCamera\",\n  \"camera\": \"rtsp://url\",\n  \"apiPreference\": \"CAP_FFMPEG\",\n  \"source_ids\": [0],\n  \"source_names\": [\"Main Camera\"]\n}\n```\n\n**2. Video File (`VideoFile`)**\n```json\n{\n  \"source\": \"VideoFile\",\n  \"camera\": \"/path/to/video.mp4\",\n  \"apiPreference\": \"CAP_FFMPEG\",\n  \"loop_play\": true,\n  \"source_ids\": [0],\n  \"source_names\": [\"Video Source\"]\n}\n```\n\n**3. Device Camera (`Device`)**\n```json\n{\n  \"source\": \"Device\",\n  \"camera\": 0,\n  \"apiPreference\": \"CAP_FFMPEG\",\n  \"source_ids\": [0],\n  \"source_names\": [\"USB Camera\"]\n}\n```\n\n#### Source Splitting Options\n\n**Without Splitting (Single Output)**\n```json\n{\n  \"source\": \"IpCamera\",\n  \"camera\": \"rtsp://url1\",\n  \"split\": false,\n  \"num_split\": 0,\n  \"src_coords\": [0],\n  \"source_ids\": [0],\n  \"source_names\": [\"Camera1\"]\n}\n```\n\n**With Splitting (Multiple Outputs)**\n```json\n{\n  \"source\": \"IpCamera\",\n  \"camera\": \"rtsp://url2\",\n  \"split\": true,\n  \"num_split\": 2,\n  \"src_coords\": [\n    [0, 0, 2304, 1300],      // Top region: x, y, width, height\n    [0, 1300, 2304, 1292]    // Bottom region: x, y, width, height\n  ],\n  \"source_ids\": [1, 2],\n  \"source_names\": [\"Camera2_Top\", \"Camera2_Bottom\"]\n}\n```\n\n#### Source Parameters\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `source` | string | Source type: `IpCamera`, `VideoFile`, `Device` | - |\n| `camera` | string/int | Camera URL, file path, or device index | - |\n| `apiPreference` | string | OpenCV API preference | `CAP_FFMPEG` |\n| `split` | boolean | Enable source splitting | `false` |\n| `num_split` | int | Number of split regions | `0` |\n| `src_coords` | array | Coordinates for split regions | `[0]` |\n| `source_ids` | array | Unique IDs for each output | - |\n| `source_names` | array | Names for each output | - |\n| `loop_play` | boolean | Loop video files | `true` |\n| `desired_fps` | int | Target FPS for the source | `null` |\n\n### Detectors Configuration\n\nThe `detectors` section configures object detection for each source.\n\n#### YOLO Detector Configuration\n\n```json\n{\n  \"source_ids\": [0],\n  \"model\": \"models/yolov8n.pt\",\n  \"show\": false,\n  \"inference_size\": 640,\n  \"device\": null,\n  \"conf\": 0.4,\n  \"save\": false,\n  \"stride_type\": \"frames\",\n  \"vid_stride\": 1,\n  \"classes\": [0, 1, 24, 25, 63, 66, 67],\n  \"roi\": [\n    [[1790, 0, 500, 400], [1700, 0, 1000, 1045]]\n  ]\n}\n```\n\n#### Detector Parameters\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `source_ids` | array | Source IDs to process | - |\n| `model` | string | YOLO model path | `models/yolov8n.pt` |\n| `show` | boolean | Show detection results | `false` |\n| `inference_size` | int | Model input size | `640` |\n| `device` | string | Device for inference (`cpu`, `cuda:0`) | `null` |\n| `conf` | float | Confidence threshold | `0.25` |\n| `save` | boolean | Save detection results | `false` |\n| `stride_type` | string | Stride type: `frames` | `frames` |\n| `vid_stride` | int | Video stride | `1` |\n| `classes` | array | Object classes to detect | `[0, 1, 24, 25, 63, 66, 67]` |\n| `roi` | array | Regions of interest | `[[]]` |\n\n#### RT-DETR Detector Configuration\n\nRT-DETR (Real-Time Detection Transformer) provides high-accuracy object detection with transformer architecture:\n\n```json\n{\n  \"type\": \"ObjectDetectorRtdetr\",\n  \"source_ids\": [0],\n  \"model\": \"rtdetr-l.pt\",\n  \"inference_size\": 640,\n  \"conf\": 0.25,\n  \"device\": \"cpu\",\n  \"classes\": [0, 1, 24, 25, 63, 66, 67],\n  \"roi\": [[]],\n  \"vid_stride\": 1,\n  \"num_detection_threads\": 1\n}\n```\n\n#### RF-DETR Detector Configuration\n\nRF-DETR (Roboflow Detection Transformer) provides optimized transformer-based detection:\n\n```json\n{\n  \"type\": \"ObjectDetectorRfdetr\",\n  \"source_ids\": [0],\n  \"model\": \"rfdetr-nano\",\n  \"inference_size\": 640,\n  \"conf\": 0.25,\n  \"device\": \"cpu\",\n  \"classes\": [0, 1, 24, 25, 63, 66, 67],\n  \"roi\": [[]],\n  \"vid_stride\": 1,\n  \"num_detection_threads\": 1\n}\n```\n\n#### Detector Types\n\n| Detector Type | Model | Architecture | Speed | Accuracy |\n|---------------|-------|--------------|-------|----------|\n| YOLO | `yolov8n.pt` | CNN | Fast | Good |\n| RT-DETR | `rtdetr-l.pt` | Transformer | Medium | High |\n| RF-DETR | `rfdetr-nano` | Transformer | Fast | Good |\n\n### Trackers Configuration\n\nThe `trackers` section configures object tracking for each source.\n\n#### Botsort Tracker Configuration\n\n```json\n{\n  \"source_ids\": [0],\n  \"fps\": 30,\n  \"tracker_type\": \"botsort\",\n  \"botsort_cfg\": {\n    \"appearance_thresh\": 0.25,\n    \"gmc_method\": \"sparseOptFlow\",\n    \"match_thresh\": 0.8,\n    \"new_track_thresh\": 0.6,\n    \"proximity_thresh\": 0.5,\n    \"track_buffer\": 30,\n    \"track_high_thresh\": 0.5,\n    \"track_low_thresh\": 0.1,\n    \"with_reid\": false\n  }\n}\n```\n\n#### Tracker Parameters\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `source_ids` | array | Source IDs to track | - |\n| `fps` | int | Tracking FPS | `5` |\n| `tracker_type` | string | Tracker type | `botsort` |\n| `botsort_cfg` | object | Botsort configuration | See above |\n\n### Multi-Camera Trackers Configuration\n\nThe `mc_trackers` section configures cross-camera object tracking.\n\n#### Multi-Camera Tracking Configuration\n\n```json\n{\n  \"source_ids\": [0, 1, 2],\n  \"enable\": true\n}\n```\n\n#### Multi-Camera Tracker Parameters\n\n| Parameter | Type | Description | Default |\n|-----------|------|-------------|---------|\n| `source_ids` | array | Source IDs for cross-camera tracking | - |\n| `enable` | boolean | Enable multi-camera tracking | `false` |\n\n### Complete Configuration Examples\n\n#### IP Camera Configuration (poly-cameras.json)\n\n```json\n{\n  \"pipeline\": {\n    \"sources\": [\n      {\n        \"source\": \"IpCamera\",\n        \"camera\": \"rtsp://url1\",\n        \"apiPreference\": \"CAP_FFMPEG\",\n        \"split\": false,\n        \"num_split\": 0,\n        \"src_coords\": [0],\n        \"source_ids\": [0],\n        \"source_names\": [\"Cam1\"]\n      },\n      {\n        \"source\": \"IpCamera\",\n        \"camera\": \"rtsp://url2\",\n        \"apiPreference\": \"CAP_FFMPEG\",\n        \"split\": true,\n        \"num_split\": 2,\n        \"src_coords\": [\n          [0, 0, 2304, 1300],\n          [0, 1300, 2304, 1292]\n        ],\n        \"source_ids\": [1, 2],\n        \"source_names\": [\"Cam2\", \"Cam3\"]\n      }\n    ],\n    \"detectors\": [\n      {\n        \"source_ids\": [0],\n        \"model\": \"models/yolov8n.pt\",\n        \"show\": false,\n        \"inference_size\": 640,\n        \"device\": null,\n        \"conf\": 0.4,\n        \"save\": false,\n        \"stride_type\": \"frames\",\n        \"vid_stride\": 1,\n        \"classes\": [0, 1, 24, 25, 63, 66, 67]\n      }\n    ],\n    \"trackers\": [\n      {\n        \"source_ids\": [0],\n        \"fps\": 30,\n        \"tracker_type\": \"botsort\"\n      }\n    ],\n    \"mc_trackers\": [\n      {\n        \"source_ids\": [0, 1, 2],\n        \"enable\": true\n      }\n    ]\n  },\n  \"controller\": {\n    \"fps\": 30,\n    \"show_main_gui\": true\n  }\n}\n```\n\n#### Video File Configuration (poly-videos.json)\n\n```json\n{\n  \"pipeline\": {\n    \"sources\": [\n      {\n        \"source\": \"VideoFile\",\n        \"camera\": \"/path/to/video1.mp4\",\n        \"apiPreference\": \"CAP_FFMPEG\",\n        \"split\": false,\n        \"num_split\": 0,\n        \"src_coords\": [0],\n        \"source_ids\": [0],\n        \"source_names\": [\"Video1\"]\n      },\n      {\n        \"source\": \"VideoFile\",\n        \"camera\": \"/path/to/video2.mp4\",\n        \"apiPreference\": \"CAP_FFMPEG\",\n        \"split\": true,\n        \"num_split\": 2,\n        \"src_coords\": [\n          [0, 0, 2304, 1300],\n          [0, 1300, 2304, 1292]\n        ],\n        \"source_ids\": [1, 2],\n        \"source_names\": [\"Video2_1\", \"Video2_2\"]\n      }\n    ],\n    \"detectors\": [\n      {\n        \"source_ids\": [0],\n        \"model\": \"models/yolov8n.pt\",\n        \"show\": false,\n        \"inference_size\": 640,\n        \"device\": null,\n        \"conf\": 0.4,\n        \"save\": false,\n        \"stride_type\": \"frames\",\n        \"vid_stride\": 1,\n        \"classes\": [0, 1, 24, 25, 63, 66, 67]\n      }\n    ],\n    \"trackers\": [\n      {\n        \"source_ids\": [0],\n        \"fps\": 30,\n        \"tracker_type\": \"botsort\"\n      }\n    ],\n    \"mc_trackers\": [\n      {\n        \"source_ids\": [0, 1, 2],\n        \"enable\": true\n      }\n    ]\n  },\n  \"controller\": {\n    \"fps\": 30,\n    \"show_main_gui\": true\n  }\n}\n```\n\n## CLI Commands\n\nEvilEye provides a comprehensive command-line interface for all operations through multiple entry points:\n\n### Available Entry Points\n\nEvilEye provides several command-line entry points for different operations:\n\n| Command | Description | Usage |\n|---------|-------------|-------|\n| `evileye` | Main CLI interface with all commands | `evileye [COMMAND] [OPTIONS]` |\n| `evileye-process` | Direct process launcher with GUI | `evileye-process [OPTIONS]` |\n| `evileye-configure` | Configuration editor GUI | `evileye-configure [CONFIG_FILE]` |\n| `evileye-launch` | Main application launcher GUI | `evileye-launch [CONFIG_FILE]` |\n| `evileye-create` | Configuration file creator | `evileye-create [NAME] [OPTIONS]` |\n\n### Main CLI Commands (`evileye`)\n\nThe main `evileye` command provides access to all system functionality:\n\n```bash\n# Deploy configuration files to current directory\nevileye deploy\n\n# Deploy sample configurations with working examples\nevileye deploy-samples\n\n# Create new configuration\nevileye-create my_config --sources 2 --source-type video_file\n\n# Run with configuration\nevileye run configs/my_config.json\n\n# Validate configuration file\nevileye validate configs/my_config.json\n\n# List available configurations\nevileye list-configs\n\n# Show system information\nevileye info\n```\n\n### Process Launcher (`evileye-process`)\n\nDirect launcher for the surveillance process with GUI support:\n\n```bash\n# Launch with configuration file\nevileye-process --config configs/my_config.json\n\n# Launch with GUI disabled (headless mode)\nevileye-process --config configs/my_config.json --no-gui\n\n# Launch with auto-close when video ends\nevileye-process --config configs/my_config.json --autoclose\n\n# Use preset for multiple video sources\nevileye-process --sources_preset multi_camera\n```\n\n**Options:**\n- `--config CONFIG_FILE` - Configuration file path\n- `--gui` / `--no-gui` - Enable/disable GUI (default: enabled)\n- `--autoclose` - Auto-close when video ends\n- `--sources_preset PRESET` - Use preset for multiple sources\n\n### Configuration Editor (`evileye-configure`)\n\nGraphical configuration editor for creating and modifying configuration files:\n\n```bash\n# Open configuration editor\nevileye-configure\n\n# Open specific configuration file\nevileye-configure configs/my_config.json\n\n# Open configuration from any path\nevileye-configure /path/to/config.json\n```\n\n**Features:**\n- Visual configuration editor\n- Real-time validation\n- Template-based configuration creation\n- Source, detector, and tracker configuration\n- Multi-camera setup support\n\n### Application Launcher (`evileye-launch`)\n\nMain application launcher with integrated configuration management:\n\n```bash\n# Launch main application\nevileye-launch\n\n# Launch with specific configuration\nevileye-launch configs/my_config.json\n```\n\n**Features:**\n- Configuration file browser\n- Process control (start/stop surveillance)\n- Real-time status monitoring\n- Log display and management\n- Tabbed interface for different functions\n\n### Configuration Creator (`evileye-create`)\n\nCommand-line tool for creating new configuration files:\n\n```bash\n# Create basic configuration\nevileye-create my_config\n\n# Create configuration with specific number of sources\nevileye-create my_config --sources 3\n\n# Create configuration with specific source type\nevileye-create my_config --sources 2 --source-type ip_camera\n\n# Create configuration with specific pipeline\nevileye-create my_config --pipeline PipelineSurveillance\n\n# List available pipeline classes\nevileye-create --list-pipelines\n\n# Create configuration in specific directory\nevileye-create /path/to/custom_config\n```\n\n**Options:**\n- `--sources N` - Number of video sources (default: 0)\n- `--source-type TYPE` - Source type: `video_file`, `ip_camera`, `device`\n- `--pipeline PIPELINE` - Pipeline class to use\n- `--list-pipelines` - List available pipeline classes\n\nThe Configuration GUI provides:\n- Configuration file browser and editor\n- Process control (launch/stop surveillance system via process.py)\n- Real-time status monitoring\n- Log display and management\n- Tabbed interface for configuration, logs, and controls\n\n### Deployment Command Details\n\nThe `evileye deploy` command:\n\n1. **Copies** `credentials_proto.json` to `credentials.json` (if `credentials.json` doesn't exist)\n2. **Creates** `configs/` folder (if it doesn't exist)\n3. **Prepares** your project directory for EvilEye configuration\n\n**Created Files:**\n- `credentials.json` - Database and camera access credentials\n- `configs/` - Directory for your configuration files\n\n**Next Steps After Deploy:**\n1. Edit `credentials.json` with your actual credentials\n2. Create configurations using `evileye-create`\n3. Run the system with `evileye run`\n\n### Configuration Management\n\n```bash\n# List available pipeline classes\nevileye-create --list-pipelines\n\n# Create configuration with specific pipeline\nevileye-create my_config --sources 2 --pipeline PipelineSurveillance\n\n# Available source types:\n# - video_file: Video files (.mp4, .avi, etc.)\n# - ip_camera: IP cameras (RTSP streams)\n# - device: USB/web cameras\n\n# Validate configuration file\nevileye validate configs/my_config.json\n\n# List available configurations\nevileye list-configs\n```\n\n### Complete Workflow Example\n\n```bash\n# 1. Deploy files to new project directory\nmkdir my_surveillance_project\ncd my_surveillance_project\nevileye deploy\n\n# 2. Edit credentials.json with your actual credentials\n#    - Add camera usernames/passwords\n#    - Configure database connection\n\n# 3. Create configuration for 2 IP cameras\nevileye-create surveillance_config --sources 2 --source-type ip_camera\n\n# 4. Edit configs/surveillance_config.json with your camera URLs\n#    - Replace \"rtsp://url\" with actual camera URLs\n#    - Configure detection and tracking parameters\n\n# 5. Validate configuration\nevileye validate configs/surveillance_config.json\n\n# 6. Run the system (multiple options available)\nevileye run configs/surveillance_config.json\n\n# Alternative: Use direct process launcher\nevileye-process --config configs/surveillance_config.json\n\n# Alternative: Use GUI launcher for easier management\nevileye-launch\n\n# Alternative: Use configuration editor for fine-tuning\nevileye-configure configs/surveillance_config.json\n```\n\n### Entry Point Usage Scenarios\n\n**For Beginners:**\n```bash\n# Use the main launcher with GUI\nevileye-launch\n```\n\n**For Advanced Users:**\n```bash\n# Use direct process launcher with specific options\nevileye-process --config configs/my_config.json --no-gui --autoclose\n```\n\n**For Configuration Management:**\n```bash\n# Create new configurations\nevileye-create my_config --sources 3 --source-type ip_camera\n\n# Edit existing configurations\nevileye-configure configs/my_config.json\n\n# Validate configurations\nevileye validate configs/my_config.json\n```\n\n**For Automation/Scripts:**\n```bash\n# Use main CLI for scripting\nevileye run configs/automated_config.json\n\n# Use process launcher for headless operation\nevileye-process --config configs/headless_config.json --no-gui\n```\n\n## Development\n\n### Project Structure\n\n```\nevileye/\n\u251c\u2500\u2500 core/                    # Core pipeline components\n\u2502   \u251c\u2500\u2500 pipeline.py         # Base pipeline class\n\u2502   \u251c\u2500\u2500 processor_base.py   # Base processor class\n\u2502   \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 pipelines/              # Pipeline implementations\n\u2502   \u2514\u2500\u2500 pipeline_surveillance.py\n\u251c\u2500\u2500 object_detector/        # Object detection modules\n\u251c\u2500\u2500 object_tracker/         # Object tracking modules\n\u251c\u2500\u2500 object_multi_camera_tracker/  # Multi-camera tracking\n\u251c\u2500\u2500 events_detectors/       # Event detection\n\u251c\u2500\u2500 database_controller/    # Database integration\n\u251c\u2500\u2500 visualization_modules/  # Main application GUI components\n\u251c\u2500\u2500 configs/               # Configuration files\n\u251c\u2500\u2500 tests/                 # Test suite\n\u251c\u2500\u2500 evileye/               # Package entry points\n\u2502   \u251c\u2500\u2500 cli.py            # Command-line interface\n\u2502   \u251c\u2500\u2500 launch.py         # Configuration GUI launcher\n\u2502   \u2514\u2500\u2500 __init__.py       # Package initialization\n\u251c\u2500\u2500 pyproject.toml        # Project configuration\n\u251c\u2500\u2500 Makefile              # Development commands\n\u2514\u2500\u2500 README.md             # This file\n```\n\n## Architecture\n\nEvilEye uses a modular pipeline architecture:\n\n1. **Sources** - Video capture from cameras, files, or streams\n2. **Preprocessors** - Frame preprocessing and enhancement\n3. **Detectors** - Object detection using YOLO models\n4. **Trackers** - Object tracking and trajectory analysis\n5. **Multi-camera Trackers** - Cross-camera object re-identification\n\nEach component is implemented as a processor that can be configured and combined to create custom surveillance pipelines.\n\n### Pipeline Classes\n\nEvilEye supports multiple pipeline implementations:\n\n- **PipelineSurveillance** - Full-featured pipeline with all components (sources, detectors, trackers, mc_trackers)\n- **Custom Pipelines** - User-defined pipeline implementations\n\nPipeline classes are automatically discovered from:\n- Built-in `evileye.pipelines` package\n- Local `pipelines/` folder in working directory\n\n#### Available Pipeline Classes\n\n```bash\n# List available pipeline classes\nevileye-create --list-pipelines\n```\n\n#### Creating Custom Pipelines\n\nCreate custom pipelines by extending the base `Pipeline` class and placing them in a local `pipelines/` folder:\n\n```python\nfrom evileye.core.pipeline_processors import Pipeline\n\n\nclass MyCustomPipeline(Pipeline):\n    def __init__(self):\n        super().__init__()\n        # Custom initialization\n\n    def generate_default_structure(self, num_sources: int):\n        # Custom configuration generation\n        pass\n```\n\nEach pipeline class can define its own configuration structure and processing logic.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Code Style\n\n- Follow PEP 8 guidelines\n- Use type hints\n- Write docstrings for all functions and classes\n- Run `make quality` before submitting PRs\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Documentation**: [https://evileye.readthedocs.io/](https://evileye.readthedocs.io/)\n- **Issues**: [https://github.com/evileye/evileye/issues](https://github.com/evileye/evileye/issues)\n- **Discussions**: [https://github.com/evileye/evileye/discussions](https://github.com/evileye/evileye/discussions)\n\n## Acknowledgments\n\n- [Ultralytics](https://github.com/ultralytics/ultralytics) for YOLO models\n- [OpenCV](https://opencv.org/) for computer vision\n- [PyQt6](https://www.riverbankcomputing.com/software/pyqt/) for GUI\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Intelligence video surveillance system",
    "version": "0.0.6",
    "project_urls": {
        "Bug Tracker": "https://github.com/evileye/evileye/issues",
        "Documentation": "https://evileye.readthedocs.io/",
        "Homepage": "https://github.com/evileye/evileye",
        "Repository": "https://github.com/evileye/evileye.git",
        "Source Code": "https://github.com/evileye/evileye"
    },
    "split_keywords": [
        "surveillance",
        " computer-vision",
        " object-detection",
        " object-tracking",
        " video-processing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b534b3a5e288d57ab6bb8c337fe676fed3b2a466dba2fb3bfce9476d48edef3f",
                "md5": "18a9f9cf7fef5cfee7af8d415553ee17",
                "sha256": "ffbe42938d1ac5b08bd51b3fca9bb5bc965da02e56224fff97b677db461c348a"
            },
            "downloads": -1,
            "filename": "evileye-0.0.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "18a9f9cf7fef5cfee7af8d415553ee17",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 6281319,
            "upload_time": "2025-10-08T06:44:26",
            "upload_time_iso_8601": "2025-10-08T06:44:26.001899Z",
            "url": "https://files.pythonhosted.org/packages/b5/34/b3a5e288d57ab6bb8c337fe676fed3b2a466dba2fb3bfce9476d48edef3f/evileye-0.0.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "377b85db1f402227c3029a758a9d03ed87a9a27e8e13a4ebee649d7dd9702676",
                "md5": "49a94f8e2c20f4c9ce193ba709f61801",
                "sha256": "a0482e8526e00bd848c55c8a96a42b8b5f5b9100d66386ddeaee88795803c3ac"
            },
            "downloads": -1,
            "filename": "evileye-0.0.6.tar.gz",
            "has_sig": false,
            "md5_digest": "49a94f8e2c20f4c9ce193ba709f61801",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 6250649,
            "upload_time": "2025-10-08T06:44:29",
            "upload_time_iso_8601": "2025-10-08T06:44:29.852781Z",
            "url": "https://files.pythonhosted.org/packages/37/7b/85db1f402227c3029a758a9d03ed87a9a27e8e13a4ebee649d7dd9702676/evileye-0.0.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-08 06:44:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "evileye",
    "github_project": "evileye",
    "github_not_found": true,
    "lcname": "evileye"
}
        
Elapsed time: 3.45150s