Ultralytics YOLO26을 사용한 장면 텍스트 OCR
장면 텍스트 OCR이란 무엇인가요?#
광학 문자 인식(OCR)은 이미지에서 텍스트를 감지하고 읽습니다. OCR 솔루션은 Ultralytics YOLO26 텍스트 detector와 텍스트 인식 백엔드를 결합합니다. 축 정렬 감지 상자, 방향 상자(OBB), 세그멘테이션 폴리곤을 지원하며, 인식된 텍스트를 읽기 순서대로 반환합니다.
감지와 인식은 별도의 구성 요소이므로 장면 텍스트 detector를 PaddleOCR 또는 자체 인식 모델과 조합할 수 있습니다.
장면 텍스트 OCR을 사용하는 이유#
- 유연한 텍스트 형상: 수평, 회전 또는 불규칙한 텍스트에 감지, OBB 또는 세그멘테이션 모델을 사용합니다.
- 교체 가능한 인식 기능: 추가 통합 코드 없이 PaddleOCR을 실행하거나 다른 모델용 callable을 전달할 수 있습니다.
- 구조화된 출력: 하나의 결과 객체에서 인식된 텍스트, 인식 및 감지 신뢰도, 원본 형상, 주석이 추가된 이미지에 액세스할 수 있습니다.
YOLO26으로 장면 텍스트 OCR 실행하기#
PaddleOCR은 선택 사항이며, OCR을 recognizer="paddleocr"로 생성하면 로드됩니다. PaddleOCR 3.x와 CPU용 PaddlePaddle 빌드가 설치되어 있지 않으면 설치합니다. GPU 인식을 사용하려면 먼저 호환되는 paddlepaddle-gpu 빌드를 설치하세요. 기본 Ultralytics 종속성에는 OCR 패키지가 추가되지 않습니다.
이미지와 텍스트 detector를 OCR 솔루션에 전달합니다. 결과에는 주석이 추가된 이미지와 인식된 텍스트가 포함됩니다.
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"YOLO26-Text 체크포인트#
공개 YOLO26-Text 제품군은 n, s, m, l, x OBB 체크포인트를 제공합니다. ULTRALYTICS_API_KEY에 자체 Ultralytics Platform API 키를 설정한 다음, Platform URI로 체크포인트를 로드합니다.
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)더 큰 모델을 사용하려면 yolo26n-text을 yolo26s-text, yolo26m-text, yolo26l-text 또는 yolo26x-text로 바꿉니다.
OCR 인수#
다음은 OCR 인수 표입니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일의 경로입니다. |
recognizer | str 또는 Callable | 'paddleocr' | BGR crop을 입력으로 받아 (text, confidence)을 반환하는 텍스트 인식 백엔드 또는 callable입니다. |
line_width | int | 2 | Solution에서 그리는 상자, 키포인트 및 개수 표시의 선 두께입니다. |
verbose | bool | True | 프레임별 입력 형태, 클래스 개수 및 처리 속도 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다. |
또한 다음 시각화 설정도 지원됩니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True이면 주석이 추가된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 얻는 데 유용합니다. |
show_conf | bool | True | 각 감지 결과의 레이블 옆에 신뢰도 점수를 표시합니다. 각 감지 결과에 대한 모델의 확신도를 파악할 수 있습니다. |
show_labels | bool | True | 시각화 출력에 각 감지 결과의 레이블을 표시합니다. 감지된 객체를 즉시 파악할 수 있습니다. |
장면 텍스트 OCR 작동 방식#
- 텍스트 감지: YOLO26은 축 정렬 상자, 방향 상자 또는 세그멘테이션 폴리곤을 생성합니다.
- 인식용 crop 생성: 상자는 이미지 경계에 맞게 잘라냅니다. OBB는 가장 왼쪽에서 오른쪽으로 이어지는 변을 기준으로 affine 보정하므로, 거의 정사각형인 상자는 똑바로 유지되고 기울어진 텍스트 줄은 읽기 방향에 맞춰 수평이 됩니다. 세그멘테이션 폴리곤은 최소 면적 회전 사각형을 보정하며 원본 폴리곤은 그대로 유지합니다. PaddleOCR과 마찬가지로 너비보다 높이가 1.5배 이상인 crop은 시계 반대 방향으로 90° 회전합니다.
- 텍스트 인식: PaddleOCR은 모든 crop을 16개 단위로 처리합니다. 사용자 지정 인식기는 한 번에 하나의 crop을 받습니다.
- 결과 정렬 및 렌더링: 텍스트를 가로줄 단위로 그룹화하고 위에서 아래로, 왼쪽에서 오른쪽으로 정렬합니다. 시각화에는 중국어와 같은 비ASCII 텍스트를 표시하기 위해 유니코드 글꼴을 사용합니다.
좌표는 항상 detector 입력이나 인식용 crop이 아닌 원본 이미지를 기준으로 합니다.
사용자 지정 인식기 사용하기#
callable을 전달하면 감지, 형상 또는 정렬 경로를 변경하지 않고 다른 인식 모델을 통합할 수 있습니다. callable은 비어 있지 않은 각 BGR numpy.ndarray crop에 대해 한 번 실행됩니다. 배치 결과 목록이 아니라 호출당 (text, confidence) 튜플 하나를 반환합니다.
| 튜플 항목 | 허용되는 유형 | 설명 |
|---|---|---|
text | str | 이 crop에서 디코딩된 텍스트입니다. 인식된 텍스트가 없으면 ""을 반환합니다. |
confidence | float, int 또는 numpy.floating | 숫자 형식의 인식 신뢰도입니다. 솔루션이 이를 float으로 변환합니다. |
def recognize(crop):
# BGR crop에 인식 모델을 실행하고 여기서 출력을 디코딩합니다.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)지원되지 않는 백엔드 이름을 사용하면 ValueError이 발생합니다. 감지된 텍스트가 없으면 result.texts은 비어 있으며 인식기는 호출되지 않습니다.
OCR 결과#
각 호출은 SolutionResults 객체를 반환합니다. 주석이 추가된 이미지에는 result.plot_im를 사용하고, 결정론적 읽기 순서의 레코드에는 result.texts을 사용합니다.
| 키 | 유형 | 설명 |
|---|---|---|
text | str | 인식된 텍스트입니다. |
confidence | float | 감지 신뢰도와 별도로 유지되는 인식 신뢰도입니다. |
detection_confidence | float | YOLO detector 신뢰도입니다. |
detection_index | int | 읽기 순서로 정렬하기 전의 원본 감지 인덱스입니다. |
polygon | list[list[float]] | 원본 이미지 기준 폴리곤입니다. 상자 및 OBB 감지의 경우 네 꼭짓점이며, 마스크 감지의 경우 마스크 윤곽선입니다. |
종속성 및 라이선스#
| 구성 요소 | 필수 | 역할 | 라이선스 |
|---|---|---|---|
| Ultralytics | 예 | YOLO 감지, crop 형상 및 결과 오케스트레이션 | AGPL-3.0 |
| PaddlePaddle | recognizer="paddleocr"에만 해당 | 인식 런타임 | Apache-2.0 |
| PaddleOCR 3.x | recognizer="paddleocr"에만 해당 | 텍스트 줄 인식 모델 및 추론 어댑터 | Apache-2.0 |
| 사용자 지정 callable | 아니요 | 사용자 소유의 인식 통합 | 백엔드에서 정의 |
PaddleOCR은 처음 사용할 때 인식 가중치를 다운로드할 수 있습니다. 해당 아티팩트를 패키징하거나 배포하기 전에 선택한 모델의 모델 카드와 재배포 약관을 검토하세요. 사용자 지정 체크포인트 라이선스는 별도로 적용됩니다.
자주 묻는 질문#
예.
recognizer으로 callable을 전달하고 각 BGR crop에 대해(text, confidence)을 반환하면 됩니다. 입력 및 출력 규약은 사용자 지정 인식기 사용하기를 참조하세요.아니요. OCR은 추적 ID나 캐시된 인식 결과 없이 각 입력 이미지를 독립적으로 처리합니다. 프레임별 OCR이 필요한 경우 각 비디오 프레임을 별도의 입력으로 처리하세요.
일반적인 내보내기 모드로 YOLO detector를 내보낼 수 있지만, PaddleOCR이나 사용자 지정 인식기는 ONNX, TensorRT 또는 다른 detector 아티팩트에 포함되지 않습니다. 내보낸 detector와 인식 런타임을 별도 구성 요소로 배포하거나 이 Python 구성 레이어를 유지하세요.
댓글
질문을 하거나 결과를 공유하거나 다른 사람을 도와주세요.