nedo-vision-worker-core


Namenedo-vision-worker-core JSON
Version 0.3.7 PyPI version JSON
download
home_pageNone
SummaryNedo Vision Worker Core Library for AI Vision Processing
upload_time2025-10-23 08:48:09
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords computer-vision machine-learning ai worker-core deep-learning object-detection neural-networks video-processing pytorch yolo
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Nedo Vision Worker Core

A powerful Python library for AI-powered computer vision processing in the Nedo Vision platform. This library provides real-time video processing, object detection, PPE compliance monitoring, and safety violation detection with an extensible callback system.

## Features

- **Real-time AI Detection**: Advanced PPE and safety compliance detection
- **Multi-stream Processing**: Handle multiple video sources simultaneously
- **Extensible Callbacks**: Event-driven architecture for detection handling
- **System Diagnostics**: Built-in health checking and troubleshooting
- **Database Integration**: Persistent storage for detections and configurations
- **Drawing Utilities**: Rich visualization tools for detections
- **GPU Acceleration**: CUDA support for optimal performance
- **RTMP Streaming**: Real-time video streaming capabilities

## Installation

### Basic Installation

Install the package from PyPI:

```bash
pip install nedo-vision-worker-core
```

### Installation with RF-DETR Support

RF-DETR is an optional dependency for advanced object detection. Install it separately:

```bash
# Install the main package
pip install nedo-vision-worker-core
```

### GPU Support

For GPU support with CUDA 12.1:

```bash
pip install nedo-vision-worker-core --extra-index-url https://download.pytorch.org/whl/cu121
```

### Development Installation

For development with all tools:

```bash
pip install nedo-vision-worker-core[dev]
```

## Quick Start

### Using the CLI

After installation, you can use the worker core CLI:

```bash
# Show CLI help
nedo-worker-core --help

# Run with default settings
nedo-worker-core run

# Run with custom configuration
nedo-worker-core run --log-level DEBUG --storage-path /data

# System health check
nedo-worker-core doctor

# Run with custom server configuration
nedo-worker-core run --storage-path /custom/storage --rtmp-server rtmp://server.com:1935/live
```

### Configuration Options

The service supports various configuration options:

- `--drawing-assets`: Path to drawing assets directory
- `--log-level`: Logging level (DEBUG|INFO|WARNING|ERROR)
- `--storage-path`: Storage path for databases and files
- `--rtmp-server`: RTMP server URL for video streaming

### Detection Callbacks

The worker core provides a unified callback system for handling detection events:

```python
from nedo_vision_worker_core import (
    CoreService,
    DetectionType,
    CallbackTrigger,
    DetectionData,
    register_immediate_ppe_callback
)

def handle_ppe_detection(detection_data: DetectionData):
    """Handle PPE detection events."""
    if detection_data.has_violations():
        # Send alert for safety violations
        send_safety_alert(
            person_id=detection_data.person_id,
            violations=[v.label for v in detection_data.get_violations()],
            confidence=detection_data.confidence_score,
            image_path=detection_data.image_path
        )

    # Log all detections for compliance tracking
    log_detection_event(detection_data)

def handle_area_violation(detection_data: DetectionData):
    """Handle restricted area violations."""
    # Immediate security response
    trigger_security_alert(
        location=detection_data.pipeline_id,
        person_id=detection_data.person_id,
        timestamp=detection_data.timestamp
    )

# Quick registration
register_immediate_ppe_callback("safety_monitor", handle_ppe_detection)

# Advanced registration
CoreService.register_callback(
    name="security_monitor",
    callback=handle_area_violation,
    trigger=CallbackTrigger.ON_NEW_DETECTION,
    detection_types=[DetectionType.AREA_VIOLATION]
)

# Start processing
service = CoreService()
service.run()
```

### Advanced Usage

For interval-based monitoring and complex workflows:

