TL;DR
이 튜토리얼은 Roboflow 플랫폼에서 RF-DETR Small 모델을 사용해 P&ID 도면의 11개 기호 클래스를 검출하고, 검출된 계측기 영역을 Dynamic Crop과 GLM-OCR로 읽어 기기 텍스트를 추출하는 전체 파이프라인을 구현한다. 약 3,800장 데이터와 70/15/15 분할, 512×512 전처리를 통해 학습한 모델은 검증에서 mAP@50 99.2%와 F1 98.1%를 기록해 높은 검출 성능을 보였다. 워크플로는 시각화 분기와 OCR 분기를 분리해 주석 이미지를 생성하고 기계 판독 가능한 태그 리스트를 반환하며, 실제 적용 전에는 다양한 스캔 품질과 도면 규약에 대한 추가 검증이 권장된다.
섹션별 상세

- 학습된 RF-DETR Small 모델은 검증 세트에서 mAP@50 99.2%를 달성했다. — Metrics 패널의 Valid Set 수치(‘mAP@50 99.2%’)와 본문 내 평가 결과 문단. 출처



- 워크플로는 두 분기로 동작하며 하나는 모든 검출 시각화, 다른 하나는 계측기 관련 검출만 필터링해 OCR을 수행한다. — 배포 및 워크플로 섹션의 흐름 설명과 워크플로 다이어그램 스크린샷. 출처
def run(self, tag_detections, ocr_text):
def to_items(value):
if value is None:
return []
if isinstance(value, np.ndarray):
return to_items(value.tolist())
if isinstance(value, (list, tuple)):
return list(value)
return [value]
def clean_one_line(value):
if value is None:
return ""
if isinstance(value, np.ndarray):
return clean_one_line(value.tolist())
if isinstance(value, dict):
parts = []
for v in value.values():
s = clean_one_line(v)
if s:
parts.append(s)
return " ".join(parts)
if isinstance(value, (list, tuple, set)):
parts = []
for v in value:
s = clean_one_line(v)
if s:
parts.append(s)
return " ".join(parts)
s = str(value)
s = s.replace("```json", " ").replace("```", " ")
s = " ".join(s.replace("\r", " ").replace("
", " ").replace("\t", " ").split())
if s.lower() in ["none", "null", "[]", "{}"]:
return ""
return s
raw_items = to_items(ocr_text)
cleaned_texts = [clean_one_line(item) for item in raw_items]
detection_count = len(tag_detections) if tag_detections is not None else 0
if detection_count == 0:
return {"instrument_text": []}
output_text = []
for i in range(detection_count):
text = cleaned_texts[i] if i < len(cleaned_texts) else ""
output_text.append(text if text else "unreadable")
return {"instrument_text": output_text}이 코드는 OCR 결과와 태그 검출 리스트를 입력으로 받아 각 검출에 대응하는 단일 행 문자열을 반환하는 사용자 정의 포맷 블록의 핵심 구현이다. 내부적으로 입력을 리스트 형태로 정규화하고 딕셔너리·중첩 리스트·문자열 등 다양한 OCR 출력 형식을 공백으로 결합해 한 줄 문자열로 정리하며, null·빈 구조는 빈 문자열로 바꾼다. 검출 수보다 OCR 결과가 적으면 나머지 항목은 빈 값으로 처리하고, 최종적으로 비어 있는 항목은 "unreadable"로 표기해 출력 순서를 보존한 instrument_text 리스트를 반환한다.

- OCR 후 출력은 Dimension Collapse로 병합되고 사용자 정의 블록이 빈 결과를 'unreadable'로 변환해 순서를 보존한다. — OCR 파이프라인 설명과 코드 블록(포맷 블록) 서술. 출처
용어 해설
- RF-DETR
- — RF-DETR은 객체 검출을 위해 설계된 Transformer 기반 구조이며, Roboflow가 제공하는 튜토리얼에서는 소형(Small) 크기 모델을 학습해 P&ID 기호 11개 클래스를 식별하는 데 사용되었다. 입력 이미지는 일관된 방향과 해상도로 전처리(자동 회전, 512×512 리사이즈)되어 모델에 공급되며, 학습은 Roboflow 플랫폼에서 실행되어 최고 성능 모델을 저장하도록 설정되었다. 검증 결과 mAP@50 99.2% 등의 지표로 높은 정확도를 보인 것이 보고되었다.
- GLM-OCR
- — GLM-OCR은 이미지 크롭 영역에서 텍스트를 추출하는 텍스트 인식 블록으로, 튜토리얼에서는 검출된 계측기 영역을 Dynamic Crop으로 잘라낸 뒤 각 크롭을 독립적으로 OCR에 전달해 기호 태그(예: FT 1702)를 읽도록 구성되었다. 각 크롭의 OCR 결과는 Dimension Collapse 블록으로 합쳐지고 사용자 정의 포맷 블록이 빈 결과를 'unreadable'로 치환해 출력 순서를 보존했다. OCR 품질은 크롭 해상도와 문자 선명도에 민감하므로 크롭 패딩이나 고해상도 타일 학습으로 개선 가능하다.
- Roboflow Workflows
- — Roboflow Workflows는 시각적 블록 편집기로 모델 예측을 후처리하고 OCR을 연결해 전체 파이프라인을 구성할 수 있게 하는 제품 기능이다. 본 튜토리얼은 검출→시각화 분기와 필터링→크롭→GLM-OCR 분기를 포함하는 워크플로를 만들어 검출 상자와 추출한 계측기 텍스트를 별도 출력으로 제공하도록 설계되었다. Roboflow Agent를 사용하면 자연어 지시로 워크플로 블록을 자동 연결하는 보조 기능도 활용할 수 있다.
기술
- RF-DETR은 Transformer 기반 객체 검출 아키텍처로 작동하며, 입력으로 표준화된 이미지(예: 512×512)를 받아 예측된 바운딩 박스와 클래스 점수를 출력한다. 튜토리얼은 소형 모델을 선택해 학습 속도와 추론 레이턴시를 낮추는 전략을 사용했고, Roboflow의 학습 트래킹 기능으로 최고 성능 체크포인트를 자동 저장했다. 이 구조는 도면에 흩어진 소형 기호들을 밀도 높게 탐지하는 데 적합하다.
- GLM-OCR은 크롭된 이미지에서 문자를 읽는 전용 텍스트 인식 모듈로서, 각 크롭을 독립적으로 처리해 텍스트를 반환한다. 튜토리얼은 Dynamic Crop 블록으로 검출된 영역을 잘라 GLM-OCR에 전달한 뒤, 개별 결과를 합쳐 단일 리스트로 만드는 파이프라인을 구성했다. OCR 성능은 크롭 해상도와 문자의 선명도에 민감하기 때문에 전처리와 크롭 패딩 설정이 중요하다.
- Roboflow Workflows는 시각적 블록 편집기를 통해 모델 예측을 후처리하고 외부 OCR 블록 및 사용자 정의 코드 블록을 연결하는 플랫폼 기능이다. 워크플로는 입력 이미지→모델 검출→시각화/필터·크롭→OCR→포맷 순서로 구성되며, 출력은 주석 이미지와 기기 텍스트 리스트로 분리된다. Agent 기능을 활용하면 자연어 지시로 복잡한 블록 연결을 자동 생성할 수 있어 반복적인 배선 작업을 줄일 수 있다.
활용 사례
- 대규모 도면 아카이브에서 P&ID 기호와 계측기 태그를 자동 인덱싱해 검색 가능하도록 만드는 작업이 바로 이 파이프라인의 주된 사용 사례다. 기호 검출로 각 도면의 구성 요소를 기계적으로 추출하고 OCR로 태그를 읽어 데이터베이스에 색인화하면 도면 검색과 변경 비교가 가능해진다. 결과적으로 설계 검토나 유지보수 문서화 같은 반복 업무의 효율을 높일 수 있다.
- 현장 수집 스캔의 품질이 낮거나 폰트 규칙이 다양한 경우에는 OCR 보완 워크플로를 도입해 읽기 어려운 태그를 검출해 수동 검토용 큐로 전달하는 용도로 활용할 수 있다. 튜토리얼의 'unreadable' 표기 방식은 자동 필터링을 통해 수작업 필요 항목만 선별하도록 설계되어 운영 효율을 개선한다. 이 방식은 자동화와 인간 검증의 적절한 분업을 가능하게 한다.
- 심볼 검출 결과를 이용해 도면의 클래스별 개수 집계, 좌표 추출, 자산 레지스터와의 매칭 같은 데이터 제공 기능을 구현할 수 있다. 추출된 좌표와 텍스트를 외부 자산 데이터베이스와 비교하면 도면-자산 동기화나 변경 감지 자동화에 활용될 수 있다. 이 확장은 실무에서 도면 관리와 자산 관리 프로세스를 통합하는 기초가 된다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.