package classify import ( "strings" "github.com/photoprism/photoprism/pkg/txt" ) // Label represents a MediaFile label (automatically created). type Label struct { Name string `json:"label"` // Label name Source string `json:"source"` // Where was this label found / detected? Uncertainty int `json:"uncertainty"` // >= 0 Topicality int `json:"topicality"` // >= 0 NSFW bool `json:"nsfw,omitempty"` NSFWConfidence int `json:"nsfw_confidence,omitempty"` Priority int `json:"priority"` // >= 0 Categories []string `json:"categories"` // List of similar labels } // LocationLabel returns a new location label. func LocationLabel(name string, uncertainty int) Label { priority := -1 if index := strings.Index(name, " / "); index > 1 { name = name[:index] } if index := strings.Index(name, " - "); index > 1 { name = name[:index] } var categories []string if rule, ok := Rules.Find(name); ok { priority = rule.Priority categories = rule.Categories } return Label{ Name: name, Source: SrcLocation, Uncertainty: uncertainty, Priority: priority, Categories: categories, } } // Title returns a formatted label title as string. func (l *Label) Title() string { return txt.Title(txt.Clip(l.Name, txt.ClipDefault)) } // Confidence returns a matching confidence in percent. func (l *Label) Confidence() float32 { switch { case l.Uncertainty > 100: return 0 case l.Uncertainty < 0: return 1 default: return 1 - float32(l.Uncertainty)/100 } }