Skip to content

Instantly share code, notes, and snippets.

@damianooldoni
Last active December 16, 2022 16:11
Show Gist options
  • Save damianooldoni/c50e886f9a7ff4e4ab4e551d635b77ae to your computer and use it in GitHub Desktop.
Save damianooldoni/c50e886f9a7ff4e4ab4e551d635b77ae to your computer and use it in GitHub Desktop.
Improved table schema for observations: `speed`, `radius` and `angle` added
{
"name": "observations",
"title": "Observations",
"description": "Table with observations based on the media files. Associated with deployments (`deploymentID`), sequences (`sequenceID`) and optionally individual media files (`mediaID`). Observations can mark non-animal events (camera setup, human, blank) or one or more animal observations (`observationType` = `animal`) of a certain taxon, count, life stage, sex, behaviour and/or individual.",
"fields": [
{
"name": "observationID",
"type": "string",
"format": "default",
"description": "Unique identifier (within a project) of the observation.",
"example": "obs1",
"constraints": {
"required": true,
"unique": true
}
},
{
"name": "deploymentID",
"type": "string",
"format": "default",
"description": "Unique identifier of the deployment this observation belongs to. Foreign key to `deployment:deploymentID`.",
"example": "dep1",
"constraints": {
"required": true
}
},
{
"name": "sequenceID",
"type": "string",
"format": "default",
"description": "Unique identifier of the sequence (collection of media files grouped by a predefined `sequenceInterval`) that is the source of this observation. Foreign key to `media:sequenceID`.",
"example": "seq1",
"constraints": {
"required": true
}
},
{
"name": "mediaID",
"type": "string",
"format": "default",
"description": "Unique identifier of the media file that is the source of this observation. Foreign key to `media:mediaID`. Include but leave empty for sequence-based observations.",
"example": "m1",
"constraints": {
"required": false
}
},
{
"name": "timestamp",
"type": "datetime",
"format": "%Y-%m-%dT%H:%M:%S%z",
"description": "Date and time of the observation, as an ISO 8601 formatted string with timezone designator (`YYYY-MM-DDThh:mm:ssZ` or `YYYY-MM-DDThh:mm:ss±hh:mm`). For file-based observations this is the `timestamp` of the associated media file (in `mediaID`), for sequence-based observations the `timestamp` of the first media file in the associated sequence (in `sequenceID`).",
"example": "2020-03-24T11:21:46Z",
"constraints": {
"required": true
}
},
{
"name": "observationType",
"type": "string",
"format": "default",
"description": "Type of observation. All categories in this vocabulary have to be understandable from an AI point of view. `unknown` describes classifications with a confidence level below some predefined threshold i.e. neither humans nor AI can say what was recorded.",
"example": "animal",
"constraints": {
"required": true,
"enum": [
"animal",
"human",
"vehicle",
"blank",
"unknown",
"unclassified"
]
}
},
{
"name": "cameraSetup",
"type": "boolean",
"format": "default",
"description": "`true` if this observation is part of the camera setup process (camera deployment, pickup, maintenance).",
"example": "false",
"constraints": {
"required": false
}
},
{
"name": "taxonID",
"type": "string",
"format": "default",
"description": "Unique identifier of the `scientificName` according to the taxonomic reference list defined by `taxonIDReference` in the data package metadata.",
"example": "QLXL",
"constraints": {
"required": false
}
},
{
"name": "scientificName",
"type": "string",
"format": "default",
"description": "Scientific name of the observed individual(s).",
"example": "Canis lupus",
"constraints": {
"required": false
}
},
{
"name": "count",
"type": "integer",
"format": "default",
"description": "Number of observed individuals (optionally of given life stage, sex and behaviour).",
"example": "5",
"constraints": {
"required": false,
"minimum": 1
}
},
{
"name": "countNew",
"type": "integer",
"format": "default",
"description": "Number of new (= previously uncounted) individuals in the associated media file (`mediaID`) taking into account the entire sequence (`sequenceID`) (optionally of given life stage, sex and behaviour).",
"example": "2",
"constraints": {
"required": false,
"minimum": 0
}
},
{
"name": "lifeStage",
"type": "string",
"format": "default",
"description": "Age class or life stage of observed individual(s). Term borrowed from [Darwin Core](http://rs.tdwg.org/dwc/terms/lifeStage).",
"example": "adult",
"constraints": {
"required": false,
"enum": [
"adult",
"subadult",
"juvenile",
"offspring",
"unknown"
]
}
},
{
"name": "sex",
"type": "string",
"format": "default",
"description": "Sex of observed individual(s)",
"example": "female",
"constraints": {
"required": false,
"enum": [
"female",
"male",
"unknown"
]
}
},
{
"name": "behaviour",
"type": "string",
"format": "default",
"description": "Dominant behaviour of observed individual(s), ideally expressed as controlled values (e.g. grazing, browsing, rooting, vigilance, running, walking). A combination of dominant (first) and additional behaviours can be expressed as as a pipe (`|`) separated list.",
"example": "vigilance",
"constraints": {
"required": false
}
},
{
"name": "individualID",
"type": "string",
"format": "default",
"description": "Unique identifier (within a project) of the observed individual.",
"example": "RD213",
"constraints": {
"required": false
}
},
{
"name": "classificationMethod",
"type": "string",
"format": "default",
"description": "Classification method.",
"example": "human",
"constraints": {
"required": false,
"enum": [
"human",
"machine"
]
}
},
{
"name": "classifiedBy",
"type": "string",
"format": "default",
"description": "Name or unique identifier of the person or AI algorithm that classified this observation.",
"example": [
"Jakub Bubnicki",
"Megadetector"
],
"constraints": {
"required": false
}
},
{
"name": "classificationTimestamp",
"type": "datetime",
"format": "%Y-%m-%dT%H:%M:%S%z",
"description": "Date and time of the classification, as an ISO 8601 formatted string with timezone designator (`YYYY-MM-DDThh:mm:ssZ` or `YYYY-MM-DDThh:mm:ss±hh:mm`).",
"example": "2020-08-22T10:25:19Z",
"constraints": {
"required": false
}
},
{
"name": "classificationConfidence",
"type": "number",
"format": "default",
"description": "Accuracy confidence of the classification. Expressed as a probability, with `1` being maximum confidence. Provide an approximate value for human classifications.",
"example": "0.95",
"constraints": {
"required": false,
"minimum": 0,
"maximum": 1
}
},
{
"name": "comments",
"type": "string",
"format": "default",
"description": "Comments or notes about the observation.",
"example": "",
"constraints": {
"required": false
}
},
{
"name": "_id",
"type": "string",
"format": "default",
"description": "Internal attribute of data management system: ID of this observation.",
"example": "",
"constraints": {
"required": false
}
},
{
"name": "speed",
"type": "number",
"format": "default",
"description": "Speed of the detected animal in m/s",
"example": "12.5",
"constraints": {
"required": false
}
},
{
"name": "radius",
"type": "number",
"format": "default",
"description": "Distance from the camera of the detected animal in meters",
"example": "5.2",
"constraints": {
"required": false
}
},
{
"name": "angle",
"type": "number",
"format": "default",
"description": "Angle of the detected animal from camera",
"example": "5.2",
"constraints": {
"required": false
}
}
],
"missingValues": [
"",
"NaN",
"nan"
],
"primaryKey": "observationID",
"foreignKeys": [
{
"fields": "deploymentID",
"reference": {
"resource": "deployments",
"fields": "deploymentID"
}
},
{
"fields": "sequenceID",
"reference": {
"resource": "media",
"fields": "sequenceID"
}
},
{
"fields": "mediaID",
"reference": {
"resource": "media",
"fields": "mediaID"
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment