Other language confidence: 0.6237989159149177
Auszug aus der Monitoring-DB, nur vorläufige Bereitstellung | Prüfung: Logischer Test | Dateninhalt (Bild): Logischer Test
# robbenblick A Computer Vision project for object detection and annotation management using YOLOv8, SAHI, and FiftyOne, with the primary aim of counting objects (Robben) in large aerial images. ## Overview This repository provides a complete MLOps pipeline for: * **Data Preparation:** Converting raw CVAT annotations (XML) and large images into a tiled, YOLO-compatible dataset. * **Automated Experiments:** Systematically training and tuning YOLOv8 models. * **Tiled Inference:** Running optimized inference (SAHI) on large, high-resolution images for object counting. * **Evaluation:** Assessing model performance for both detection (mAP) and counting (MAE, RMSE, R²). * **Visualization:** Analyzing datasets and model predictions interactively with FiftyOne. ## Pretrained Model Weights Pretrained model weights are available on Hugging Face: https://huggingface.co/ki-ideenwerkstatt-23/robbenblick/ ## Project Workflow The project is designed to follow a clear, sequential workflow: 1. **Prepare Data (`create_dataset.py`):** Organize your raw images and CVAT `annotations.xml` in `data/raw/` as shown below. ```text data/raw/ ├── dataset_01/ │ ├── annotations.xml │ └── images/ └── dataset_02/ ... ``` Run the script to generate a tiled, YOLO-formatted dataset in `data/processed/` and ground truth count CSVs. 2. **Tune Model (`run_experiments.py`):** Define a set of hyperparameters (e.g., models, freeze layers, augmentation) in `configs/base_iter_config.yaml`. Run the script to train a model for every combination and find the best performer. 3. **Validate Model (`yolo.py`):** Take the `run_id` of your best experiment and run validation on the hold-out `test` set to get **detection metrics (mAP)**. 4. **Infer & Count (`predict_tiled.py`):** Use the best `run_id` to run sliced inference on new, large images. This script generates final counts and visual outputs. 5. **Evaluate Counts (`evaluate_counts.py`):** Compare the `detection_counts.csv` from inference against the `ground_truth_counts.csv` to get **counting metrics (MAE, RMSE)**. 6. **Visualize (`run_fiftyone.py`):** Visually inspect your ground truth dataset or your model's predictions at any stage. ## Configuration This project uses two separate configuration files, managed by `robbenblick.utils.load_config`. * **`configs/base_config.yaml`** * **Purpose:** The single source of truth for **single runs**. * **Used By:** `create_dataset.py`, `predict_tiled.py`, `run_fiftyone.py`, and `yolo.py` (for validation/single-predict). * **Content:** Defines static parameters like data paths (`dataset_output_dir`), model (`model`), and inference settings (`confidence_thresh`). * **`configs/base_iter_config.yaml`** * **Purpose:** The configuration file for **experiments and tuning**. * **Used By:** `run_experiments.py`. * **Content:** Any parameter defined as a **YAML list** (e.g., `model: [yolov8n.pt, yolov8s.pt]`) will be iterated over. `run_experiments.py` will test every possible combination of all lists. ## Environment Setup 1. Clone the repository: ```sh git clone git@github.com:ki-iw/robbenblick.git cd robbenblick ``` 2. Create the Conda environment: ```sh conda env create --file environment.yml conda activate RobbenBlick ``` 3. (Optional) Install pre-commit hooks: ```sh pre-commit install ``` ## Core Scripts & Usage ### `create_dataset.py` * **Purpose:** Converts raw CVAT-annotated images and XML files into a YOLO-compatible dataset, including tiling and label conversion. * **How it works:** * Loads configuration from a config file. * Scans `data/raw/` for dataset subfolders. * Parses CVAT XML annotations and extracts polygons. * Tiles large images into smaller crops based on `imgsz` and `tile_overlap` from the config. * Converts polygon annotations to YOLO bounding box format for each tile. * Splits data into `train`, `val`, and `test` sets and writes them to `data/processed/dataset_yolo`. * Saves a `ground_truth_counts.csv` file in each raw dataset subfolder, providing a baseline for counting evaluation. * **Run:** ```sh # Do a 'dry run' to see statistics without writing files python -m robbenblick.create_dataset --dry-run --config configs/base_config.yaml # Create the dataset, holding out dataset #4 as the test set python -m robbenblick.create_dataset --config configs/base_config.yaml --test-dir-index 4 ``` * **Key Arguments:** * `--config`: Path to the `base_config.yaml` file. * `--dry-run`: Run in statistics-only mode. * `--test-dir-index`: 1-based index of the dataset subfolder to use as a hold-out test set. * `--val-ratio`: Ratio of the remaining data to use for validation. ### `run_experiments.py` * **Purpose:** **This is the main training script.** It automates hyperparameter tuning by iterating over parameters defined in `base_iter_config.yaml`. * **How it works:** * Finds all parameters in the config file that are lists (e.g., `freeze: [None, 10]`). * Generates a "variant" for every possible combination of these parameters. * For each variant, it calls `yolo.py --mode train` as a subprocess with a unique `run_id`. * After all runs are complete, it reads the `results.csv` from each run directory, sorts them by `mAP50`, and prints a final ranking table. * **Run:** ```sh # Start the experiment run defined in the iteration config python -m robbenblick.run_experiments --config configs/base_iter_config.yaml # Run experiments and only show the top 5 results python -m robbenblick.run_experiments --config configs/base_iter_config.yaml --top-n 5 ``` ### `predict_tiled.py` * **Purpose:** **This is the main inference script.** It runs a trained YOLOv8 model on new, full-sized images using Sliced Aided Hyper Inference (SAHI). * **How it works:** * Loads a trained `best.pt` model specified by the `--run_id` argument. * Loads inference parameters (like `confidence_thresh`, `tile_overlap`) from the `base_config.yaml`. * Uses `get_sliced_prediction` from SAHI to perform tiled inference on each image. * Saves outputs, including visualized images (if `--save-visuals`), YOLO `.txt` labels (if `--save-yolo`), and a `detection_counts.csv` file. * **Run:** ```sh # Run inference on a folder of new images and save the visual results python -m robbenblick.predict_tiled \ --config configs/base_config.yaml \ --run_id "best_run_from_experiments" \ --source "data/new_images_to_count/" \ --output-dir "data/inference_results/" \ --save-visuals ``` ### `evaluate_counts.py` * **Purpose:** Evaluates the *counting* performance of a model by comparing its predicted counts against the ground truth counts. * **How it works:** * Loads the `ground_truth_counts.csv` generated by `create_dataset.py`. * Loads the `detection_counts.csv` generated by `predict_tiled.py`. * Merges them by `image_name`. * Calculates and prints key regression metrics (MAE, RMSE, R²) to assess the accuracy of the object counting. * **Run:** ```sh # Evaluate the counts from a specific run python -m robbenblick.evaluate_counts \ --gt-csv "data/raw/dataset_02/ground_truth_counts.csv" \ --pred-csv "data/inference_results/detection_counts.csv" ``` ### `yolo.py` * **Purpose:** The core engine for training, validation, and standard prediction. This script is called by `run_experiments.py` for training. You can use it directly for validation. * **How it works:** * `--mode train`: Loads a base model (`yolov8s.pt`) and trains it on the dataset specified in the config. * `--mode validate`: Loads a *trained* model (`best.pt` from a run directory) and validates it against the `test` split defined in `dataset.yaml`. This provides **detection metrics (mAP)**. * `--mode predict`: Runs standard (non-tiled) YOLO prediction on a folder. * **Run:** ```sh # Validate the 'test' set performance of a completed run python -m robbenblick.yolo \ --config configs/base_config.yaml \ --mode validate \ --run_id "best_run_from_experiments" ``` ### `run_fiftyone.py` * **Purpose:** Visualizes datasets and predictions using FiftyOne. * **How it works:** * `--dataset groundtruth`: Loads the processed YOLO dataset (images and ground truth labels) from `data/processed/`. * `--dataset predictions`: Loads images, runs a specified model (`--run_id`) on them, and displays the model's predictions. * **Run:** ```sh # View the ground truth annotations for the 'val' split python -m robbenblick.run_fiftyone \ --config configs/base_config.yaml \ --dataset groundtruth \ --split val \ --recreate # View the predictions from 'my_best_run' on the 'test' split python -m robbenblick.run_fiftyone \ --config configs/base_config.yaml \ --dataset predictions \ --split test \ --run_id "my_best_run" \ --recreate ``` ### `streamlit_app.py` * **Purpose:** Quick test runs with the trained model of your choice for counting the seals in the image(s) and visualization. * **How it works:** * Loads the selected YOLO model from `runs/detect/`. * Upload images, run model, then displays the counts and model's predictions as image visualization. * **Run:** ```sh # View the ground truth annotations for the 'val' split export PYTHONPATH=$PWD && streamlit run robbenblick/streamlit_app.py ``` ## Recommended Full Workflow 1. **Add Raw Data:** * Place your first set of images and annotations in `data/raw/dataset_01/images/` and `data/raw/dataset_01/annotations.xml`. * Place your second set (e.g., from a different location) in `data/raw/dataset_02/images/` and `data/raw/dataset_02/annotations.xml`. 2. **Create Dataset:** * Run `python -m robbenblick.create_dataset --dry-run` to see your dataset statistics. Note the indices of your datasets. * Let's say `dataset_02` is a good hold-out set. Run: `python -m robbenblick.create_dataset --config configs/base_config.yaml --test-dir-index 2` * This creates `data/raw/dataset_02/ground_truth_counts.csv` for later. 3. **Find Best Model:** * Edit `configs/base_iter_config.yaml`. Define your experiments. ```yaml # Example: Test two models and two freeze strategies model: ['yolov8s.pt', 'yolov8m.pt'] freeze: [None, 10] yolo_hyperparams: scale: [0.3, 0.5] ``` * Run the experiments: `python -m robbenblick.run_experiments`. * Note the `run_id` of the top-ranked model, e.g., `iter_run_model_yolov8m.pt_freeze_10_scale_0.3`. 4. **Validate on Test Set (Detection mAP):** * Check your best model's performance on the unseen test data: `python -m robbenblick.yolo --mode validate --run_id "iter_run_model_yolov8m.pt_freeze_10_scale_0.3" --config configs/base_config.yaml` * This tells you how well it *detects* objects (mAP). 5. **Apply Model for Counting:** * Get a new folder of large, un-annotated images (e.g., `data/to_be_counted/`). * Run `predict_tiled.py`: `python -m robbenblick.predict_tiled --run_id "iter_run_model_yolov8m.pt_freeze_10_scale_0.3" --source "data/to_be_counted/" --output-dir "data/final_counts/" --save-visuals` * This creates `data/final_counts/detection_counts.csv`. 6. **Evaluate Counting Performance (MAE, RMSE):** * Now, compare the predicted counts (Step 5) with the ground truth counts (Step 2). Let's assume your "to_be_counted" folder *was* your `dataset_02`. `python -m robbenblick.evaluate_counts --gt-csv "data/raw/dataset_02/ground_truth_counts.csv" --pred-csv "data/final_counts/detection_counts.csv"` * This gives you the final MAE, RMSE, and R² metrics for your **counting task**. ## Additional Notes This repository contains only the source code of the project. The training data and the fine-tuned model weights are not included or published. The repository is currently not being actively maintained. Future updates are not planned at this time. For transparency, please note that the underlying model used throughout this project is based on **YOLOv8 by Ultralytics**. ## License Copyright (c) 2025 **Birds on Mars**. This project is licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**. This aligns with the license of the underlying **YOLOv8** model architecture used in this project. Please note: **Training data and fine-tuned model weights are not part of the licensed materials** and are not included in this repository. For full details, see the LICENSE file. ## Troubleshooting ### FiftyOne: images (partially) not visible Try using `--recreate` flag to force FiftyOne to reload the dataset: ```sh python robbenblick/run_fiftyone.py --dataset groundtruth --split val --recreate ``` ### FiftyOne: failed to bind port If you get: ``` fiftyone.core.service.ServiceListenTimeout: fiftyone.core.service.DatabaseService failed to bind to port ``` Try killing any lingering `fiftyone` or `mongod` processes: ```sh pkill -f fiftyone pkill -f mongod Then rerun your script. ``` # Collaborators The code for this project has been developed through a collaborative effort between [WWF Büro Ostsee](https://www.wwf.de/themen-projekte/projektregionen/ostsee) and [KI-Ideenwerkstatt](https://www.ki-ideenwerkstatt.de), technical implementation by [Birds on Mars](https://birdsonmars.com). <p></p> <a href="https://ki-ideenwerkstatt.de" target="_blank" rel="noopener noreferrer"> <img src="assets/kiiw.jpg" alt="KI Ideenwerkstatt" height="100"> </a> <p></p> Technical realization <br> <a href="https://birdsonmars.com" target="_blank" rel="noopener noreferrer"> <img src="assets/bom.jpg" alt="Birds On Mars" height="100"> </a> <p></p> An AI initiative by <br> <a href="https://www.bundesumweltministerium.de/" target="_blank" rel="noopener noreferrer"> <img src="assets/bmukn.svg" alt="Bundesministerium für Umwelt, Klimaschutz, Naturschutz und nukleare Sicherheit" height="100"> </a> <p></p> In the context of <br> <a href="https://civic-coding.de" target="_blank" rel="noopener noreferrer"> <img src="assets/civic.svg" alt="Civic Coding" height="100"> </a>
Aerial surveys were conducted in the Elbe Estuary, Germany, to count seals on their haul-out sites. Haul-out sites were located within the intertidal zone, usually close to the waterway or tidal creeks. The north-western border of the study area was located at the approximate river-km 753 (island of Scharhörn) and the south-eastern border was located at river-km 632 (Mühlenberger Loch). Flights were performed monthly from August 2023 until July 2024 (11 flights in total) at low tide. Within each month, a flight date in the middle of the month was chosen, depending on the tide and weather conditions. The flight scheduled for December 2023 had to be canceled due to persistently unfavorable weather conditions. Flights were performed with a twin-engined aircraft at a height of approximately 500 feet and at an average speed of 100 knots. The flight routes were tracked via GPS. Sighted seals were photographed on their haul-out sites and the corresponding geographic position was recorded. In the office, the photos were used to identify the species and age class, and count the animals.
Dienstbezogener Datenbestand zu den Ruheplätzen von Seehunden. Ein Ruheplatz ist eine berechnete Fläche, die auf Basis einzelner Liegeplätze von Seehunden bzw. Kegelrobben generiert wird. Dazu werden die Liegeplätze pro Jahr räumlich zusammengefasst. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 2 Seehunden) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Seehunde werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-30.09 berücksichtigt. Der Dienst beinhaltet folgende Informationen: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind.
Dienstbezogener Datenbestand zu den Ruheplätzen von Kegelrobben. Ein Ruheplatz ist eine berechnete Fläche, die auf Basis einzelner Liegeplätze von Seehunden bzw. Kegelrobben generiert wird. Dazu werden die Liegeplätze pro Jahr räumlich zusammengefasst. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 1 Kegelrobbe) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Kegelrobben werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-28.2 berücksichtigt. Bereits vor Beginn des spezifischen Kegelrobben-Monitorings im Jahr 2005 (vgl. Sichtungen an Liegeplätzen) wurden Kegelrobben zusammen mit Seehunden ab 1989 erfasst. Anders als bei den Liegeplatz-Daten fließen hier auch Erfassungen ein, die außerhalb des Monitoringzeitraums der Kegelrobben, also während Seehund-Erfassungen aufgenommen wurden. Der Dienst beinhaltet folgende Informationen: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind
Dieser dienstbezogene Datenbestand stellt alle ab 1989 verfügbaren Seehund-Daten aus Zählflügen im Bereich des Nationalparks "Schleswig-Holsteinisches Wattenmeer" zur Verfügung. Hier handelt es sich um Daten aus flächendeckenden, flugzeuggestützten Erfassungen aus, für Seehunden relevanten Jahreszeiten, ab 1989: in der Regel werden pro Jahr zur Wurfzeit (Mai - Juli) drei und zur Haarwechselzeit (August - September) zwei Erfassungsflüge durchgeführt. Dieser Dienst liefert folgende Informationen, die zur Bestandsabschätzung nötig sind: Anzahlen von Seehunden pro Liegeplatz pro Flug und den Anteil an Jungtieren. Der hier beschriebene Datenbestand liefert alle Daten der Erfassungsflüge ab 1989. Durch einen Jahres-Filter können die Daten auf die einzelnen Erfassungsjahre eingeschränkt werden, pro Jahr werden dann alle fünf Erfassungen dargestellt. Auf Basis des Flugdatums können die Erfassungen auch einzeln dargestellt werden. Während des Monitorings wird allen gezählten Einzeltieren bzw. Gruppen eine punktgenaue Koordinate zugewiesen, die als Liegeplatz definiert ist. Wenn möglich wird bei der Zählung nach adulten und juvenilen Tieren unterschieden. Sichtungen außerhalb dieses Zeitraumes werden in diesem Datensatz nicht zur Verfügung gestellt (siehe dazu: Robben: Monitoring der Bestände von Seehunden und Kegelrobben im Schleswig-Holsteinischen Wattenmeer ab 1989.
Download-Geodienst zu den Ruheplätzen von Seehunden. Ein Ruheplatz ist eine berechnete Fläche, die auf Basis einzelner Liegeplätze von Seehunden bzw. Kegelrobben generiert wird. Dazu werden die Liegeplätze 1. pro Jahr räumlich zusammengefasst und 2 werden diese Berechnungen auch auf Basis von einzelnen Flügen durchgeführt. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 2 Seehunden) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Seehunde werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-30.09 berücksichtigt. Der Dienst beinhaltet folgende Informationen und Layer: 1. Ruheplätze pro Jahr aggregiert: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind (Einzel-Jahreslayer und Layer mit allen Daten aller Jahre). 2. Ruheplätze pro Flug: Hier können auch Informationen über die Anzahl der Individuen abgeleitet werden (Jahres-Layer und LAyer mit Daten aller Flüge aller Jahre).
Darstellungsdienst: Ein Ruheplatz ist eine berechnete Fläche, die auf Basis einzelner Liegeplätze von Seehunden bzw. Kegelrobben generiert wird. Dazu werden die Liegeplätze 1. pro Jahr räumlich zusammengefasst und 2 werden diese Berechnungen auch auf Basis von einzelnen Flügen durchgeführt. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 2 Seehunden) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Seehunde werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-30.09 berücksichtigt. Der Dienst beinhaltet folgende Informationen und Layer: 1. Ruheplätze pro Jahr aggregiert: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind (Einzel-Jahreslayer und Layer mit allen Daten aller Jahre). 2. Ruheplätze pro Flug: Hier können auch Informationen über die Anzahl der Individuen abgeleitet werden (Jahres-Layer und LAyer mit Daten aller Flüge aller Jahre).
Download-Geodienst zu den Ruheplätzen vonKegelrobben. Ein Ruheplatz ist eine berechnete Fläche, die auf Basis von Sichtungen an Liegeplätzen von Seehunden bzw. Kegelrobben generiert wird. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 1 Kegelrobbe) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Die Liegeplätze werden dazu entweder pro Jahr räumlich zusammengefasst oder die Berechnungen werden auf Basis von einzelnen Flügen durchgeführt. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Kegelrobben werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-28.2 berücksichtigt. Bereits vor Beginn des spezifischen Kegelrobben-Monitorings im Jahr 2005 (vgl. Sichtungen an Liegeplätzen) wurden Kegelrobben zusammen mit Seehunden ab 1989 erfasst. Anders als bei den Liegeplatz-Daten fließen hier auch Erfassungen ein, die außerhalb des Monitoringzeitraums der Kegelrobben, also während Seehund-Erfassungen aufgenommen wurden. Der Dienst beinhaltet folgende Informationen und Layer ab 1989: 1. Ruheplätze pro Jahr aggregiert: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind (Einzel-Jahreslayer und Layer mit allen Daten aller Jahre). zukünftig: 2. Ruheplätze pro Flug: Hier können auch Informationen über die Anzahl der Individuen abgeleitet werden (Jahres-Layer und Layer mit Daten aller Flüge aller Jahre).
Darstellungs-Dienst zu den Ruheplätzen von Kegelrobben: Ein Ruheplatz ist eine berechnete Fläche, die auf Basis von Sichtungen an Liegeplätzen von Seehunden bzw. Kegelrobben generiert wird. Ein Ruheplatz wird als Kreis mit einem Radius von 500m um einen Liegeplatz (mit mind. 1 Kegelrobbe) herum definiert, wobei mehrere Liegeplätze so zu einer größeren Fläche aggregiert werden können. Die Liegeplätze werden dazu entweder pro Jahr räumlich zusammengefasst oder die Berechnungen werden auf Basis von einzelnen Flügen durchgeführt. Der Abstand von 500m wurde gewählt, da Störungen, die mehr als 500m entfernt sind, keine oder kaum Auswirkungen auf ruhende Robben haben. Diese Flächen werden für Eingriffsplanungen benötigt, um die mit dem Eingriff verbundenen Störungen der Robben auf ein Mindestmaß zu reduzieren. Für Kegelrobben werden zur Berechnung der Ruheplätze pro Jahr Flüge vom 1.03-28.2 berücksichtigt. Bereits vor Beginn des spezifischen Kegelrobben-Monitorings im Jahr 2005 wurden Kegelrobben zusammen mit Seehunden ab 1989 erfasst. Anders als bei den Liegeplatz-Daten fließen hier auch Erfassungen ein, die außerhalb des Monitoringzeitraums der Kegelrobben, also während Seehund-Erfassungen aufgenommen wurden. Der Dienst beinhaltet folgende Informationen und Layer ab 1989: 1. Ruheplätze pro Jahr aggregiert: die Lage und Größe des Ruheplatzes und den Zeitraum der Erfassungen, die in die Berechnung eingeflossen sind (Einzel-Jahreslayer und Layer mit allen Daten aller Jahre). zukünftig: 2. Ruheplätze pro Flug: Hier können auch Informationen über die Anzahl der Individuen abgeleitet werden (Jahres-Layer und Layer mit Daten aller Flüge aller Jahre).
| Organisation | Count |
|---|---|
| Bund | 199 |
| Europa | 8 |
| Kommune | 1 |
| Land | 87 |
| Schutzgebiete | 1 |
| Weitere | 7 |
| Wissenschaft | 65 |
| Zivilgesellschaft | 2 |
| Type | Count |
|---|---|
| Daten und Messstellen | 41 |
| Ereignis | 14 |
| Förderprogramm | 67 |
| Gesetzestext | 2 |
| Repositorium | 1 |
| Software | 1 |
| Taxon | 2 |
| Text | 38 |
| Umweltprüfung | 1 |
| unbekannt | 94 |
| License | Count |
|---|---|
| Geschlossen | 53 |
| Offen | 206 |
| Language | Count |
|---|---|
| Deutsch | 185 |
| Englisch | 89 |
| Resource type | Count |
|---|---|
| Archiv | 72 |
| Bild | 10 |
| Datei | 61 |
| Dokument | 28 |
| Keine | 87 |
| Unbekannt | 2 |
| Webdienst | 1 |
| Webseite | 56 |
| Topic | Count |
|---|---|
| Boden | 102 |
| Lebewesen und Lebensräume | 259 |
| Luft | 101 |
| Mensch und Umwelt | 195 |
| Wasser | 132 |
| Weitere | 249 |