LoginSignup
4
10

More than 3 years have passed since last update.

ssocrで7セグメントディスプレイを認識する

Last updated at Posted at 2019-04-21

概要

動機

世の中の計測器の数値(7セグメントディスプレイ)をwebカメラとかでネットワークにつないで送ることができればどんな計測器もIoTっぽくてわきるなーと思って試しました。

ソース

使い方

Dockerイメージのビルド

docker-compose build

テストイメージを認識させる

./images/test_22.jpg .
test_22.jpg

docker-compose run ssocr
root@xxxxxxxx:/app# ssocr -d-1 ./images/test_22.jpg -D./images/temp.png -t 30
22

22と認識されました。成功です!
中間ファイル ./images/temp.png をみるとたしかにいい感じに文字を区切ってくれているようです。
temp.png

Dockerfile

Dockerfileは How to recognize Seven Segment Displays content with ssocr (Seven Segment Optical Character Recognition) in Ubuntu 16.04 を元に作成しました。

FROM ubuntu
RUN apt-get update -qq &&\
    apt-get install -y git libx11-dev libimlib2-dev
RUN git clone https://github.com/auerswal/ssocr.git &&\
    cd ssocr &&\
    make &&\
    mv ./ssocr /usr/local/bin/ssocr
RUN mkdir /app
WORKDIR /app
COPY . /app

必要なライブラリを落としてきて、makeするだけです。

所感

  • 画像をうまく2値化できればかなり精度良く認識してくれます。
    • 7セグメントディスプレイの計測器を固定webカメラで移して、2値化処理条件をきりきりに詰められれば、ssocrはかなり有効だと思います
  • ただ、一方、ちょっと光の加減が変わったりすると2値化ができず認識も失敗します ( 参考 ネットワークカメラを用いた学内消費電力可視化の試み - 鳴門教育大学

    • 今回のテストイメージももうちょっといい感じのやつ 123 の画像を用意しようとと思ってのですが、光の加減でうまく端が2値化失敗するので、妥協してうまくいったものを使いました。
  • 一方撮影条件が多様なら、7セグメントディスプレイを学習させるような方法を考えるべきだと思います

    • 小数点を考えなければ、各数字毎に10枚程度の画像を適当に用意してやれば(ん??どうやって)いいので、 Cloud AutoML Vision Object Detection でやってみようかと思います。
    • もしくは AWS textractがOCRに強そうなのでうまくやってくれないかなーと期待しています。

以上

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10