From fa520535fd2a07c6c4e97d4030543f006b2fd51f Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 12 May 2018 09:25:37 +0100 Subject: [PATCH] Adds Facebox (#5355) * Adds Machine box * Update image_processing.facebox.markdown --- .../image_processing.facebox.markdown | 60 ++++++++++++++++++ .../images/supported_brands/machine-box.png | Bin 0 -> 19590 bytes 2 files changed, 60 insertions(+) create mode 100644 source/_components/image_processing.facebox.markdown create mode 100644 source/images/supported_brands/machine-box.png diff --git a/source/_components/image_processing.facebox.markdown b/source/_components/image_processing.facebox.markdown new file mode 100644 index 00000000000..d4f20fc2b7b --- /dev/null +++ b/source/_components/image_processing.facebox.markdown @@ -0,0 +1,60 @@ +--- +layout: page +title: "Facebox" +description: "Detect and recognise faces with Facebox." +date: 2018-05-03 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: machine-box.png +ha_category: Image Processing +featured: false +ha_release: 0.70 +--- + +The `facebox` image processing platform allows you to detect and recognise faces in a camera image using [Facebox](https://machinebox.io/docs/facebox). The state of the entity is the number of faces detected, and recognised faces are listed in the `matched_faces` attribute. Facebox runs in a Docker container, and it is recommended that you run this container on a machine with a minimum of 2 GB RAM. On your machine with Docker, run the Facebox container with: +``` +MB_KEY="INSERT-YOUR-KEY-HERE" + +sudo docker run --name=facebox --restart=always 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/facebox +``` + +If you only require face detection (number of faces) you can disable face recognition by adding ```-e "MB_FACEBOX_DISABLE_RECOGNITION=true"``` to the `docker run` command. + +To enable this platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: facebox + ip_address: 192.168.0.1 + port: 8080 + source: + - entity_id: camera.local_file + name: my_custom_name +``` + +{% configuration %} +ip_address: + description: The IP address of your machine hosting Facebox. + required: true + type: string +port: + description: The port which Facebox is exposed on. + required: true + type: string +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 +{% endconfiguration %} diff --git a/source/images/supported_brands/machine-box.png b/source/images/supported_brands/machine-box.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ac60376c0e4fcd961e8bd91dca331c21768371 GIT binary patch literal 19590 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 z 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 g5HQwZHOoKy@