제퍼넷 로고

OpenCV를 사용하여 QR 코드 스캐너로 사용자 인증 시스템 구축

시간

이 기사는 데이터 과학 Blogathon.

컴퓨터 비전은 수많은 가능성을 열어 놓았으며 가장 간단하고 가장 인기 있는 일상 응용 프로그램 중 하나는 다음을 사용하는 것입니다. 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. 본인확인 및 본인인증(신분증)
  2. 개별 품목 추적(재고 관리)
  3. 결제 정보 공유(GPay, Paytm)
  4. 링크, 사진, 미디어 공유

QR 코드의 주요 장점 중 하나는 인코딩된 데이터를 명시적으로 공개하지 않고도 데이터를 암호화된 형태로 공유할 수 있다는 것입니다. 이는 민감한 정보의 오용을 방지하기 위한 추가 보호 계층 역할을 합니다.

QR코드와 같은 바코드도 기계가 읽을 수 있는 암호화 코드이지만 QR코드와 달리 간격과 두께가 다른 막대 형태로 데이터를 암호화한다. QR 코드는 일반적으로 가로 방향으로 데이터를 저장하는 바코드와 달리 가로 및 세로로 데이터를 모두 저장할 수 있으므로 2D 바코드로 간주됩니다. 따라서 QR 코드는 바코드보다 강력합니다.

QR 코드가 무엇인지 알았으니 이제 파이썬 코드를 시작하겠습니다.

라이브러리 가져오기

우리 프로젝트의 경우 OpenCV를 사용하여 이미지를 읽고 비디오 스트림 입력을 받고 출력도 표시할 것입니다. 우리가 필요로 하는 주요 라이브러리는 피즈바 즈바 암호화된 QR 코드를 디코딩하는 라이브러리. 바코드 및 QR 코드 디코딩에 도움이 되는 오픈 소스 Python 라이브러리입니다. NumPy 라이브러리도 필요합니다. 필요한 설치를 해야 합니다.

pyzbar.pyzbar에서 numpy를 np로 가져오기 가져오기 디코딩 가져오기 cv2

이미지에서 코드 스캔하기

먼저 cv1 라이브러리의 도움으로 "qr2.png"에 저장된 QR 코드의 이미지를 읽어 보겠습니다. 그런 다음 pyzbar의 디코드 방법을 사용하여 코드를 디코딩하고 결과를 분석해 보겠습니다.

이것은 "qr1.png"로 사용할 QR 코드입니다.

OpenCV를 사용한 QR 코드 스캐너

(출처: VectorStock.com/26810014 )

#이미지에서 QR 코드 읽기 img = cv2.imread("qr1.png") code = decode(img) print(code)

산출:

출력 | OpenCV를 사용한 QR 코드 스캐너

이제 많은 정보가 표시됩니다. 출력의 각 부분을 이해합시다.

데이터 -> 이 필드는 QR 코드에 인코딩된 텍스트 또는 정보를 제공합니다.

유형 -> 이 필드는 QRCODE 또는 BARCODE 코드 유형을 알려줍니다.

바로 -> 이것은 QR 이미지를 둘러싸는 사각형의 왼쪽, 위쪽, 너비 및 높이를 제공합니다. QR 코드가 기울어져도 사각형은 수직으로 유지되어 전체 QR 코드를 둘러싸는 경계 사각형을 제공합니다.

폴리곤 -> 이것은 QR 이미지 주변의 폴리곤의 정확한 코너 포인트를 제공합니다. QR 코드의 이미지가 기울어지면 이를 경계로 하는 다각형도 기울어집니다.

이것이 우리가 폴리곤의 좌표를 사용하여 경계 상자를 그려서 QR 코드가 회전하더라도 코드의 정확한 경계를 얻을 수 있는 이유입니다.

이제 사진에 여러 QR 코드가 있을 수 있습니다. 이미지의 모든 바코드를 감지할 수 있도록 코드를 for 루프에 넣습니다. 인코딩된 정보에 주로 관심이 있으므로 인코딩된 텍스트만 표시하겠습니다.

디코딩(img)의 바코드: print(barcode.data) #in 바이트 텍스트 = 바코드.data.decode('utf-8') print(텍스트) print(barcode.rect)

산출

출력 2 | OpenCV를 사용한 QR 코드 스캐너

출력의 첫 번째 줄은 b'Hello! '. b는 바이트 리터럴임을 나타냅니다. 나중에 str 텍스트만 얻기 위해 'utf-8' 체계를 사용하여 디코딩됩니다.

엄청난! 이제 QR 코드에서 인코딩된 텍스트를 성공적으로 디코딩했습니다.

실시간으로 QR 코드 디코딩

이제 카메라 피드 입력을 사용하여 실시간으로 이 작업을 수행해 보겠습니다. 슈퍼마켓의 QR 코드 스캐너, 사용자 인증 또는 개체 추적과 같은 대부분의 실제 응용 프로그램에서는 실시간으로 코드를 디코딩해야 합니다. 시작하겠습니다!

