1 """Optical character recognition processing of seven segments displays."""
3 from __future__
import annotations
11 import voluptuous
as vol
14 PLATFORM_SCHEMA
as IMAGE_PROCESSING_PLATFORM_SCHEMA,
15 ImageProcessingDeviceClass,
16 ImageProcessingEntity,
24 _LOGGER = logging.getLogger(__name__)
26 CONF_DIGITS =
"digits"
27 CONF_EXTRA_ARGUMENTS =
"extra_arguments"
28 CONF_HEIGHT =
"height"
29 CONF_ROTATE =
"rotate"
30 CONF_SSOCR_BIN =
"ssocr_bin"
31 CONF_THRESHOLD =
"threshold"
33 CONF_X_POS =
"x_position"
34 CONF_Y_POS =
"y_position"
36 DEFAULT_BINARY =
"ssocr"
38 PLATFORM_SCHEMA = IMAGE_PROCESSING_PLATFORM_SCHEMA.extend(
40 vol.Optional(CONF_EXTRA_ARGUMENTS, default=
""): cv.string,
41 vol.Optional(CONF_DIGITS): cv.positive_int,
42 vol.Optional(CONF_HEIGHT, default=0): cv.positive_int,
43 vol.Optional(CONF_SSOCR_BIN, default=DEFAULT_BINARY): cv.string,
44 vol.Optional(CONF_THRESHOLD, default=0): cv.positive_int,
45 vol.Optional(CONF_ROTATE, default=0): cv.positive_int,
46 vol.Optional(CONF_WIDTH, default=0): cv.positive_int,
47 vol.Optional(CONF_X_POS, default=0): cv.string,
48 vol.Optional(CONF_Y_POS, default=0): cv.positive_int,
56 async_add_entities: AddEntitiesCallback,
57 discovery_info: DiscoveryInfoType |
None =
None,
59 """Set up the Seven segments OCR platform."""
62 hass, camera[CONF_ENTITY_ID], config, camera.get(CONF_NAME)
64 for camera
in config[CONF_SOURCE]
69 """Representation of the seven segments OCR image processing entity."""
71 _attr_device_class = ImageProcessingDeviceClass.OCR
73 def __init__(self, hass, camera_entity, config, name):
74 """Initialize seven segments processing."""
80 self.
_name_name = f
"SevenSegment OCR {split_entity_id(camera_entity)[1]}"
85 f
"ssocr-{self._name.replace(' ', '_')}.png",
89 str(config[CONF_X_POS]),
90 str(config[CONF_Y_POS]),
91 str(config[CONF_WIDTH]),
92 str(config[CONF_HEIGHT]),
94 digits = [
"-d",
str(config.get(CONF_DIGITS, -1))]
95 rotate = [
"rotate",
str(config[CONF_ROTATE])]
96 threshold = [
"-t",
str(config[CONF_THRESHOLD])]
97 extra_arguments = config[CONF_EXTRA_ARGUMENTS].split(
" ")
100 config[CONF_SSOCR_BIN],
111 """Return camera entity id from process pictures."""
116 """Return the name of the image processor."""
117 return self.
_name_name
121 """Return the state of the entity."""
125 """Process the image."""
126 stream = io.BytesIO(image)
127 img = Image.open(stream)
128 img.save(self.
filepathfilepath,
"png")
130 with subprocess.Popen(
132 stdout=subprocess.PIPE,
133 stderr=subprocess.PIPE,
136 out = ocr.communicate()
138 self.
_state_state = out[0].strip().decode(
"utf-8")
142 "Unable to detect value: %s", out[1].strip().decode(
"utf-8")
def __init__(self, hass, camera_entity, config, name)
def process_image(self, image)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)