Remove requirement from entity integration (#30113)

This commit is contained in:
Paulus Schoutsen 2019-12-22 10:32:42 +01:00 committed by GitHub
parent 63a843c19c
commit 32aae7017e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 67 additions and 66 deletions

View File

@ -14,12 +14,12 @@ from homeassistant.components.image_processing import (
CONF_SOURCE, CONF_SOURCE,
PLATFORM_SCHEMA, PLATFORM_SCHEMA,
ImageProcessingEntity, ImageProcessingEntity,
draw_box,
) )
from homeassistant.const import CONF_TIMEOUT from homeassistant.const import CONF_TIMEOUT
from homeassistant.core import split_entity_id from homeassistant.core import split_entity_id
from homeassistant.helpers import template from homeassistant.helpers import template
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.util.pil import draw_box
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)

View File

@ -1,10 +1,8 @@
{ {
"domain": "doods", "domain": "doods",
"name": "DOODS - Distributed Outside Object Detection Service", "name": "DOODS - Distributed Outside Object Detection Service",
"documentation": "https://www.home-assistant.io/integrations/doods", "documentation": "https://www.home-assistant.io/integrations/doods",
"requirements": [ "requirements": ["pydoods==1.0.2", "pillow==6.2.1"],
"pydoods==1.0.2" "dependencies": [],
], "codeowners": []
"dependencies": [],
"codeowners": []
} }

View File

@ -2,9 +2,7 @@
import asyncio import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
from typing import Tuple
from PIL import ImageDraw
import voluptuous as vol import voluptuous as vol
from homeassistant.const import ATTR_ENTITY_ID, ATTR_NAME, CONF_ENTITY_ID, CONF_NAME from homeassistant.const import ATTR_ENTITY_ID, ATTR_NAME, CONF_ENTITY_ID, CONF_NAME
@ -65,46 +63,6 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA_BASE = cv.PLATFORM_SCHEMA_BASE.extend(PLATFORM_SCHEMA.schema) PLATFORM_SCHEMA_BASE = cv.PLATFORM_SCHEMA_BASE.extend(PLATFORM_SCHEMA.schema)
def draw_box(
draw: ImageDraw,
box: Tuple[float, float, float, float],
img_width: int,
img_height: int,
text: str = "",
color: Tuple[int, int, int] = (255, 255, 0),
) -> None:
"""
Draw a bounding box on and image.
The bounding box is defined by the tuple (y_min, x_min, y_max, x_max)
where the coordinates are floats in the range [0.0, 1.0] and
relative to the width and height of the image.
For example, if an image is 100 x 200 pixels (height x width) and the bounding
box is `(0.1, 0.2, 0.5, 0.9)`, the upper-left and bottom-right coordinates of
the bounding box will be `(40, 10)` to `(180, 50)` (in (x,y) coordinates).
"""
line_width = 3
font_height = 8
y_min, x_min, y_max, x_max = box
(left, right, top, bottom) = (
x_min * img_width,
x_max * img_width,
y_min * img_height,
y_max * img_height,
)
draw.line(
[(left, top), (left, bottom), (right, bottom), (right, top), (left, top)],
width=line_width,
fill=color,
)
if text:
draw.text(
(left + line_width, abs(top - line_width - font_height)), text, fill=color
)
async def async_setup(hass, config): async def async_setup(hass, config):
"""Set up the image processing.""" """Set up the image processing."""
component = EntityComponent(_LOGGER, DOMAIN, hass, SCAN_INTERVAL) component = EntityComponent(_LOGGER, DOMAIN, hass, SCAN_INTERVAL)

View File

@ -2,11 +2,7 @@
"domain": "image_processing", "domain": "image_processing",
"name": "Image processing", "name": "Image processing",
"documentation": "https://www.home-assistant.io/integrations/image_processing", "documentation": "https://www.home-assistant.io/integrations/image_processing",
"requirements": [ "requirements": [],
"pillow==6.2.1" "dependencies": ["camera"],
],
"dependencies": [
"camera"
],
"codeowners": [] "codeowners": []
} }