다음 코드를 사용하면 웹캠을 켜고 출력을 위한 보조 창을 만들 수 있습니다.

#카메라 피드에서 QR 코드 스캔 vid = cv2.VideoCapture(0) vid.set(3,640) vid.set(4,740)

이제 비디오가 켜져 있는 동안 이전에 했던 것처럼 프레임의 QR 코드를 디코딩할 것입니다. 그 외에도 다각형 점을 사용하여 QR 코드 주위에 경계 상자를 그리고 해당 디코딩된 텍스트를 카메라 프레임 입력 자체에 표시합니다.

true: 성공, 디코딩(img)의 바코드에 대한 img = vid.read(): text = barcode.data.decode('utf-8') print(text) polygon_Points = np.array([barcode.polygon], np.int32) polygon_Points=polygon_Points.reshape(-1,1,2) rect_Points=barcode.rect cv2.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("비디오", 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, 텍스트, (rect_Points[0],rect_Points[1]), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255,255, 0), 2)

디코딩된 텍스트를 표시하는 데 사용됩니다. 주의 깊게 관찰하면 여기에서 텍스트를 표시하기 위해 다각형 대신 직사각형의 좌표를 사용했음을 알 수 있습니다. 이렇게 하는 이유는 QR 코드의 회전 여부에 관계없이 텍스트가 똑바로 표시되도록 하여 읽기 쉽도록 하기 위함입니다.

이 출력은 QR 코드가 수직일 때와 비스듬히 카메라 앞에 섰을 때의 비교 결과를 보여줍니다.

비디오 테스트 | OpenCV를 사용한 QR 코드 스캐너

실제 개체에 대해 테스트하고 작동하는지 봅시다!

실제 사물에 대한 비디오 테스트

그렇습니다! 주변에서 찾을 수 있는 많은 QR 코드로 자유롭게 테스트하세요!

또 다른 흥미로운 기능은 이 라이브러리가 코드를 변경하지 않고도 QR 코드를 디코딩할 수 있을 뿐만 아니라 바코드도 디코딩할 수 있다는 것입니다!

바코드 카메라 피드 입력으로 결과를 보자.

바코드 테스트 | OpenCV를 사용한 QR 코드 스캐너

짜잔! 이제 몇 가지 간단한 OpenCV 기능과 pyzbar 라이브러리를 사용하여 바코드 및 QR 코드 스캐너를 구축했습니다!

이제 재미있는 부분을 위해! 안전 벨트 매세요!

사용자 인증 시스템 구축

실제 사용 사례 시나리오를 살펴보겠습니다.

회사의 각 직원은 해당 QR 코드가 있는 ID 카드를 받습니다. 특정 프로젝트에 참여하는 직원 중 일부는 특정 연구실에 대한 액세스 권한이 부여되었지만 다른 사람들에게는 제한된 구역입니다. 각 직원은 실험실에 액세스하려면 입구에서 ID 카드를 스캔해야 합니다.

QR 코드 스캐너가 이미 있습니다. 이제 지금까지 배운 내용을 모두 적용해 보겠습니다. QR코드가 인가된 사람에게 속하는지 확인하고 접근 권한을 부여할지 여부를 결정하는 간단한 사용자 인증 시스템을 구축할 것입니다.

그럼 코드를 시작하겠습니다!

pyzbar.pyzbar에서 numpy를 np로 가져오기 가져오기 디코딩 가져오기 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)을 사용하고 "액세스 허용" 텍스트를 표시합니다. 그렇지 않으면 빨간색(0,0, 255) 경계 상자를 사용하고 메시지를 표시합니다. "무단 접근".

true: 성공, 디코딩(img)의 바코드에 대한 img = vid.read(): text = 바코드.data.decode('utf-8') text=str(text) 텍스트가 auth_list에 없는 경우: 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=barcode.rect cv2.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("비디오", img) cvXNUMX.waitKey(XNUMX)

산출

액세스 허용 여부

명성! 훌륭해!

우리 모델은 QR 코드를 완벽하게 스캔하여 승인된 직원에게만 액세스 권한을 부여합니다! ID 카드에 있는 QR 코드를 스캔하면 승인된 직원에게만 액세스 권한을 부여하는 QR 코드 스캐너를 사용하여 사용자 인증 시스템을 성공적으로 구축했습니다!

QR코드가 정말 유용할 수 있는 분야는 무궁무진합니다. 그러니 계속해서 다양한 코드와 응용 프로그램을 재미있게 실험해 보세요!

내 소개 :

안녕하세요, 저는 Tithi Sreemany입니다. 이 기사를 읽고 도움이 되었기를 바랍니다!

나에게 연락할 수 있습니다. 링크드인.

여기에서 내 다른 기사를 확인하십시오. 링크.

읽어 주셔서 감사합니다!

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다. 

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

spot_img

최신 인텔리전스

spot_img