[double-take] feat(double-take): initial commit (#1271)

* feat(double-take): initial commit

double-take is a unified UI and API for processing and training images for facial recognition. it
can be used in conjunction with frigate and home-assistant.

* docs(metadata): link appVersion to image tag

appVersion should link to the image tag to help the user understand what version of the application
is running

* docs(readme): regenerate helm docs

* docs(readme): warn user of configuration change implications

user should be notified that the configuration file will only be copied on the first run to a PVC,
at which point the config should be managed according to the upstream docs

* docs(readme): update config template to warn user of config management

updated the config template (in the correct place this time) so that it will warn the user about
making configuration changes. this should now persist when regenerating the helm-docs.
This commit is contained in:
Curtis John 2021-11-13 07:12:20 -05:00 committed by GitHub
parent 5e69120579
commit 24113553e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 660 additions and 0 deletions

View File

@ -0,0 +1,26 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
# OWNERS file for Kubernetes
OWNERS
# helm-docs templates
*.gotmpl

View File

@ -0,0 +1,22 @@
---
apiVersion: v2
appVersion: 1.6.0
description: Unified UI and API for processing and training images for facial recognition.
name: double-take
version: 1.0.0
kubeVersion: ">=1.16.0-0"
keywords:
- double-take
- frigate
- nvr
home: https://github.com/k8s-at-home/charts/tree/master/charts/stable/double-take
icon: https://double-take.org/icon
sources:
- https://github.com/jakowenko/double-take
maintainers:
- name: crutonjohn
email: crutonjohn@pm.me
dependencies:
- name: common
repository: https://library-charts.k8s-at-home.com
version: 4.0.1

View File

@ -0,0 +1,116 @@
# double-take
![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![AppVersion: 1.6.0](https://img.shields.io/badge/AppVersion-1.6.0-informational?style=flat-square)
Unified UI and API for processing and training images for facial recognition.
**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/k8s-at-home/charts/issues/new/choose)**
## Source Code
* <https://github.com/jakowenko/double-take>
## Requirements
Kubernetes: `>=1.16.0-0`
## Dependencies
| Repository | Name | Version |
|------------|------|---------|
| https://library-charts.k8s-at-home.com | common | 4.0.1 |
## TL;DR
```console
helm repo add k8s-at-home https://k8s-at-home.com/charts/
helm repo update
helm install double-take k8s-at-home/double-take
```
## Installing the Chart
To install the chart with the release name `double-take`
```console
helm install double-take k8s-at-home/double-take
```
## Uninstalling the Chart
To uninstall the `double-take` deployment
```console
helm uninstall double-take
```
The command removes all the Kubernetes components associated with the chart **including persistent volumes** and deletes the release.
## Configuration
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
Other values may be used from the [values.yaml](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common).
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
```console
helm install double-take \
--set env.TZ="America/New York" \
k8s-at-home/double-take
```
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart.
```console
helm install double-take k8s-at-home/double-take -f values.yaml
```
## Custom configuration
**Note**: Configuration file defined in `Values.config` will be copied into the container's persistent storage at first run only. Further configuration should be done in the application itself! See [project documentation](https://github.com/jakowenko/double-take#configuration) for more information.
## Values
**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common)
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| config | object | See values.yaml | double-take configuration settings. This will be copied into the container's persistent storage at first run only. Further configuration should be done in the application itself! See [project documentation](https://github.com/jakowenko/double-take#configuration) for more information. |
| image.pullPolicy | string | `"IfNotPresent"` | image pull policy |
| image.repository | string | `"jakowenko/double-take"` | image repository |
| image.tag | string | `"1.6.0"` | image tag |
| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. |
| persistence | object | See values.yaml | Configure persistence settings for the chart under this key. See [API Images](https://github.com/jakowenko/double-take#api-images) for explaination on what data is stored where. |
| service | object | See values.yaml | Configures service settings for the chart. |
## Changelog
All notable changes to this application Helm chart will be documented in this file but does not include changes from our common library. To read those click [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common#changelog).
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### [1.0.0]
#### Added
- Initial version
#### Changed
- N/A
#### Removed
- N/A
[1.0.0]: #100
## Support
- See the [Docs](https://docs.k8s-at-home.com/our-helm-charts/getting-started/)
- Open an [issue](https://github.com/k8s-at-home/charts/issues/new/choose)
- Ask a [question](https://github.com/k8s-at-home/organization/discussions)
- Join our [Discord](https://discord.gg/sTMX7Vh) community
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0)

View File

@ -0,0 +1,146 @@
{{- define "custom.repository.organization" -}}
k8s-at-home
{{- end -}}
{{- define "custom.repository.url" -}}
https://github.com/k8s-at-home/charts
{{- end -}}
{{- define "custom.helm.url" -}}
https://k8s-at-home.com/charts/
{{- end -}}
{{- define "custom.helm.path" -}}
{{ template "custom.repository.organization" . }}/{{ template "chart.name" . }}
{{- end -}}
{{- define "custom.notes" -}}
**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/k8s-at-home/charts/issues/new/choose)**
{{- end -}}
{{- define "custom.requirements" -}}
## Requirements
{{ template "chart.kubeVersionLine" . }}
{{- end -}}
{{- define "custom.dependencies" -}}
## Dependencies
{{ template "chart.requirementsTable" . }}
{{- end -}}
{{- define "custom.install.tldr" -}}
## TL;DR
```console
helm repo add {{ template "custom.repository.organization" . }} {{ template "custom.helm.url" . }}
helm repo update
helm install {{ template "chart.name" . }} {{ template "custom.helm.path" . }}
```
{{- end -}}
{{- define "custom.install" -}}
## Installing the Chart
To install the chart with the release name `{{ template "chart.name" . }}`
```console
helm install {{ template "chart.name" . }} {{ template "custom.helm.path" . }}
```
{{- end -}}
{{- define "custom.uninstall" -}}
## Uninstalling the Chart
To uninstall the `{{ template "chart.name" . }}` deployment
```console
helm uninstall {{ template "chart.name" . }}
```
The command removes all the Kubernetes components associated with the chart **including persistent volumes** and deletes the release.
{{- end -}}
{{- define "custom.configuration.header" -}}
## Configuration
{{- end -}}
{{- define "custom.configuration.readValues" -}}
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
Other values may be used from the [values.yaml](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common).
{{- end -}}
{{- define "custom.configuration.example.set" -}}
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
```console
helm install {{ template "chart.name" . }} \
--set env.TZ="America/New York" \
{{ template "custom.helm.path" . }}
```
{{- end -}}
{{- define "custom.configuration.example.file" -}}
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart.
```console
helm install {{ template "chart.name" . }} {{ template "custom.helm.path" . }} -f values.yaml
```
{{- end -}}
{{- define "custom.valuesSection" -}}
## Values
**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common)
{{ template "chart.valuesTable" . }}
{{- end -}}
{{- define "custom.support" -}}
## Support
- See the [Docs](https://docs.k8s-at-home.com/our-helm-charts/getting-started/)
- Open an [issue](https://github.com/k8s-at-home/charts/issues/new/choose)
- Ask a [question](https://github.com/k8s-at-home/organization/discussions)
- Join our [Discord](https://discord.gg/sTMX7Vh) community
{{- end -}}
{{ template "chart.header" . }}
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
{{ template "chart.description" . }}
{{ template "custom.notes" . }}
{{ template "chart.sourcesSection" . }}
{{ template "custom.requirements" . }}
{{ template "custom.dependencies" . }}
{{ template "custom.install.tldr" . }}
{{ template "custom.install" . }}
{{ template "custom.uninstall" . }}
{{ template "custom.configuration.header" . }}
{{ template "custom.configuration.readValues" . }}
{{ template "custom.configuration.example.set" . }}
{{ template "custom.configuration.example.file" . }}
{{ template "custom.custom.configuration" . }}
{{ template "custom.valuesSection" . }}
{{ template "custom.changelog" . }}
{{ template "custom.support" . }}
{{ template "helm-docs.versionFooter" . }}
{{ "" }}

View File

@ -0,0 +1,27 @@
{{- define "custom.changelog.header" -}}
## Changelog
{{- end -}}
{{- define "custom.changelog" -}}
{{ template "custom.changelog.header" . }}
All notable changes to this application Helm chart will be documented in this file but does not include changes from our common library. To read those click [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common#changelog).
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### [1.0.0]
#### Added
- Initial version
#### Changed
- N/A
#### Removed
- N/A
[1.0.0]: #100
{{- end -}}

View File

@ -0,0 +1,9 @@
{{- define "custom.custom.configuration.header" -}}
## Custom configuration
{{- end -}}
{{- define "custom.custom.configuration" -}}
{{ template "custom.custom.configuration.header" . }}
**Note**: Configuration file defined in `Values.config` will be copied into the container's persistent storage at first run only. Further configuration should be done in the application itself! See [project documentation](https://github.com/jakowenko/double-take#configuration) for more information.
{{- end -}}

View File

@ -0,0 +1 @@
{{- include "common.notes.defaultNotes" . -}}

View File

@ -0,0 +1,17 @@
{{/* Make sure all variables are set properly */}}
{{- include "common.values.setup" . }}
{{/* Append the configMap volume to the volumes */}}
{{- define "double-take.settingsVolume" -}}
enabled: "true"
mountPath: "/.storage/config/config.yml"
subPath: "config.yml"
type: "custom"
volumeSpec:
configMap:
name: {{ include "common.names.fullname" . }}-settings
{{- end -}}
{{- $_ := set .Values.persistence "double-take-settings" (include "double-take.settingsVolume" . | fromYaml) -}}
{{/* Render the templates */}}
{{ include "common.all" . }}

View File

@ -0,0 +1,12 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "common.names.fullname" . }}-settings
labels:
{{- include "common.labels" . | nindent 4 }}
data:
config.yml: |
{{- with .Values.config }}
{{- toYaml . | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,284 @@
#
# IMPORTANT NOTE
#
# This chart inherits from our common library chart. You can check the default values/options here:
# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
#
image:
# -- image repository
repository: jakowenko/double-take
# -- image tag
tag: 1.6.0
# -- image pull policy
pullPolicy: IfNotPresent
# -- Configures service settings for the chart.
# @default -- See values.yaml
service:
main:
ports:
http:
port: 3000
ingress:
# -- Enable and configure ingress settings for the chart under this key.
# @default -- See values.yaml
main:
enabled: false
# -- Configure persistence settings for the chart under this key.
# See [API Images](https://github.com/jakowenko/double-take#api-images) for explaination on what data is stored where.
# @default -- See values.yaml
persistence:
data:
enabled: false
mountPath: /.storage
# -- double-take configuration settings.
# This will be copied into the container's persistent storage at first run only.
# Further configuration should be done in the application itself!
# See [project documentation](https://github.com/jakowenko/double-take#configuration) for more information.
# @default -- See values.yaml
config:
# enable authentication for ui and api (default: false)
auth: false
# if authentication is enabled
# age of access token in api response and mqtt topics (default: shown below)
# expressed in seconds or a string describing a time span zeit/ms
# https://github.com/vercel/ms
token:
image: 24h
# enable mqtt subscribing and publishing (default: shown below)
mqtt:
host:
username:
password:
topics:
# mqtt topic for frigate message subscription
frigate: frigate/events
# mqtt topic for home assistant discovery subscription
homeassistant: homeassistant
# mqtt topic where matches are published by name
matches: double-take/matches
# mqtt topic where matches are published by camera name
cameras: double-take/cameras
# global detect settings (default: shown below)
detect:
match:
# save match images
save: true
# include base64 encoded string in api results and mqtt messages
# options: true, false, box
base64: false
# minimum confidence needed to consider a result a match
confidence: 60
# hours to keep match images until they are deleted
purge: 168
# minimum area in pixels to consider a result a match
min_area: 10000
unknown:
# save unknown images
save: true
# include base64 encoded string in api results and mqtt messages
# options: true, false, box
base64: false
# minimum confidence needed before classifying a name as unknown
confidence: 40
# hours to keep unknown images until they are deleted
purge: 8
# minimum area in pixels to keep an unknown result
min_area: 0
# frigate settings (default: shown below)
frigate:
url:
# object labels that are allowed for facial recognition
labels:
- person
attempts:
# number of times double take will request a frigate latest.jpg for facial recognition
latest: 10
# number of times double take will request a frigate snapshot.jpg for facial recognition
snapshot: 10
# process frigate images from frigate/+/person/snapshot topics
mqtt: true
# add a delay expressed in seconds between each detection loop
delay: 0
image:
# height of frigate image passed for facial recognition
height: 500
# only process images from specific cameras
cameras:
# - front-door
# - garage
# only process images from specific zones
zones:
# - camera: garage
# zone: driveway
# override frigate attempts and image per camera
events:
# front-door:
# attempts:
# # number of times double take will request a frigate latest.jpg for facial recognition
# latest: 5
# # number of times double take will request a frigate snapshot.jpg for facial recognition
# snapshot: 5
# # process frigate images from frigate/<camera-name>/person/snapshot topic
# mqtt: false
# # add a delay expressed in seconds between each detection loop
# delay: 1
# image:
# # height of frigate image passed for facial recognition (only if using default latest.jpg and snapshot.jpg)
# height: 1000
# # custom image that will be used in place of latest.jpg
# latest: http://camera-url.com/image.jpg
# # custom image that will be used in place of snapshot.jpg
# snapshot: http://camera-url.com/image.jpg
# camera settings (default: shown below)
cameras:
front-door:
# apply masks before processing image
# masks:
# # list of x,y coordinates to define the polygon of the zone
# coordinates:
# - 1920,0,1920,328,1638,305,1646,0
# # show the mask on the final saved image (helpful for debugging)
# visible: false
# # size of camera stream used in resizing masks
# size: 1920x1080
# override global detect variables per camera
# detect:
# match:
# # save match images
# save: true
# # include base64 encoded string in api results and mqtt messages
# # options: true, false, box
# base64: false
# # minimum confidence needed to consider a result a match
# confidence: 60
# # minimum area in pixels to consider a result a match
# min_area: 10000
# unknown:
# # save unknown images
# save: true
# # include base64 encoded string in api results and mqtt messages
# # options: true, false, box
# base64: false
# # minimum confidence needed before classifying a match name as unknown
# confidence: 40
# # minimum area in pixels to keep an unknown result
# min_area: 0
# snapshot:
# # process any jpeg encoded mqtt topic for facial recognition
# topic:
# # process any http image for facial recognition
# url:
# detector settings (default: shown below)
detectors:
compreface:
url:
# recognition api key
key:
# number of seconds before the request times out and is aborted
timeout: 15
# minimum required confidence that a recognized face is actually a face
# value is between 0.0 and 1.0
det_prob_threshold: 0.8
# comma-separated slugs of face plugins
# https://github.com/exadel-inc/CompreFace/blob/master/docs/Face-services-and-plugins.md)
# face_plugins: mask,gender,age
# deepstack:
# url:
# key:
# # number of seconds before the request times out and is aborted
# timeout: 15
# facebox:
# url:
# # number of seconds before the request times out and is aborted
# timeout: 15
# schedule settings (default: shown below)
schedule:
# disable recognition if conditions are met
disable:
# - days:
# - monday
# - tuesday
# times:
# - 20:00-23:59
# cameras:
# - office
# - days:
# - tuesday
# - wednesday
# times:
# - 13:00-15:00
# - 18:00-20:00
# cameras:
# - living-room
# notify settings (default: shown below)
notify:
gotify:
url:
token:
priority: 5
# only notify from specific cameras
# cameras:
# - front-door
# - garage
# only notify from specific zones
# zones:
# - camera: garage
# zone: driveway
# time settings (default: shown below)
time:
# defaults to iso 8601 format with support for token-based formatting
# https://github.com/moment/luxon/blob/master/docs/formatting.md#table-of-tokens
format:
# time zone used in logs
timezone: UTC
# log settings (default: shown below)
# options: silent, error, warn, info, http, verbose, debug, silly
logs:
level: info
# ui settings (default: shown below)
ui:
pagination:
# number of results per page
limit: 50
thumbnails:
# value between 0-100
quality: 95
# value in pixels
width: 500
logs:
# number of lines displayed
lines: 500