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:
parent
53e6b8ade6
commit
1d60cccc21
8 changed files with 51 additions and 40 deletions
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue