Python 코드 스캔 도구의 예제 코드 구현

QR코드는 정보 전달의 도구로서 현재 사회에서 중요한 역할을 발휘하고 있다.핸드폰 사용자가 핸드폰 결제에 로그인하면 생활 곳곳에서 QR코드의 존재를 볼 수 있다.그럼 QR코드가 어떻게 해석되는지 아세요?스스로 코드 스캔 도구를 실현할 생각은 없으십니까?원한다면 계속 보세요!
1. 사례 분석
우리는 먼저 코드 스캔 도구를 실현하려면 어떤 조작을 해야 하는지 생각해 보자.코드를 스캔하는 과정에서 우리는 어떻게 휴대전화나 컴퓨터가 QR코드를 식별하는지 카메라를 켜야 한다.그래서 우리는 두 가지 관건적인 절차를 실현해야 한다. 그것이 바로 카메라를 호출하고 QR코드를 식별하는 것이다.
이 두 가지 조작은 각각 두 개의 모듈에 대응했다. 그것이 바로opencv와pyzbar이다. 그 중에서opencv는 인텔의 컴퓨터 시각 처리 모듈이고pyzbar는 QR코드를 해석하는 모듈이다.
환경
환경은python 환경과 모듈을 포함합니다.내 환경은 다음과 같습니다.
시스템: Windows 10
python:python 3.7.9
opencv:opencv-python-4.4.0.44
pyzbar:pyzbar-0.1.8
모듈 설치는 매우 간단합니다. 우리는 직접 pip로 설치하고 먼저 opencv 모듈을 설치합니다.

pip install opencv-python
그리고 pyzbar 모듈:

pip install pyzbar
설치 버전이 지정되지 않으면 최신 버전이 자동으로 설치됩니다.모듈을 설치한 후에 우리는 코드 스캔 도구를 실현할 수 있다.
3. QR코드 식별
pyzbar 모듈이 생긴 후에 우리가 QR코드를 식별하는 작업은 매우 간단하다. 우선 QR코드를 준비해야 한다.QR코드가 있으면 다음과 같이 해석할 수 있습니다.
  • QR코드 그림을 읽습니다
  • QR코드의 데이터를 해석한다
  • 해석된 데이터에서 데이터 정보를 추출합니다
  • 구현 코드는 다음과 같습니다.
    
    import cv2
    from pyzbar import pyzbar
    # 1、 
    qrcode = cv2.imread('qrcode.jpg')
    # 2、 
    data = pyzbar.decode(qrcode)
    print(data)
    # 3、 data 
    text = data[0].data.decode('utf-8')
    print(text)
    위에서 우리는 두 번 해석하여 처음으로 데이터를 얻었다. 우리는 먼저 데이터가 어떻게 생겼는지 보았다.
    
    [Decoded(data=b'http://weixin.qq.com/r/vC_fhynEKnRVrW3k93qu', type='QRCODE', rect=Rect(left=140, top=113, width=390, height=390), polygon=[Point(x=140, y=113), Point(x=140, y=503), Point(x=530, y=503), Point(x=530, y=113)])]
    목록을 볼 수 있고 목록의 첫 번째 데이터는 URL의 정보를 포함합니다.그래서 우리는 아래의 코드를 통해 다시 해석해야 한다.
    
    text = data[0].data.decode('utf-8')
    이렇게 하면 우리는 QR코드에 포함된 정보를 얻을 수 있다.다음에 사용하기 편리하도록 위의 코드를 함수로 작성할 수 있습니다.
    
    def scan_qrcode(img_path):
     qrcode = cv2.imread(img_path)
     data = pyzbar.decode(qrcode)
     return data[0].data.decode('utf-8')
    다음은 카메라를 어떻게 호출하는지 다시 봅시다.
    4. 카메라 호출
    Opencv에서 비디오를 읽는 데 VideoCapture 클래스를 제공합니다. 카메라를 호출할 수도 있습니다.카메라 호출 절차는 다음과 같습니다.
  • 카메라를 호출합니다
  • 순환
  • 순환 내에서 화면 한 프레임을 읽습니다
  • 현재 읽은 화면을 표시합니다
  • 키보드 입력을 기다립니다
  • 종료 키를 눌렀는지 판단q
  • 출시 버튼을 누르면 종료하고 누르지 않으면 계속 순환합니다
  • 구체적인 코드는 다음과 같습니다.
    
    import cv2
    #  
    cap = cv2.VideoCapture(0)
    while True:
     #  
     ret, frame = cap.read()
     #  
     cv2.imshow('scan qrcode', frame)
     #  
     key = cv2.waitKey(10)
     #  q 
     if key == ord('q'):
      break
    #  
    cv2.destroyAllWindows()
    위의 코드를 직접 실행해 보세요. 효과는 마치 자신의 전면 카메라를 켠 것과 같습니다.
    현재 카메라를 호출하여 우리는 두 부분의 코드를 결합시킬 수 있다.
    5. 코드 스캔 도구 구현
    우리 코드 스캔 도구의 주체 부분은 카메라를 호출하는 작업이다. 우리는 읽은 모든 프레임의 화면을 분석하고 결과를 분석한 후에 출력하고 종료해야 한다.구체적인 코드는 다음과 같습니다.
    
    import cv2
    from pyzbar import pyzbar
    
    def scan_qrcode(qrcode):
     data = pyzbar.decode(qrcode)
     return data[0].data.decode('utf-8')
    
    cap = cv2.VideoCapture(0)
    while True:
     ret, frame = cap.read()
     cv2.imshow('scan qrcode', frame)
    
     #  
     text = None
     try:
      text = scan_qrcode(frame)
     except Exception as e:
      pass
     if text:
      print(text)
      break
    
     key = cv2.waitKey(10)
     if key == ord('q'):
      break
    cv2.destroyAllWindows()
    위에서 저희가 scan_qrcode 함수를 수정했습니다. 원래의 그림 경로에서 직접 그림 대상에 전달되었습니다.VideoCapture 객체를 통해 가져온 그림 프레임과 cv2를 통해서입니다.imread에서 가져온 그림은 같은 데이터 형식입니다.
    위의 관건적인 단계는 QR코드의 조작을 해석하는 것이다.먼저 텍스트를 정의합니다. 해석 과정에서 QR코드가 없으면 이상이 발생할 수 있기 때문에try-except 문장으로 처리합니다.if를 통해text의 내용을 판단하는 방법은 우리가 진정으로 데이터를 해석해야만 프로그램이 결과를 출력하고 프로그램을 종료할 수 있습니다.
    이 Python 디코딩 도구 구현에 관한 글은 여기까지 소개되었습니다. 더 많은 python 디코딩 도구 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기