Put draw_box in image_processing (#26712)

* Put draw_box in image_processing

* Update draw_box

* Update __init__.py

* run isort

* Fix lints

* Update __init__.py

* Update requirements_all.txt

* Adds type hints

* Update gen_requirements_all.py

* Update requirements_test_all.txt

* rerun script/gen_requirements_all.py

* Change Pillow to pillow

* Update manifest.json

* Run script/gen_requirements_all.py
This commit is contained in:
Robin 2019-09-24 11:09:16 +01:00 committed by Pascal Vizeli
parent 53e6b8ade6
commit 1d60cccc21
8 changed files with 51 additions and 40 deletions

View File

@ -14,6 +14,7 @@ from homeassistant.components.image_processing import (
CONF_SOURCE,
PLATFORM_SCHEMA,
ImageProcessingEntity,
draw_box,
)
from homeassistant.core import split_entity_id
from homeassistant.helpers import template
@ -68,24 +69,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
)
def draw_box(draw, box, img_width, img_height, text="", color=(255, 255, 0)):
"""Draw bounding box on image."""
ymin, xmin, ymax, xmax = box
(left, right, top, bottom) = (
xmin * img_width,
xmax * img_width,
ymin * img_height,
ymax * img_height,
)
draw.line(
[(left, top), (left, bottom), (right, bottom), (right, top), (left, top)],
width=5,
fill=color,
)
if text:
draw.text((left, abs(top - 15)), text, fill=color)
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Doods client."""
url = config[CONF_URL]

View File

@ -2,7 +2,9 @@
import asyncio
from datetime import timedelta
import logging
from typing import Tuple
from PIL import ImageDraw
import voluptuous as vol
from homeassistant.const import ATTR_ENTITY_ID, ATTR_NAME, CONF_ENTITY_ID, CONF_NAME
@ -14,7 +16,6 @@ from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.util.async_ import run_callback_threadsafe
# mypy: allow-untyped-defs, no-check-untyped-defs
_LOGGER = logging.getLogger(__name__)
@ -64,6 +65,43 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend(
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 = 5
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)), text, fill=color)
async def async_setup(hass, config):
"""Set up the image processing."""
component = EntityComponent(_LOGGER, DOMAIN, hass, SCAN_INTERVAL)

View File

@ -2,7 +2,9 @@
"domain": "image_processing",
"name": "Image processing",
"documentation": "https://www.home-assistant.io/components/image_processing",
"requirements": [],
"requirements": [
"pillow==6.1.0"
],
"dependencies": [
"camera"
],

View File

@ -12,6 +12,7 @@ from homeassistant.components.image_processing import (
CONF_SOURCE,
PLATFORM_SCHEMA,
ImageProcessingEntity,
draw_box,
)
from homeassistant.core import split_entity_id
from homeassistant.helpers import template
@ -67,24 +68,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
)
def draw_box(draw, box, img_width, img_height, text="", color=(255, 255, 0)):
"""Draw bounding box on image."""
ymin, xmin, ymax, xmax = box
(left, right, top, bottom) = (
xmin * img_width,
xmax * img_width,
ymin * img_height,
ymax * img_height,
)
draw.line(
[(left, top), (left, bottom), (right, bottom), (right, top), (left, top)],
width=5,
fill=color,
)
if text:
draw.text((left, abs(top - 15)), text, fill=color)
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the TensorFlow image processing platform."""
model_config = config.get(CONF_MODEL)

View File

@ -5,7 +5,6 @@
"requirements": [
"tensorflow==1.13.2",
"numpy==1.17.1",
"pillow==6.1.0",
"protobuf==3.6.1"
],
"dependencies": [],

View File

@ -950,9 +950,9 @@ piglow==1.2.4
# homeassistant.components.pilight
pilight==0.1.1
# homeassistant.components.image_processing
# homeassistant.components.proxy
# homeassistant.components.qrcode
# homeassistant.components.tensorflow
pillow==6.1.0
# homeassistant.components.dominos

View File

@ -252,6 +252,11 @@ pexpect==4.6.0
# homeassistant.components.pilight
pilight==0.1.1
# homeassistant.components.image_processing
# homeassistant.components.proxy
# homeassistant.components.qrcode
pillow==6.1.0
# homeassistant.components.plex
plexapi==3.0.6

View File

@ -111,6 +111,7 @@ TEST_REQUIREMENTS = (
"paho-mqtt",
"pexpect",
"pilight",
"pillow",
"plexapi",
"pmsensor",
"prometheus_client",