QR코드 인식 코드 - QRkodeu insig kodeu

PC 컴퓨터에서 QR코드 스캔하는 방법이 있을까? 원래 QR코드를 스캔하려면 스마트폰이 있어야 합니다. 요즘에는 별도의 앱 설치 필요 없이 스마트폰에 내장된 카메라로 초점만 잡으면 알아서 인식을 하기 때문에 사용법이 전혀 어렵지 않죠.

그런데 PC에서도 QR코드 스캔이 가능할까? 네, 가능합니다. 별도의 프로그램없이도 인터넷 스캔 사이트에서 바로 이용하실 수 있습니다. QR코드 스캔이 가능한 2개의 사이트가 있습니다. 단, QR코드는 캡처된 이미지, 혹은 카메라로 찍은 사진을 파일로 가지고 있어야 스캔이 가능합니다.

QR코드 인식 코드 - QRkodeu insig kodeu

저는 위 캡처 이미지를 가지고 PC 스캔 테스트를 해보겠습니다.

1. Barcode Reader

첫 번째 사이트는 바코드리더입니다. 동일한 이름의 스캐너 앱도 있는데 온라인으로도 서비스를 하고 있죠. 사이트는 여기입니다.

Barcode Reader 바로가기

QR코드 인식 코드 - QRkodeu insig kodeu

바코드리더 사이트로 들어가서 파일 선택을 누르고 Start 버튼을 누르면 자동으로 스캔을 합니다. 스캔할 수 있는 파일 형식은 png, jpg, jpeg, gif, tiff, tif, pdf, bmp이며 최대 10MB까지 등록이 가능합니다.

QR코드 인식 코드 - QRkodeu insig kodeu

스캔을 해보니 Target 링크가 제대로 표시되는 것이 보이네요. 클릭하면 해당 사이트로 이동하게 됩니다. 헥스 코드도 나오는데 어디에 쓰는지는 모르겠네요.

2. Web QR

두 번째 QR코드 스캔 사이트는 WebQR입니다. 사이트는 여기로 들어가시면 됩니다.

WebQR 바로가기

QR코드 인식 코드 - QRkodeu insig kodeu

사이트로 들어가서 오른쪽 카메라 버튼을 누른 후 파일 선택을 클릭해 스캔한 QR코드를 등록해 줍니다.

QR코드 인식 코드 - QRkodeu insig kodeu

그러면 위와 같이 QR코드에 담긴 정보가 표시됩니다. 바코드 리더보다 정보가 많이 안 나오지만 딱 필요한 것만 나오기 때문에 문제는 없는 것 같습니다.

2개의 사이트로 테스트해 보았는데 모두 정상적으로 결과가 나왔습니다. PC에서 QR코드 스캔을 하고 싶으신 분들은 위 두 사이트를 이용해 보세요. 스마트폰에 있는 QR코드를 캡처한 후에 스마트폰에서 바로 스캔도 가능합니다.

추가로 네이버 앱으로 모바일 QR코드를 스마트폰에서 스캔하는 방법도 알아보세요.

모바일 QR코드 스캔 방법

먼저 바코드를 인식하는 open source 라이브러리를 제공해주는데, 그 라이브러리를 pip을 이용해 다운로드 한다.

윈도우의 cmd 창을 이용해서 다운받아본다.

총 3개의 라이브러리가 필요하다.

1. openCV (영상인식 라이브러리)

pip install opencv-python
QR코드 인식 코드 - QRkodeu insig kodeu

2. numpy (연산 처리 라이브러리)

pip install numpy
QR코드 인식 코드 - QRkodeu insig kodeu
위에 opencv를 받을 때 저절로 같이 설치 되었다.

3. pyzbar (바코드 인식 관련 라이브러리)

pip install pyzbar
QR코드 인식 코드 - QRkodeu insig kodeu

자 이제 필요한 모든 라이브러리를 받았으니 아래와 같이 코드를 동작시켜본다.

'''

made by 안산드레이아스
https://ansan-survivor.tistory.com/

'''

# Python Version 3.7.1

import pyzbar.pyzbar as pyzbar  # pip install pyzbar
import numpy as np              # pip install numpy
import cv2                      # pip install opencv-python

# 바코드 탐지하는 엔진 (바코드 및 QR코드 탐지)
def decode(im):
    # Find barcodes and QR codes
    decodedObjects = pyzbar.decode(im)

    # Print results
    for obj in decodedObjects:
        print('Type : ', obj.type)
        print('Data : ', obj.data, '\n')

    return decodedObjects


# Display barcode and QR code location
def display(im, decodedObjects):
    # Loop over all decoded objects
    for decodedObject in decodedObjects:
        points = decodedObject.polygon

        # If the points do not form a quad, find convex hull
        if len(points) > 4:
            hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
            hull = list(map(tuple, np.squeeze(hull)))
        else:
            hull = points;

        # Number of points in the convex hull
        n = len(hull)

        # Draw the convext hull
        for j in range(0, n):
            cv2.line(im, hull[j], hull[(j + 1) % n], (255, 0, 0), 3)

    # Display results
    cv2.imshow("Results", im);
    cv2.waitKey(0);

# 파일명 zbar.jpg의 이미지에서 바코드를 탐지하면 해당 코드를 리턴
# Main
if __name__ == '__main__':
    # Read image
    im = cv2.imread('zbar.jpg')

    decodedObjects = decode(im)
    display(im, decodedObjects)

이미지 파일 zbar.jpg는 현재 파이썬 파일과 동일 경로에 있어야 한다. (이부분은 절대경로로 수정가능)

QR코드 인식 코드 - QRkodeu insig kodeu

zbar.jpg 의 이미지는 아래와 같다. (파일도 업로드)

zbar.jpg

0.37MB

QR코드 인식 코드 - QRkodeu insig kodeu

이 이미지파일에 저 파이썬 코드를 돌려본다.

*결과

해당 바코드를 탐지해서 숫자를 리턴하고 보여준다.

그리고 어디부분을 인식했는지 파랑색 사각박스로 보여준다.

QR코드 인식 코드 - QRkodeu insig kodeu

QR코드도 인식된다. 어떤 타입인지 함께 리턴된다.