概要
- いわゆる 7セグメントディスプレイ (7 segment display) の写真から数字の画像認識をやりたくて、そのためのバイナリ ssocrを試すためのDockerfileです。
- なお、google cloud vision と AWS rekognition もどちらも 7セグメントディスプレイの文字を 全く認識してくれません。このあたりはわざと認識しないようにしているのかな。
動機
世の中の計測器の数値(7セグメントディスプレイ)をwebカメラとかでネットワークにつないで送ることができればどんな計測器もIoTっぽくてわきるなーと思って試しました。
ソース
使い方
Dockerイメージのビルド
docker-compose build
テストイメージを認識させる
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
をみるとたしかにいい感じに文字を区切ってくれているようです。
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に強そうなのでうまくやってくれないかなーと期待しています。
- 小数点を考えなければ、各数字毎に10枚程度の画像を適当に用意してやれば(ん??どうやって)いいので、
以上