Seven Segments OCR

The seven_segments image processing integrationIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] allows you to read physical seven segments displays through Home Assistant. ssocr is used to extract the value shown on the display which is observed by a camera.

Notes for Home Assistant Core Installations

ssocr needs to be available on your system. Check the installation instruction below:

sudo dnf -y install imlib2-devel # Fedora
sudo apt install libimlib2-dev # Ubuntu
brew install imlib2 # macOS
git clone https://github.com/auerswal/ssocr.git
cd ssocr
make
sudo make PREFIX=/usr install # On most systems
make deb # (Optional) This allows you to make a deb so that you apt is aware of ssocr

Configuration

To enable the OCR of a seven segment display in your installation, add the following to your configuration.yamlThe configuration.yaml file is the main configuration file for Home Assistant. It lists the integrations to be loaded and their specific configurations. In some cases, the configuration needs to be edited manually directly in the configuration.yaml file. Most integrations can be configured in the UI. [Learn more] file. After changing the configuration.yamlThe configuration.yaml file is the main configuration file for Home Assistant. It lists the integrations to be loaded and their specific configurations. In some cases, the configuration needs to be edited manually directly in the configuration.yaml file. Most integrations can be configured in the UI. [Learn more] file, restart Home Assistant to apply the changes.

# Example configuration.yaml entry
image_processing:
  - platform: seven_segments
    source:
      - entity_id: camera.seven_segments

Configuration Variables

ssocr_bin string (Optional, default: ssocr)

The command line tool ssocr. Set it if you use a different name for the executable.

x_position integer (Optional, default: 0)

X coordinate of the upper left corner of the area to crop.

y_position integer (Optional, default: 0)

Y coordinate of the upper left corner of the area to crop.

height integer (Optional, default: 0)

Height of the area to crop.

width integer (Optional, default: 0)

Width of the area to crop.

rotate integer (Optional, default: 0)

Rotation of the image.

threshold integer (Optional, default: 0)

Threshold for the difference between the digits and the background.

digits integer (Optional, default: -1)

Number of digits in the display.

extra_arguments string (Optional)

Other arguments to use. Like -D, dilation, erosion, greyscale, make_mono, etc.

source list Required

List of image sources.

entity_id string Required

A camera entity id to get picture from.

name string (Optional)

This parameter allows you to override the name of your image_processing entity.

Setup process

It’s suggested that the first attempt to determine the needed parameters is using ssocr directly. This may require a couple of iterations to get the result

ssocr -D erosion crop 390 250 490 280 -t 20 -d 4 seven-seg.png

This would lead to the following entry for the configuration.yamlThe configuration.yaml file is the main configuration file for Home Assistant. It lists the integrations to be loaded and their specific configurations. In some cases, the configuration needs to be edited manually directly in the configuration.yaml file. Most integrations can be configured in the UI. [Learn more] file:

camera:
  - platform: local_file
    file_path: /home/homeassistant/.homeassistant/seven-seg.png
    name: seven_segments
image_processing:
  - platform: seven_segments
    x_position: 390
    y_position: 250
    height: 280
    width: 490
    threshold: 20
    digits: 4
    source:
      - entity_id: camera.seven_segments

With the help of a template sensor, the value can be shown as badge.

sensor:
  - platform: template
    sensors:
      power_meter:
        value_template: "{{ states('image_processing.sevensegment_ocr_seven_segments') }}"
        friendly_name: "Ampere"
        unit_of_measurement: "A"