"모든 리딩펜 ISP가 RGB 대신 YUV를 출력하는 이유, NV12와 YUY2의 차이, 그리고 B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 및 Y6 모델에서의 OCR 정확도에 미치는 영향.

게시일: 10월 27, 2023 - 143 조회수

리딩펜 YUV vs RGB 및 컬러 스페이스: 이미지 파이프라인이 픽셀 포맷을 선택하는 방식

대상 독자: 본 글은 B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6 이미지 파이프라인이 왜 raw RGB가 아닌 YUV422 / YUV420를 출력하는지, 포맷 선택이 다운스트림 OCR 및 OID 디코딩에 어떤 영향을 미치는지, 그리고 컬러 스페이스 변환이 실제로 필요한 지점이 어디인지를 이해해야 하는 펌웨어 엔지니어, ISP 통합 리드, OEM 프로덕트 매니저를 대상으로 합니다. 프레임 덤프를 읽어본 경험이 있으며, “RGB888”이 “전송선상 24비트/픽셀”과 동일하지 않다는 사실을 알고 있다고 가정합니다.

컬러 스페이스는 리딩펜 펌웨어에서 가장 과잉 논의되면서 동시에 가장 문서화가 부족한 주제 중 하나입니다. 구매 고객이 “OCR이 RGB를 지원하나요?”라고 물으면 정직한 대답은 ‘아니오’입니다. OCR 엔진은 색상을 소비하지 않고 휘도(luminance)만 소비하기 때문입니다. 그렇다고 컬러 스페이스가 무관한 것은 아닙니다. 버스 대역폭, DRAM 사용량, 지연(latency), 그리고 호스트 SoC이 추가 복사 없이 인코더로 직접 스트리밍할 수 있는지에 영향을 줍니다. 본 글에서는 리딩펜과 관련된 모든 픽셀 포맷을 실측 버스 및 메모리 수치와 함께 단계별로 설명하여, 다음 OEM 계약에서 올바른 포맷을 지정할 수 있도록 돕습니다.

1. 리딩펜 ISP가 RGB 대신 YUV를 출력하는 이유

리딩펜 센서는 카메라 ISP 글에서 다룬 바와 같이 단색(monochrome)입니다. 그렇다면 펌웨어에서 왜 YUV가 언급될까요? 두 가지 이유가 있습니다:

  1. L5, Q8, T2의 디스플레이 프리뷰 파이프라인은 YUV422 입력을 기대하는 소형 LCD 패널을 사용합니다. RGB를 거치게 되면 불필요한 변환 패스가 추가됩니다.
  2. OCR / OID 디코더는 Y(루마) 채널만 사용하고 U와 V는 폐기합니다. 처음부터 데이터를 YUV로 다루면 DRAM 대역폭을 33%~50% 절약할 수 있습니다.

YUV는 밝기(Y)와 색차(U, V)를 분리하는 컬러 스페이스 계열입니다. 인간의 시각 시스템은 색상보다 밝기에 약 3배 더 민감하므로, 크로마 채널을 서브샘플링해도 시각적 손실은 거의 없습니다. 리딩펜에서는 사용자가 이미지를 절대 보지 못하기 때문에(OCR 엔진이 문자를 인식하든 하지 않든) 이 손실이 완전히 보이지 않습니다.

저희 펌웨어에서 사용되는 YUV 레이아웃은 세 가지입니다: YUV422(YUY2), YUV420(NV12 / NV21), 그리고 B1, B2, P2, F8에서 사용하는 그레이스케일 “Y only” 모드입니다. 실제로 마주치는 RGB 레이아웃은 일부 레거시 부트로더 경로의 RGB565이지만, 프로덕션 OCR 펌웨어는 RGB를 사용하지 않습니다.

2. 실무에서 사용되는 세 가지 YUV 레이아웃

YUV422 YUY2는 2픽셀당 4바이트를 패킷합니다: Y0 U0 Y1 V0. 각 픽셀 쌍은 U 샘플 1개와 V 샘플 1개를 공유하고, 각 픽셀은 자체 Y 값을 유지합니다. 이 레이아웃은 전체 루마 해상도와 2:1 수평 크로마 해상도를 보존합니다. 비트 비용은 픽셀당 16비트입니다.

YUV420 NV12는 전체 해상도의 단일 Y 플레인과 양 방향 모두 절반 해상도의 인터리브된 UV 플레인 한 개를 사용합니다. UV 플레인은 U0 V0 U1 V1 … 순으로 인터리브되므로 4픽셀당 6바이트입니다. 비트 비용은 픽셀당 12비트입니다. NV21은 인터리브된 플레인에서 U와 V를 서로 바꿉니다. 저희 하드웨어에서는 레지스터 비트로 선택하며, 소프트웨어 파이프라인 단순화를 위해 NV12를 기본값으로 사용합니다.

Y only 그레이스케일은 가장 저렴한 레이아웃입니다: 픽셀당 8비트, 크로마 없음, 단일 플레인. B1, B2, P2, F8은 디스플레이 없이 OCR 전용 모드로 동작할 때 이 포맷을 스트리밍합니다.

포맷 비트/픽셀 플레인 수 RGB888 대비 대역폭 사용 모델
RGB888 24 1 100% (기준) 프로덕션에서 사용되지 않음
RGB565 16 1 67% 레거시 부트로더 전용
YUY2 (YUV422) 16 1 (인터리브) 67% K7, KF1 디스플레이 경로
NV12 (YUV420) 12 2 50% L5, Q8, T2 디스플레이 경로
Y 전용 8 1 33% B1, B2, F8, P2 OCR 모드

3. 버스 대역폭: 실측 수치

대역폭이 중요한 이유는 ISP, OID/OCR 엔진, 옵션인 LCD 컨트롤러가 모두 동일한 DRAM 버퍼를 읽거나 쓰기 때문입니다. 포맷이 너무 넓으면 버스가 포화되어 프레임 드롭이 발생합니다.

60 fps 연속 스캔 시 L5에서 실측한 DRAM 대역폭:

경로 포맷 MB/s 800 MB/s 버스 대비 %
센서 → ISP RAW10 720 x 540 23.3 3%
ISP → DRAM (쓰기) YUV422 23.3 3%
OCR 엔진 (읽기) Y 플레인만 11.7 1%
LCD 컨트롤러(읽기) YUV422 23.3 3%
총 활성 대역폭 — 81.6 10%

RGB888에서 동일한 경로는 단계당 46.6 MB/s를 전송하여 총 약 163 MB/s, 즉 버스의 20%에 달합니다. 이것이 여유와 여유-여유분이 있는 상태의 차이입니다.

4. OCR 엔진이 Y 플레인만 읽는 이유

ISP 출력을 소비하는 OCR 엔진은 이미지를 2D 휘도 필드로 처리합니다. 그래디언트를 계산하고, 연결 성분 분석을 실행하며, 문자를 CNN 분류기(TC-127)에 전달합니다. 이 단계 중 어느 것도 크로마를 필요로 하지 않습니다. 따라서 펌웨어에서 OCR 입력 DMA를 구성하여 UV 플레인을 완전히 건너뛰고 Y 플레인만 읽도록 합니다. 이렇게 하면 OCR 엔진의 DRAM 읽기 대역폭이 절반으로 줄어듭니다.

K7 및 KF1에서 OCR 엔진은 더욱 공격적입니다. OID 코드 그리드에 정렬된 16 x 16 매크로블록으로 Y 플레인이 분할되는 4:2:0 타일링 패턴으로 Y 플레인을 요청합니다. 이를 통해 캐시 지역성이 향상되어 4.8%에서 6.5%의 추가 속도 향상이 달성됩니다.

