Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ omit =
homeassistant/components/image_processing/dlib_face_identify.py
homeassistant/components/image_processing/seven_segments.py
homeassistant/components/image_processing/tensorflow.py
homeassistant/components/image_processing/qrcode.py
homeassistant/components/keyboard_remote.py
homeassistant/components/keyboard.py
homeassistant/components/light/avion.py
Expand Down
69 changes: 69 additions & 0 deletions homeassistant/components/image_processing/qrcode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""
Support for the QR image processing.

For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/image_processing.qr/
"""
from homeassistant.core import split_entity_id
from homeassistant.components.image_processing import (
ImageProcessingEntity, CONF_SOURCE, CONF_ENTITY_ID, CONF_NAME)

REQUIREMENTS = ['pyzbar==0.1.7', 'pillow==5.4.1']


def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the demo image processing platform."""
# pylint: disable=unused-argument
entities = []
for camera in config[CONF_SOURCE]:
entities.append(QrEntity(
camera[CONF_ENTITY_ID], camera.get(CONF_NAME)
))

add_entities(entities)


class QrEntity(ImageProcessingEntity):
"""QR image processing entity."""

def __init__(self, camera_entity, name):
"""Initialize QR image processing entity."""
super().__init__()

self._camera = camera_entity
if name:
self._name = name
else:
self._name = "QR {0}".format(
split_entity_id(camera_entity)[1])
self._state = None

@property
def camera_entity(self):
"""Return camera entity id from process pictures."""
return self._camera

@property
def state(self):
"""Return the state of the entity."""
return self._state

@property
def name(self):
"""Return the name of the entity."""
return self._name

def process_image(self, image):
"""Process image."""
import io
from pyzbar import pyzbar
from PIL import Image

stream = io.BytesIO(image)
img = Image.open(stream)

barcodes = pyzbar.decode(img)
if barcodes:
self._state = barcodes[0].data.decode("utf-8")
else:
self._state = None
4 changes: 4 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,7 @@ piglow==1.2.4
pilight==0.1.1

# homeassistant.components.camera.proxy
# homeassistant.components.image_processing.qrcode
# homeassistant.components.image_processing.tensorflow
pillow==5.4.1

Expand Down Expand Up @@ -1397,6 +1398,9 @@ pyxeoma==1.4.0
# homeassistant.components.zabbix
pyzabbix==0.7.4

# homeassistant.components.image_processing.qrcode
pyzbar==0.1.7

# homeassistant.components.sensor.qnap
qnapstats==0.2.7

Expand Down