-
-
Save Teagan42/bf4b941b34a79a3e184e149ff1efd82f to your computer and use it in GitHub Desktop.
| camera: | |
| - platform: opencv | |
| camera: camera.front_door | |
| processor: image_processing.front_door_opencv_faces | |
| # Optional Parameters | |
| name: OpenCV Camera |
| """ | |
| Camera that highlights the detected regions from the opencv image processor | |
| """ | |
| import asyncio | |
| import io | |
| import logging | |
| import os | |
| import voluptuous as vol | |
| from homeassistant.const import CONF_NAME | |
| from homeassistant.components.camera import Camera, PLATFORM_SCHEMA | |
| from homeassistant.helpers import config_validation as cv | |
| from homeassistant.components.image_processing.opencv import ATTR_MATCHES | |
| from homeassistant.loader import get_component | |
| _LOGGER = logging.getLogger(__name__) | |
| ATTR_CAMERA = 'camera_entity' | |
| ATTR_PROCESSOR = 'processor_entity' | |
| CONF_CAMERA = 'camera' | |
| CONF_COLOR = 'color' | |
| CONF_PROCESSOR = 'processor' | |
| CONF_CLASSIFIER = 'classifier' | |
| DEFAULT_COLOR = (255, 255, 0) | |
| DEFAULT_NAME = 'OpenCV' | |
| PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ | |
| vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, | |
| vol.Required(CONF_CAMERA): cv.entity_id, | |
| vol.Required(CONF_PROCESSOR): cv.entity_id, | |
| vol.Optional(CONF_CLASSIFIER, default=None): cv.string, | |
| vol.Optional(CONF_COLOR, default=DEFAULT_COLOR): (int, int, int) | |
| }) | |
| def setup_platform(hass, config, add_devices, discovery_info=None): | |
| """Set up the OpenCV camera platform.""" | |
| add_devices([OpenCVCamera(hass, config.get(CONF_NAME, DEFAULT_NAME), | |
| config[CONF_CAMERA], config[CONF_PROCESSOR], | |
| config[CONF_CLASSIFIER], config[CONF_COLOR])]) | |
| class OpenCVCamera(Camera): | |
| """Visual representation of opencv matched regions.""" | |
| def __init__(self, hass, name, camera, processor, classifier, color): | |
| """Initialize the opencv camera.""" | |
| super().__init__() | |
| self._hass = hass | |
| self._camera = camera | |
| self._processor = processor | |
| self._color = color | |
| self._name = name | |
| self._classifier = classifier | |
| @property | |
| def name(self): | |
| """Return the name of this camera.""" | |
| return self._name | |
| @property | |
| def state_attributes(self): | |
| """Return the device state attributes.""" | |
| return { | |
| ATTR_CAMERA: self._camera, | |
| ATTR_PROCESSOR: self._processor | |
| } | |
| @asyncio.coroutine | |
| def async_camera_image(self): | |
| """Return the camera image still.""" | |
| from PIL import Image, ImageDraw | |
| camera = get_component('camera') | |
| image = None | |
| processor = self._hass.states.get(self._processor) | |
| try: | |
| image = yield from camera.async_get_image( | |
| self._hass, self._camera, timeout=2) | |
| except HomeAssistantError as err: | |
| _LOGGER.error("Error on receive image from entity: %s", err) | |
| return | |
| matches = processor.attributes.get(ATTR_MATCHES) | |
| regions = [] | |
| if self._classifier is None: | |
| for key, value in matches.items(): | |
| for region in value: | |
| regions.append(region) | |
| elif self._classifier in matches: | |
| for region in matches[self._classifier]: | |
| regions.append(region) | |
| else: | |
| _LOGGER.error("Cannot locate classifier %s", self._classifier) | |
| return | |
| if len(regions) == 0: | |
| return image | |
| stream = io.BytesIO(image) | |
| im = Image.open(stream) | |
| annotated_image = ImageDraw.Draw(im) | |
| for region in regions: | |
| x0 = region[0] | |
| y0 = region[1] | |
| x1 = x0 + region[2] | |
| y1 = y0 + region[2] | |
| annotated_image.rectangle([x0, y0, x1, y1], | |
| outline=self._color) | |
| image_bytes = io.BytesIO() | |
| im.save(image_bytes, format='PNG') | |
| return image_bytes.getvalue() |
2018-08-29 16:03:20 ERROR (MainThread) [homeassistant.config] Invalid config for [camera.opencv]: string value is None for dictionary value @ data['classifier']. Got None. (See ?, line ?). Please check the docs at https://home-assistant.io/components/camera.opencv/
Did you manage to solve this problem? I get the same error message and cannot understand what I am doing wrong. All help would be appreciated
same problem...camera.opencv not found
Platform not found: image_processing.opencv Platform not found: camera.opencv
3:57 PM components/__init__.py (ERROR) - message first occured at 3:54 PM and shows up 3 times
Unable to find platform opencv. Search path was limited to path of component: custom_components
3:57 PM loader.py (ERROR) - message first occured at 3:53 PM and shows up 14 times
Please remove this platform from Home Assistant, because it is not working
Please read this and make the necessary changes....https://www.home-assistant.io/blog/2019/04/03/release-91/#notable-breaking-change
@klassnicolaas that doesn't help. Does the opencv.py need to be in something like "custom_components/opencv/sensor.py"? or custom_components/opencv/camera.py"? I've tried the following and none seem to work:
custom_components/opencv/sensor.py
custom_components/opencv/camera.py
custom_components/camera/opencv.py
custom_components/camera/sensor.py
Thoughts?
@klaasnicolass show us your setup
We have decide to remove the link on the documentation page.
The only pages in HA refering to open.cv:
https://www.home-assistant.io/components/image_processing.opencv/
But that's not enogh for us, I think... :-(
Why @Teagan42 not reflected the the comments???