Source code for endoreg_db.models.label.annotation.image_classification

from django.db import models

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ..label import Label
    from ...media.frame import Frame
    from ...metadata import ModelMeta
    from ...other.information_source import InformationSource

[docs] class ImageClassificationAnnotation(models.Model): """ Represents an image classification annotation, linking a label to a specific frame. An annotation is associated with a single `Frame` instance, which itself links to either a `Video` or `RawVideoFile`. Attributes: frame (ForeignKey): The frame associated with the annotation. label (ForeignKey): The label assigned to the annotation. value (bool): Indicates if the classification is true/positive. float_value (FloatField): Optional float value associated with the classification (e.g., confidence score). annotator (str): Identifier for the user or process that created the annotation. model_meta (ForeignKey): Optional link to the model metadata if generated by a model. date_created (datetime): The creation timestamp of the annotation. date_modified (datetime): The last modification timestamp of the annotation. information_source (ForeignKey): Optional link to the source of this information. """ # Single ForeignKey to the unified Frame model frame = models.ForeignKey( "Frame", # Points to the unified Frame model on_delete=models.CASCADE, related_name="image_classification_annotations", blank=False, null=False, ) label = models.ForeignKey( "Label", on_delete=models.CASCADE, related_name="image_classification_annotations", ) value = models.BooleanField() float_value = models.FloatField(blank=True, null=True) annotator = models.CharField(max_length=255, blank=True, null=True) model_meta = models.ForeignKey( "ModelMeta", on_delete=models.SET_NULL, related_name="image_classification_annotations", default=None, null=True, blank=True, ) date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) information_source = models.ForeignKey( "InformationSource", on_delete=models.SET_NULL, related_name="image_classification_annotations", default=None, null=True, blank=True, ) if TYPE_CHECKING: frame: "Frame" # Updated type hint label: "Label" information_source: "InformationSource" model_meta: "ModelMeta" # Added for completeness class Meta: indexes = [ models.Index(fields=['frame', 'label']), models.Index(fields=['frame']), ] def __str__(self) -> str: """ String representation of the annotation. """ frame_str = str(self.frame) if self.frame else "No Frame" label_name = self.label.name if self.label else "No Label" return f"{frame_str} - {label_name} - {self.value}"