Skip to content

Repository files navigation

PyTorch & OpenCV を用いた、霧箱における飛跡のリアルタイム分類

webcamera で霧箱内の映像を取得し、背景差分で飛跡を抽出したら、PyTorch で深層学習にかけて α 線と宇宙線の分類を行う

実行環境

  • Web Camera: Buffalo BSW500M
  • PC: NUC13ANKi5 (CPU: 13th Gen Intel(R) Core(TM) i5-1340P / 32GB)
  • Pythonの実行環境はrequirements.txtを参照。
  • venvの仮想環境を作成後、有効化してpip installを実行。
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

使い方

Step1: 学習データの作成

  • take_photo.py を実行し、学習に使う画像を撮影する。
  • 飛跡の見えていない状態で背景を撮影したら、飛跡の撮影を行うと飛跡部分を切り取った画像が image_data/tmp に保存される。
  • グレースケールした後で、背景画像との差分の絶対値にメディアンフィルターを適用し、ノイズ除去を行なった状態で二値化し、マスクをかける。このとき、Hough 変換によって直線検出されたものの一部が緑の枠に囲まれて表示される。
  • 液体窒素の霧箱を使う場合、背景画像は定期的に更新されるがペルチェ霧箱では背景画像を最初に撮影する。ペルチェ霧箱を使う場合はbranchを切り替えるように。
git checkout peltie



Step2: データのラベリング

  • 撮影した画像データに対して label_img.py を実行し、ラベル付けを行う。

  • ラベル付けされたデータは image_data/all/alpha (cosmic) に保存される。

Step3: PyTorchで学習

  • train_net.py を実行し、作ったデータをもとに学習を行う。

  • 学習済みのパラメーターは trained_net.ckpt に保存され、途中から学習を再開できる。

Step4: リアルタイム分類

  • realtime_classification.py を実行し、trained_net.ckpt での学習結果に基づいてリアルタイムでの分類を行う。

  • フリーズのおそれがあるため、実行に使用するコア数(デフォルト4)の変更を推奨

  • バッチサイズ (一度に検出する物体の数) の上限数によってはフリーズするおそれがあるので注意。

学習モデル

スクリーンショット 2025-01-10 22 04 05

参考

作成にあたり、以下の文献を参考にした。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages