0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python + Flask + OpenCVでQR勤怠管理システムを作ってみた

0
Posted at

本来なら前回のSupabase記事の続きを書こうと思ったのですが、GitHubに公開しているPythonアプリがあるので、今回はそちらを紹介しようと思います。

タイトルの通り、今回は

Python、Flask、OpenCV

を使ったQR勤怠管理システムです。

OpenCVを選んだ理由

QRコードを読み取る方法はいくつかあります。

GoogleやAmazonなどのクラウドサービスを利用する方法もありますが、今回はOpenCVを使いました。

大きな理由は無料なのと、リスク管理です。
APIキーは便利ですが、漏洩リスクもゼロではありません。

今回はローカル環境で完結するアプリだったので、OpenCVを採用しました。

システム概要

実際に作ってみたものの、このアプリは説明するのが結構難しいです。

理由は画面が3つに分かれているからです。

まずは全体の流れを簡単に説明します。

利用者は事前に発行されたQRコードを持っています。

そのQRコードをパソコンやタブレットのカメラで読み取ることで、入退場記録を行います。

流れとしてはこんな感じです。

利用者

QRコードを提示

カメラで読み取り

OpenCVで解析

Flaskで処理

SQLiteへ保存

OpenCVはQRコードの読取部分で使用しています。

画面構成
管理画面
dashboard.png

管理画面では、

利用者管理
入退場履歴の確認
QRコード発行

などを行います。

入場管理画面
inbound_ui.png
利用者がQRコードを読み込ませて入場記録を行う画面です。

退場管理画面
outbound_ui.png
こちらは退場記録専用の画面です。

なぜ入場と退場を分けたのか

最初は1つの画面で入場・退場の両方を管理することも考えました。

ただ、それだと二重打刻の制御が複雑になると思いました。

そこで、

入場専用画面、退場専用画面

に分けることにしました。
(あとこれだけ色が違ったら、間違えたなんてこともないでしょ)
利用者はカメラ起動ボタンを押してQRコードを読み込ませるだけです。

今後の課題

現状でも勤怠記録はできますが、改善したい部分もあります。

例えば、

重複打刻の防止
警告表示の追加
利用者数が増えた場合の運用方法

などです。

現在は同じ利用者が何度もQRコードを読み込むと、そのまま記録されてしまいます。

実運用を考えるなら、

入場

退場

入場

という流れを管理し、

入場中の利用者が再度入場しようとした場合は警告を出す仕組みが必要だと考えています。

まとめ

今回はPython、Flask、OpenCVを使ってQR勤怠管理システムを作ってみました。

作る前は「QRコードを読み取って保存するだけ」と思っていましたが、実際にはデータベース設計や画面構成など考えることが多く、思った以上に大変でした。

ただ、その分Python・Flask・OpenCVを使ったアプリ開発の経験を積むことができたと思います。

ソースコードはGitHubで公開しています。

興味のある方は見ていただければと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?