# MotionDetector

<a id="motiondetector"></a>

# MotionDetector

```cpp
#include <icy/vision/motiondetector.h>

class MotionDetector
```

[Defined in src/vision/include/icy/vision/motiondetector.h:55](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L55)

> **Inherits:** [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1)

Detects motion by comparing each frame with the previous one on a coarse grid, and emits a detect event when the change reaches the threshold.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`MotionDetector`](#motiondetector-1) | `function` | Declared here |
| [`setConfig`](#setconfig-3) | `function` | Declared here |
| [`config`](#config-4) | `function` | Declared here |
| [`stats`](#stats-3) | `function` | Declared here |
| [`reset`](#reset-28) | `function` | Declared here |
| [`process`](#process-21) | `function` | Declared here |
| [`_config`](#_config-3) | `variable` | Declared here |
| [`_seen`](#_seen-3) | `variable` | Declared here |
| [`_emitted`](#_emitted-2) | `variable` | Declared here |
| [`_warmedFrames`](#_warmedframes) | `variable` | Declared here |
| [`_width`](#_width) | `variable` | Declared here |
| [`_height`](#_height) | `variable` | Declared here |
| [`_lastEventTimeUsec`](#_lasteventtimeusec) | `variable` | Declared here |
| [`_lastScore`](#_lastscore) | `variable` | Declared here |
| [`_previousGrid`](#_previousgrid) | `variable` | Declared here |
| [`_currentGrid`](#_currentgrid) | `variable` | Declared here |
| [`sampleLumaGrid`](#samplelumagrid) | `function` | Declared here |
| [`diffScore`](#diffscore) | `function` | Declared here |
| [`emitEvent`](#emitevent-1) | `function` | Declared here |
| [`sanitize`](#sanitize-3) | `function` | Declared here |
| [`Event`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#event-7) | `variable` | Inherited from [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1) |
| [`~Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-2) | `function` | Inherited from [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1) |
| [`reset`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#reset-25) | `function` | Inherited from [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1) |
| [`process`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#process-18) | `function` | Inherited from [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1) |

## Inherited from [`Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-1)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`Event`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#event-7)  |  |
| `function` | [`~Detector`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#detector-2) `virtual` | Defaulted destructor. |
| `function` | [`reset`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#reset-25) `virtual` |  |
| `function` | [`process`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#process-18) `virtual` |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`MotionDetector`](#motiondetector-1) `explicit` |  |
| `void` | [`setConfig`](#setconfig-3)  |  |
| [`MotionDetectorConfig`](https://auscaster.com/icey/docs/api-reference/icy-vision-MotionDetectorConfig.md#motiondetectorconfig) | [`config`](#config-4) `const` |  |
| [`MotionDetectorStats`](https://auscaster.com/icey/docs/api-reference/icy-vision-MotionDetectorStats.md#motiondetectorstats) | [`stats`](#stats-3) `const` |  |
| `void` | [`reset`](#reset-28) `virtual` `override` |  |
| `void` | [`process`](#process-21) `virtual` `override` |  |

---

<a id="motiondetector-1"></a>

### MotionDetector

`explicit`

```cpp
explicit MotionDetector(MotionDetectorConfig config = {})
```

[Defined in src/vision/include/icy/vision/motiondetector.h:58](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L58)

---

<a id="setconfig-3"></a>

### setConfig

```cpp
void setConfig(MotionDetectorConfig config)
```

[Defined in src/vision/include/icy/vision/motiondetector.h:60](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L60)

---

<a id="config-4"></a>

### config

`const`

```cpp
MotionDetectorConfig config() const
```

[Defined in src/vision/include/icy/vision/motiondetector.h:61](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L61)

---

<a id="stats-3"></a>

### stats

`const`

```cpp
MotionDetectorStats stats() const
```

[Defined in src/vision/include/icy/vision/motiondetector.h:62](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L62)

---

<a id="reset-28"></a>

### reset

`virtual` `override`

```cpp
virtual void reset() override
```

[Defined in src/vision/include/icy/vision/motiondetector.h:63](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L63)

#### Reimplements

- [`Detector::reset`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#reset-25)

---

<a id="process-21"></a>

### process

`virtual` `override`

```cpp
virtual void process(const VisionFramePacket & packet) override
```

[Defined in src/vision/include/icy/vision/motiondetector.h:65](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L65)

#### Reimplements

- [`Detector::process`](https://auscaster.com/icey/docs/api-reference/icy-vision-Detector.md#process-18)

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`MotionDetectorConfig`](https://auscaster.com/icey/docs/api-reference/icy-vision-MotionDetectorConfig.md#motiondetectorconfig) | [`_config`](#_config-3)  |  |
| `uint64_t` | [`_seen`](#_seen-3)  |  |
| `uint64_t` | [`_emitted`](#_emitted-2)  |  |
| `uint32_t` | [`_warmedFrames`](#_warmedframes)  |  |
| `int` | [`_width`](#_width)  |  |
| `int` | [`_height`](#_height)  |  |
| `int64_t` | [`_lastEventTimeUsec`](#_lasteventtimeusec)  |  |
| `float` | [`_lastScore`](#_lastscore)  |  |
| `std::vector< uint8_t >` | [`_previousGrid`](#_previousgrid)  |  |
| `std::vector< uint8_t >` | [`_currentGrid`](#_currentgrid)  |  |

---

<a id="_config-3"></a>

### _config

```cpp
MotionDetectorConfig _config
```

Type: [`MotionDetectorConfig`](https://auscaster.com/icey/docs/api-reference/icy-vision-MotionDetectorConfig.md#motiondetectorconfig)

[Defined in src/vision/include/icy/vision/motiondetector.h:73](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L73)

---

<a id="_seen-3"></a>

### _seen

```cpp
uint64_t _seen = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:74](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L74)

---

<a id="_emitted-2"></a>

### _emitted

```cpp
uint64_t _emitted = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:75](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L75)

---

<a id="_warmedframes"></a>

### _warmedFrames

```cpp
uint32_t _warmedFrames = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:76](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L76)

---

<a id="_width"></a>

### _width

```cpp
int _width = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:77](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L77)

---

<a id="_height"></a>

### _height

```cpp
int _height = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:78](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L78)

---

<a id="_lasteventtimeusec"></a>

### _lastEventTimeUsec

```cpp
int64_t _lastEventTimeUsec = 0
```

[Defined in src/vision/include/icy/vision/motiondetector.h:79](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L79)

---

<a id="_lastscore"></a>

### _lastScore

```cpp
float _lastScore = 0.0f
```

[Defined in src/vision/include/icy/vision/motiondetector.h:80](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L80)

---

<a id="_previousgrid"></a>

### _previousGrid

```cpp
std::vector< uint8_t > _previousGrid
```

[Defined in src/vision/include/icy/vision/motiondetector.h:81](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L81)

---

<a id="_currentgrid"></a>

### _currentGrid

```cpp
std::vector< uint8_t > _currentGrid
```

[Defined in src/vision/include/icy/vision/motiondetector.h:82](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L82)

## Private Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`sampleLumaGrid`](#samplelumagrid) `const` |  |
| `float` | [`diffScore`](#diffscore) `const` |  |
| `void` | [`emitEvent`](#emitevent-1)  |  |

---

<a id="samplelumagrid"></a>

### sampleLumaGrid

`const`

```cpp
void sampleLumaGrid(const VisionFramePacket & packet, std::vector< uint8_t > & out) const
```

[Defined in src/vision/include/icy/vision/motiondetector.h:69](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L69)

---

<a id="diffscore"></a>

### diffScore

`const`

```cpp
float diffScore(const std::vector< uint8_t > & current) const
```

[Defined in src/vision/include/icy/vision/motiondetector.h:70](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L70)

---

<a id="emitevent-1"></a>

### emitEvent

```cpp
void emitEvent(const VisionFramePacket & packet, float score)
```

[Defined in src/vision/include/icy/vision/motiondetector.h:71](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L71)

## Private Static Methods

| Return | Name | Description |
|--------|------|-------------|
| [`MotionDetectorConfig`](https://auscaster.com/icey/docs/api-reference/icy-vision-MotionDetectorConfig.md#motiondetectorconfig) | [`sanitize`](#sanitize-3) `static` |  |

---

<a id="sanitize-3"></a>

### sanitize

`static`

```cpp
static MotionDetectorConfig sanitize(MotionDetectorConfig config)
```

[Defined in src/vision/include/icy/vision/motiondetector.h:68](https://github.com/auscaster/icey/blob/main/src/vision/include/icy/vision/motiondetector.h#L68)
