diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9351aae..06510fc 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
env:
- MODULE_NAME: MetadataIfdo
+ MODULE_NAME: MetadataCoco
steps:
- uses: actions/checkout@v1
diff --git a/README.md b/README.md
index 8b82b3e..865c219 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
-# BIIGLE Metadata iFDO
+# BIIGLE Metadata COCO
-[![Test status](https://github.com/biigle/metadata-ifdo/workflows/Tests/badge.svg)](https://github.com/biigle/metadata-ifdo/actions?query=workflow%3ATests)
+[![Test status](https://github.com/biigle/metadata-coco/workflows/Tests/badge.svg)](https://github.com/biigle/metadata-coco/actions?query=workflow%3ATests)
-This is a BIIGLE module to add support for [iFDO](https://marine-imaging.com/fair/ifdos/iFDO-overview) metadata files.
+This is a BIIGLE module to add support for COCO metadata files.
## Installation
-Run `composer require biigle/metadata-ifdo`.
+Run `composer require biigle/metadata-coco`.
## Developing
diff --git a/composer.json b/composer.json
index e816e13..03592bc 100644
--- a/composer.json
+++ b/composer.json
@@ -1,11 +1,11 @@
{
- "name": "biigle/metadata-ifdo",
- "description": "BIIGLE module for iFDO metadata.",
+ "name": "biigle/metadata-coco",
+ "description": "BIIGLE module for COCO metadata.",
"keywords": ["biigle", "biigle-module"],
"license": "GPL-3.0-only",
"support": {
- "source": "https://github.com/biigle/metadata-ifdo",
- "issues": "https://github.com/biigle/metadata-ifdo/issues"
+ "source": "https://github.com/biigle/metadata-coco",
+ "issues": "https://github.com/biigle/metadata-coco/issues"
},
"homepage": "https://biigle.de",
"authors": [
@@ -16,16 +16,13 @@
],
"autoload": {
"psr-4": {
- "Biigle\\Modules\\MetadataIfdo\\": "src"
+ "Biigle\\Modules\\MetadataCoco\\": "src"
}
},
- "require": {
- "biigle/ifdo":"^0.4 || ^1.0"
- },
"extra": {
"laravel": {
"providers": [
- "Biigle\\Modules\\MetadataIfdo\\MetadataIfdoServiceProvider"
+ "Biigle\\Modules\\MetadataCoco\\MetadataCocoServiceProvider"
]
}
}
diff --git a/src/CocoParser.php b/src/CocoParser.php
new file mode 100644
index 0000000..94b9e59
--- /dev/null
+++ b/src/CocoParser.php
@@ -0,0 +1,41 @@
+acquisitionFormat = $acquisitionFormat;
- }
-
- public function convert($ifdo)
- {
- $header = $ifdo->getImageSetHeader();
- $this->annotators = $this->extractIfdoAnnotators($header['image-annotation-creators']);
- $this->labels = $this->extractIfdoLabels($header['image-annotation-labels']);
-
- $data = new VolumeMetadata(
- type: $this->mediaType(),
- name: $header['image-set-name'] ?? null,
- handle: $this->parseHandle($header['image-set-handle'] ?? null),
- );
-
- foreach ($ifdo->getImageSetItems() as $name => $items)
- {
- if ( ! array_is_list($items))
- {
- $items = [$items];
- }
-
- foreach ($items as $item)
- {
- $takenAt = $item['image-datetime'] ?? null;
- $params = [
- 'name' => $name,
- 'lat' => $this->maybeCastToFloat($item['image-latitude'] ?? null),
- 'lng' => $this->maybeCastToFloat($item['image-longitude'] ?? null),
- 'takenAt' => $takenAt,
- 'area' => $this->maybeCastToFloat($item['image-area-square-meter'] ?? null),
- 'distanceToGround' => $this->maybeCastToFloat($item['image-meters-above-ground'] ?? null),
- 'gpsAltitude' => $this->maybeCastToFloat($item['image-altitude'] ?? null),
- 'yaw' => $this->maybeCastToFloat($item['image-camera-yaw-degrees'] ?? null),
- ];
-
- if ( ! is_null($fileData = $data->getFile($name)) && ! is_null($takenAt))
- {
- $fileData->addFrame(...Arr::except($params, ['name']));
- }
- else
- {
- $class = $this->metadataClass();
- $fileData = new $class(...$params);
-
- if (isset($item['image-annotations']))
- {
- $this->addAnnotations($fileData, $item['image-annotations']);
- }
-
- $data->addFile($fileData);
- }
-
- }
- }
-
- return $data;
- }
-
- /**
- * Cast the value to float if it is not null or an empty string.
- */
- protected function maybeCastToFloat(?string $value): ?float
- {
- return (is_null($value) || $value === '') ? null : floatval($value);
- }
-
- private function addAnnotations($fileData, $ifdoAnnotations)
- {
- foreach ($ifdoAnnotations as $ifdoAnnotation)
- {
- $fileData->addAnnotation($this->ifdoToBiigleAnnotation($ifdoAnnotation));
- }
- }
-
- private function ifdoToBiigleAnnotation($ifdoAnnotation)
- {
- $class = $this->annotationClass();
- $params = [
- $this->ifdoShapeToBiigleShape($ifdoAnnotation['shape']),
- $this->ifdoParseCoordinates($ifdoAnnotation['coordinates']),
- $this->ifdoLabelsToBiigleLabelAndUsers($ifdoAnnotation['labels']),
- ];
-
- if (isset($ifdoAnnotation['frames']))
- {
- $params[] = $ifdoAnnotation['frames'];
- }
-
- $annotation = new $class(...$params);
-
- return $annotation;
- }
-
- private function ifdoLabelsToBiigleLabelAndUsers($ifdoLabels)
- {
- return array_map([$this, 'ifdoLabelToBiigleLabelAndUser'], $ifdoLabels);
- }
-
- private function ifdoLabelToBiigleLabelAndUser($ifdoLabel)
- {
- return new LabelAndUser(
- $this->labelForId($ifdoLabel['label']),
- $this->userForId($ifdoLabel['annotator'])
- );
- }
-
- private function extractIfdoLabels($ifdoLabels)
- {
- $labels = [];
- foreach ($ifdoLabels as $ifdoLabel)
- {
- $labels[$ifdoLabel['id']] = new Label(
- $ifdoLabel['id'],
- $ifdoLabel['name'],
- $ifdoLabel['color'] ?? null,
- $ifdoLabel['uuid'] ?? null,
- );
- }
- return $labels;
- }
-
- private function extractIfdoAnnotators($ifdoAnnotators)
- {
- $annotators = [];
- foreach ($ifdoAnnotators as $ifdoAnnotator)
- {
- $annotators[$ifdoAnnotator['id']] = new User(
- $ifdoAnnotator['id'],
- $ifdoAnnotator['name'],
- $ifdoAnnotator['uuid'] ?? null,
- );
- }
- return $annotators;
- }
-
- private function userForId($id)
- {
- return $this->annotators[$id];
- }
-
- private function labelForId($id)
- {
- return $this->labels[$id];
- }
-
- private function ifdoShapeToBiigleShape($shape)
- {
- switch ($shape)
- {
- case 'single-pixel':
- return Shape::point();
- case 'polyline':
- return Shape::line();
- case 'polygon':
- return Shape::polygon();
- case 'circle':
- return Shape::circle();
- case 'rectangle':
- return Shape::rectangle();
- case 'ellipse':
- return Shape::ellipse();
- case 'whole-frame':
- return Shape::wholeFrame();
- }
- }
-
- private function mediaType()
- {
- switch ($this->acquisitionFormat)
- {
- case 'photo':
- return MediaType::image();
- case 'video':
- return MediaType::video();
- }
- }
-
- private function metadataClass()
- {
- switch ($this->acquisitionFormat)
- {
- case 'photo':
- return 'Biigle\Services\MetadataParsing\ImageMetadata';
- case 'video':
- return 'Biigle\Services\MetadataParsing\VideoMetadata';
- }
- }
-
- private function annotationClass()
- {
- switch ($this->acquisitionFormat)
- {
- case 'photo':
- return 'Biigle\Services\MetadataParsing\ImageAnnotation';
- case 'video':
- return 'Biigle\Services\MetadataParsing\VideoAnnotation';
- }
- }
-
- private function ifdoParseCoordinates($coordinates)
- {
- if ($this->acquisitionFormat === 'photo') {
- return $coordinates[0];
- }
-
- return $coordinates;
- }
-
- private function parseHandle(?string $handle): ?string
- {
- return substr(parse_url($handle ?? '', PHP_URL_PATH) ?? '', 1) ?: null;
- }
-}
diff --git a/src/IfdoParser.php b/src/IfdoParser.php
deleted file mode 100644
index f8d0eb7..0000000
--- a/src/IfdoParser.php
+++ /dev/null
@@ -1,56 +0,0 @@
-ifdo)
- {
- $file = parent::getFileObject();
- $this->ifdo = Ifdo::fromFile($file->getRealPath());
- }
-
- return $this->ifdo;
- }
-
- /**
- * {@inheritdoc}
- */
- public function recognizesFile(): bool
- {
- return $this->getIfdo()->isValid();
- }
-
- /**
- * {@inheritdoc}
- */
- public function getMetadata(): VolumeMetadata
- {
- $converter = new Converter($this->getIfdo()->getImageSetHeader()['image-acquisition']);
- return $converter->convert($this->getIfdo());
- }
-}
diff --git a/src/MetadataIfdoServiceProvider.php b/src/MetadataCocoServiceProvider.php
similarity index 69%
rename from src/MetadataIfdoServiceProvider.php
rename to src/MetadataCocoServiceProvider.php
index 11c6074..72d6cd3 100644
--- a/src/MetadataIfdoServiceProvider.php
+++ b/src/MetadataCocoServiceProvider.php
@@ -1,13 +1,12 @@
loadViewsFrom(__DIR__ . '/resources/views', 'metadata-ifdo');
+ $this->loadViewsFrom(__DIR__ . '/resources/views', 'metadata-coco');
- ParserFactory::extend(IfdoParser::class, 'image');
- ParserFactory::extend(IfdoParser::class, 'video');
- $modules->register('metadata-ifdo', [
+ ParserFactory::extend(CocoParser::class, 'image');
+ $modules->register('metadata-coco', [
'viewMixins' => [
'metadataParsers',
],
diff --git a/src/resources/views/metadataParsers.blade.php b/src/resources/views/metadataParsers.blade.php
index 7ec727a..d60cdaa 100644
--- a/src/resources/views/metadataParsers.blade.php
+++ b/src/resources/views/metadataParsers.blade.php
@@ -1,3 +1,3 @@
- iFDO: This is a versatile file format that can store various image and video metadata, including annotations and file labels. More information can be found in the iFDO documentation.
+ COCO: TODO
diff --git a/tests/CocoParserTest.php b/tests/CocoParserTest.php
new file mode 100644
index 0000000..997185b
--- /dev/null
+++ b/tests/CocoParserTest.php
@@ -0,0 +1,17 @@
+assertTrue($parser->recognizesFile());
- }
-
- public function testRecognizesFileVideo()
- {
- $file = new File(__DIR__ . "/files/video-example-1.json");
- $parser = new IfdoParser($file);
- $this->assertTrue($parser->recognizesFile());
- }
-
- public function testGetMetadata()
- {
- $file = new File(__DIR__ . "/files/image-ifdo.json");
- $parser = new IfdoParser($file);
- $data = $parser->getMetadata();
- $this->assertSame(MediaType::imageId(), $data->type->id);
- $this->assertSame('SO268 SO268-2_100-1_OFOS SO_CAM-1_Photo_OFOS', $data->name);
- $this->assertNull($data->url);
- $this->assertSame('20.500.12085/d7546c4b-307f-4d42-8554-33236c577450', $data->handle);
- $this->assertCount(2, $data->getFiles());
- $file = $data->getFiles()->last();
- $this->assertSame('SO268-2_100-1_OFOS_SO_CAM-1_20190406_052726.JPG', $file->name);
- $this->assertSame('2019-04-06 05:27:26.000000', $file->takenAt);
- $this->assertSame(-117.0214286, $file->lng);
- $this->assertSame(11.8582192, $file->lat);
- $this->assertSame(-4129.6, $file->gpsAltitude);
- $this->assertSame(2.1, $file->distanceToGround);
- $this->assertSame(5.1, $file->area);
- $this->assertSame(21.0, $file->yaw);
-
- $this->assertCount(7, $file->getAnnotations());
- $annotation = array_pop($file->annotations);
-
- $this->assertSame(Shape::polygonId(), $annotation->shape->id);
- $this->assertSame('Hans Wurst', $annotation->labels[0]->user->name);
- $this->assertSame('4b6f42ff-6198-4b52-aa1c-fde5aa50265b', $annotation->labels[0]->user->uuid);
- $this->assertSame('Trash', $annotation->labels[0]->label->name);
- $this->assertSame('8a45f7e9-86aa-4ca8-bd58-2b2178ec4163', $annotation->labels[0]->label->uuid);
- $this->assertSame('ff5900', $annotation->labels[0]->label->color);
- $this->assertSame(4715.16, $annotation->points[0]);
- }
-
- public function testGetVideoMetadata()
- {
- $file = new File(__DIR__ . "/files/video-example-1.json");
- $parser = new IfdoParser($file);
- $data = $parser->getMetadata();
- $this->assertSame(MediaType::videoId(), $data->type->id);
- $this->assertSame('SO268 SO268-2_100-1_OFOS SO_CAM-1_Photo_OFOS', $data->name);
- $this->assertNull($data->url);
- $this->assertSame('20.500.12085/d7546c4b-307f-4d42-8554-33236c577450', $data->handle);
- $this->assertCount(1, $data->getFiles());
- $file = $data->getFiles()->last();
- $this->assertSame('SO242_2_163-1_LowerHD.mp4', $file->name);
- $this->assertSame('2019-04-06 04:29:27.000000', $file->takenAt);
- $this->assertSame(-117.0214286, $file->lng);
- $this->assertSame(11.8582192, $file->lat);
- $this->assertSame(-4129.6, $file->gpsAltitude);
- $this->assertSame(2.1, $file->distanceToGround);
- $this->assertSame(5.1, $file->area);
- $this->assertSame(21.0, $file->yaw);
-
- $this->assertCount(1, $file->getAnnotations());
- $annotation = array_pop($file->annotations);
-
- $this->assertSame(Shape::circleId(), $annotation->shape->id);
- $this->assertSame('Timm Schoening', $annotation->labels[0]->user->name);
- $this->assertSame('4b6f42ff-6198-4b52-aa1c-fde5aa50265b', $annotation->labels[0]->user->uuid);
- $this->assertSame('Animal', $annotation->labels[0]->label->name);
- $this->assertSame('8a45f7e9-86aa-4ca8-bd58-2b2178ec4163', $annotation->labels[0]->label->uuid);
- $this->assertSame('ff5900', $annotation->labels[0]->label->color);
- $this->assertSame(681.7, $annotation->points[0][0]);
- $this->assertSame(0.402947, $annotation->frames[0]);
- }
-}
diff --git a/tests/MetadataCocoServiceProviderTest.php b/tests/MetadataCocoServiceProviderTest.php
new file mode 100644
index 0000000..5623c9d
--- /dev/null
+++ b/tests/MetadataCocoServiceProviderTest.php
@@ -0,0 +1,25 @@
+assertTrue(class_exists(MetadataCocoServiceProvider::class));
+ }
+
+ public function testGetImage()
+ {
+ $this->assertTrue(ParserFactory::has('image', CocoParser::class));
+ }
+
+ public function testGetVideo()
+ {
+ $this->assertFalse(ParserFactory::has('video', CocoParser::class));
+ }
+}
diff --git a/tests/MetadataIfdoServiceProviderTest.php b/tests/MetadataIfdoServiceProviderTest.php
deleted file mode 100644
index 9c7c106..0000000
--- a/tests/MetadataIfdoServiceProviderTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-assertTrue(class_exists(MetadataIfdoServiceProvider::class));
- }
-
- public function testGetImageIfdo()
- {
- $this->assertTrue(ParserFactory::has('image', IfdoParser::class));
- }
-
- public function testGetVideoIfdo()
- {
- $this->assertTrue(ParserFactory::has('video', IfdoParser::class));
- }
-}
diff --git a/tests/files/image-ifdo.json b/tests/files/image-ifdo.json
deleted file mode 100644
index 7a1feef..0000000
--- a/tests/files/image-ifdo.json
+++ /dev/null
@@ -1,236 +0,0 @@
-{
- "image-set-header": {
- "image-set-ifdo-version": "v2.1.0",
- "image-altitude-meters": -4094.5,
- "image-coordinate-reference-system": "EPSG:4326",
- "image-coordinate-uncertainty-meters": 4.74,
- "image-set-ifdo-version": "v2.1.0",
- "image-datetime": "2019-04-06 04:29:27.000000",
- "image-acquisition": "photo",
- "image-area-square-meter": 5,
- "image-capture-mode": "mixed",
- "image-coordinate-reference-system": "EPSG:4326",
- "image-deployment": "survey",
- "image-event": "SO268-2_100-1_OFOS",
- "image-illumination": "artificial light",
- "image-latitude": 11.8581802,
- "image-license": "CC-BY",
- "image-longitude": -117.0214864,
- "image-marine-zone": "seafloor",
- "image-meters-above-ground": 2,
- "image-navigation": "beacon",
- "image-project": "SO268",
- "image-quality": "raw",
- "image-resolution": "mm",
- "image-scale-reference": "laser marker",
- "image-set-metadata-handle": "20.500.12085/d7546c4b-307f-4d42-8554-33236c577450@metadata",
- "image-set-name": "SO268 SO268-2_100-1_OFOS SO_CAM-1_Photo_OFOS",
- "image-set-uuid": "d7546c4b-307f-4d42-8554-33236c577450",
- "image-spectral-resolution": "rgb",
- "image-copyright": "(c) GEOMAR Helmholtz Centre for Ocean Research Kiel. Contact: presse@geomar.de",
- "image-abstract": "Image Abstract",
- "image-set-handle": "https://hdl.handle.net/20.500.12085/d7546c4b-307f-4d42-8554-33236c577450",
- "image-license": {
- "name": "CC-BY",
- "uri": "https://creativecommons.org/licenses/by/4.0/legalcode"
- },
- "image-project": {
- "name": "Test Project",
- "uri": "https://doi.org/example"
- },
- "image-event": {
- "name": "SO268-1_21-1_OFOS",
- "uri": "https://portal.geomar.de/metadata/event/show/1603320?leg=348623"
- },
- "image-platform": {
- "name": "SO_PFM-01_OFOS",
- "uri": "https://dm.pages.geomar.de/equipment/equipment/SO/PFM/SO_PFM-1_OFOS_Isitec/"
- },
- "image-sensor": {
- "name": "SO_CAM-1_Photo_OFOS",
- "uri": "https://dm.pages.geomar.de/equipment/equipment/SO/CAM/SO_CAM-1_Photo_OFOS/"
- },
- "image-pi": {
- "name": "Timm Schoening",
- "uri":"https://orcid.org/0000-0002-0035-3282"
- },
- "image-context": {
- "name": "Text Context",
- "uri": "https://example.com"
- },
- "image-creators": [
- {
- "name": "Timm Schoening",
- "uri": "https://orcid.org/0000-0002-0035-3282"
- }
- ],
- "image-annotation-labels": [
- {
- "id": "1",
- "name": "Laser Point"
- },
- {
- "id": "2",
- "name": "Animal"
- },
- {
- "id": "3",
- "name": "Habitat"
- },
- {
- "id": "4",
- "name": "Trash",
- "uuid": "8a45f7e9-86aa-4ca8-bd58-2b2178ec4163",
- "color": "ff5900"
- }
- ],
- "image-annotation-creators": [
- {
- "id": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "uuid": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "name": "Hans Wurst"
- }
- ]
- },
- "image-set-items": {
- "SO268-2_100-1_OFOS_SO_CAM-1_20190406_042927.JPG": {
- "image-datetime": "2019-04-06 04:29:27.000000",
- "image-uuid": "61056dd9-8230-42df-bf7a-395b03d09f98",
- "image-hash-sha256": "0193d337cc4ed6f64ee7e6bb4ccb811b9714c0007632a64abc944ec420e81e45",
- "image-handle": "https://example.com/61056dd9-8230-42df-bf7a-395b03d09f98",
- "image-depth": 2248,
- "image-camera-yaw-degrees": 20
- },
- "SO268-2_100-1_OFOS_SO_CAM-1_20190406_052726.JPG": {
- "image-datetime": "2019-04-06 05:27:26.000000",
- "image-uuid": "884dcc58-3ade-4d47-af11-2701356206c0",
- "image-hash-sha256": "cc877a4f71cbc24ce0859fe9449a862d5b65dd1ca8e741015626e15d4b292da9",
- "image-handle": "https://example.com/884dcc58-3ade-4d47-af11-2701356206c0",
- "image-altitude": -4129.6,
- "image-latitude": 11.8582192,
- "image-longitude": -117.0214286,
- "image-area-square-meter": 5.1,
- "image-meters-above-ground": 2.1,
- "image-camera-yaw-degrees": 21,
- "image-annotations": [
- {
- "shape": "single-pixel",
- "coordinates": [[
- 3632.34,
- 1736.22
- ]],
- "labels": [
- {
- "label": "1",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T13:59:52.000000Z"
- }
- ]
- },
- {
- "shape": "single-pixel",
- "coordinates": [[
- 2857.97,
- 2182.47
- ]],
- "labels": [
- {
- "label": "2",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T13:59:53.000000Z"
- }
- ]
- },
- {
- "shape": "single-pixel",
- "coordinates": [[
- 3645.47,
- 2615.59
- ]],
- "labels": [
- {
- "label": "3",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T13:59:54.000000Z"
- }
- ]
- },
- {
- "shape": "rectangle",
- "coordinates": [[
- 1251.9,
- 1604.93,
- 963.15,
- 2031.5,
- 1195.92,
- 2189.07,
- 1484.67,
- 1762.5
- ]],
- "labels": [
- {
- "label": "4",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T13:59:59.000000Z"
- }
- ]
- },
- {
- "shape": "circle",
- "coordinates": [[
- 2372.34,
- 3160.28,
- 220.11
- ]],
- "labels": [
- {
- "label": "1",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T14:00:02.000000Z"
- }
- ]
- },
- {
- "shape": "polyline",
- "coordinates": [[
- 4268.91,
- 3678.72,
- 5207.34,
- 3652.47,
- 5443.59,
- 2871.53
- ]],
- "labels": [
- {
- "label": "3",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T14:00:07.000000Z"
- }
- ]
- },
- {
- "shape": "polygon",
- "coordinates": [[
- 4715.16,
- 1552.47,
- 5627.34,
- 1703.41,
- 5666.72,
- 948.72,
- 4918.59,
- 699.34,
- 4715.16,
- 1552.47
- ]],
- "labels": [
- {
- "label": "4",
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T14:00:14.000000Z"
- }
- ]
- }
- ]
- }
- }
-}
diff --git a/tests/files/video-example-1.json b/tests/files/video-example-1.json
deleted file mode 100644
index d15d943..0000000
--- a/tests/files/video-example-1.json
+++ /dev/null
@@ -1,1456 +0,0 @@
-{
- "image-set-header":
- {
- "image-abstract": "Image Abstract",
- "image-acquisition": "video",
- "image-altitude-meters": -4094.5,
- "image-annotation-creators":
- [
- {
- "id": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "uuid": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "name": "Timm Schoening"
- }
- ],
- "image-annotation-labels":
- [
- {
- "id": "some-uuid",
- "name": "Animal",
- "uuid": "8a45f7e9-86aa-4ca8-bd58-2b2178ec4163",
- "color": "ff5900"
- }
- ],
- "image-area-square-meter": 5,
- "image-context":
- {
- "name": "Text Context",
- "uri": "https://example.com"
- },
- "image-coordinate-reference-system": "EPSG:4326",
- "image-coordinate-uncertainty-meters": 4.74,
- "image-copyright": "(c) GEOMAR Helmholtz Centre for Ocean Research Kiel. Contact: presse@geomar.de",
- "image-datetime": "2019-04-06 04:29:27.000000",
- "image-event":
- {
- "name": "SO268-1_21-1_OFOS",
- "uri": "https://portal.geomar.de/metadata/event/show/1603320?leg=348623"
- },
- "image-latitude": 11.8581802,
- "image-license":
- {
- "name": "CC-BY",
- "uri": "https://creativecommons.org/licenses/by/4.0/legalcode"
- },
- "image-longitude": -117.0214864,
- "image-meters-above-ground": 2,
- "image-pi":
- {
- "name": "Timm Schoening",
- "uri": "https://orcid.org/0000-0002-0035-3282"
- },
- "image-platform":
- {
- "name": "SO_PFM-01_OFOS",
- "uri": "https://dm.pages.geomar.de/equipment/equipment/SO/PFM/SO_PFM-1_OFOS_Isitec/"
- },
- "image-project":
- {
- "name": "Test Project",
- "uri": "https://doi.org/example"
- },
- "image-sensor":
- {
- "name": "SO_CAM-1_Photo_OFOS",
- "uri": "https://dm.pages.geomar.de/equipment/equipment/SO/CAM/SO_CAM-1_Photo_OFOS/"
- },
- "image-set-data-handle": "20.500.12085/d7546c4b-307f-4d42-8554-33236c577450@data",
- "image-set-handle": "https://hdl.handle.net/20.500.12085/d7546c4b-307f-4d42-8554-33236c577450",
- "image-set-ifdo-version": "v2.1.0",
- "image-set-metadata-handle": "20.500.12085/d7546c4b-307f-4d42-8554-33236c577450@metadata",
- "image-set-name": "SO268 SO268-2_100-1_OFOS SO_CAM-1_Photo_OFOS",
- "image-set-uuid": "d7546c4b-307f-4d42-8554-33236c577450",
- "image-creators": [
- {
- "name": "Timm Schoening",
- "uri": "https://orcid.org/0000-0002-0035-3282"
- }
- ]
- },
- "image-set-items":
- {
- "SO242_2_163-1_LowerHD.mp4":
- [
- {
- "image-altitude": -4129.6,
- "image-annotations":
- [
- {
- "coordinates":
- [
- [
- 681.7,
- 521.44,
- 99.17
- ],
- [
- 681,
- 521,
- 99
- ],
- [
- 684,
- 516,
- 97
- ],
- [
- 681,
- 511,
- 97
- ],
- [
- 684,
- 506,
- 97
- ],
- [
- 686,
- 501,
- 95
- ],
- [
- 690,
- 496,
- 97
- ],
- [
- 692,
- 491,
- 99
- ],
- [
- 694,
- 485,
- 97
- ],
- [
- 697,
- 480,
- 99
- ],
- [
- 698,
- 474,
- 99
- ],
- [
- 699,
- 469,
- 99
- ],
- [
- 697,
- 464,
- 97
- ],
- [
- 693,
- 459,
- 99
- ],
- [
- 688,
- 455,
- 99
- ],
- [
- 683,
- 452,
- 97
- ],
- [
- 677,
- 450,
- 97
- ],
- [
- 672,
- 447,
- 97
- ],
- [
- 666,
- 444,
- 99
- ],
- [
- 660,
- 440,
- 95
- ],
- [
- 655,
- 436,
- 97
- ],
- [
- 650,
- 431,
- 99
- ],
- [
- 646,
- 427,
- 97
- ],
- [
- 642,
- 423,
- 97
- ],
- [
- 638,
- 419,
- 97
- ],
- [
- 634,
- 415,
- 97
- ],
- [
- 631,
- 410,
- 97
- ],
- [
- 629,
- 405,
- 97
- ],
- [
- 634,
- 403,
- 97
- ],
- [
- 639,
- 405,
- 97
- ],
- [
- 643,
- 410,
- 95
- ],
- [
- 645,
- 415,
- 97
- ],
- [
- 649,
- 420,
- 97
- ],
- [
- 653,
- 425,
- 97
- ],
- [
- 656,
- 431,
- 97
- ],
- [
- 657,
- 436,
- 97
- ],
- [
- 657,
- 442,
- 95
- ],
- [
- 656,
- 447,
- 95
- ],
- [
- 653.5,
- 452.5,
- 93.5
- ],
- [
- 649,
- 456,
- 95
- ],
- [
- 644.5,
- 458.5,
- 91.5
- ],
- [
- 639.5,
- 459.5,
- 93.5
- ],
- [
- 634.5,
- 455.5,
- 89.5
- ],
- [
- 630.5,
- 451.5,
- 89.5
- ],
- [
- 628.5,
- 446.5,
- 89.5
- ],
- [
- 628.5,
- 440.5,
- 89.5
- ],
- [
- 629,
- 435,
- 88
- ],
- [
- 631,
- 430,
- 88
- ],
- [
- 633,
- 425,
- 86
- ],
- [
- 636,
- 420,
- 86
- ],
- [
- 639.5,
- 415.5,
- 84.5
- ],
- [
- 641.5,
- 410.5,
- 84.5
- ],
- [
- 644,
- 406,
- 86
- ],
- [
- 638.5,
- 404.5,
- 89.5
- ],
- [
- 632.5,
- 405.5,
- 91.5
- ],
- [
- 626.5,
- 405.5,
- 91.5
- ],
- [
- 621.5,
- 406.5,
- 93.5
- ],
- [
- 615.5,
- 406.5,
- 93.5
- ],
- [
- 610.5,
- 409.5,
- 93.5
- ],
- [
- 607.5,
- 414.5,
- 93.5
- ],
- [
- 603.5,
- 418.5,
- 91.5
- ],
- [
- 601.5,
- 423.5,
- 91.5
- ],
- [
- 600.5,
- 428.5,
- 93.5
- ],
- [
- 599.5,
- 433.5,
- 93.5
- ],
- [
- 598.5,
- 438.5,
- 93.5
- ],
- [
- 598.5,
- 444.5,
- 93.5
- ],
- [
- 593.5,
- 443.5,
- 93.5
- ],
- [
- 589.5,
- 439.5,
- 93.5
- ],
- [
- 585.5,
- 435.5,
- 93.5
- ],
- [
- 580.5,
- 431.5,
- 93.5
- ],
- [
- 577.5,
- 425.5,
- 93.5
- ],
- [
- 573.5,
- 420.5,
- 93.5
- ],
- [
- 571.5,
- 415.5,
- 93.5
- ],
- [
- 569.5,
- 410.5,
- 93.5
- ],
- [
- 568.5,
- 405.5,
- 93.5
- ],
- [
- 569.5,
- 400.5,
- 93.5
- ],
- [
- 574.5,
- 397.5,
- 91.5
- ],
- [
- 576,
- 403,
- 95
- ],
- [
- 577.5,
- 408.5,
- 93.5
- ],
- [
- 575,
- 413,
- 95
- ],
- [
- 571,
- 418,
- 95
- ],
- [
- 567,
- 422,
- 95
- ],
- [
- 561,
- 424,
- 95
- ],
- [
- 555,
- 424,
- 95
- ],
- [
- 549,
- 424,
- 95
- ],
- [
- 543,
- 424,
- 97
- ],
- [
- 539,
- 420,
- 97
- ],
- [
- 538,
- 415,
- 97
- ],
- [
- 540,
- 410,
- 97
- ],
- [
- 538,
- 405,
- 99
- ],
- [
- 533,
- 404,
- 97
- ],
- [
- 528,
- 401,
- 97
- ],
- [
- 525,
- 396,
- 97
- ],
- [
- 521,
- 390,
- 97
- ],
- [
- 518,
- 385,
- 97
- ],
- [
- 515,
- 380,
- 97
- ],
- [
- 516,
- 375,
- 97
- ],
- [
- 511,
- 374,
- 97
- ],
- [
- 506,
- 375,
- 97
- ],
- [
- 501,
- 376,
- 97
- ],
- [
- 495,
- 375,
- 97
- ],
- [
- 489,
- 375,
- 95
- ],
- [
- 483,
- 375,
- 97
- ],
- [
- 478,
- 376,
- 97
- ],
- [
- 473,
- 377,
- 95
- ],
- [
- 478,
- 375,
- 95
- ],
- [
- 481,
- 370,
- 95
- ],
- [
- 479.5,
- 364.5,
- 93.5
- ],
- [
- 475,
- 361,
- 95
- ],
- [
- 472.5,
- 355.5,
- 93.5
- ],
- [
- 468.5,
- 350.5,
- 93.5
- ],
- [
- 466.5,
- 345.5,
- 93.5
- ],
- [
- 461.5,
- 342.5,
- 93.5
- ],
- [
- 456.5,
- 340.5,
- 93.5
- ],
- [
- 451.5,
- 339.5,
- 93.5
- ],
- [
- 446.5,
- 340.5,
- 93.5
- ],
- [
- 441.5,
- 339.5,
- 93.5
- ],
- [
- 436,
- 340,
- 95
- ],
- [
- 430,
- 341,
- 95
- ],
- [
- 425,
- 345,
- 95
- ],
- [
- 420.5,
- 349.5,
- 93.5
- ],
- [
- 416.5,
- 354.5,
- 93.5
- ],
- [
- 413.5,
- 360.5,
- 91.5
- ],
- [
- 413.5,
- 367.5,
- 91.5
- ],
- [
- 413.5,
- 373.5,
- 91.5
- ],
- [
- 414.5,
- 378.5,
- 89.5
- ],
- [
- 417.5,
- 384.5,
- 89.5
- ],
- [
- 421.5,
- 390.5,
- 89.5
- ],
- [
- 421.5,
- 396.5,
- 89.5
- ],
- [
- 416.5,
- 400.5,
- 89.5
- ],
- [
- 411.5,
- 402.5,
- 89.5
- ],
- [
- 409.5,
- 396.5,
- 89.5
- ],
- [
- 411,
- 390,
- 88
- ],
- [
- 412,
- 384,
- 88
- ],
- [
- 411,
- 378,
- 88
- ],
- [
- 412,
- 369,
- 86
- ],
- [
- 410.5,
- 361.5,
- 84.5
- ],
- [
- 411.5,
- 354.5,
- 84.5
- ],
- [
- 409,
- 346,
- 86
- ],
- [
- 408,
- 340,
- 86
- ],
- [
- 408,
- 328,
- 86
- ],
- [
- 406,
- 320,
- 86
- ],
- [
- 404,
- 314,
- 86
- ],
- [
- 404,
- 306,
- 86
- ],
- [
- 402.5,
- 296.5,
- 84.5
- ],
- [
- 401.5,
- 288.5,
- 84.5
- ],
- [
- 399,
- 279,
- 83
- ],
- [
- 399,
- 271,
- 83
- ],
- [
- 398,
- 261,
- 83
- ],
- [
- 395,
- 251,
- 83
- ],
- [
- 393,
- 244,
- 83
- ],
- [
- 391,
- 233,
- 83
- ],
- [
- 388,
- 224,
- 83
- ],
- [
- 385,
- 214,
- 83
- ],
- [
- 382,
- 206,
- 83
- ],
- [
- 379.5,
- 197.5,
- 84.5
- ],
- [
- 375.5,
- 188.5,
- 84.5
- ],
- [
- 372.5,
- 181.5,
- 84.5
- ],
- [
- 370,
- 174,
- 86
- ],
- [
- 366,
- 166,
- 86
- ],
- [
- 362,
- 158,
- 86
- ],
- [
- 358,
- 149,
- 86
- ],
- [
- 355,
- 141,
- 86
- ],
- [
- 351,
- 133,
- 86
- ],
- [
- 347,
- 125,
- 86
- ],
- [
- 343,
- 118,
- 86
- ],
- [
- 339,
- 110,
- 86
- ],
- [
- 335,
- 104,
- 86
- ],
- [
- 330.5,
- 96.5,
- 84.5
- ],
- [
- 327.5,
- 91.5,
- 84.5
- ],
- [
- 323.5,
- 86.5,
- 84.5
- ],
- [
- 318.5,
- 82.5,
- 84.5
- ],
- [
- 315.5,
- 77.5,
- 84.5
- ],
- [
- 311,
- 74,
- 86
- ],
- [
- 306,
- 69,
- 86
- ],
- [
- 299,
- 64,
- 86
- ],
- [
- 294,
- 61,
- 86
- ],
- [
- 286.5,
- 57.5,
- 84.5
- ],
- [
- 279.5,
- 54.5,
- 84.5
- ],
- [
- 270.5,
- 51.5,
- 84.5
- ],
- [
- 263.5,
- 50.5,
- 84.5
- ],
- [
- 254.5,
- 50.5,
- 84.5
- ],
- [
- 246.5,
- 51.5,
- 84.5
- ],
- [
- 239.5,
- 54.5,
- 84.5
- ],
- [
- 229.5,
- 55.5,
- 84.5
- ],
- [
- 221.5,
- 59.5,
- 84.5
- ],
- [
- 217,
- 62,
- 86
- ],
- [
- 208,
- 67,
- 86
- ],
- [
- 201,
- 74,
- 88
- ],
- [
- 196,
- 79,
- 88
- ],
- [
- 188,
- 89,
- 88
- ],
- [
- 185,
- 94,
- 88
- ],
- [
- 180,
- 99,
- 88
- ],
- [
- 176,
- 105,
- 88
- ],
- [
- 170.5,
- 111.5,
- 89.5
- ],
- [
- 166.5,
- 116.5,
- 89.5
- ],
- [
- 161.5,
- 123.5,
- 89.5
- ],
- [
- 156.5,
- 129.5,
- 89.5
- ],
- [
- 153.5,
- 136.5,
- 89.5
- ],
- [
- 148.5,
- 143.5,
- 89.5
- ],
- [
- 143.5,
- 150.5,
- 89.5
- ],
- [
- 138.5,
- 157.5,
- 89.5
- ],
- [
- 133.5,
- 163.5,
- 89.5
- ],
- [
- 130.5,
- 171.5,
- 89.5
- ],
- [
- 123.5,
- 178.5,
- 89.5
- ],
- [
- 118.5,
- 187.5,
- 89.5
- ],
- [
- 114.5,
- 193.5,
- 89.5
- ],
- [
- 110.5,
- 202.5,
- 91.5
- ],
- [
- 104.5,
- 210.5,
- 91.5
- ],
- [
- 100.5,
- 219.5,
- 91.5
- ],
- [
- 95.5,
- 228.5,
- 91.5
- ],
- [
- 89.5,
- 237.5,
- 89.5
- ],
- [
- 85,
- 246,
- 88
- ],
- [
- 80,
- 255,
- 86
- ],
- [
- 74.5,
- 264.5,
- 84.5
- ],
- [
- 67.5,
- 273.5,
- 84.5
- ],
- [
- 61,
- 284,
- 83
- ],
- [
- 56,
- 294,
- 83
- ],
- [
- 48,
- 304,
- 83
- ],
- [
- 40,
- 314,
- 83
- ],
- [
- 28,
- 324,
- 83
- ],
- [
- 16,
- 329,
- 83
- ]
- ],
- "frames":
- [
- 0.402947,
- 0.48,
- 1,
- 1.32,
- 1.64,
- 1.84,
- 2.04,
- 2.24,
- 2.4,
- 2.6,
- 2.8,
- 3.04,
- 3.36,
- 3.64,
- 3.84,
- 4.04,
- 4.16,
- 4.28,
- 4.4,
- 4.52,
- 4.64,
- 4.76,
- 4.88,
- 5,
- 5.12,
- 5.28,
- 5.44,
- 5.68,
- 6.08,
- 6.36,
- 6.64,
- 6.84,
- 7.04,
- 7.24,
- 7.48,
- 7.64,
- 7.88,
- 8.08,
- 8.32,
- 8.52,
- 8.72,
- 9,
- 9.24,
- 9.52,
- 9.72,
- 9.92,
- 10.12,
- 10.32,
- 10.48,
- 10.72,
- 10.92,
- 11.16,
- 11.36,
- 12.44,
- 12.76,
- 13.04,
- 13.28,
- 13.52,
- 13.88,
- 14.36,
- 14.8,
- 15.08,
- 15.36,
- 15.6,
- 15.92,
- 16.32,
- 16.88,
- 17.16,
- 17.4,
- 17.6,
- 17.8,
- 18,
- 18.16,
- 18.36,
- 18.56,
- 18.8,
- 19.44,
- 19.8,
- 20.04,
- 20.28,
- 20.56,
- 20.8,
- 21,
- 21.2,
- 21.4,
- 21.76,
- 22.24,
- 22.6,
- 23.12,
- 24.2,
- 24.64,
- 25,
- 25.28,
- 25.52,
- 25.72,
- 26.04,
- 26.4,
- 28.12,
- 28.36,
- 28.6,
- 28.8,
- 29.04,
- 29.32,
- 29.64,
- 30.08,
- 31.24,
- 31.64,
- 32.48,
- 32.84,
- 33.32,
- 33.64,
- 34.04,
- 34.68,
- 35.48,
- 35.8,
- 36,
- 36.2,
- 36.4,
- 36.6,
- 36.8,
- 37,
- 37.24,
- 37.52,
- 37.84,
- 38.08,
- 38.32,
- 38.48,
- 38.68,
- 38.88,
- 39,
- 39.16,
- 39.48,
- 39.6,
- 39.68,
- 39.76,
- 39.84,
- 39.92,
- 39.96,
- 40.04,
- 40.08,
- 40.16,
- 40.2,
- 40.24,
- 40.28,
- 40.32,
- 40.36,
- 40.4,
- 40.44,
- 40.48,
- 40.52,
- 40.56,
- 40.6,
- 40.64,
- 40.68,
- 40.72,
- 40.76,
- 40.8,
- 40.84,
- 40.88,
- 40.92,
- 40.96,
- 41,
- 41.04,
- 41.08,
- 41.12,
- 41.16,
- 41.2,
- 41.24,
- 41.28,
- 41.32,
- 41.36,
- 41.4,
- 41.44,
- 41.48,
- 41.52,
- 41.6,
- 41.64,
- 41.72,
- 41.8,
- 41.88,
- 41.96,
- 42.04,
- 42.12,
- 42.2,
- 42.28,
- 42.36,
- 42.4,
- 42.48,
- 42.56,
- 42.6,
- 42.68,
- 42.72,
- 42.76,
- 42.8,
- 42.84,
- 42.88,
- 42.92,
- 42.96,
- 43,
- 43.04,
- 43.08,
- 43.12,
- 43.16,
- 43.2,
- 43.24,
- 43.28,
- 43.32,
- 43.36,
- 43.4,
- 43.44,
- 43.48,
- 43.52,
- 43.56,
- 43.6,
- 43.64,
- 43.68,
- 43.72,
- 43.76,
- 43.8,
- 43.84,
- 43.88,
- 43.92
- ],
- "labels":
- [
- {
- "annotator": "4b6f42ff-6198-4b52-aa1c-fde5aa50265b",
- "created-at": "2023-11-22T14:02:18.000000Z",
- "label": "some-uuid"
- }
- ],
- "shape": "circle"
- }
- ],
- "image-area-square-meter": 5.1,
- "image-camera-yaw-degrees": 21,
- "image-datetime": "2019-04-06 04:29:27.000000",
- "image-latitude": 11.8582192,
- "image-longitude": -117.0214286,
- "image-meters-above-ground": 2.1
- },
- {
- "image-altitude": -4129.6,
- "image-area-square-meter": 5.1,
- "image-camera-yaw-degrees": 21,
- "image-datetime": "2019-04-06 04:30:27.000000",
- "image-latitude": 11.8582192,
- "image-longitude": -117.0214286,
- "image-meters-above-ground": 2.1
- }
- ]
- }
-}