2021/11/16追記:より軽量なモデルに差し替えました(Raspberry Pi4:4桁の推論で15~20fps程度)
7セグメントディスプレイの数値を認識するプログラムです。
ローカルPC(CPU推論) or Raspberry Pi上での実行を想定しています。
本リポジトリは以下の内容を含みます。
- サンプルプログラム
- 7セグメント画像識別モデル(TF-Lite)
- 学習データ、および、学習用ノートブック
- OpenCV 3.4.2 or Later
- Tensorflow 2.4.1 or Later
- matplotlib 3.3.2 or Later
実行方法は以下です。
起動後、マウスで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
以下のデータを混合し、学習データ:検証データ = 3:1 で分割して使用
- 01.dataset
2種類の7セグメント表示器を撮影したデータセット
「0」~「9」「表示なし」のデータで約42,000枚 - Kazuhito00/7seg-image-generator
OpenCVの描画関数で疑似的に作成したデータセット
「0」~「9」「-」「表示なし」のデータで48,000枚
「01-01.train_model.ipynb」をJupyter Notebookで開いて上から順に実行してください。
Google Colaboratory上での実行を想定していますが、ローカルPCでも動作出来ると思います。
「01-01.train_model.ipynb」で用意しているモデルのイメージは以下です。
高橋かずひと(https://twitter.com/KzhtTkhs)
7segment-display-reader is under Apache v2 license.