Per-Frame DRAM Footprint (640 x 480 image, L5/Q8/T2)

5. YUV → RGB 변환: 실제로 필요한 경우

펌웨어가 YUV를 RGB로 변환해야 하는 경우는 정확히 두 가지입니다.

첫 번째는 L5, Q8 및 T2의 LCD 미리보기 경로입니다. 패널 드라이버 IC는 특정 동기 모드에서 RGB666 또는 RGB888을 기대합니다. NV12에서 RGB로의 변환은 SoC 디스플레이 컨트롤러 내의 하드웨어 CSC(색 공간 변환기)에 의해 수행됩니다. 변환은 SD 콘텐츠에 BT.601 제한 범위 매트릭스를 사용하고 HD 콘텐츠에 BT.709를 사용합니다. 소스가 센서 네이티브이며 방송 비디오가 아니므로 BT.601을 사용합니다.

두 번째는 타사 Android 앱이 USB를 통해 미리보기 프레임을 가져오는 경우입니다. 일부 레거시 학교 앱은 RGB888을 기대합니다. 변환은 USB 가젯 드라이버의 소프트웨어 CSC에 의해 수행되며, L5의 호스트 CPU에서 프레임당 약 4.6 ms가 소요됩니다. 미리보기 프레임 속도가 15 fps로 제한되므로 이 지연은 허용됩니다.

OID 및 OCR의 경우 YUV에서 RGB로의 변환이 발생하지 않습니다. Y 플레인은 바이너라이저로 직접 전달됩니다.

6. BT.601 대 BT.709 대 Full-Range 대 Limited-Range

정확한 YUV-RGB 변환을 정의하는 세 가지 매개변수는 다음과 같습니다.

  1. 계수 행렬 (SD용 BT.601, HD용 BT.709, UHD용 BT.2020).
  2. 양자화 범위(방송의 경우 제한 범위 16~235, PC 및 센서의 경우 전체 범위 0~255).
  3. 크로마 샘플 위치 (코사이트 또는 인터스퍼스, MPEG 방식 코덱에 영향).

리딩펜 카메라의 경우 센서가 0~255 루마를 출력하고 이를 전체 범위로 처리하므로 소스는 항상 BT.601 전체 범위입니다. 디스플레이 경로는 LCD 패널이 해당 방식으로 구성된 경우 BT.601 제한 범위를 사용하며, 이 가격대의 대부분 패널이 그렇습니다. 불일치는 OEM 빌드에서 자주 발생하는 통합 버그 중 하나입니다. 통합 담당자가 LCD에서는 제한 범위를 설정하고 ISP에서는 전체 범위를 설정하면 이미지가 흐릿하게 보입니다. 해결책은 ISP 재조정이 아닌 패널 드라이버의 레지스터 변경입니다.

YUV Sample Positions in a 4 x 2 Pixel Block (NV12 vs YUY2)

7. OEM 계약에서 올바른 형식을 지정하는 방법

OEM 계약에는 정확한 픽셀 형식, 레이아웃, 범위 및 샘플 위치를 명시해야 합니다. 방어 가능한 사양은 다음과 같습니다.

  • ISP 출력 형식: NV12(YUV420), 8비트 루마, 8비트 인터리브 크로마.
  • 양자화 범위: 전체 범위(Y 0~255, UV 0~255, 중립은 128).
  • 색 매트릭스: BT.601.
  • 샘플 위치: cosited(크로마 샘플이 매 두 번째 열의 루마 샘플에 위치).
  • DRAM 레이아웃: 기본 주소의 Y 평면, 기본 주소 + 폭 x 높이의 UV 평면.
  • 스트라이드: 명시적으로 협의되지 않는 한 width와 동일해야 함(패딩 없음).

계약서에 대신 "RGB 출력"이라고 되어 있다면 공급업체는 CSC 단계를 추가해야 하므로 더 높은 BOM 비용과 더 긴 지연 시간을 제시합니다. 11년간 독해 펜을 출하하면서 ISP에서 RGB가 실제로 필요한 고객 애플리케이션을 본 적이 없습니다.

8. 포맷 선택의 종단간 지연 시간 비용

포맷 선택에 따라 파이프라인 전반의 지연 시간이 1.5 ms ~ 4.0 ms 달라집니다. L5에서 60 fps로 측정:

단계 Y 전용 NV12 RGB888
센서 → ISP 6.0 ms 6.0 ms 6.0 ms
ISP 파이프라인 16.0 ms 22.0 ms 28.0 ms
DRAM 쓰기 4.0 ms 6.0 ms 12.0 ms
OCR 읽기 3.0 ms 5.0 ms 9.0 ms
총계 29.0 ms 39.0 ms 55.0 ms

B1, B2, F8 및 P2의 OCR 엔진 경로는 Y 전용을 사용하며 29 ms로 동작합니다. RGB888은 동일한 펜을 55 ms로 끌어올리며, 이는 인터랙티브 인식에서 사람이 인지할 수 있는 50 ms 임계값을 초과합니다. 이것이 YUV를 유지해야 하는 가장 강력한 근거입니다.

9. 엣지 케이스: 색 공간 변환이 문제가 되는 경우

지난 24개월 동안 세 건의 OEM 프로젝트에서 색 공간 관련 버그가 발생했습니다.

  1. 중동 유통사가 RGB 출력을 요청한 사례가 있습니다. RGB 입력을 기대하는 서드파티 OCR SDK와 통합하기 위해서였습니다. 소프트웨어 CSC를 추가해 프레임당 지연이 39 ms에서 52 ms로 늘어났고, 최종 고객이 인식 지연을 인식해 결국 RGB 출력 요청을 철회했습니다.
  2. 학교용 태블릿 통합사가 LCD를 제한 범위로 설정한 반면 ISP는 전체 범위로 설정해버린 사례가 있습니다. LCD 프리뷰가 뿌옇게 보여 휘도 0~80이 16~80에 매핑되는 현상이 발생했고, 패널 드라이버 패치를 제공했습니다.
  3. 출판사가 RGB565 부트로더 경로를 사용하는 커스텀 사전을 통합하면서 YUV420을 기대하는 OCR 엔진을 붙이려 한 사례가 있습니다. 통합 테스트에서 이 불일치가 발견되었고, OCR 엔진을 패킹된 RGB565 입력으로 포팅해 6일 만에 납품했습니다.

구매자 팁: 다운스트림 엔진이 사용하는 정확한 형식으로 공급사에 프레임 덤프를 반드시 요청하세요. YUV 덤프는 RGB 덤프의 33% 크기이며, ISP가 파이프라인에 맞게 올바르게 설정되었는지 확인할 수 있는 유일한 방법입니다.

10. 프로젝트에 맞는 올바른 형식 지정

OCR 전용 펜(B1, B2, F8, P2, K7, KF1, Q6, Y6)은 Y 전용 그레이스케일 출력을 권장합니다. 가장 낮은 지연과 가장 작은 DRAM 점유율을 제공합니다.

디스플레이 탑재 펜(L5, Q8, T2)은 프리뷰 파이프라인용 NV12, OCR 파이프라인용 Y 전용을 지정하세요. 두 경로는 Y 평면을 공유하며 ISP가 DRAM에 쓴 뒤 분기됩니다.

Android USB 프리뷰 경로에는 NV12 입력을 지정하고, USB 가드릿 드라이버가 필요 시 RGB 변환을 수행하도록 하세요. 이 변환은 15 fps 프리뷰로 동작하며 OCR 크리티컬 경로에 포함되지 않아입니다.

