From 24113553e17d9e951255f1b35e876d237bf5c13c Mon Sep 17 00:00:00 2001 From: Curtis John Date: Sat, 13 Nov 2021 07:12:20 -0500 Subject: [PATCH] [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. --- charts/stable/double-take/.helmignore | 26 ++ charts/stable/double-take/Chart.yaml | 22 ++ charts/stable/double-take/README.md | 116 +++++++ charts/stable/double-take/README.md.gotmpl | 146 +++++++++ .../double-take/README_CHANGELOG.md.gotmpl | 27 ++ .../double-take/README_CONFIG.md.gotmpl | 9 + charts/stable/double-take/templates/NOTES.txt | 1 + .../stable/double-take/templates/common.yaml | 17 ++ .../double-take/templates/configmap.yaml | 12 + charts/stable/double-take/values.yaml | 284 ++++++++++++++++++ 10 files changed, 660 insertions(+) create mode 100644 charts/stable/double-take/.helmignore create mode 100644 charts/stable/double-take/Chart.yaml create mode 100644 charts/stable/double-take/README.md create mode 100644 charts/stable/double-take/README.md.gotmpl create mode 100644 charts/stable/double-take/README_CHANGELOG.md.gotmpl create mode 100644 charts/stable/double-take/README_CONFIG.md.gotmpl create mode 100644 charts/stable/double-take/templates/NOTES.txt create mode 100644 charts/stable/double-take/templates/common.yaml create mode 100644 charts/stable/double-take/templates/configmap.yaml create mode 100644 charts/stable/double-take/values.yaml diff --git a/charts/stable/double-take/.helmignore b/charts/stable/double-take/.helmignore new file mode 100644 index 00000000..4379e2b3 --- /dev/null +++ b/charts/stable/double-take/.helmignore @@ -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 diff --git a/charts/stable/double-take/Chart.yaml b/charts/stable/double-take/Chart.yaml new file mode 100644 index 00000000..3ac1937c --- /dev/null +++ b/charts/stable/double-take/Chart.yaml @@ -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 diff --git a/charts/stable/double-take/README.md b/charts/stable/double-take/README.md new file mode 100644 index 00000000..721e6fb0 --- /dev/null +++ b/charts/stable/double-take/README.md @@ -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 + +* + +## 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) diff --git a/charts/stable/double-take/README.md.gotmpl b/charts/stable/double-take/README.md.gotmpl new file mode 100644 index 00000000..358abe31 --- /dev/null +++ b/charts/stable/double-take/README.md.gotmpl @@ -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" . }} +{{ "" }} diff --git a/charts/stable/double-take/README_CHANGELOG.md.gotmpl b/charts/stable/double-take/README_CHANGELOG.md.gotmpl new file mode 100644 index 00000000..06ad5fb3 --- /dev/null +++ b/charts/stable/double-take/README_CHANGELOG.md.gotmpl @@ -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 -}} diff --git a/charts/stable/double-take/README_CONFIG.md.gotmpl b/charts/stable/double-take/README_CONFIG.md.gotmpl new file mode 100644 index 00000000..d77a4be4 --- /dev/null +++ b/charts/stable/double-take/README_CONFIG.md.gotmpl @@ -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 -}} diff --git a/charts/stable/double-take/templates/NOTES.txt b/charts/stable/double-take/templates/NOTES.txt new file mode 100644 index 00000000..90f7b653 --- /dev/null +++ b/charts/stable/double-take/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "common.notes.defaultNotes" . -}} diff --git a/charts/stable/double-take/templates/common.yaml b/charts/stable/double-take/templates/common.yaml new file mode 100644 index 00000000..9cf4bc5d --- /dev/null +++ b/charts/stable/double-take/templates/common.yaml @@ -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" . }} diff --git a/charts/stable/double-take/templates/configmap.yaml b/charts/stable/double-take/templates/configmap.yaml new file mode 100644 index 00000000..3b09a0e4 --- /dev/null +++ b/charts/stable/double-take/templates/configmap.yaml @@ -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 }} diff --git a/charts/stable/double-take/values.yaml b/charts/stable/double-take/values.yaml new file mode 100644 index 00000000..7768ea32 --- /dev/null +++ b/charts/stable/double-take/values.yaml @@ -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//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