'2018/10'에 해당되는 글 1건

  1. 2018.10.18 OpenCV 4.0 Beta 릴리즈와 QR 코드 해석기

OpenCV 4.0 Beta release and QR code decoder


엊그제 OpenCV 4.0 Beta 버전이 릴리즈되었습니다. OpenCV 4.0 Beta 버전은 아래 링크에서 다운로드 받을 수 있습니다.

https://github.com/opencv/opencv/releases
https://github.com/opencv/opencv_contrib/releases


OpenCV 4.0 Beta 버전의 특징은 https://opencv.org/opencv-4-0-0-beta.html 에 잘 설명되어 있구요.. 아래는 해당 사이트의 설명을 번역한 것입니다.

================================================
OpenCV 4.0 Beta에는 OpenCV 4.0 Alpha보다 29개의 새로운 패치가 포함되었습니다.

* ONNX* (Open Neural Network Exchange) 가져오기 기능이 향상되어 더 많은 토폴로지를 지원합니다.
* OpenCV DNN 샘플 object_detection.py 파일이 올바른 모델 파라미터를 채울 수 있도록 향상되어 사용하기 쉬워졌습니다.
* G-API (Graph API) - 매우 효율적인 영상 처리 파이프 라인 엔진이 opencv_gapi 모듈로 통합되었습니다.
* 무료 QUirc( https://github.com/dlbeer/quirc) 라이브러리에 기반한 빠른 QR 코드 디코더가 통합되었으며, 이를 이용하여 완전한 QR 코드 검출 및 디코딩이 가능합니다. (640x480 해상도에서 20~80FPS).
* AVX2를 사용하는 18개의 함수, 60개 이상의 커널이 가속화되었습니다.
* iGPU용 Kinect Fusion 알고리즘이 가속화되어 고해상도 볼륨(512x512x512)에서 병렬 CPU 버전보다 3배 빨라졌습니다.
================================================


OpenCV 4.0 Alpha 버전에서는 QR 코드 검출 함수만 들어가 있었는데요, Beta 버전에는 검출과 해석 함수 모두 포함되어 있네요. OpenCV 4.0에 들어가는 QR 코드 해석 기능은 QUirc라는 라이브러리를 OpenCV에서 통합한 것입니다.


QR 코드 해석 성능이 어떨까 궁금해서 예제 코드를 만들어 봤습니다.
(2018/11/14 수정: OpenCV 4.0.0 RC 버전에서 QR 코드 관련 API가 변경되어 코드를 새로 업데이트 하였습니다. OpenCV 4.0.0 Beta 버전용 코드는 아래 [더보기]를 클릭하면 볼 수 있습니다.)

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(void)
{
	VideoCapture cap(0);

	if (!cap.isOpened()) {
		cerr <<"Camera open failed!" << endl;
		return -1;
	}

	QRCodeDetector detector;

	Mat frame, gray;
	while (1) {
		cap >> frame;

		if (frame.empty()) {
			cerr << "Frame load failed!" << endl;
			return -1;
		}

		cvtColor(frame, gray, COLOR_BGR2GRAY);

		vector<Point> points;
		if (detector.detect(gray, points)) {
			polylines(frame, points, true, Scalar(0, 255, 255), 2);

			String info = detector.decode(gray, points);
			if (!info.empty()) {
				polylines(frame, points, true, Scalar(0, 0, 255), 2);
				cout << info << endl;
			}
		}

		imshow("frame", frame);
		if (waitKey(1) == 27)
			break;
	}

	return 0;
}


위 소스 코드는 컴퓨터에 연결된 카메라로부터 프레임을 받아와 QR 코드를 검출하고, QR 코드에 포함된 문자열을 콘솔 명령창에 출력합니다. QR 코드에 노란색 박스가 그려지면 검출만 된거고, 빨간색 박스가 그려지면 해석까지 성공한 상태입니다. 실제로 프로그램을 빌드해서 실행해서 QR 코드를 카메라로 비추면.. 음.. 잘 됩니다. 간간히 몇몇 프레임은 QR 코드를 검출만 하고 해석을 못하는 경우가 생기는데, 제 컴퓨터의 카메라 화질이 너무 안 좋아서 그런건지 라이브러리 성능의 문제인지 명확하지가 않네요.


실제 동작 화면을 캡쳐해서 보여드리면요... 프로그램을 실행해서 아래 QR 코드가 있는 모니터 화면을 카메라로 비추면 콘솔창에 문자열이 출력됩니다.

(화질이 진짜 안 좋죠? :-)


그래도 함수 한 두 개로 QR 코드를 해석할 수 있게 되었네요. 참 쉽네요.. :-)






Posted by kkokkal
: