안녕하세요
이번주에는 회사에서 작업했었던 내용을 포스팅해보려합니다
1. Zbar ?
Zbar는 비디오 스트림, 이미지 파일 및 이미지와 같은 다양한 소스에서 바코드를 판독 할 수있는 오픈 소스 라이브러리입니다
Home : http://zbar.sourceforge.net/
github : https://github.com/ZBar/ZBar
오늘은 python 으로 Zbar와 OpenCV 를 사용하여 이미지에서 QR코드를 인식하는 프로그램을 개발해보려합니다
2. Install Zbar , OpenCV
Zbar를 설치해줍니다
pip install zbar-py
OpenCV 도 설치해줍니다 , 저는 비교적 가벼운 headless 버전을 설치해보았습니다
pip install opencv-python-headless
3. OpenCV 사용해서 QR코드 인식 해보기
인식에 사용할 QR코드 이미지입니다
OpenCV에서 제공하는 QRCodeDetector 를 사용해서 이미지에서 QR코드를 찾아내고
Decode 해주는 코드입니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- coding: utf-8 -*-
import cv2
import numpy as np
inputImage = cv2.imread("image/QR2.jpg")
qrDecoder = cv2.QRCodeDetector()
# QR코드를 찾고 디코드해줍니다
data,bbox,rectifiedImage = qrDecoder.detectAndDecode(inputImage)
if len(data)>0:
print("Decoded Data : {}".format(data))
rectifiedImage = np.uint8(rectifiedImage)
else:
print("QR Code not detected")
|
결과값:
4. Zbar를 사용해서 QR코드 인식 해보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# -*- coding: utf-8 -*-
import zbar
import cv2
file_path = "image/QR2.jpg"
# Zbar 라이브러리로 QR코드를 인식하기위해서 opcnCV로 이미지를 그레이 스케일로 읽어옵니다
qrcode_data = ""
#Zbar는 다중 QR 검출도 가능합니다
#인식된 QR 데이터들을 가져옵니다
scanner = zbar.Scanner()
results = scanner.scan(im)
for result in results:
qrcode_data = result.data
# QR 코드가 인식이 되지 않았다면
# QR Code not detected
if(qrcode_data=="null"):
print("QR Code not detected")
else:
# QR 코드가 인식이 되었다면
# 인식된 QR 코드의 데이터를 출력해준다
print("Decoded Data : {}".format(qrcode_data))
|
결과값:
5. 성능 비교 해보기
위의 결과를 보니 둘다 인식이 잘 되는 것 같습니다
그렇다면 어느 라이브러리가 좀 더 인식을 잘 하는지 여러 이미지로 비교 해봅시다
이미지 인식 결과
1번
-> OpenCV : QR Code not detected
-> Zbar :
2번
-> OpenCV : QR Code not detected
-> Zbar :
3번도 2번과 마찬가지로 Zbar 는 인식에 성공했지만 OpenCV는 실패했습니다
6. 마치며
위의 테스트의 결과가 왜 이렇게 나왔는지는 궁금하지만 개발 일정이 빠듯한 관계로 자세히는 찾아보지 못했습니다
사실 QR코드 인식을 지원하는 라이브러리는 위의 2개 말고도 많습니다
하지만 성능이 좋고 멀티 QR인식도 되는 Zbar와 오랜 역사를 가지고있는 OpenCV 를 사용하여 둘의 성능의 차이를 눈으로 한번 확인해보고 싶었습니다
현재는 Zbar와 OpenCV 를 Docker에 올려 AWS Lambda 를 사용하여 개발을 하고있습니다
Lambda에 Zbar를 올리기위해 많은 시간들여 삽질을 했고 이에 대해 포스팅을 하고 싶었으나
글이 굉장히 길어져서 한번에 읽기 힘들어질것같아 나눠서 포스팅을 해보려합니다
다음에는 Docker에 Zbar 와 OpenCV 를 설치해서 실행시켜보는 내용으로 포스팅을 해보겠습니다
감사합니다
'개발이야기' 카테고리의 다른 글
7개월차 개발자의 이야기 (0) | 2019.07.13 |
---|---|
[MySQL] EXPLAIN 으로 쿼리문 테스트 하기 (0) | 2019.07.13 |
디자이너가 없는 회사에서 디자인 작업을 하는 방법. (0) | 2019.07.12 |
생체로그인의 표준인 FIDO2.0 소개 (0) | 2019.07.12 |
이번주 개발 이야기 (0) | 2019.06.29 |