Home Assistant Unofficial Reference 2024.12.1
image_processing.py
Go to the documentation of this file.
1 """Support for the QR code image processing."""
2 
3 from __future__ import annotations
4 
5 import io
6 
7 from PIL import Image
8 from pyzbar import pyzbar
9 
10 from homeassistant.components.image_processing import ImageProcessingEntity
11 from homeassistant.const import CONF_ENTITY_ID, CONF_NAME, CONF_SOURCE
12 from homeassistant.core import HomeAssistant, split_entity_id
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
15 
16 
18  hass: HomeAssistant,
19  config: ConfigType,
20  add_entities: AddEntitiesCallback,
21  discovery_info: DiscoveryInfoType | None = None,
22 ) -> None:
23  """Set up the QR code image processing platform."""
25  QrEntity(camera[CONF_ENTITY_ID], camera.get(CONF_NAME))
26  for camera in config[CONF_SOURCE]
27  )
28 
29 
31  """A QR image processing entity."""
32 
33  def __init__(self, camera_entity, name):
34  """Initialize QR image processing entity."""
35  super().__init__()
36 
37  self._camera_camera = camera_entity
38  if name:
39  self._name_name = name
40  else:
41  self._name_name = f"QR {split_entity_id(camera_entity)[1]}"
42  self._state_state = None
43 
44  @property
45  def camera_entity(self):
46  """Return camera entity id from process pictures."""
47  return self._camera_camera
48 
49  @property
50  def state(self):
51  """Return the state of the entity."""
52  return self._state_state
53 
54  @property
55  def name(self):
56  """Return the name of the entity."""
57  return self._name_name
58 
59  def process_image(self, image):
60  """Process image."""
61  stream = io.BytesIO(image)
62  img = Image.open(stream)
63 
64  barcodes = pyzbar.decode(img)
65  if barcodes:
66  self._state_state = barcodes[0].data.decode("utf-8")
67  else:
68  self._state_state = None
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)