바코드 라이브러리

**바코드 라이브러리**() 또는 **바코드 SDK**()는 데스크톱, 웹, 모바일 또는 임베디드 애플리케이션에 바코드 기능을 추가하는 데 사용되는 소프트웨어 라이브러리이다. 바코드 라이브러리는 바코드 이미지를 생성하여 표면에 배치하거나, 스캔 또는 카메라로 캡처한 이미지에 포함된 바코드에서 기계 인코딩된 텍스트/데이터를 인식할 수 있게 하는 객체나 서브루틴 세트를 제공한다. 라이브러리는 생성과 인식의 두 가지 모드를 지원할 수 있으며, 일부 라이브러리는 바코드 읽기와 쓰기를 동일한 방식으로 지원하지만 일부는 한 가지 모드만 지원하기도 한다.

현재 바코드 기술을 사용하면 1센트 미만의 비용으로 현실 세계의 모든 사물에 기계 판독 태그나 추가 데이터를 추가할 수 있으며, 카메라가 장착된 모든 기기를 사용하여 사물에 대한 추가 데이터를 식별할 수 있다. 이러한 방식으로 바코드 기술과 바코드 라이브러리의 조합을 통해 저렴한 비용으로 자동 문서 처리 애플리케이션, OMR 애플리케이션, 패키지 추적 애플리케이션 또는 증강 현실 애플리케이션을 구현할 수 있다.

## 역사
최초의 **바코드 SDK**는 소프트웨어 라이브러리가 아니라 MS-DOS 및 윈도우용 독립형 애플리케이션이나 바코드 글꼴 형태로 구현되었다. 당시 바코드는 주로 소매업이나 기업 내부의 요구 사항에 사용되었기 때문에, 바코드 사용자는 바코드를 생성, 인쇄 및 인식하기 위한 올인원 하드웨어 솔루션을 찾았다.

디지털 카메라가 장착된 기기(예: 카메라폰)와 문서 스캐너가 일상적으로 보급되면서 상황이 바뀌었다. 일반적인 장비로 바코드를 스캔하고 인식할 수 있게 되었고, 산업 및 사무용 사용자가 바코드 판독을 위해 값비싼 전문 단일 기능 기기를 구입할 필요가 없어지면서 바코드 쓰기 및 읽기 SDK와 라이브러리에 대한 수요가 증가했다.

바코드 쓰기 라이브러리는 이미 **GNU Barcode**나 **Zint**와 같은 프로젝트에서 바코드 글꼴이나 독립형 애플리케이션으로 구현되어 있었다. 바코드 쓰기 라이브러리의 구현은 단순히 ISO 규격이나 AIM 규격을 따르면 되기 때문에 고도의 컴퓨터 과학 기술을 필요로 하지 않는다. 이는 특수한 파일 형식으로 데이터를 인코딩하는 것과 차이가 없다.

2D 바코드 인코딩은 1D 바코드 대신 열, 행, ECI 또는 데이터 보정 옵션과 같은 추가 인코딩 데이터가 있기 때문에 더 어렵다. MaxiCode나 PDF417과 같은 일부 2D 바코드는 이러한 바코드를 여러 그래픽 파일로 변환하는 우편 주소나 메타데이터와 같은 특수 인코딩 필드도 가지고 있다. 이러한 차이점은 바코드 글꼴 사용만으로는 해결할 수 없으며 여러 매개변수를 처리하는 API가 필요했다.

바코드 읽기 라이브러리는 컴퓨터 비전 기술이 필요하므로 더 복잡하다. 그러나 카메라나 스캐너가 장착된 일반 기기에서 실행할 수 있다. 최초의 라이브러리들은 레이저 스캐너 모드 에뮬레이션을 통해 1D 바코드만 인식할 수 있었다. 이 모드는 전체 이미지를 캡처한 다음 라이브러리가 브레젠험 알고리즘으로 몇 개의 스캔 라인을 만들고, 하드웨어 레이저 스캐너가 하듯 이 라인들로부터 데이터를 인식하려고 시도했다. 이러한 라이브러리의 대표적인 예는 구글이 지원한 초기 **ZXing** 프로젝트, ZBar 또는 기타 솔루션들이 있다.

