Barcode Detection
참고
이 API에는 유효한 software license 가 필요합니다.
바코드 감지 API를 사용하면 2D 이미지에서 바코드를 감지하고 디코딩할 수 있습니다.
바코드는 일반적으로 평행선, 공간 또는 도형 패턴으로 데이터를 시각적으로 기계가 읽을 수 있도록 표현한 것으로, 제품 번호와 같은 정보를 인코딩합니다. Zivid SDK는 다음과 같은 선형(1D) 및 행렬(2D) 바코드 형식을 지원합니다.
Linear: EAN-13, EAN-8, Code 128, Code 93, Code 39, UPC-A, UPC-E
Matrix: QR Code, Data Matrix
지원되는 바코드 형식의 예입니다.
바코드는 다양한 크기로 제공되며, 가장 작은 막대 또는 공간의 너비가 주요 크기 기준입니다. 예를 들어, 표준 소매용 선형 바코드는 일반적으로 7mil(0.178mm)에서 13mil(0.330mm) 사이입니다. 작은 바코드일수록 안정적으로 감지하고 디코딩하려면 더 높은 해상도가 필요합니다.
동일한 거리에서 캡처한 다양한 Code 128 바코드 크기의 예입니다.
Barcode Detection API
바코드 감지기를 초기화하는 것부터 시작하세요. 이 작업은 한 번만 수행해야 하며, 매번 캡처할 때마다 수행해서는 안 됩니다.
그런 다음 모든 형식을 검색하는 대신, 지원되는 바코드 형식 중 어떤 형식을 감지할지 지정합니다. 이렇게 하면 감지 속도가 빨라지고 디코딩이 더욱 강력해집니다. 이 예제에서는 단순화를 위해 지원되는 모든 형식을 일반화하고 선택합니다.
// Select your specific barcode formats for optimal performance
const auto linearFormatFilter = LinearBarcodeFormat::code128 | LinearBarcodeFormat::code93
| LinearBarcodeFormat::code39 | LinearBarcodeFormat::ean13
| LinearBarcodeFormat::ean8 | LinearBarcodeFormat::upcA
| LinearBarcodeFormat::upcE;
const auto matrixFormatFilter = MatrixBarcodeFormat::qrcode | MatrixBarcodeFormat::dataMatrix;
# Select your specific barcode formats for optimal performance
linear_format_filter = {
LinearBarcodeFormat.code128,
LinearBarcodeFormat.code93,
LinearBarcodeFormat.code39,
LinearBarcodeFormat.ean13,
LinearBarcodeFormat.ean8,
LinearBarcodeFormat.upcA,
LinearBarcodeFormat.upcE,
}
matrix_format_filter = {MatrixBarcodeFormat.qrcode, MatrixBarcodeFormat.dataMatrix}
바코드를 성공적으로 감지하고 디코딩하려면 선명하고 노출이 잘 된 2D 이미지가 매우 중요합니다. 바코드 감지기에서 권장하는 2D 설정을 사용하여 2D 프레임을 캡처하세요.
그런 다음 캡처된 2D 프레임에서 바코드 감지 및 디코딩을 수행합니다. 여기서는 선형 바코드와 매트릭스 바코드를 모두 읽지만, 특정 유형의 바코드만 읽도록 주의하세요.
마지막으로, 결과 바코드 코드, 형식 및 픽셀 위치를 인쇄합니다.
if(!linearBarcodeResults.empty())
{
std::cout << "Detected " << linearBarcodeResults.size() << " linear barcodes:" << std::endl;
for(const auto &result : linearBarcodeResults)
{
std::cout << "-- Detected barcode " << result.code() << " on format " << toString(result.codeFormat())
<< " at pixel " << result.centerPosition() << std::endl;
}
}
if(!matrixBarcodeResults.empty())
{
std::cout << "Detected " << matrixBarcodeResults.size() << " matrix barcodes:" << std::endl;
for(const auto &result : matrixBarcodeResults)
{
std::cout << "-- Detected barcode " << result.code() << " on format " << toString(result.codeFormat())
<< " at pixel " << result.centerPosition() << std::endl;
}
}
if linear_barcode_results:
print(f"Detected {len(linear_barcode_results)} linear barcodes:")
for result in linear_barcode_results:
print(
f"-- Detected barcode {result.code()} on format {result.code_format()} at pixel {result.center_position()}"
)
if matrix_barcode_results:
print(f"Detected {len(matrix_barcode_results)} matrix barcodes:")
for result in matrix_barcode_results:
print(
f"-- Detected barcode {result.code()} on format {result.code_format()} at pixel {result.center_position()}"
)
Barcode Detection in Zivid Studio
팁
Zivid Studio에서 바코드를 감지하는 데는 소프트웨어 라이선스가 필요하지 않습니다.
Zivid Studio를 사용하면 바코드 인식을 쉽게 테스트할 수 있습니다. 카메라에 연결하고 바코드 프리셋을 선택하여 바코드가 포함된 장면을 2D로 캡처합니다. 그런 다음 View → Show barcodes 를 클릭하여 디코딩된 바코드를 이미지에 시각화합니다.
감지된 바코드를 Zivid Studio에서 시각화했습니다.
View → Configure barcodes to detect 에서 특정 바코드 형식을 선택하면 감지 속도를 높일 수 있습니다.
Barcode Detection Performance
탐지 및 디코딩 성능은 다음을 포함한 여러 요인에 따라 달라집니다.
바코드 크기
바코드까지의 거리
이미지 해상도
이미지 초점
수평 및 수직 FOV
이러한 요소들은 바코드 표면의 공간적 해상도를 효과적으로 구성하는데, 이는 안정적인 감지와 디코딩을 위해 최대화하는 것이 중요합니다.
이미지 해상도와 초점은 카메라 설정으로 제어할 수 있으며, 최적의 촬영 설정을 위해 BarcodeDetector::suggestSettings(camera) 권장합니다. 카메라의 수평 및 수직 FOV는 각 카메라 모델마다 고정되어 있으며, FOV가 클수록 공간 해상도가 낮아집니다. 바코드까지의 거리는 애플리케이션에서 어느 정도 제한 조건 내에서 제어할 수 있지만, 카메라의 작동 범위에 따라서도 제한됩니다.
따라서 바코드 감지에 권장되는 카메라는 Zivid 2+ MR130과 MR60입니다. 이 카메라들은 작동 범위 내에서 충분한 공간 해상도를 제공하기 때문입니다. 아래는 다양한 거리, 방향 및 시야각(FOV) 내 배치에서 검증된 다양한 바코드에 대한 몇 가지 벤치마크입니다.
팁
신뢰할 수 있는 디코딩 결과를 얻으려면 녹색 영역 내에 머물러야 합니다.
Version History
SDK |
Changes |
|---|---|
2.17.0 |
Barcode detection API가 추가되었습니다. |