TL;DR
이 튜토리얼은 517장의 fastener 이미지에서 Torque seal을 인스턴스 분할로 검출하고 Google Gemini로 정렬 상태를 판정하는 Roboflow Workflow를 구축합니다. RF-DETR은 페인트 선의 mask를 만들고 Custom Python Block은 끊겨 검출된 조각을 Union-Find로 병합하며, Gemini는 aligned, misaligned, unclear 중 하나를 반환합니다. Seal Check는 이를 PASS, FAIL, UNREADABLE로 바꾸고 라벨 이미지와 JSON 보고서를 출력하며 Roboflow Vision Events에 검사 기록을 남깁니다. 검출 결과가 없거나 판정이 불명확한 경우에는 오판을 피하기 위해 UNREADABLE로 처리하고, 생산 환경에서는 hosted inference, Roboflow Inference, 파일, webcam, RTSP stream을 입력원으로 사용할 수 있습니다.
섹션별 상세





def run(self, predictions):
if predictions is None or len(predictions) == 0:
return {"merged": predictions, "seal_count": 0}
names = list(predictions.data.get("class_name", []))
keep = [i for i, n in enumerate(names) if str(n).lower() == "torque seal"]
if not keep:
return {"merged": predictions[[]], "seal_count": 0}
dets = predictions[keep]
boxes = dets.xyxy
n = len(boxes)
has_mask = dets.mask is not None
parent = list(range(n))
def find(a):
while parent[a] != a:
parent[a] = parent[parent[a]]
a = parent[a]
return a
def union(a, b):
parent[find(a)] = find(b)
GAP = 80
def near(b1, b2):
dx = max(0, max(b1[0], b2[0]) - min(b1[2], b2[2]))
dy = max(0, max(b1[1], b2[1]) - min(b1[3], b2[3]))
return dx }분할된 Torque seal detection을 필터링하고 가까운 조각을 Union-Find로 묶어 하나의 seal로 병합하는 Custom Python Block입니다.




def run(self, classification, predictions, seal_count):
def top_class(obj):
# dict-style payload from vlm_as_classifier
if isinstance(obj, dict):
for k in ("top", "top_class", "class_name", "predicted_class"):
v = obj.get(k)
if isinstance(v, str): return v
preds = obj.get("predictions")
if isinstance(preds, list) and preds:
best = max(preds, key=lambda p: float(p.get("confidence", 0) or 0))
return best.get("class_name") or best.get("class")
# object-style payload
for attr in ("top", "top_class", "class_name", "predicted_class"):
v = getattr(obj, attr, None)
if isinstance(v, str): return v
data = getattr(obj, "data", None)
return top_class(data) if isinstance(data, dict) else None
verdict = str(top_class(classification) or "unclear").strip().lower()
if verdict not in ("aligned", "misaligned", "unclear"):
verdict = "unclear"
try:
seal_count = int(seal_count)
except Exception:
seal_count = len(predictions) if predictions is not None else 0
if seal_count == 0 or verdict == "unclear":
status = "UNREADABLE"
elif verdict == "misaligned":
status = "FAIL"
else:
status = "PASS"
report = {"status": status, "verdict": verdict, "seal_count": seal_count}
return {
"report": report,
"display_text": f"Status: {status}
Seal: {verdict}",
"qc_result": status,
}Gemini의 분류 결과와 seal 개수를 정규화한 뒤 aligned, misaligned, unclear를 PASS, FAIL, UNREADABLE 상태와 JSON 보고서로 변환합니다.
용어 해설
- 인스턴스 분할(Instance Segmentation)
- — 인스턴스 분할은 이미지 안의 객체를 찾아내는 데 그치지 않고 각 객체에 해당하는 픽셀 영역을 개별 마스크로 구분하는 컴퓨터 비전 기법입니다. 이 글에서는 Torque seal의 위치와 윤곽을 얻어 여러 조각을 하나의 seal로 합치고, 시각언어 모델의 판정 결과를 실제 검사용 이미지에 겹쳐 표시하는 데 사용합니다.
- 시각언어 모델(Vision-Language Model)
- — 시각언어 모델은 이미지와 텍스트를 함께 입력받아 시각적 상태를 언어 형태로 판단하는 모델입니다. 이 글에서는 RF-DETR이 추출한 Torque seal 이미지를 Gemini에 전달하고, seal이 정렬됐는지 어긋났는지 또는 판독 불가능한지를 JSON으로 반환하게 합니다.
- 평균 정밀도(mAP)
- — mAP는 객체 검출 모델이 예측한 위치와 분류의 정확도를 종합하는 평가 지표입니다. 학습이 끝난 뒤 보지 못한 테스트 이미지에서 mAP, precision, recall, F1을 확인해 RF-DETR이 Torque seal과 reflection을 얼마나 구분하는지 평가하는 데 사용합니다.
- Union-Find
- — Union-Find는 서로 가까운 항목을 같은 집합으로 묶고 각 집합의 대표를 빠르게 찾는 자료구조입니다. 이 글의 Custom Python Block은 분할된 Torque seal 조각의 위치를 비교해 인접한 조각을 하나의 seal detection으로 병합하고, 물리적 seal 개수를 계산하는 데 이를 활용합니다.
- RTSP 스트림(RTSP Stream)
- — RTSP Stream은 네트워크를 통해 실시간 영상 프레임을 전달하는 방식입니다. 글에서는 고정형 컨베이어 카메라나 생산 라인에서 들어오는 이미지 소스로 RTSP 스트림을 사용할 수 있으며, 각 프레임을 Workflow에 보내 pass, fail, unreadable 결과를 downstream tracking에 전달하는 구성을 언급합니다.
기술
- Roboflow Universe
- Roboflow RF-DETR
- Google Gemini
- Roboflow Workflows
- Roboflow Vision Events
- Roboflow Inference
- Python
- Instance Segmentation
- VLM as Classifier
- Mask Visualization
- Label Visualization
- Text Display
- RTSP streams
활용 사례
- 자동차 생산 라인의 Torque seal 검사
- 고정형 컨베이어 카메라를 이용한 체결부 품질 검사
- 수동 검사대의 fastener 이미지 판정
- pass, fail, unreadable 결과를 downstream tracking에 전달하는 품질 관리
- 판독 불가능한 이미지를 향후 학습 데이터로 수집하는 검사 시스템
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.