```python
from nedo_vision_worker_core import (
    register_interval_ppe_callback,
    register_immediate_area_callback,
    IntervalMetadata
)

def handle_ongoing_ppe_violations(detection_data: DetectionData):
    """Handle PPE violations that are currently active (called periodically while violations persist)."""
    metadata = detection_data.get_interval_metadata()
    if metadata:
        # This callback is only triggered when there are active violations
        current_violations = metadata['current_violation_state']
        people_in_violation = metadata['unique_persons_in_violation']

        # Take action for ongoing violations
        if people_in_violation > 0:
            # Escalate persistent violations
            escalate_safety_violation(
                pipeline_id=detection_data.pipeline_id,
                violation_types=current_violations,
                affected_count=people_in_violation,
                state_time=metadata['state_timestamp']
            )

            # Continue monitoring until violations are resolved
            log_ongoing_violation_state(detection_data, metadata)

def emergency_response(detection_data: DetectionData):
    """Handle immediate area violations."""
    # Trigger immediate emergency protocols
    emergency_alert = {
        'alert_type': 'RESTRICTED_AREA_BREACH',
        'location': detection_data.pipeline_id,
        'person_id': detection_data.person_id,
        'confidence': detection_data.confidence_score,
        'timestamp': detection_data.timestamp,
        'evidence_image': detection_data.image_path
    }

    # Send to security team
    notify_security_team(emergency_alert)

    # Log incident for investigation
    log_security_incident(emergency_alert)

def handle_ongoing_area_violations(detection_data: DetectionData):
    """Handle area violations that are currently active (called periodically while violations persist)."""
    metadata = detection_data.get_interval_metadata()
    if metadata:
        # This is called every X seconds while people are still in restricted areas
        active_violations = metadata['total_active_violations']

        if active_violations > 0:
            # Continuous monitoring for ongoing security breaches
            maintain_security_alert(
                location=detection_data.pipeline_id,
                ongoing_violations=active_violations,
                duration_check=metadata['state_timestamp']
            )

# Register immediate callbacks (triggered on each new detection)
register_immediate_area_callback("immediate_security", emergency_response)

# Register interval callbacks (triggered periodically ONLY when violations are currently active)
register_interval_ppe_callback("ongoing_ppe_monitor", handle_ongoing_ppe_violations, interval_seconds=30)
register_interval_area_callback("ongoing_area_monitor", handle_ongoing_area_violations, interval_seconds=15)

# Monitor multiple detection types with custom logic
def safety_coordinator(detection_data: DetectionData):
    """Coordinate safety responses across all detection types."""
    if detection_data.detection_type == DetectionType.PPE_DETECTION:
        handle_ppe_safety(detection_data)
    elif detection_data.detection_type == DetectionType.AREA_VIOLATION:
        handle_security_breach(detection_data)

CoreService.register_callback(
    name="safety_coordinator",
    callback=safety_coordinator,
    trigger=CallbackTrigger.ON_NEW_DETECTION,
    detection_types=[DetectionType.PPE_DETECTION, DetectionType.AREA_VIOLATION]
)
```

### Programmatic Usage

You can use the core service programmatically in your applications:

```python
from nedo_vision_worker_core import CoreService

# Basic usage - start the service with default settings
service = CoreService()
service.run()

# Custom configuration
service = CoreService(
    log_level="INFO",
    storage_path="./data"
)
service.run()

# With error handling
try:
    service = CoreService(log_level="DEBUG")
    service.run()
except KeyboardInterrupt:
    print("Service stopped")
except Exception as e:
    print(f"Error: {e}")
```

## Architecture

### Core Components

- **CoreService**: Main service orchestrator with callback management
- **Detection Pipeline**: AI model processing with PyTorch backend
- **Callback System**: Unified event handling with immediate and interval triggers
- **Resource Monitor**: System resource monitoring (GPU, CPU, memory)
- **Database Manager**: Persistent storage for detections and configurations

### Callback System

#### Trigger Types

- **`ON_NEW_DETECTION`**: Triggered immediately on each detection
- **`ON_VIOLATION_INTERVAL`**: Triggered periodically only when violations occur in the interval

#### Detection Types

- **`PPE_DETECTION`**: Personal Protective Equipment compliance
- **`AREA_VIOLATION`**: Restricted area violations
- **`GENERAL_DETECTION`**: All detection events

#### Data Structure

```python
class DetectionData:
    detection_id: str
    person_id: str
    pipeline_id: str
    detection_type: DetectionType
    confidence_score: float
    timestamp: datetime
    image_path: str
    metadata: dict

    def get_violations(self) -> List[DetectionAttribute]
    def get_compliance(self) -> List[DetectionAttribute]
    def has_violations(self) -> bool
    def get_interval_metadata(self) -> Optional[IntervalMetadata]

class IntervalMetadata(TypedDict):
    state_timestamp: str              # ISO format datetime of current state
    total_active_violations: int      # Current number of active violations
    unique_persons_in_violation: int  # Number of people currently in violation
    current_violation_state: Dict[str, int]  # Current violation types and counts
    violation_summary: Dict[str, int] # violation_type -> count (deprecated, use current_violation_state)
    total_violations: int            # total violations in interval (deprecated, use total_active_violations)
    violation_count_in_interval: int # violations in this specific interval
    interval_start: str              # ISO format datetime
    interval_end: str                # ISO format datetime
    unique_persons: int              # total unique persons in interval
```