2D 바코드 인식에는 레이저 스캐너 모드 에뮬레이션이 적합하지 않다. 더욱이 이 방법은 바코드 영역 감지에 어려움이 있어 각도가 기울어진 1D 바코드 감지에 문제를 일으킨다. 1D 및 2D 바코드의 인식 품질을 향상시키기 위해 더 복잡한 컴퓨터 비전 방법들이 구현되었다.

## 응용
바코드 라이브러리는 다양한 서비스 및 산업 분야에 저렴한 비용의 자동 식별 및 데이터 캡처 기능을 제공해 왔다. 이는 엔터테인먼트, 의료, 우편 서비스, 문서 처리 또는 소매 애플리케이션 등이 될 수 있다.

다음과 같은 용도로 사용될 수 있다.
* 광고
* 가상 객체의 빠른 식별을 위한 증강 현실 구현
* 문서 처리에서의 자동 데이터 식별
* 인터넷 페이지로 연결되는 자동 식별 하이퍼링크
* 자동 인식 결제 청구서
* 디자인에서의 바코드 창의적 사용
* 운전면허증, 영수증 또는 여권과 같은 문서의 데이터 입력
* 암호화 키 전송 및 문서 검증
* 소매업에서의 식품 및 상품 추적
* 증강 현실 게임
* 공항, 버스/철도 역에서의 티켓 및 승객 문서 자동 식별
* 물리적 객체와 가상 표현을 연결하는 사물인터넷
* 패키지 추적
* 의료 서비스 또는 산업에서의 환자 또는 의약품 식별
* 명함에서 빠른 정보 추출
* 렌터카, 항공 수하물 및 핵폐기물 추적
* 차량 식별

## 유형
바코드 라이브러리 및 바코드 SDK는 기능에 따라 다음과 같은 유형으로 나눌 수 있다:
* 바코드 글꼴
* 바코드 쓰기 라이브러리
* 바코드 읽기 라이브러리
* 바코드 전체 지원 라이브러리

최초의 바코드 라이브러리는 사용자에게 완전히 투명했으며 특수화된 트루타입 글꼴을 사용하여 간단히 텍스트를 인쇄하는 방식으로 사용되었다. 이는 1D 바코드에서 잘 작동하는데, 1D 바코드는 선형 텍스트와 거의 같으며 때로는 체크섬만 추가되기 때문이다. 2D 바코드에 바코드 글꼴을 사용하는 것도 가능하지만 바코드의 행과 열 설정, 메타데이터와 같은 메타데이터 처리 문제가 있다. 이는 동일한 유형의 바코드에 대해 글꼴 세트에 미리 정의된 서로 다른 메타데이터 값을 가짐으로써 해결된다.

API 호출을 사용하는 바코드 라이브러리는 쓰기 및 읽기 모드에서 더 많은 사용자 정의 기능을 제공한다. 그러나 라이브러리의 일부만이 쓰기 및 읽기 모드를 모두 완벽하게 지원한다. 절반 이상의 라이브러리는 한 가지 모드만 지원한다.

## 바코드 라이브러리 목록
바코드 라이브러리는 다양한 바코드 형식과 프로그래밍 언어를 지원할 수 있다. 또한 읽기 및 쓰기 기능에 대한 지원 범위가 서로 다르다. 가장 일반적인 바코드 라이브러리 및 SDK는 다음 목록에 나타나 있다:

## 권장 사항 및 모범 사례

바코드는 저렴한 비용으로 현실 세계의 모든 사물에 기계 판독 태그를 추가하는 방법이다. RFID 칩이나 이미지 인식을 통한 객체 감지와 같은 다른 모든 방법은 구현 비용이 더 많이 들고 어렵다. 200가지 이상의 바코드 유형이 있어 바코드 유형의 선택이 모호할 수 있다. 최초의 바코드는 60년대에 표준화되었으며 바코드 기능 개발에는 두 번의 물결이 있었다.