ISP가 처음에 Y 평면을 생성하는 방식에 대한 자세한 내용은 리딩펜 카메라 ISP와 이미지 시그널 프로세서 페이지를 참조하세요. OCR 엔진이 Y 평면을 사용하는 방식은 리딩펜 OCR 엔진 vs 딥러닝 OCR 페이지를 참조하세요. 이진화된 Y를 사용하는 OID 디코더는 OID 리딩펜 기술의 동작 원리 페이지를 참조하세요. 지정한 stride로 NV12를 출력하는 샘플 펌웨어를 요청하려면 /request-a-quote.

을(를) 확인하세요.

견적 요청 — 공장에서 빠르게 회신받기

Frequently Asked Questions

리딩펜 ISP가 RGB 대신 YUV를 출력하는 이유는 무엇인가요?
YUV는 휘도(luma)와 색차(chroma)를 분리하여 OCR 엔진이 Y 플레인만 소비할 수 있게 하며, RGB888 대비 DRAM 대역폭을 33%~67% 절감합니다. L5에서 60 fps로 동작할 때 YUV422는 23.3 MB/s를 사용하는 반면, RGB888은 46.6 MB/s를 사용합니다. 낮은 대역폭은 종단 간 지연 시간을 12~26 ms 단축하여, 인터랙티브 OCR이 인간이 인지하는 50 ms 임계값을 넘지 않도록 합니다.
리딩펜에서 NV12와 YUY2의 차이는 무엇인가요?
YUY2(YUV422)는 스캔라인 단위로 휘도와 색차를 16 bits per pixel로 인터리브하며, 수직 색차는 완전하게 유지하고 수평 색차는 절반 해상도로 저장합니다. NV12(YUV420)는 12 bits per pixel을 사용하고 UV 플레인을 양 축 모두 절반 해상도의 별도 평면으로 둡니다. L5, Q8, T2는 디스플레이 프리뷰 경로에서 NV12를 사용하는데, 2.4~3.5인치 LCD 패널에서 시각적 품질 저하 없이 YUY2 대비 대역폭을 25% 절약할 수 있기 때문입니다.
OCR 엔진이 U와 V 채널을 필요로 하는 경우가 있나요?
없습니다. B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6 생산 펌웨어에서 OCR 엔진은 Y 플레인만 읽습니다. ISP가 DRAM에 기록한 후 색상 정보는 폐기됩니다. 이는 인쇄된 텍스트가 모노크롬이고 인식 네트워크가 그레이스케일 이미지로 학습되었기 때문에 의도된 설계입니다.
LCD 프리뷰는 어떤 양자화 범위를 사용해야 하나요?
패널이 제한 범위로 설정되어 있는 경우 ISP 출력에는 BT.601 전체 범위를, LCD 입력에는 BT.601 제한 범위를 사용하세요. ISP는 전체 범위인데 패널은 제한 범위로 혼용하면 이미지가 뿌옇게 표시되고, ISP는 제한 범위인데 패널은 전체 범위로 혼용하면 클리핑이 발생합니다. 당사 패널 드라이버의 기본값은 제한 범위이며, ISP의 기본값은 전체 범위이며, 이는 당사 펌웨어가 예상하는 조합입니다.
필요할 때 YUV-RGB 변환이 얼마나 많은 지연 시간을 추가하나요?
L5에서 USB 가젯 드라이버의 소프트웨어 NV12-RGB888 변환은 720 x 540 해상도에서 프레임당 약 4.6 ms가 소요됩니다. 제한된 15 fps 프리뷰 속도에서 이는 1초의 벽시계 시간당 69 ms의 지연 시간을 추가하지만 거의 인지되지 않습니다. 디스플레이 컨트롤러의 하드웨어 CSC는 0.3 ms 미만의 지연을 추가하며, 온 디바이스 LCD 프리뷰에 사용됩니다.
장바구니
이 사이트에서 쿠키를 허용하시면 더 나은 경험을 하실 수 있습니다. 쿠키 정책
Chat on WhatsApp