From 7e10e2fd9aedba7f4fd090067246b56a6dabe042 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 5 Mar 2017 23:59:25 -0700 Subject: [PATCH 01/13] Image processing opencv doc --- .../image_processing.opencv.markdown | 45 +++++++ source/_components/opencv.markdown | 118 ++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 source/_components/image_processing.opencv.markdown create mode 100644 source/_components/opencv.markdown diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown new file mode 100644 index 000000000000..2a515873b3ee --- /dev/null +++ b/source/_components/image_processing.opencv.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "OpenCV" +description: "Instructions how to integrate OpenCV image processing into Home Assistant." +date: 2017-01-25 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: microsoft.png +ha_category: Image Processing +featured: false +ha_release: 0.38 +--- + +The `opencv` image processing platform allows you to create a standalone image processor without the linked camera entity as mentioned in the [OpenCV page](https://home-assistant.io/components/opencv). + +### {% linkable_title Configuration Home Assistant %} + +```yaml +opencv: + - name: Detect Face + entity_id: + - camera.front_door + - camera.living_room + classifier: + - file_path: /path/to/classifier/face.xml + name: face + - file_path: /path/to/classifier/face_profile.xml + name: face profile + min_size: (20, 20) + scale: 1.6 + neighbors: 5 +``` + +Configuration variables: + +- **name** (*Required*): The name of the OpenCV image processor. +- **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. +- **classifier** (*Optional*): The classification configuration for to be applied, if not specified, the following defaults will be applied: + - **file_path** (*Optional*): The path to the HAARS or LBP classification file (xml), the default is `lbp_frontalface.xml`. + - **name** (*Optional*): The classification name, the default is `Face`. + - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. + - **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`. + - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown new file mode 100644 index 000000000000..bcdbc50d6f6a --- /dev/null +++ b/source/_components/opencv.markdown @@ -0,0 +1,118 @@ +--- +layout: page +title: "ISY994 Controller" +description: "Instructions how to setup the ISY994 controller within Home Assistant." +date: 2015-01-20 22:36 +sidebar: true +comments: false +sharing: true +footer: true +logo: universal_devices.png +ha_category: Hub +ha_release: 0.28 +ha_iot_class: "Local Push" +--- + +The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices. +The ISY994 controller is manufactured by [Universal Devices](https://www.universal-devices.com/residential/isy994i-series/). + +### {% linkable_title Basic Configuration %} + +Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, cover, fan, lock, and switches can also be created. + +To integrate your ISY994 controller with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +isy994: + host: ISY_ADDRESS + username: ISY_USERNAME + password: ISY_PASSWORD +``` +Configuration variables: + +- **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80 +- **username** (*Required*): The username that used to access the ISY interface. +- **password** (*Required*): The password that used to access the ISY interface. +- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). +- **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. +- **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. + +Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. + +### {% linkable_title Creating Custom Devices %} + +Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains: + +``` +My Programs +├── HA.binary_sensor +| ├── Movement In House +| | └── status +| └── Garage Open +| | └── status +├── HA.cover +| ├── Left Garage Door +| | ├── actions +| | └── status +| ├── Living Room Blinds +| | ├── actions +| | └── status +├── HA.fan +| ├── Desk Fan +| | ├── actions +| | └── status +| ├── Living Room Fan +| | ├── actions +| | └── status +├── HA.lock +| ├── Front Door +| | ├── actions +| | └── status +| ├── Back Door +| | ├── actions +| | └── status +├── HA.switch +| ├── Dining Lights +| | ├── actions +| | └── status +| ├── Sleep Mode +| | ├── actions +| | └── status +``` + +A device is created by creating a directory, with the name for the device, under any of the following root directories: + * *HA.binary_sensor* will create a binary sensor (see [Customizing Devices](https://home-assistant.io/getting-started/customizing-devices/) to set the sensor class) + * *HA.cover* will create a cover + * *HA.fan* will create a fan + * *HA.lock* will create a lock + * *HA.switch* will create a switch + +A program, named *status*, is required under the program device directory. A program, named *actions*, is required for all program devices except for binary_sensor. Any other programs in these device directories will be ignored. + +

+ +

+ +The *status* program in this directory is what indicates the state of the device: + * *binary_sensor* on if the clause returns true, otherwise off + * *cover* closed if the clause returns true, otherwise open + * *fan* on if the clause returns true, otherwise off + * *lock* locked if the clause returns true, otherwise unlocked + * *switch* on if the clause returns true, otherwise off + +

+ +

+ +The *actions* program indicates what should be performed for the following device services: + * *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service + * *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service + * *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service + * *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service + +

+ +

+ +The example program above shows how to control a legacy X10 device from Home Assistant using an ISY controller. From 3f7d8612d04e012a17fc7192224a17d47f558c05 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 5 Mar 2017 23:59:46 -0700 Subject: [PATCH 02/13] OpenCV doc --- source/_components/opencv.markdown | 128 ++++++++--------------------- 1 file changed, 36 insertions(+), 92 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index bcdbc50d6f6a..e8f57b82ce05 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -1,118 +1,62 @@ --- layout: page -title: "ISY994 Controller" -description: "Instructions how to setup the ISY994 controller within Home Assistant." -date: 2015-01-20 22:36 +title: "OpenCV" +description: "Instructions how to setup OpenCV within Home Assistant." +date: 2017-03-05 22:36 sidebar: true comments: false sharing: true footer: true logo: universal_devices.png ha_category: Hub -ha_release: 0.28 +ha_release: 0.40 ha_iot_class: "Local Push" --- -The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices. -The ISY994 controller is manufactured by [Universal Devices](https://www.universal-devices.com/residential/isy994i-series/). +[OpenCV](https://www.opencv.org) is an open source computer vision image and video processing library. ### {% linkable_title Basic Configuration %} -Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, cover, fan, lock, and switches can also be created. - -To integrate your ISY994 controller with Home Assistant, add the following section to your `configuration.yaml` file: +To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry -isy994: - host: ISY_ADDRESS - username: ISY_USERNAME - password: ISY_PASSWORD +opencv: + - name: Detect Face + entity_id: camera.front_door ``` -Configuration variables: - -- **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80 -- **username** (*Required*): The username that used to access the ISY interface. -- **password** (*Required*): The password that used to access the ISY interface. -- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). -- **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. -- **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. -Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. +See below for extra configuration parameters and their defaults. -### {% linkable_title Creating Custom Devices %} +### {% linkable_title Advanced Configuration %} -Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains: +OpenCV can accept some more advanced configuration parameters: +```yaml +opencv: + - name: Detect Face + entity_id: + - camera.front_door + - camera.living_room + classifier: + - file_path: /path/to/classifier/face.xml + name: face + - file_path: /path/to/classifier/face_profile.xml + name: face profile + min_size: (20, 20) + scale: 1.6 + neighbors: 5 ``` -My Programs -├── HA.binary_sensor -| ├── Movement In House -| | └── status -| └── Garage Open -| | └── status -├── HA.cover -| ├── Left Garage Door -| | ├── actions -| | └── status -| ├── Living Room Blinds -| | ├── actions -| | └── status -├── HA.fan -| ├── Desk Fan -| | ├── actions -| | └── status -| ├── Living Room Fan -| | ├── actions -| | └── status -├── HA.lock -| ├── Front Door -| | ├── actions -| | └── status -| ├── Back Door -| | ├── actions -| | └── status -├── HA.switch -| ├── Dining Lights -| | ├── actions -| | └── status -| ├── Sleep Mode -| | ├── actions -| | └── status -``` - -A device is created by creating a directory, with the name for the device, under any of the following root directories: - * *HA.binary_sensor* will create a binary sensor (see [Customizing Devices](https://home-assistant.io/getting-started/customizing-devices/) to set the sensor class) - * *HA.cover* will create a cover - * *HA.fan* will create a fan - * *HA.lock* will create a lock - * *HA.switch* will create a switch -A program, named *status*, is required under the program device directory. A program, named *actions*, is required for all program devices except for binary_sensor. Any other programs in these device directories will be ignored. - -

- -

- -The *status* program in this directory is what indicates the state of the device: - * *binary_sensor* on if the clause returns true, otherwise off - * *cover* closed if the clause returns true, otherwise open - * *fan* on if the clause returns true, otherwise off - * *lock* locked if the clause returns true, otherwise unlocked - * *switch* on if the clause returns true, otherwise off - -

- -

- -The *actions* program indicates what should be performed for the following device services: - * *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service - * *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service - * *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service - * *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service +Configuration variables: -

- -

+- **name** (*Required*): The name of the OpenCV image processor. +- **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. +- **classifier** (*Optional*): The classification configuration for to be applied: + - **file_path** (*Optional*): The path to the HAARS or LBP classification file (xml), the default is `lbp_frontalface.xml`. + - **name** (*Optional*): The classification name, the default is `Face`. + - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. + - **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`. + - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. -The example program above shows how to control a legacy X10 device from Home Assistant using an ISY controller. +Once OpenCV is configured, it will create an `image_processing` entity for each classification group/camera entity combination as well as a camera so you can see what Home Assistant sees. From 3403b0dc23068eba9f16684bb6049e497f52d183 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Mon, 6 Mar 2017 00:02:05 -0700 Subject: [PATCH 03/13] OpenCV logo --- .../image_processing.opencv.markdown | 2 +- source/_components/opencv.markdown | 2 +- source/images/OpenCV_Logo.png | Bin 0 -> 18894 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 source/images/OpenCV_Logo.png diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index 2a515873b3ee..ac6433ebe085 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: microsoft.png +logo: OpenCV_Logo.png ha_category: Image Processing featured: false ha_release: 0.38 diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index e8f57b82ce05..796c462b19d2 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: universal_devices.png +logo: OpenCV_Logo.png ha_category: Hub ha_release: 0.40 ha_iot_class: "Local Push" diff --git a/source/images/OpenCV_Logo.png b/source/images/OpenCV_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8edf677e66d6ef65ee2a851e547bf062009b8d99 GIT binary patch literal 18894 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 Date: Sat, 11 Mar 2017 14:03:05 -0700 Subject: [PATCH 04/13] Doc updates --- source/_components/opencv.markdown | 32 ++++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index 796c462b19d2..ea89d7e6521b 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Push" [OpenCV](https://www.opencv.org) is an open source computer vision image and video processing library. +Some pre-defined classifiers can be found here: http://alereimondo.no-ip.org/OpenCV/34 + ### {% linkable_title Basic Configuration %} To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: @@ -22,7 +24,8 @@ To setup OpenCV with Home Assistant, add the following section to your `configur ```yaml # Example configuration.yaml entry opencv: - - name: Detect Face + classifier_group: + name: Detect Face entity_id: camera.front_door ``` @@ -34,18 +37,20 @@ OpenCV can accept some more advanced configuration parameters: ```yaml opencv: - - name: Detect Face - entity_id: - - camera.front_door - - camera.living_room - classifier: - - file_path: /path/to/classifier/face.xml - name: face - - file_path: /path/to/classifier/face_profile.xml - name: face profile - min_size: (20, 20) - scale: 1.6 - neighbors: 5 + classifier_group: + - name: Detect Face + entity_id: + - camera.front_door + - camera.living_room + classifier: + - file_path: /path/to/classifier/face.xml + name: face + - file_path: /path/to/classifier/face_profile.xml + name: face profile + min_size: (20, 20) + color: (255, 0, 0) + scale: 1.6 + neighbors: 5 ``` Configuration variables: @@ -56,6 +61,7 @@ Configuration variables: - **file_path** (*Optional*): The path to the HAARS or LBP classification file (xml), the default is `lbp_frontalface.xml`. - **name** (*Optional*): The classification name, the default is `Face`. - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. + - **color** (*Optional*): The color, as a tuple `(Blue, Green, Red)` to draw the rectangle when linked to a dispatcher camera, the default is `(255, 255, 0)`. - **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`. - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. From c567d4e719495b19550fd5d46860744d1165675a Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Tue, 14 Mar 2017 18:12:46 -0600 Subject: [PATCH 05/13] Change docs to match opencv component --- source/_components/opencv.markdown | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index ea89d7e6521b..801e4d4421d8 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -2,7 +2,7 @@ layout: page title: "OpenCV" description: "Instructions how to setup OpenCV within Home Assistant." -date: 2017-03-05 22:36 +date: 2017-04-01 22:36 sidebar: true comments: false sharing: true @@ -17,24 +17,10 @@ ha_iot_class: "Local Push" Some pre-defined classifiers can be found here: http://alereimondo.no-ip.org/OpenCV/34 -### {% linkable_title Basic Configuration %} +### {% linkable_title Configuration %} To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: -```yaml -# Example configuration.yaml entry -opencv: - classifier_group: - name: Detect Face - entity_id: camera.front_door -``` - -See below for extra configuration parameters and their defaults. - -### {% linkable_title Advanced Configuration %} - -OpenCV can accept some more advanced configuration parameters: - ```yaml opencv: classifier_group: @@ -57,8 +43,8 @@ Configuration variables: - **name** (*Required*): The name of the OpenCV image processor. - **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. -- **classifier** (*Optional*): The classification configuration for to be applied: - - **file_path** (*Optional*): The path to the HAARS or LBP classification file (xml), the default is `lbp_frontalface.xml`. +- **classifier** (*Required*): The classification configuration for to be applied: + - **file_path** (*Required*): The path to the HAARS or LBP classification file (xml). - **name** (*Optional*): The classification name, the default is `Face`. - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. - **color** (*Optional*): The color, as a tuple `(Blue, Green, Red)` to draw the rectangle when linked to a dispatcher camera, the default is `(255, 255, 0)`. From 4d3570acff20b517e721d7c495dd1dd8780cfd73 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Tue, 14 Mar 2017 20:17:36 -0600 Subject: [PATCH 06/13] Update docs --- source/_components/opencv.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index 801e4d4421d8..c7ba009c6e1d 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -52,3 +52,18 @@ Configuration variables: - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. Once OpenCV is configured, it will create an `image_processing` entity for each classification group/camera entity combination as well as a camera so you can see what Home Assistant sees. + +### {% linkable_title Camera %} + +If you would like to see what your Home-Assistant is seeing, the OpenCV image processing platform will dispatch a signal `image_processing_{image_processor_name}`. + +There is a special camera, specifically for this: + +```yaml +camera: + - platform: dispatch + name: OpenCV Camera + signal: image_processing_detect_faces +``` + +A new camera entity will be added to your Home-Assistant that will highlight the areas it has detected as a match. From d7efae607ee2c9072d60d7d04b2d46e816586d0c Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 23 Apr 2017 19:07:06 -0600 Subject: [PATCH 07/13] Add comment to example --- source/_components/opencv.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index c7ba009c6e1d..d80bd57498b8 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -22,6 +22,8 @@ Some pre-defined classifiers can be found here: http://alereimondo.no-ip.org/Ope To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry + opencv: classifier_group: - name: Detect Face From 0adc09dea0831ffbc321804da18dceede6776248 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 23 Apr 2017 19:10:39 -0600 Subject: [PATCH 08/13] Add camera config --- source/_components/opencv.markdown | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index d80bd57498b8..e62a7d06e989 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -27,6 +27,7 @@ To setup OpenCV with Home Assistant, add the following section to your `configur opencv: classifier_group: - name: Detect Face + add_camera: True entity_id: - camera.front_door - camera.living_room @@ -44,6 +45,7 @@ opencv: Configuration variables: - **name** (*Required*): The name of the OpenCV image processor. +- **add_camera** (*Optional*): Whether a camera should be created to display the detected regions. - **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. - **classifier** (*Required*): The classification configuration for to be applied: - **file_path** (*Required*): The path to the HAARS or LBP classification file (xml). @@ -57,15 +59,6 @@ Once OpenCV is configured, it will create an `image_processing` entity for each ### {% linkable_title Camera %} -If you would like to see what your Home-Assistant is seeing, the OpenCV image processing platform will dispatch a signal `image_processing_{image_processor_name}`. - -There is a special camera, specifically for this: - -```yaml -camera: - - platform: dispatch - name: OpenCV Camera - signal: image_processing_detect_faces -``` +If you would like to see what your Home-Assistant is seeing, simply add the `add_camera: True` configuration line as seen above.. A new camera entity will be added to your Home-Assistant that will highlight the areas it has detected as a match. From a03d0791d436c9834ad0cf550e0227f9a560d697 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Mon, 1 May 2017 21:09:19 -0600 Subject: [PATCH 09/13] Add comment to example yaml --- source/_components/image_processing.opencv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index ac6433ebe085..8fcba4b38705 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -18,6 +18,7 @@ The `opencv` image processing platform allows you to create a standalone image p ### {% linkable_title Configuration Home Assistant %} ```yaml +# Example configuration.yaml entry opencv: - name: Detect Face entity_id: From 2ce8e78b0e4f7b93be59dab32331abb8ff30371a Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Mon, 1 May 2017 21:09:32 -0600 Subject: [PATCH 10/13] Update docs to reflect the camera not being there --- source/_components/opencv.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index e62a7d06e989..96ec9a4908b4 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Push" [OpenCV](https://www.opencv.org) is an open source computer vision image and video processing library. -Some pre-defined classifiers can be found here: http://alereimondo.no-ip.org/OpenCV/34 +Some pre-defined classifiers can be found here: https://github.com/opencv/opencv/tree/master/data ### {% linkable_title Configuration %} @@ -45,7 +45,7 @@ opencv: Configuration variables: - **name** (*Required*): The name of the OpenCV image processor. -- **add_camera** (*Optional*): Whether a camera should be created to display the detected regions. +- **add_camera** (*Optional*): Whether a camera should be created to display the detected regions. **SEE NOTE BELOW** - **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. - **classifier** (*Required*): The classification configuration for to be applied: - **file_path** (*Required*): The path to the HAARS or LBP classification file (xml). @@ -59,6 +59,6 @@ Once OpenCV is configured, it will create an `image_processing` entity for each ### {% linkable_title Camera %} -If you would like to see what your Home-Assistant is seeing, simply add the `add_camera: True` configuration line as seen above.. +If you would like to see what your Home-Assistant is seeing, simply adding the `add_camera: True` configuration line as seen above is not enough, you will need to copy [camera/opencv.py](https://gist.github.com/Teagan42/4e64b4f97680d468d7c06a4e985b3aac0) to your configuration directory: `.homeassistant/custom_components/camera/opencv.py` A new camera entity will be added to your Home-Assistant that will highlight the areas it has detected as a match. From f751de30b09b5274278db9f5a7999169fe21859c Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 3 May 2017 11:29:50 -0600 Subject: [PATCH 11/13] Better documentation on configuration and attributes --- source/_components/opencv.markdown | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index e62a7d06e989..5d975592472d 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -26,26 +26,27 @@ To setup OpenCV with Home Assistant, add the following section to your `configur opencv: classifier_group: - - name: Detect Face + - name: Family add_camera: True entity_id: - camera.front_door - camera.living_room classifier: - file_path: /path/to/classifier/face.xml - name: face + name: Bob - file_path: /path/to/classifier/face_profile.xml - name: face profile + name: Jill min_size: (20, 20) color: (255, 0, 0) scale: 1.6 neighbors: 5 + - file_path: /path/to/classifier/kid_face.xml + name: Little Jimmy ``` Configuration variables: - **name** (*Required*): The name of the OpenCV image processor. -- **add_camera** (*Optional*): Whether a camera should be created to display the detected regions. - **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. - **classifier** (*Required*): The classification configuration for to be applied: - **file_path** (*Required*): The path to the HAARS or LBP classification file (xml). @@ -57,8 +58,18 @@ Configuration variables: Once OpenCV is configured, it will create an `image_processing` entity for each classification group/camera entity combination as well as a camera so you can see what Home Assistant sees. -### {% linkable_title Camera %} +The attributes on the `image_processing` entity will be: -If you would like to see what your Home-Assistant is seeing, simply add the `add_camera: True` configuration line as seen above.. - -A new camera entity will be added to your Home-Assistant that will highlight the areas it has detected as a match. +```json +'matches': { + 'Bob': [ + (x, y, w, h) + ], + 'Jill': [ + (x, y, w, h) + ], + 'Little Jimmy': [ + (x, y, w, h) + ] +} +``` From e68950db14892618ea5fbf177f6141bcde885f76 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 3 May 2017 11:48:03 -0600 Subject: [PATCH 12/13] Reference hub --- .../image_processing.opencv.markdown | 29 +------------------ 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index ac6433ebe085..2b13f41ff187 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -15,31 +15,4 @@ ha_release: 0.38 The `opencv` image processing platform allows you to create a standalone image processor without the linked camera entity as mentioned in the [OpenCV page](https://home-assistant.io/components/opencv). -### {% linkable_title Configuration Home Assistant %} - -```yaml -opencv: - - name: Detect Face - entity_id: - - camera.front_door - - camera.living_room - classifier: - - file_path: /path/to/classifier/face.xml - name: face - - file_path: /path/to/classifier/face_profile.xml - name: face profile - min_size: (20, 20) - scale: 1.6 - neighbors: 5 -``` - -Configuration variables: - -- **name** (*Required*): The name of the OpenCV image processor. -- **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. -- **classifier** (*Optional*): The classification configuration for to be applied, if not specified, the following defaults will be applied: - - **file_path** (*Optional*): The path to the HAARS or LBP classification file (xml), the default is `lbp_frontalface.xml`. - - **name** (*Optional*): The classification name, the default is `Face`. - - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. - - **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`. - - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. +Please refer to the [component](/components/opencv/) configuration on how to setup the image processor. From 22e032a0a39c55e859751a05543fe834002305b9 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 3 May 2017 11:49:35 -0600 Subject: [PATCH 13/13] Set release --- source/_components/image_processing.opencv.markdown | 2 +- source/_components/opencv.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index 2b13f41ff187..9843c7e645a7 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -10,7 +10,7 @@ footer: true logo: OpenCV_Logo.png ha_category: Image Processing featured: false -ha_release: 0.38 +ha_release: 0.44 --- The `opencv` image processing platform allows you to create a standalone image processor without the linked camera entity as mentioned in the [OpenCV page](https://home-assistant.io/components/opencv). diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index 5d975592472d..3f1e01e8ce96 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: OpenCV_Logo.png ha_category: Hub -ha_release: 0.40 +ha_release: 0.44 ha_iot_class: "Local Push" ---