*/

Python으로 QR Code Reader 만들기

개발 환경

  • Windows 10
  • VisualStudio Code
  • Python : 3.7.9

QR Code를 읽을 수 있는 프로그램을 찾다가 아래 참조에서 찾은 코드를 소개 한다. 기존 개발 환경 VS Code에서 바로 테스트 할 수 있다. 

필요한 파이썬 라이브러리

  • OpenCV : 이미지 처리, 컴퓨터 비젼 및 기계 학습 라이브러리
  • Numpy : 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는  라이브러리
  • pyzbar : 주어진 이미지에서 Bar code, QR Code를 읽는다. EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 및 QR Code를 지원

라이브러리 설치

  • OpenCV 설치
   > pip install opencv-python                                          

       혹은  

   > pip install opencv-contrib-python                                  
  •  numpy 설치
   > pip install numpy                                                  
  • pyzbar 설치

       > pip install pyzbar                                                 

    코드

    • 필요 라이브러리 import
    • import cv2
      import numpy as np
      from pyzbar.pyzbar import decode

      • 카메라로부터 이미지 캡쳐 
      • cap = cv2.VideoCapture(0)
        while True:
            ret, frame = cap.read()
            decoder(frame)
            cv2.imshow('Image', frame)
            code = cv2.waitKey(10)
            if code == ord('q'):
                break
        •  주어진 이미지로부터 QR Code를 얻는 함수 
        • def decoder(image):
              gray_img = cv2.cvtColor(image,0)
              barcode = decode(gray_img)

              for obj in barcode:
                  points = obj.polygon
                  (x,y,w,h) = obj.rect
                  pts = np.array(points, np.int32)
                  pts = pts.reshape((-1, 1, 2))
                  cv2.polylines(image, [pts], True, (0, 255, 0), 3)

                  barcodeData = obj.data.decode("utf-8")
                  barcodeType = obj.type
                  string = "Data " + str(barcodeData) + " | Type " + str(barcodeType)
                 
                  cv2.putText(frame, string, (x,y), cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0), 2)
                  print("Barcode: "+barcodeData +" | Type: "+barcodeType)

          •  최종 코드  
          • cap = cv2.VideoCapture(0)
            while True:
            import cv2
            import numpy as np
            from pyzbar.pyzbar import decode

            def decoder(image):
                gray_img = cv2.cvtColor(image,0)
                barcode = decode(gray_img)

                for obj in barcode:
                    points = obj.polygon
                    (x,y,w,h) = obj.rect
                    pts = np.array(points, np.int32)
                    pts = pts.reshape((-1, 1, 2))
                    cv2.polylines(image, [pts], True, (0, 255, 0), 3)

                    barcodeData = obj.data.decode("utf-8")
                    barcodeType = obj.type
                    string = "Data " + str(barcodeData) + " | Type " + str(barcodeType)
                   
                    cv2.putText(frame, string, (x,y), cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0), 2)
                    print("Barcode: "+barcodeData +" | Type: "+barcodeType)

            cap = cv2.VideoCapture(0)
            while True:
                ret, frame = cap.read()
                decoder(frame)
                cv2.imshow('Image', frame)
                code = cv2.waitKey(10)
                if code == ord('q'):
                    break

          참조 

          0 comments:

          댓글 쓰기