Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 151 additions & 0 deletions source/_components/doods.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
---
title: "DOODS"
description: "Detect and recognize objects with DOODS."
ha_category:
- Image Processing
ha_iot_class: Local Polling
ha_release: 0.99
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0.100

---

The `doods` image processing platform allows you to detect and recognize objects in a camera image using [DOODS](https://github.com/snowzach/doods/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category.

## Setup

You need to have DOODS running somewhere. It's easiest to run as a docker container and deployment is described on docker hub
Comment thread
snowzach marked this conversation as resolved.
[DOODS - Docker](https://hub.docker.com/r/snowzach/doods)

## Configuration

The configuration loosely follows the tensorflow configuration. To enable this platform in your installation, add the following to your `configuration.yaml` file:

```yaml
# Example configuration.yaml entry
image_processing:
Comment thread
klaasnicolaas marked this conversation as resolved.
- platform: doods
url: "http://<my doods server>:8080"
source:
- entity_id: camera.front_yard
```

{% configuration %}
source:
description: The list of image sources.
required: true
type: map
keys:
entity_id:
description: A camera entity id to get picture from.
required: true
type: string
name:
description: This parameter allows you to override the name of your `image_processing` entity.
required: false
type: string
url:
description: The URL of the DOODS server
required: true
type: string
detector:
description: The DOODS detector to use
required: false
type: string
confidence:
description: The default confidence for any detected objects where not explicitly set
required: false
type: float
file_out:
description: A [template](/docs/configuration/templating/#processing-incoming-data) for the integration to save processed images including bounding boxes. `camera_entity` is available as the `entity_id` string of the triggered source camera.
required: false
type: list
labels:
description: Information about the selected labels model.
required: false
type: map
keys:
name:
description: The label of the object to select for detection.
required: true
type: string
confidence:
description: The minimum confidence for the selected label
required: false
type: float
area:
description: Custom detection area. Only objects fully in this box will be reported. Top of image is 0, bottom is 1. Same left to right.
required: false
type: map
keys:
top:
description: Top line defined as % from top of image.
required: false
type: float
default: 0
left:
description: Left line defined as % from left of image.
required: false
type: float
default: 0
bottom:
description: Bottom line defined as % from top of image.
required: false
type: float
default: 1
right:
description: Right line defined as % from left of image.
required: false
type: float
default: 1

{% endconfiguration %}

```yaml
# Example advanced configuration.yaml entry
# Example configuration.yaml entry
image_processing:
- platform: doods
scan_interval: 1000
url: "http://<my doods server>:8080"
detector: default
source:
- entity_id: camera.front_yard
file_out:
- "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}{% endraw %}_latest.jpg"
- "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}_{{ now().strftime('%Y%m%d_%H%M%S') }}{% endraw %}.jpg"
confidence: 50
labels:
- name: person
confidence: 40
area:
# Exclude top 10% of image
top: 0.1
# Exclude right 15% of image
right: 0.85
- car
- truck
```

## Optimising resources

[Image processing components](/components/image_processing/) process the image from a camera at a fixed period given by the `scan_interval`. This leads to excessive processing if the image on the camera hasn't changed, as the default `scan_interval` is 10 seconds. You can override this by adding to your config `scan_interval: 10000` (setting the interval to 10,000 seconds), and then call the `image_processing.scan` service when you actually want to perform processing.

```yaml
# Example advanced configuration.yaml entry
image_processing:
- platform: doods
scan_interval: 10000
source:
- entity_id: camera.driveway
- entity_id: camera.backyard
```

```yaml
# Example advanced automations.yaml entry
- alias: Doods scanning
trigger:
- platform: state
entity_id:
- binary_sensor.driveway
action:
- service: image_processing.scan
entity_id: camera.driveway
```