#### API Methods

```python
# Core callback registration methods
CoreService.register_callback(name, callback, trigger, detection_types, interval_seconds)
CoreService.unregister_callback(name)
CoreService.list_callbacks()

# Convenience functions for common use cases
register_immediate_ppe_callback(name, callback)
register_immediate_area_callback(name, callback)
register_interval_ppe_callback(name, callback, interval_seconds)
register_interval_area_callback(name, callback, interval_seconds)

# Example: Managing callbacks programmatically
def setup_safety_monitoring():
    """Setup comprehensive safety monitoring system."""

    # Register immediate response callbacks
    register_immediate_ppe_callback("ppe_safety", handle_ppe_violations)
    register_immediate_area_callback("area_security", handle_area_breaches)

    # Register periodic reporting
    register_interval_ppe_callback("hourly_report", generate_hourly_report, interval_seconds=3600)

    # Verify registration
    active_callbacks = CoreService.list_callbacks()
    logging.info(f"Active monitoring: {len(active_callbacks)} callbacks registered")

    return active_callbacks

# Cleanup callbacks when needed
def cleanup_monitoring():
    """Remove specific callbacks."""
    CoreService.unregister_callback("ppe_safety")
    CoreService.unregister_callback("area_security")
```

See [INSTALL.md](INSTALL.md) for detailed installation instructions.

## Troubleshooting

### Common Issues

1. **CUDA not detected**: Ensure NVIDIA drivers and CUDA toolkit are installed
2. **FFmpeg not found**: Install FFmpeg for video processing capabilities
3. **Permission errors**: Check storage directory permissions
4. **Model loading issues**: Verify model files and network connectivity

### Support

For issues and questions:

