Field Notes고용량 컬러 바코드

Gavin Jancke

우리는 모두 바코드에 너무 익숙한 나머지 많은 경우 의식조차 하지 못합니다. 바코드는 일상 생활의 도처에 존재하며 음식 포장지부터 배송 레이블에 이르기까지 모든 곳에 사용됩니다. 1974년 소매 산업에 등장한 첫 1D 바코드는 각기 폭이 다른 여러 수직 막대로 구성되었으며 12자리 숫자를 저장했습니다. 컴퓨팅 성능이 향상되면서 바코드는 발전을 거듭하여 80년대 후반에는 흑백 2D 바코드(매트릭스 코드)가 개발되었습니다. 이 바코드는 몇 자리의 숫자에 불과했던 데이터 밀도를 수백 바이트로 늘렸습니다.

필자는 2003년 위조 방지 생체 ID 카드와 관련된 Microsoft Research 프로젝트에서 작업을 시작했습니다. 당시 필자는 이름, 나이와 같은 암호화 데이터뿐만 아니라 지문 또는 홍채 스캔 템플릿도 저장해야 했습니다. 기존의 흑백 바코드를 사용하여 필요한 데이터를 모두 저장하려면 바코드가 ID 카드 자체보다 커지는 문제가 발생했고 따라서 새로운 접근 방식이 필요했습니다.

필자는 흑백 2D 바코드의 표준이었던 기호 하나당 1비트를 뛰어넘어 더 많은 정보를 저장할 방법을 찾아야 했습니다. 흑백 대신 컬러를 사용하는 방법으로 저장되는 데이터 용량을 2비트(4색 사용) 또는 3비트(8색 사용)로 늘릴 수 있었습니다.

또한 필자는 스캔 시 등록 성능을 떨어뜨리지 않으면서 기호를 더 촘촘하게 채워 넣을 수 있는지 확인하기 위해 기호의 모양도 실험했습니다. 처음에는 6각형이 괜찮아 보였지만 모양이 서로 겹치면서 컴퓨터가 이를 명확히 인식하지 못하는 문제가 발생했습니다.

필자는 결국 삼각형으로 결정했습니다. 삼각형은 좁은 공간에서 엇갈려 배치하기 편하면서도 각기 개별적인 모양으로 ID를 잘 유지했습니다. 여러 색의 삼각형으로 이루어진 행을 사용하면서 필자는 밀도 용량을 3D로 늘리는 데 성공했습니다.

janke.fieldnotes.gif

이 작업에는 고민해야 할 변수가 많았습니다. 색 사용에 따른 가장 큰 과제 중 하나는 인쇄 사양과 조명 조건에 따른 편차입니다. 사람의 눈으로는 쉽게 색을 구분할 수 있지만(색맹이 아니라면) 컴퓨터 입장에서는 그렇게 명확히 구분이 되지 않습니다.

필자는 소프트웨어에서 정확히 색을 읽도록 하기 위해 여러 가지 접근 방법을 사용했습니다. 실제 바코드에 사용된 기준 색이 포함된 팔레트를 거의 알아볼 수 없을 정도로 작게 만들어 바코드 내에 넣었습니다. 이 팔레트는 예를 들어 특정 빨간색을 구성하는 요소를 정확히 지정하는 조정 메커니즘을 제공했습니다. 또한 필자는 색 공간 이론을 사용하여 색을 집합으로 분류하는, 가벼운 사용자 지정 색 묶음 알고리즘과 같은 고급 기술도 시험했습니다. 이 두 가지 접근 방법은 모두 잘 동작했고 서로를 보완했습니다.

이 프로젝트에서 필자의 목표 중 하나는 휴대폰에서 바코드를 읽을 수 있도록 하는 프로그램을 작성하는 것이었습니다. 휴대폰의 경우 열악한 조명, 그리고 고정 초점 길이의 흐릿한 렌즈를 고려해야 합니다. 더 어려운 문제는 이 컴퓨터 시각 구현 작업을 정수 기반의 느린 휴대폰 CPU에서 수행해야 한다는 점이었습니다. 따라서 팀은 최소한의 픽셀만 처리하면서 이미지의 바코드를 탐지하는 방법에 대한 신뢰할 수 있는 이론을 제시해야 했습니다. 스캔은 밝고 선명한 LCD 패널부터 어둡고 흐릿한 인쇄물에 이르기까지 다양한 판독 대상 품질에 걸쳐 동작해야 했습니다.

최종 알고리즘은 실시간 카메라 비디오 프레임의 바코드 이미지를 실제 프레임 속도보다 더 빠르게 해독합니다(200Mhz CPU에서 약 10ms). 이미지에서 감지가 가능한 선에서 최소한의 데이터 페이로드로 바코드를 만들 수 있는 최소한의 픽셀 수는 약 45 x 45 픽셀입니다.

다양한 조건에서 이러한 모든 기능이 동작하도록 다듬는 데는 2년 이상이 걸렸습니다. 이 기술은 최근 타사로 라이선스되었는데, 올해 하반기에는 몇 가지 흥미로운 응용 사례가 나올 것입니다.

Gavin Jancke는 Microsoft Research의 엔지니어링 책임자이며 Advanced Development Group과 Web Experience 팀을 이끌고 있습니다. 이전에는 SQL Server의 소프트웨어 엔지니어, 제품 지원 엔지니어로 일했으며 Bill Gates 기술 자문 참모진의 일원으로 활동했습니다.