View File

@ -2,7 +2,7 @@
"domain": "seven_segments", "domain": "seven_segments",
"name": "Seven segments", "name": "Seven segments",
"documentation": "https://www.home-assistant.io/integrations/seven_segments", "documentation": "https://www.home-assistant.io/integrations/seven_segments",
"requirements": [], "requirements": ["pillow==6.2.1"],
"dependencies": [], "dependencies": [],
"codeowners": [] "codeowners": []
} }

View File

@ -15,11 +15,11 @@ from homeassistant.components.image_processing import (
CONF_SOURCE, CONF_SOURCE,
PLATFORM_SCHEMA, PLATFORM_SCHEMA,
ImageProcessingEntity, ImageProcessingEntity,
draw_box,
) )
from homeassistant.core import split_entity_id from homeassistant.core import split_entity_id
from homeassistant.helpers import template from homeassistant.helpers import template
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.util.pil import draw_box
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)

View File

@ -2,7 +2,12 @@
"domain": "tensorflow", "domain": "tensorflow",
"name": "Tensorflow", "name": "Tensorflow",
"documentation": "https://www.home-assistant.io/integrations/tensorflow", "documentation": "https://www.home-assistant.io/integrations/tensorflow",
"requirements": ["tensorflow==1.13.2", "numpy==1.17.4", "protobuf==3.6.1"], "requirements": [
"tensorflow==1.13.2",
"numpy==1.17.4",
"protobuf==3.6.1",
"pillow==6.2.1"
],
"dependencies": [], "dependencies": [],
"codeowners": [] "codeowners": []
} }

47
homeassistant/util/pil.py Normal file
View File

@ -0,0 +1,47 @@
"""PIL utilities.
Can only be used by integrations that have pillow in their requirements.
"""
from typing import Tuple
from PIL import ImageDraw
def draw_box(
draw: ImageDraw,
box: Tuple[float, float, float, float],
img_width: int,
img_height: int,
text: str = "",
color: Tuple[int, int, int] = (255, 255, 0),
) -> None:
"""
Draw a bounding box on and image.
The bounding box is defined by the tuple (y_min, x_min, y_max, x_max)
where the coordinates are floats in the range [0.0, 1.0] and
relative to the width and height of the image.
For example, if an image is 100 x 200 pixels (height x width) and the bounding
box is `(0.1, 0.2, 0.5, 0.9)`, the upper-left and bottom-right coordinates of
the bounding box will be `(40, 10)` to `(180, 50)` (in (x,y) coordinates).
"""
line_width = 3
font_height = 8
y_min, x_min, y_max, x_max = box
(left, right, top, bottom) = (
x_min * img_width,
x_max * img_width,
y_min * img_height,
y_max * img_height,
)
draw.line(
[(left, top), (left, bottom), (right, bottom), (right, top), (left, top)],
width=line_width,
fill=color,
)
if text:
draw.text(
(left + line_width, abs(top - line_width - font_height)), text, fill=color
)

View File

@ -982,9 +982,11 @@ piglow==1.2.4
# homeassistant.components.pilight # homeassistant.components.pilight
pilight==0.1.1 pilight==0.1.1
# homeassistant.components.image_processing # homeassistant.components.doods
# homeassistant.components.proxy # homeassistant.components.proxy
# homeassistant.components.qrcode # homeassistant.components.qrcode
# homeassistant.components.seven_segments
# homeassistant.components.tensorflow
pillow==6.2.1 pillow==6.2.1
# homeassistant.components.dominos # homeassistant.components.dominos

View File

@ -323,11 +323,6 @@ pexpect==4.6.0
# homeassistant.components.pilight # homeassistant.components.pilight
pilight==0.1.1 pilight==0.1.1
# homeassistant.components.image_processing
# homeassistant.components.proxy
# homeassistant.components.qrcode
pillow==6.2.1
# homeassistant.components.plex # homeassistant.components.plex
plexapi==3.3.0 plexapi==3.3.0