- Check the logs for detailed error information
- Run `nedo-worker-core doctor` for system diagnostics
- Verify all dependencies are properly installed

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "nedo-vision-worker-core",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "Willy Achmat Fauzi <willy.achmat@gmail.com>",
    "keywords": "computer-vision, machine-learning, ai, worker-core, deep-learning, object-detection, neural-networks, video-processing, pytorch, yolo",
    "author": null,
    "author_email": "Willy Achmat Fauzi <willy.achmat@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/3e/1a/6a8c9522a430812424bdf4e0c7479a78aefee0cb02a26d8bf3efc6a31881/nedo_vision_worker_core-0.3.7.tar.gz",
    "platform": null,
    "description": "# Nedo Vision Worker Core\n\nA powerful Python library for AI-powered computer vision processing in the Nedo Vision platform. This library provides real-time video processing, object detection, PPE compliance monitoring, and safety violation detection with an extensible callback system.\n\n## Features\n\n- **Real-time AI Detection**: Advanced PPE and safety compliance detection\n- **Multi-stream Processing**: Handle multiple video sources simultaneously\n- **Extensible Callbacks**: Event-driven architecture for detection handling\n- **System Diagnostics**: Built-in health checking and troubleshooting\n- **Database Integration**: Persistent storage for detections and configurations\n- **Drawing Utilities**: Rich visualization tools for detections\n- **GPU Acceleration**: CUDA support for optimal performance\n- **RTMP Streaming**: Real-time video streaming capabilities\n\n## Installation\n\n### Basic Installation\n\nInstall the package from PyPI:\n\n```bash\npip install nedo-vision-worker-core\n```\n\n### Installation with RF-DETR Support\n\nRF-DETR is an optional dependency for advanced object detection. Install it separately:\n\n```bash\n# Install the main package\npip install nedo-vision-worker-core\n```\n\n### GPU Support\n\nFor GPU support with CUDA 12.1:\n\n```bash\npip install nedo-vision-worker-core --extra-index-url https://download.pytorch.org/whl/cu121\n```\n\n### Development Installation\n\nFor development with all tools:\n\n```bash\npip install nedo-vision-worker-core[dev]\n```\n\n## Quick Start\n\n### Using the CLI\n\nAfter installation, you can use the worker core CLI:\n\n```bash\n# Show CLI help\nnedo-worker-core --help\n\n# Run with default settings\nnedo-worker-core run\n\n# Run with custom configuration\nnedo-worker-core run --log-level DEBUG --storage-path /data\n\n# System health check\nnedo-worker-core doctor\n\n# Run with custom server configuration\nnedo-worker-core run --storage-path /custom/storage --rtmp-server rtmp://server.com:1935/live\n```\n\n### Configuration Options\n\nThe service supports various configuration options:\n\n- `--drawing-assets`: Path to drawing assets directory\n- `--log-level`: Logging level (DEBUG|INFO|WARNING|ERROR)\n- `--storage-path`: Storage path for databases and files\n- `--rtmp-server`: RTMP server URL for video streaming\n\n### Detection Callbacks\n\nThe worker core provides a unified callback system for handling detection events:\n\n```python\nfrom nedo_vision_worker_core import (\n    CoreService,\n    DetectionType,\n    CallbackTrigger,\n    DetectionData,\n    register_immediate_ppe_callback\n)\n\ndef handle_ppe_detection(detection_data: DetectionData):\n    \"\"\"Handle PPE detection events.\"\"\"\n    if detection_data.has_violations():\n        # Send alert for safety violations\n        send_safety_alert(\n            person_id=detection_data.person_id,\n            violations=[v.label for v in detection_data.get_violations()],\n            confidence=detection_data.confidence_score,\n            image_path=detection_data.image_path\n        )\n\n    # Log all detections for compliance tracking\n    log_detection_event(detection_data)\n\ndef handle_area_violation(detection_data: DetectionData):\n    \"\"\"Handle restricted area violations.\"\"\"\n    # Immediate security response\n    trigger_security_alert(\n        location=detection_data.pipeline_id,\n        person_id=detection_data.person_id,\n        timestamp=detection_data.timestamp\n    )\n\n# Quick registration\nregister_immediate_ppe_callback(\"safety_monitor\", handle_ppe_detection)\n\n# Advanced registration\nCoreService.register_callback(\n    name=\"security_monitor\",\n    callback=handle_area_violation,\n    trigger=CallbackTrigger.ON_NEW_DETECTION,\n    detection_types=[DetectionType.AREA_VIOLATION]\n)\n\n# Start processing\nservice = CoreService()\nservice.run()\n```\n\n### Advanced Usage\n\nFor interval-based monitoring and complex workflows:\n\n```python\nfrom nedo_vision_worker_core import (\n    register_interval_ppe_callback,\n    register_immediate_area_callback,\n    IntervalMetadata\n)\n\ndef handle_ongoing_ppe_violations(detection_data: DetectionData):\n    \"\"\"Handle PPE violations that are currently active (called periodically while violations persist).\"\"\"\n    metadata = detection_data.get_interval_metadata()\n    if metadata:\n        # This callback is only triggered when there are active violations\n        current_violations = metadata['current_violation_state']\n        people_in_violation = metadata['unique_persons_in_violation']\n\n        # Take action for ongoing violations\n        if people_in_violation > 0:\n            # Escalate persistent violations\n            escalate_safety_violation(\n                pipeline_id=detection_data.pipeline_id,\n                violation_types=current_violations,\n                affected_count=people_in_violation,\n                state_time=metadata['state_timestamp']\n            )\n\n            # Continue monitoring until violations are resolved\n            log_ongoing_violation_state(detection_data, metadata)\n\ndef emergency_response(detection_data: DetectionData):\n    \"\"\"Handle immediate area violations.\"\"\"\n    # Trigger immediate emergency protocols\n    emergency_alert = {\n        'alert_type': 'RESTRICTED_AREA_BREACH',\n        'location': detection_data.pipeline_id,\n        'person_id': detection_data.person_id,\n        'confidence': detection_data.confidence_score,\n        'timestamp': detection_data.timestamp,\n        'evidence_image': detection_data.image_path\n    }\n\n    # Send to security team\n    notify_security_team(emergency_alert)\n\n    # Log incident for investigation\n    log_security_incident(emergency_alert)\n\ndef handle_ongoing_area_violations(detection_data: DetectionData):\n    \"\"\"Handle area violations that are currently active (called periodically while violations persist).\"\"\"\n    metadata = detection_data.get_interval_metadata()\n    if metadata:\n        # This is called every X seconds while people are still in restricted areas\n        active_violations = metadata['total_active_violations']\n\n        if active_violations > 0:\n            # Continuous monitoring for ongoing security breaches\n            maintain_security_alert(\n                location=detection_data.pipeline_id,\n                ongoing_violations=active_violations,\n                duration_check=metadata['state_timestamp']\n            )\n\n# Register immediate callbacks (triggered on each new detection)\nregister_immediate_area_callback(\"immediate_security\", emergency_response)\n\n# Register interval callbacks (triggered periodically ONLY when violations are currently active)\nregister_interval_ppe_callback(\"ongoing_ppe_monitor\", handle_ongoing_ppe_violations, interval_seconds=30)\nregister_interval_area_callback(\"ongoing_area_monitor\", handle_ongoing_area_violations, interval_seconds=15)\n\n# Monitor multiple detection types with custom logic\ndef safety_coordinator(detection_data: DetectionData):\n    \"\"\"Coordinate safety responses across all detection types.\"\"\"\n    if detection_data.detection_type == DetectionType.PPE_DETECTION:\n        handle_ppe_safety(detection_data)\n    elif detection_data.detection_type == DetectionType.AREA_VIOLATION:\n        handle_security_breach(detection_data)\n\nCoreService.register_callback(\n    name=\"safety_coordinator\",\n    callback=safety_coordinator,\n    trigger=CallbackTrigger.ON_NEW_DETECTION,\n    detection_types=[DetectionType.PPE_DETECTION, DetectionType.AREA_VIOLATION]\n)\n```\n\n### Programmatic Usage\n\nYou can use the core service programmatically in your applications:\n\n```python\nfrom nedo_vision_worker_core import CoreService\n\n# Basic usage - start the service with default settings\nservice = CoreService()\nservice.run()\n\n# Custom configuration\nservice = CoreService(\n    log_level=\"INFO\",\n    storage_path=\"./data\"\n)\nservice.run()\n\n# With error handling\ntry:\n    service = CoreService(log_level=\"DEBUG\")\n    service.run()\nexcept KeyboardInterrupt:\n    print(\"Service stopped\")\nexcept Exception as e:\n    print(f\"Error: {e}\")\n```\n\n## Architecture\n\n### Core Components\n\n- **CoreService**: Main service orchestrator with callback management\n- **Detection Pipeline**: AI model processing with PyTorch backend\n- **Callback System**: Unified event handling with immediate and interval triggers\n- **Resource Monitor**: System resource monitoring (GPU, CPU, memory)\n- **Database Manager**: Persistent storage for detections and configurations\n\n### Callback System\n\n#### Trigger Types\n\n- **`ON_NEW_DETECTION`**: Triggered immediately on each detection\n- **`ON_VIOLATION_INTERVAL`**: Triggered periodically only when violations occur in the interval\n\n#### Detection Types\n\n- **`PPE_DETECTION`**: Personal Protective Equipment compliance\n- **`AREA_VIOLATION`**: Restricted area violations\n- **`GENERAL_DETECTION`**: All detection events\n\n#### Data Structure\n\n```python\nclass DetectionData:\n    detection_id: str\n    person_id: str\n    pipeline_id: str\n    detection_type: DetectionType\n    confidence_score: float\n    timestamp: datetime\n    image_path: str\n    metadata: dict\n\n    def get_violations(self) -> List[DetectionAttribute]\n    def get_compliance(self) -> List[DetectionAttribute]\n    def has_violations(self) -> bool\n    def get_interval_metadata(self) -> Optional[IntervalMetadata]\n\nclass IntervalMetadata(TypedDict):\n    state_timestamp: str              # ISO format datetime of current state\n    total_active_violations: int      # Current number of active violations\n    unique_persons_in_violation: int  # Number of people currently in violation\n    current_violation_state: Dict[str, int]  # Current violation types and counts\n    violation_summary: Dict[str, int] # violation_type -> count (deprecated, use current_violation_state)\n    total_violations: int            # total violations in interval (deprecated, use total_active_violations)\n    violation_count_in_interval: int # violations in this specific interval\n    interval_start: str              # ISO format datetime\n    interval_end: str                # ISO format datetime\n    unique_persons: int              # total unique persons in interval\n```\n\n#### API Methods\n\n```python\n# Core callback registration methods\nCoreService.register_callback(name, callback, trigger, detection_types, interval_seconds)\nCoreService.unregister_callback(name)\nCoreService.list_callbacks()\n\n# Convenience functions for common use cases\nregister_immediate_ppe_callback(name, callback)\nregister_immediate_area_callback(name, callback)\nregister_interval_ppe_callback(name, callback, interval_seconds)\nregister_interval_area_callback(name, callback, interval_seconds)\n\n# Example: Managing callbacks programmatically\ndef setup_safety_monitoring():\n    \"\"\"Setup comprehensive safety monitoring system.\"\"\"\n\n    # Register immediate response callbacks\n    register_immediate_ppe_callback(\"ppe_safety\", handle_ppe_violations)\n    register_immediate_area_callback(\"area_security\", handle_area_breaches)\n\n    # Register periodic reporting\n    register_interval_ppe_callback(\"hourly_report\", generate_hourly_report, interval_seconds=3600)\n\n    # Verify registration\n    active_callbacks = CoreService.list_callbacks()\n    logging.info(f\"Active monitoring: {len(active_callbacks)} callbacks registered\")\n\n    return active_callbacks\n\n# Cleanup callbacks when needed\ndef cleanup_monitoring():\n    \"\"\"Remove specific callbacks.\"\"\"\n    CoreService.unregister_callback(\"ppe_safety\")\n    CoreService.unregister_callback(\"area_security\")\n```\n\nSee [INSTALL.md](INSTALL.md) for detailed installation instructions.\n\n## Troubleshooting\n\n### Common Issues\n\n1. **CUDA not detected**: Ensure NVIDIA drivers and CUDA toolkit are installed\n2. **FFmpeg not found**: Install FFmpeg for video processing capabilities\n3. **Permission errors**: Check storage directory permissions\n4. **Model loading issues**: Verify model files and network connectivity\n\n### Support\n\nFor issues and questions:\n\n- Check the logs for detailed error information\n- Run `nedo-worker-core doctor` for system diagnostics\n- Verify all dependencies are properly installed\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Nedo Vision Worker Core Library for AI Vision Processing",
    "version": "0.3.7",
    "project_urls": {
        "Bug Reports": "https://gitlab.com/sindika/research/nedo-vision/nedo-vision-worker-core-v2/-/issues",
        "Documentation": "https://gitlab.com/sindika/research/nedo-vision/nedo-vision-worker-core-v2/-/blob/main/README.md",
        "Homepage": "https://gitlab.com/sindika/research/nedo-vision/nedo-vision-worker-core-v2",
        "Repository": "https://gitlab.com/sindika/research/nedo-vision/nedo-vision-worker-core-v2"
    },
    "split_keywords": [
        "computer-vision",
        " machine-learning",
        " ai",
        " worker-core",
        " deep-learning",
        " object-detection",
        " neural-networks",
        " video-processing",
        " pytorch",
        " yolo"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b5af2e2eaa8b5a644345ba97836070b1a77ff07e6afb77ec2e0909ae92bb3394",
                "md5": "3f517f767a260e01078dd1ecee9e63d9",
                "sha256": "526c4377bf1cd41d637b2293ec007495fbf666962801ad56eaa0c2d68b2f8c59"
            },
            "downloads": -1,
            "filename": "nedo_vision_worker_core-0.3.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3f517f767a260e01078dd1ecee9e63d9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 218915,
            "upload_time": "2025-10-23T08:48:06",
            "upload_time_iso_8601": "2025-10-23T08:48:06.041252Z",
            "url": "https://files.pythonhosted.org/packages/b5/af/2e2eaa8b5a644345ba97836070b1a77ff07e6afb77ec2e0909ae92bb3394/nedo_vision_worker_core-0.3.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3e1a6a8c9522a430812424bdf4e0c7479a78aefee0cb02a26d8bf3efc6a31881",
                "md5": "25f899d4dd10383709f21140b235a07f",
                "sha256": "a439de631c530fbbddf9a70c1b011429b5e79e3fce3333a0eade767c14de49e0"
            },
            "downloads": -1,
            "filename": "nedo_vision_worker_core-0.3.7.tar.gz",
            "has_sig": false,
            "md5_digest": "25f899d4dd10383709f21140b235a07f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 188019,
            "upload_time": "2025-10-23T08:48:09",
            "upload_time_iso_8601": "2025-10-23T08:48:09.373464Z",
            "url": "https://files.pythonhosted.org/packages/3e/1a/6a8c9522a430812424bdf4e0c7479a78aefee0cb02a26d8bf3efc6a31881/nedo_vision_worker_core-0.3.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-23 08:48:09",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "sindika",
    "gitlab_project": "research",
    "lcname": "nedo-vision-worker-core"
}
        
Elapsed time: 2.32743s