ゼファーネットのロゴ

OpenCVを使用してQRコードスキャナーでユーザー認証システムを構築する

日付:

この記事は、の一部として公開されました データサイエンスブログソン.

コンピューター ビジョンは多くの可能性を切り開き、最もシンプルで最も人気のある日常的なアプリケーションの XNUMX つは、次のようなものを使用することです。 QRコード およびバーコードスキャナー。

OpenCVを使用したQRコードスキャナー

( Source: https://i.pinimg.com/736x/bb/55/b1/bb55b1a42f4e2cf6e80a0e275ad8b0c8.jpg )

それで、あなたがスーパーマーケットのチェックアウトにいるとき、何が起こりますか? レジ係はバスケット内の各アイテムをデバイスでスキャンし、価格がシステムに自動的に記録されて請求書が生成されます。 そのデバイスはQR /バーコードスキャナーに他なりません、そしてそれはまさに今日私たちが構築しようとしているものです!

コードに飛び込む前に、QRコードとその使用法について簡単に説明しましょう。

QRコードとは何ですか?

QRコードは クイックレスポンスコード。 これは、アイテムを追跡するために一般的に使用されるマトリックスタイプのコードです。 QRコードは、実際のデータを明らかにするために解釈できるバイナリコードに対応するピクセルの形式でデータを保存します。

これがQRコードの基本構造です。

QRコード

(出典:https://en.wikipedia.org/wiki/File:QR_Code_Structure_Example_3.svg)

QRコードは、次のようなさまざまな分野での用途があります。

  1. ユーザー(IDカード)の場合の識別と認証
  2. 個々のアイテムの追跡(在庫管理)
  3. 支払い情報の共有(GPay、Paytm)
  4. リンク、写真、メディアを共有する

QRコードの主な利点のXNUMXつは、エンコードされたデータを明示的に公開しなくても、データを暗号化された形式で共有できることです。 これは、機密情報の誤用を防ぐための追加の保護レイヤーとして機能します。

QRコードによく似たバーコードも機械可読な暗号化コードですが、QRコードとは異なり、データはさまざまな間隔と太さのバーの形式で暗号化されます。 QRコードは、通常は水平方向にデータを保存するバーコードとは対照的に、水平方向と垂直方向の両方にデータを保存できるため、2Dバーコードと見なされます。 したがって、QRコードはバーコードよりも強力です。

QRコードがわかったので、Pythonコードから始めましょう。

ライブラリのインポート

私たちのプロジェクトでは、OpenCVを使用して画像を読み取り、ビデオストリーム入力を取得し、出力も表示します。 必要な主なライブラリは ピズバー & ズバー 暗号化されたQRコードをデコードするライブラリ。 これらは、バーコードとQRコードのデコードに役立つオープンソースのPythonライブラリです。 NumPyライブラリも必要です。 必要なインストールを行う必要があります。

numpyをpyzbar.pyzbarからnpとしてインポートしますimportdecode import cv2

画像からコードをスキャンする

まず、cv1ライブラリを使用して「qr2.png」に保存されているQRコードの画像を読み取ります。 次に、pyzbarのdecodeメソッドを使用して、コードをデコードして結果を分析してみましょう。

これは「qr1.png」として使用するQRコードです。

OpenCVを使用したQRコードスキャナー

(出典:VectorStock.com/26810014)

#画像からのQRコードの読み取りimg = cv2.imread( "qr1.png")code = decode(img)print(code)

出力:

出力| OpenCVを使用したQRコードスキャナー

今、たくさんの情報が表示されています。 出力の各部分を理解しましょう。

データ-> このフィールドは、QRコードにエンコードされたテキストまたは情報を提供します

タイプ-> このフィールドは、コードのタイプQRCODEまたはBARCODEを示します

rect-> これにより、QR画像を囲む長方形の左、上、幅、高さがわかります。 QRコードを傾けても、長方形は直立したままで、QRコード全体を囲む境界長方形になります。

ポリゴン-> これにより、QR画像の周囲のポリゴンの正確なコーナーポイントが得られます。 QRコードの画像が傾いている場合は、それを囲むポリゴンも傾いています。

これが、ポリゴンの座標を使用して境界ボックスを描画する理由です。これにより、QRコードが回転しても、コードの正確な境界が得られます。

これで、画像に複数のQRコードが含まれる場合があります。 それでは、コードをforループに入れて、画像内のすべてのバーコードを検出できるようにします。 主にエンコードされた情報に関心があるので、エンコードされたテキストだけを表示しましょう。

decode(img)のバーコードの場合:print(barcode.data)#in bytes text =バーコード.data.decode( 'utf-8')print(text)print(barcode.rect)

出力

出力2 | OpenCVを使用したQRコードスキャナー

出力の最初の行はb'Hello!を示しています。 '。 bは、それがバイトリテラルであることを示します。 後で「utf-8」スキームを使用してデコードされ、strテキストのみが取得されます。

素晴らしい! これで、QRコードからエンコードされたテキストが正常にデコードされました。

リアルタイムでのQRコードのデコード

それでは、カメラフィード入力を使用してこれをリアルタイムで実行してみましょう。 スーパーマーケットのQRコードスキャナー、ユーザー認証、オブジェクトの追跡など、ほとんどの実際のアプリケーションでは、コードをリアルタイムでデコードする必要があります。 それでは始めましょう!

次のコードにより、Webカメラをオンにして、出力用のセカンダリウィンドウを作成できます。

#カメラフィードからのQRコードのスキャンvid = cv2.VideoCapture(0)vid.set(3,640)vid.set(4,740)

ここで、ビデオがオンになっている間に、前に行ったようにフレーム内のQRコードをデコードします。 それに加えて、ポリゴンポイントを使用して、QRコードの周囲に境界ボックスを描画し、対応するデコードされたテキストをカメラフレーム入力自体に表示します。

Trueの場合:成功、デコード(img)のバーコードのimg = vid.read():テキスト=バーコード.data.decode( 'utf-8')print(text)polygon_Points = np.array([barcode.polygon]、 np.int32)polygon_Points = Lyrics_Points.reshape(-1,1,2)rect_Points =バーコード.rectcv2.polylines(img、[polygon_Points]、True、(255,255、0)、5)cv2.putText(img、text、 (rect_Points [0]、rect_Points [1])、cv2.FONT_HERSHEY_DUPLEX、0.8、(255,255、0)、2)cv2.imshow( "Video"、img)cv2.waitKey(1)

出力

出力3 | OpenCVを使用したQRコードスキャナー

上記のコードでは、次の行があります

cv2.polylines(img、[polygon_Points]、True、(255,255、0)、5)

QRコードの周りにバウンディングボックスを表示します。 'img'は入力フレームを指定します。 ここではポリゴンポイントを使用しているため、QRコードを回転させても、正確なバウンディングボックスが得られることに注意してください。 (255,255,0)はバウンディングボックスの色を指定し、5は厚さを示します。

コード行

cv2.putText(img、text、(rect_Points [0]、rect_Points [1])、cv2.FONT_HERSHEY_DUPLEX、0.8、(255,255、0)、2)

デコードされたテキストを表示するために使用されます。 注意深く観察すると、ここでは、テキストを表示するために多角形ではなく長方形の座標を使用していることがわかります。 これを行う理由は、QRコードが回転しているかどうかに関係なく、テキストが直立して表示され、読みやすくなるようにするためです。

この出力は、QRコードが直立している場合と、カメラの前に斜めに保持されている場合の比較結果を示しています。

ビデオテスト| OpenCVを使用したQRコードスキャナー

いくつかの実際のオブジェクトでテストして、機能するかどうかを確認してみましょう。

実物のビデオテスト

します! あなたがあなたの周りで見つけることができるのと同じくらい多くのQRコードで自由にテストしてください!

もうXNUMXつの興味深い機能は、このライブラリがコードを変更せずにQRコードをデコードできるだけでなく、バ​​ーコードもデコードできることです。

バーコードカメラフィード入力で結果を見てみましょう。

バーコードテスト| OpenCVを使用したQRコードスキャナー

出来上がり! これで、いくつかの簡単なOpenCV関数とpyzbarライブラリを使用して、バーコードとQRコードスキャナーを構築できました。

さあ、楽しい部分です! シートベルトを締める!

ユーザー認証システムの構築

実際のユースケースシナリオを見てみましょう。

会社の各従業員は、対応するQRコードが記載されたIDカードを受け取ります。 特別なプロジェクトに取り組んでいる従業員の一部は特定のラボへのアクセスを許可されていますが、他の従業員は制限されたゾーンです。 各従業員は、ラボにアクセスするために、入り口でIDカードをスキャンする必要があります。

すでにQRコードスキャナーがあります。 それでは、これまでに学んだことをすべて活用してみましょう。 QRコードが許可された担当者のものであるかどうかを確認し、アクセスを許可するかどうかを決定する簡単なユーザー認証システムを構築します。

それでは、コードを始めましょう!

numpyをpyzbar.pyzbarからnpとしてインポートしますimportdecode import cv2
#カメラフィードからのQRコードのスキャンvid = cv2.VideoCapture(0)vid.set(3,640)vid.set(4,740)

ライブラリがインポートされ、ビデオキャプチャが設定されました。 次に、許可された従業員のデコードされたQRコードテキストを含むテキストファイルを読み取り、リストに保存する必要があります。

認証システム

これは私たちのテキストファイル「Authorised.txt」です

open( 'Authorised.txt'、 'r')をファイルとして使用:auth_list = file.read()。strip()print(auth_list)

出力

出力

参考までに、入力画像で前のコードを実行して、各QRコードのデコードされたテキストを表示してみましょう。 モデルが正しく機能しているかどうかを確認するために、後でこれが必要になります。 得られた出力を見てみましょう。

出力

ビデオ出力

今、私たちがする必要があるのは、デコードされたテキストが許可された人々のリストに存在するかどうか、各QRコードをチェックすることです。 一致する場合は、境界ボックスに緑色(0,255,0)を使用し、「Access Granted」というテキストを表示します。それ以外の場合は、赤色(0,0、255)の境界ボックスを使用してメッセージを表示します。 「不正アクセス」。

Trueの場合:成功、デコード(img)のバーコードのimg = vid.read():テキスト= auth_listにない場合はtext = verb.data.decode( 'utf-8')text = str(text):color =(0,0,255 、0,255,0)displaytext = "不正アクセス" else:color =(32)displaytext = "アクセス許可" polygon_Points = np.array([barcode.polygon]、np.int1,1,2)polygon_Points = polygon_Points.reshape(-2 、3)rect_Points =バーコード.rectcv2.polylines(img、[polygon_Points]、True、color、0)cv1.putText(img、displaytext、(rect_Points [2]、rect_Points [0.9])、cv2.FONT_HERSHEY_PLAIN、2、色、2)cv1.imshow( "Video"、img)cvXNUMX.waitKey(XNUMX)

出力

アクセスが許可されているかどうか

称賛! できたね!

私たちのモデルはQRコードを完全にスキャンし、許可された従業員にのみアクセスを許可します! これで、QRコードスキャナーを使用したユーザー認証システムの構築に成功しました。これにより、許可された従業員がIDカードのQRコードをスキャンすると、許可された従業員にのみアクセスが許可されます。

QRコードが本当に役立つことができる無限のフィールドがあります。 さあ、さまざまなコードとそのアプリケーションを試してみてください。

私について:

こんにちは、TithiSreemanyです。 あなたがこの記事を読むのが好きで、それが役に立つと思ったことを願っています!

あなたは私に連絡することができます LinkedIn.

ここで私の他の記事をチェックしてください: .

読んでくれてありがとう!

この記事に示されているメディアは Analytics Vidhya が所有するものではなく、著者の裁量で使用されています。 

ソース:https://www.analyticsvidhya.com/blog/2022/01/build-a-user-authentication-system-with-qr-code-scanner-using-opencv/

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?