바코드 표준 생성의 첫 번째 물결은 60년대에 시작되었으며 이는 1D 바코드였다. 이러한 바코드의 주요 장점은 선형 바코드의 경우 레이저 스캐너로 간단하게 인코딩 및 인식할 수 있다는 것이었다. 이러한 모든 제한 사항은 당시 사용되었던 느린 8비트 컴퓨팅 프로세서와 관련이 있었다. 이로 인해 1D 바코드는 Code 11과 같이 제한된 기호 인코딩을 갖거나, EAN 13, UPCA, EAN 8과 같이 제한된 바코드 길이를 갖거나, 코드 39 바코드와 같이 체크섬 없이 사용되기도 했다. 게다가 이러한 바코드 유형의 정보 인코딩 밀도는 너무 낮다.

또한, 이러한 모든 1D 바코드는 품질이 낮은 체크섬을 갖거나 아예 체크섬이 없어 품질이 너무 낮은 이미지에서의 인식 과정을 예측할 수 없게 만든다. 오픈 소스 엔진은 낮은 품질의 이미지에서 1D 바코드를 인식하지 못하지만, 고급 인식 알고리즘을 갖춘 바코드 엔진은 이러한 바코드를 인식할 수 있다. 불행하게도 낮은 품질 이미지의 인식은 인식된 텍스트에 일부 잘못된 기호를 생성할 수 있다. 저밀도 인코딩, 인코딩 제한 및 취약한 체크섬으로 인해 1D 바코드는 정보 시스템 및 데이터 처리의 현재 요구 사항에 적합하지 않다. 새로운 애플리케이션에서 1D 바코드를 사용하는 것은 GS1 산업 표준에서 요구하는 경우에만 합리적이다.

바코드 표준 구현의 두 번째 방식은 90년대에 시작되었으며 2D 바코드의 개발이었다. 2D 바코드의 주요 장점은 10배 더 높은 인코딩 밀도, 텍스트 인코딩의 제한 없음, 리드 솔로몬 코드와 같은 자체 체크 코드이다. 이는 정확한 인식에 대한 신뢰를 더할 뿐만 아니라 닦여 나가거나 손상된 바코드 데이터의 일부를 복구할 수도 있다. 2D 바코드의 주요 단점은 PDF417을 제외하고는 레이저 스캐너로 인식할 수 없으며 인식을 위해 포토 스캐너가 필요하다는 점이다. 대부분의 2D 바코드는 바이트 모드로 정보를 인코딩할 수 있으며, 이를 통해 8비트 국가별 문자 인코딩 텍스트와 ECI 태그가 포함된 UTF-16, UTF-8과 같은 일반적인 유니코드 문자 집합 텍스트를 모두 인코딩할 수 있다.

새로운 프로젝트는 산업 표준이 허용하는 한 2D 바코드를 사용해야 한다. 이들은 텍스트 인코딩에 제한이 없고 손상되었거나 품질이 낮은 이미지에서도 정확하게 복구될 수 있으며 인식 결과가 완전히 신뢰할 수 있다. 정보 밀도는 1D 바코드와 같거나 심지어 더 작은 영역에 배치할 수 있게 해준다. 여기서 주요 문제는 표시 영역에 대한 요구 사항일 수 있다. 가장 일반적인 QR 코드는 정사각형 크기만 가능하며, Aztec 또는 데이터 매트릭스도 일부 크기에서 그러하다. 높이가 낮은 긴 직사각형 영역이 필요한 경우 직사각형 크기의 데이터 매트릭스(DMRE 참조) 또는 너비 대 높이 비율이 64배 이상 차이 날 수 있는 PDF417을 사용할 수 있다.

## 같이 보기

## 각주

## 외부 링크
* Advantages and disadvantages of barcodes and radio frequency identification in supply chain management
* GS1 barcodes
* Label and Barcode Detection in Wide Angle Image
* Robust 1D Barcode Recognition on Mobile Devices
* Ten steps to GS1 barcode implementation
* Examples of data encoded in barcodes

분류:바코드
분류:API
분류:라이브러리
분류:크로스 플랫폼 소프트웨어