Skip to content

7セグメントディスプレイの数値を認識するプログラム

License

Notifications You must be signed in to change notification settings

Kazuhito00/7segment-display-reader

Repository files navigation

2021/11/16追記:より軽量なモデルに差し替えました(Raspberry Pi4:4桁の推論で15~20fps程度)

7segment-display-reader

7セグメントディスプレイの数値を認識するプログラムです。
ローカルPC(CPU推論) or Raspberry Pi上での実行を想定しています。
 

本リポジトリは以下の内容を含みます。

  • サンプルプログラム
  • 7セグメント画像識別モデル(TF-Lite)
  • 学習データ、および、学習用ノートブック

Requirements

  • OpenCV 3.4.2 or Later
  • Tensorflow 2.4.1 or Later
  • matplotlib 3.3.2 or Later

Usage

実行方法は以下です。
起動後、マウスで4点(左上、右上、右下、左下の順)検出対象をクリックする

python 7seg-reader.py

実行時には、以下のオプションが指定可能です。
  • --device
    カメラデバイス番号の指定
    デフォルト:0
  • --width
    カメラキャプチャ時の横幅
    デフォルト:640
  • --height
    カメラキャプチャ時の縦幅
    デフォルト:480
  • --crop_width
    7セグメント画像1枚の切り抜き横幅
    デフォルト:96
  • --crop_height
    7セグメント画像1枚の切り抜き縦幅
    デフォルト:96
  • --num_digits
    7セグメントディスプレイの桁数
    デフォルト:4
  • --check_count
    7セグメント画像識別時に直近何回の数値をもとに判断するか
    指定数値を保持し、最多の数値を識別値とする
    デフォルト:5
  • --use_binarize
    7セグメント画像の識別時に2値化(大津の2値化)を使用するか否か
    デフォルト:指定なし
  • --use_binarize_inverse
    2値化を行う際に値を反転するか否か
    デフォルト:指定なし
  • --binarize_th
    2値化の閾値(0~255)を指定
    このオプションを指定した場合、大津の2値化ではなく単純2値化を実施
    デフォルト:None

Training

1.学習データ

以下のデータを混合し、学習データ:検証データ = 3:1 で分割して使用

  • 01.dataset
    2種類の7セグメント表示器を撮影したデータセット
    「0」~「9」「表示なし」のデータで約42,000枚
  • Kazuhito00/7seg-image-generator
    OpenCVの描画関数で疑似的に作成したデータセット
    「0」~「9」「-」「表示なし」のデータで48,000枚

2.モデル訓練

01-01.train_model.ipynb」をJupyter Notebookで開いて上から順に実行してください。
Google Colaboratory上での実行を想定していますが、ローカルPCでも動作出来ると思います。

X.モデル構造

01-01.train_model.ipynb」で用意しているモデルのイメージは以下です。

Author

高橋かずひと(https://twitter.com/KzhtTkhs)

License

7segment-display-reader is under Apache v2 license.

About

7セグメントディスプレイの数値を認識するプログラム

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published