본문 바로가기
코딩/파이썬

파이썬, 레벨 조절하여 전문가 모드로 QR코드 생성하기

by DIYver 2021. 9. 28.

이전에 파이썬으로 QR코드 쉽게 생성하는 방법에 대해서 다뤘습니다.

https://diyver.tistory.com/170

 

파이썬 QR코드 쉽게 생성하기

qrcode 모듈을 이용하여 파이썬으로 간단하게 QR코드를 생성할 수 있다. 1. qrcode 모듈 설치하기 아나콘다를 실행하고 아나콘다 명령 프롬프트를 켜서 아래 명령어를 입력한다. >>> pip install qrcode 2. Q

diyver.tistory.com

아무래도 쉽게 생성하다보니 기본값으로만 QR코드가 생성되어 버전, 오류 복원 레벨을 설정할 수 없는 문제가 있었습니다.

이번에는 다양한 설정값들을 세세히 다루어서 QR코드를 생성하는 방법에 대해서 다뤄보도록 하겠습니다.

 

 

1. QR코드 모듈 설치

 

QR코드  모듈을 설치를 해야겠죠?

 

pip install qrcode[pil]

파이썬 명령프롬프트에서 위의 명령으로 QR코드 모듈을 설치하시기 바랍니다.

이전에 하셨다면 건너뛰셔도 좋습니다.

 

 

 

2. 코딩

import qrcode
import cv2

qr_text = "https://diyver.tistory.com"

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_M,
    box_size=4,
    border=10,
)
qr.add_data(qr_text)
qr.make(fit=True)

qr_img = qr.make_image(fill_color="black", back_color="white")


qr_img.save('qr_test.jpg')

qr_img_read = cv2.imread('qr_test.jpg',cv2.IMREAD_GRAYSCALE)
#qr_img = cv2.imread('qr_test.jpg',cv2.IMREAD_COLOR)

qr_img_cut = qr_img_read.copy()

cv2.imshow('image',qr_img_cut)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

OpenCV 모듈을 설치하셨다면 쉽게 사용하실 수 있지만,

설치 안 하셨다면 cv2 관련 행을 다 삭제해주세요.

 

 

 

 

3. 실행 결과

 

QR코드가 생성된 것을 볼 수 있습니다.

 

 

 

 

 

4. 설명

 

영문으로 더 자세하게 보시고 싶으시다면 해당 글보다는 아래 사이트에서 확인하시기 바라겠습니다.

https://pypi.org/project/qrcode/

 

코드 중에서 해당 부분을 보시면

 

version 은 QR코드 버전으로 제일 작은 사이즈가 버전 1 입니다.

버전 1이 21x21 cell 크기입니다.

버전 40은 177x177 cell 크기입니다.

버전은 40까지 있다고 보시면 되겠습니다.

 

나머지는 그대로두고 버전만 5로 해서 QR코드를 다시 만들어 보겠습니다.

좌 : 버전 1, 우 : 버전 5

버전 1에 비해서 QR코드 크기가 커진 것을 확인할 수 있겠습니다.

 

버전 별로 저장할 수 있는 데이터 크기가 다릅니다.

숫자만 저장한다면 꽤 많이 저장할 수 있으나, 영어+숫자를 혼합한다면 그 수는 줄어들게 됩니다.

더 자세한 표를 보시고 싶으시다면 아래 페이지에서 확인 가능합니다.

https://www.qrcode.com/ko/about/version.html

 

 

버전이 크다면 QR코드 크기는 고정해놓고 데이터가 저장될 수 있습니다.

다만, 버전이 낮다면 저장할 데이터 크기가 크다면 버전이 자동으로 올라가게 됩니다.

 

버전을 기입하지 않으면 자동으로 데이터 크기에 맞춰집니다.

 

 

 

이번에는 오류복원 레벨에 대해서 살펴보겠습니다.

 

ERROR_CORRECT_L

- 7%의 오류 복원 능력을 보유

- 깔끔하고 QR코드가 더렵혀지지 않은 환경에 적합

ERROR_CORRECT_M

- 15%의 오류 복원 능력을 보유

ERROR_CORRECT_Q

- 25%의 오류 복원 능력을 보유

ERROR_CORRECT_H

- 30%의 오류 복원 능력을 보유

- QR코드가 더렵혀지거나 깨끗하지 않은 환경에 적합

 

이 명령은 QR코드가 사용될 환경에 따라서 꼭 다뤄야 하는 부분입니다.

오류 복원 능력이 작을 수록 QR코드 크기는 작아집니다.

그런데 QR코드는 작은게 좋다고해서 적합하지 않은 환경에 LOW LEVEL로 QR코드를 사용한다면

인식이 잘 안되어서 문제가 발생합니다.

따라서 복합적으로 판단하셔야 합니다.

 

 

버전을 똑같이 두더라도

오류복원 레벨에 따라서 QR코드 크기가 달라집니다.

아래 결과를 확인해 보시죠.

 

좌 : 버전 1, 오류복원레벨 M    우 : 버전 1, 오류복원레벨 H

우측은 버전 1이 아니라 자동으로 버전 3 정도로 커진것을 볼 수 있습니다.

 

 

 

오류 복원 레벨을 테스트 해보겠습니다.

두 QR코드에 각각 부분적으로 더렵혀보겠습니다.

 

왼쪽은 인식이 안되구요

오른쪽은 인식이 됩니다.

따라서 오류복원 레벨 역시 중요한 요소 중 하나라는 것을 알 수 있습니다.

 

 

 

박스 사이즈는 1cell 의 한 변의 크기를 나타냅니다.

박스 사이즈가 1이면 QR코드의 점 한개 한개가 1px 인 것입니다.

 

만약 박스 사이즈가 4이면

점 한개(1cell)는 4x4px 의 크기인 것입니다.

 

전체적인 QR코드 이미지 크기에 관여한다고 볼 수 있겠습니다.

 

마지막으로 보더 는 테두리(여백)입니다.

QR코드는 코드와 배경과의 색 대비로 인식됩니다.

따라서 어느정도 배경 사이즈가 QR코드보다 더 커야지 인식이 잘 되게 됩니다.

그런 여백 크기를 조절 하는 부분이 border 입니다.

 

보더를 0으로 하면 딱 QR코드 크기에 맞게 이미지가 생성됩니다.

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

 

 

 

 

댓글