本来なら前回のSupabase記事の続きを書こうと思ったのですが、GitHubに公開しているPythonアプリがあるので、今回はそちらを紹介しようと思います。
タイトルの通り、今回は
Python、Flask、OpenCV
を使ったQR勤怠管理システムです。
OpenCVを選んだ理由
QRコードを読み取る方法はいくつかあります。
GoogleやAmazonなどのクラウドサービスを利用する方法もありますが、今回はOpenCVを使いました。
大きな理由は無料なのと、リスク管理です。
APIキーは便利ですが、漏洩リスクもゼロではありません。
今回はローカル環境で完結するアプリだったので、OpenCVを採用しました。
システム概要
実際に作ってみたものの、このアプリは説明するのが結構難しいです。
理由は画面が3つに分かれているからです。
まずは全体の流れを簡単に説明します。
利用者は事前に発行されたQRコードを持っています。
そのQRコードをパソコンやタブレットのカメラで読み取ることで、入退場記録を行います。
流れとしてはこんな感じです。
利用者
↓
QRコードを提示
↓
カメラで読み取り
↓
OpenCVで解析
↓
Flaskで処理
↓
SQLiteへ保存
OpenCVはQRコードの読取部分で使用しています。
管理画面では、
利用者管理
入退場履歴の確認
QRコード発行
などを行います。
入場管理画面

利用者がQRコードを読み込ませて入場記録を行う画面です。
なぜ入場と退場を分けたのか
最初は1つの画面で入場・退場の両方を管理することも考えました。
ただ、それだと二重打刻の制御が複雑になると思いました。
そこで、
入場専用画面、退場専用画面
に分けることにしました。
(あとこれだけ色が違ったら、間違えたなんてこともないでしょ)
利用者はカメラ起動ボタンを押してQRコードを読み込ませるだけです。
今後の課題
現状でも勤怠記録はできますが、改善したい部分もあります。
例えば、
重複打刻の防止
警告表示の追加
利用者数が増えた場合の運用方法
などです。
現在は同じ利用者が何度もQRコードを読み込むと、そのまま記録されてしまいます。
実運用を考えるなら、
入場
↓
退場
↓
入場
という流れを管理し、
入場中の利用者が再度入場しようとした場合は警告を出す仕組みが必要だと考えています。
まとめ
今回はPython、Flask、OpenCVを使ってQR勤怠管理システムを作ってみました。
作る前は「QRコードを読み取って保存するだけ」と思っていましたが、実際にはデータベース設計や画面構成など考えることが多く、思った以上に大変でした。
ただ、その分Python・Flask・OpenCVを使ったアプリ開発の経験を積むことができたと思います。
ソースコードはGitHubで公開しています。
興味のある方は見ていただければと思います。

