diff --git a/homeassistant/components/opencv.py b/homeassistant/components/opencv.py index 9f53f0841a1..ef901b3d797 100644 --- a/homeassistant/components/opencv.py +++ b/homeassistant/components/opencv.py @@ -4,11 +4,12 @@ Support for OpenCV image/video processing. For more details about this component, please refer to the documentation at https://home-assistant.io/components/opencv/ """ -import asyncio import logging import os import voluptuous as vol +import requests + from homeassistant.const import ( CONF_NAME, CONF_ENTITY_ID, @@ -19,7 +20,7 @@ from homeassistant.helpers import ( config_validation as cv, ) -REQUIREMENTS = ['opencv-python==3.2.0.6', 'numpy==1.12.0', 'urllib3==1.21'] +REQUIREMENTS = ['opencv-python==3.2.0.6', 'numpy==1.12.0'] _LOGGER = logging.getLogger(__name__) @@ -41,9 +42,7 @@ CONF_SCALE = 'scale' DATA_CLASSIFIER_GROUPS = 'classifier_groups' DEFAULT_COLOR = (255, 255, 0) -DEFAULT_CLASSIFIER_PATH = os.path.join( - os.path.dirname(BASE_PATH), - 'lbp_frontalface.xml') +DEFAULT_CLASSIFIER_PATH = 'lbp_frontalface.xml' DEFAULT_NAME = 'OpenCV' DEFAULT_MIN_SIZE = (30, 30) DEFAULT_NEIGHBORS = 4 @@ -57,8 +56,7 @@ CLASSIFIER_GROUP_CONFIG = { [vol.Schema({ vol.Optional(CONF_COLOR, default=DEFAULT_COLOR): vol.Schema((int, int, int)), - vol.Optional(CONF_FILE_PATH, default=DEFAULT_CLASSIFIER_PATH): - cv.isfile, + vol.Optional(CONF_FILE_PATH, default=None): cv.isfile, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_MIN_SIZE, default=DEFAULT_MIN_SIZE): @@ -156,27 +154,30 @@ def process_image(image, classifier_group, is_camera): return group_matches -@asyncio.coroutine -def async_setup(hass, config): +def setup(hass, config): """Set up the OpenCV platform entities.""" - _LOGGER.info('Async setup for opencv') - if not os.path.isfile(DEFAULT_CLASSIFIER_PATH): + default_classifier = hass.config.path(DEFAULT_CLASSIFIER_PATH) + + if not os.path.isfile(default_classifier): _LOGGER.info('Downloading default classifier') - import urllib3 - http = urllib3.PoolManager() - request = http.request('GET', CASCADE_URL, preload_content=False) - - with open(DEFAULT_CLASSIFIER_PATH, 'wb') as out: - while True: - data = request.read(1028) - if not data: - break - out.write(data) - - request.release_conn() + r_class = requests.get(CASCADE_URL, stream=True) + with open(default_classifier, 'wb') as f_class: + for chunk in r_class.iter_content(chunk_size=1024): + if chunk: # filter out keep-alive new chunks + f_class.write(chunk) for group in config[DOMAIN][CONF_GROUPS]: - discovery.load_platform(hass, 'image_processing', DOMAIN, group) + grp = {} + + for classifier, config in group.items(): + config = dict(config) + + if config[CONF_FILE_PATH] is None: + config[CONF_FILE_PATH] = default_classifier + + grp[classifier] = config + + discovery.load_platform(hass, 'image_processing', DOMAIN, grp) return True diff --git a/requirements_all.txt b/requirements_all.txt index 2208fde8f18..1bf94e548c8 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -808,9 +808,6 @@ uber_rides==0.4.1 # homeassistant.components.sensor.ups upsmychoice==1.0.2 -# homeassistant.components.opencv -urllib3==1.21 - # homeassistant.components.camera.uvc uvcclient==0.10.0