비전 검사는 카메라 한 장을 검사 레시피(.vrp)로 판정해 OK · NG · 판정 없음을 냅니다. 결과는 시스템 태그 vision.<작업>.* 로 나오고, 원하면 사용자 태그(PLC)에 되쓰며, NG 그림과 결과 기록을 게이트웨이에 남깁니다.
/COMPONENTS="vision"). 어느 쪽이든 앱을 갱신해도 지워지지 않습니다. 없으면 설정은 저장되지만 검사는 하지 않고 상태가 “비전 엔진 미설치” 로 보입니다. 라이선스에 vision(무제한) 또는 vision:<n>(작업 n 개)이 있어야 작업을 켤 수 있습니다.| 할 일 | 필요한 권한 |
|---|---|
| 판정·누적 수·마지막 그림 보기, SCADA 비전 요소 | viewer |
| 한 번 돌리기 · 한 장 시험 · 일시정지·재개 | operator |
| 검사 기록(NG 그림 모음·결과 기록 표) · 엔진 속성 값 읽기 | operator |
| 작업·레시피 바꾸기 · 누적 되돌리기 · 입력 덮기 · 알람 제안 | admin |
검사 레시피 탭에서 .vrp 를 올립니다. 게이트웨이가 엔진으로 시험 적재해 통과한 것만 담습니다(한 벌 32 MB · 이 장비 전체 32 벌 128 MB · 프로젝트 묶음에 실리는 버전 합 33 MB — 묶음은 48 MB 까지). 담을 때 엔진이 한 번 싣고 다시 저장한 꼴로 담으므로 내려받은 파일이 올린 파일과 글자 차례가 다를 수 있습니다. 엔진이 받지 않으면 까닭을 화면 언어로 보입니다. 레시피는 프로젝트 묶음에 실립니다. 레시피 본문은 관리자만 내려받을 수 있습니다.
_. 결과 태그 이름이 vision.<id>.* 가 됩니다.out.<이름> 로 냅니다. 주소(작업 UUID)는 손으로 적지 않습니다. 작업 UUID 는 늘 소문자로 저장됩니다 — 비전 엔진 r5 부터 엔진이 레시피의 작업 ID 를 소문자로 읽기 때문입니다. 대문자로 저장된 옛 설정은 게이트웨이가 켜질 때 한 번 소문자로 고쳐 적고, 그 아래 버전의 엔진에서도 그대로 돕니다.reason=camera)입니다.overrun 이 늡니다 — 짧은 주기는 레시피 · 장비의 검사 시간을 재 보고 고르세요.overrun 이 늡니다 — 주기를 카메라 간격과 같거나 길게 두세요.overrun 을 셉니다(대기는 한 번뿐).cameras.json 의 maxRtspCameras(1~64)로 바꿀 수 있습니다.출력에 최소·최대를 두면 결과 태그 out.<이름>.ok(1 = 범위 안, 0 = 밖)가 생깁니다. 값이 없거나 수가 아니면 범위 밖입니다. 판정 출처로 무엇이 OK·NG 를 정할지 고릅니다.
| 판정 출처 | OK 가 되는 때 |
|---|---|
| 엔진 판정(기본) | 엔진이 OK. 범위 판정은 정보로만 냅니다 |
| 출력 범위만 | 범위를 둔 출력이 모두 범위 안 |
| 엔진 + 출력 범위 | 엔진 OK 이고 모두 범위 안 |
판정 출처가 엔진 판정이면 검사 기록 표의 범위 밖 표시는 “참고 — 범위 밖” 으로 흐리게 보입니다(판정에 들어가지 않았다는 뜻).
레시피의 부분 판정(JudgeLogics)은 결과 태그 partial.0, partial.1 … 로 나옵니다(1 · 0, 판정 없음이면 비어 있음).
열거 입력(예: OCR 띄어쓰기·읽기 방식, 코드 판독 맞춤 방식)은 비전 엔진 r4(C API 레벨 4) 이상에서 덮을 수 있습니다. 후보는 엔진이 지금 들고 있는 목록을 보이고(저장해 엔진에 올라간 작업), 값은 이름으로 넣습니다. 그 아래 버전의 엔진이면 목록에 “보류” 로 보이고 저장도 거절합니다. 형식을 바꾸는 입력(TypeConverter·CreateObject·ObjectAttribute·ArrayElementAccess 의 형 고르기)은 그 작업의 출력이 다른 작업에 이어져 있으면 엔진이 “연결된 출력이 있어 바꿀 수 없음” 으로 거절합니다 — 레시피에서 연결을 먼저 끊으세요. 이미 고른 값을 다시 고르는 것은 됩니다.
레시피를 바꾸지 않고 임계값 같은 입력만 바꿀 때 씁니다. 작업 편집의 레시피 입력 덮기에서 입력을 고르고 값을 적으면, 레시피를 실은 뒤 그 값으로 덮습니다. 수·참거짓·글자 입력과 열거 입력(엔진 r4 이상)을 덮을 수 있습니다(영상·영역·좌표는 안 됩니다).
입력 덮기는 결과 태그를 바꾸지 않으므로 폴링 중에도 저장할 수 있습니다. 저장하면 그 작업만 새 값으로 덮습니다 — 다른 작업은 그대로이고, 이 작업이 검사 중이면 그 검사가 끝난 뒤에 덮습니다(검사를 끊지 않습니다). 덮기를 빼면 레시피를 다시 실어 레시피 값으로 돌아갑니다.
| 태그 | 뜻 |
|---|---|
result | ok · ng · none(판정 없음 — NG 가 아닙니다) |
judgment | 1 · 0. 판정 없음이면 품질 uncertain |
reason · error | 판정 없음의 까닭(camera · timeout · cancelled …) |
count · okCount · ngCount · noneCount · overrun | 누적 수 |
ngStreak | 잇단 NG 수(OK 면 0, 판정 없음은 건너뜀) |
latencyMs · runMs | 트리거부터 결과까지 · 엔진 실행 시간 |
out.<이름> · out.<이름>.ok | 출력 값 · 범위 판정 |
partial.<i> | 부분 판정 |
det.* | 물체 검출 결과(20 장) — 물체 검출 작업이 있는 레시피만 |
paused · state · busy | 일시정지 · 상태 · 검사 중 |
seq | 검사 번호 — 맨 마지막에 바뀝니다. seq 가 바뀌면 이번 결과가 다 실린 것입니다 |
누적 수는 재시작을 넘어 이어집니다. 누적 자동 리셋을 켜면 게이트웨이 현지 시각으로 경계를 지날 때 0 으로 합니다.
손으로 되돌리려면 작업 카드의 누적 되돌리기(admin)를 씁니다.
SCADA 카메라 요소의 소스를 비전 검사 결과(vision:<작업>)로 고르면 마지막 결과 그림과 판정 띠(위·아래·없음), 누적 수를 보입니다. 그림은 검사 번호가 바뀔 때만 받습니다. viewer 키오스크에서도 보입니다.
ngStreak, 심각), 지연이 작업 시간 상한을 넘음(latencyMs, 경고). 물체 검출 작업은 대상 갈래 개수 · 검출 결과 믿을 수 없음 규칙을 더해 넷입니다(20 장). 알람 화면에서 고칠 수 있습니다.vision.<작업>.okCount, 전체 vision.<작업>.count 를 고릅니다.vision.run("작업")(= vision.trigger)는 검사를 넣고 바로 돌아옵니다. vision.last("작업") 은 마지막 결과 {result, judgment, seq, ts, outputs, …} 또는 null. 결과를 기다리려면 on("vision.작업.seq", …).arrays({"<작업 ID>.out[<번호>]": [수…]})로 따로 실려 vision.last("작업").arrays 로 읽을 수 있고, 화면 작화에서 차트 요소의 '비전 결과 배열로 그리기'로 결과마다 통째로 그립니다. 히스토그램·선 프로파일 도구는 배열 출력 입력을 켜야 배열이 실립니다.vision_* 도구(상태·작업·레시피·돌리기·시험·요약·그림 목록·결과 기록·일시정지·재개·속성 읽기·입력 덮기).| 보이는 것 | 볼 곳 |
|---|---|
| 늘 판정 없음, reason=camera | 카메라가 프레임을 주는지(카메라 화면), 트리거 뒤 기다림이 너무 크지 않은지 |
| reason=timeout | 작업의 시간 상한, 레시피 무게 |
| overrun 이 는다 | 트리거가 검사보다 잦습니다 — 주기를 늘리거나 레시피를 가볍게 |
| 작업 상태 “오류” | 작업 카드의 오류 문구(레시피 적재·입력 덮기 실패) |
| 트리거가 안 먹음 | 일시정지인지(카드의 “일시정지” 표시), 라이선스·시험 버전 운전 시간 |
| RTSP 카메라를 더 등록할 수 없음 | 장비의 RTSP 카메라 상한(CM4 6 대) — 쓰지 않는 RTSP 카메라를 지우세요(5 절 권장치) |
동봉 샘플 비전 검사 라인(프로젝트 › 샘플)은 검사 작업 넷을 폴더 재생 카메라로 돌립니다. 합성 영상 26 장(앞 세 작업은 OK 3 · NG 3, 정밀 검사는 8 장)을 2 초마다 판정해 OK·NG·양품률·연속 NG 를 보입니다. 화면은 두 장이고 머리의 검사 화면 · 정밀 검사 탭으로 옮깁니다.
| 작업 | 그림 폴더 | OK 기준 | 화면의 값 |
|---|---|---|---|
개수 세기 count | vision-count | 트레이 부품 6 개(5·7 개는 NG) | 부품 수 |
면적 · 얼룩 area | vision-area | 판 면적 83,500~89,500 px², 얼룩 150 px² 이하 | 판 면적 · 얼룩 면적 |
코드 판독 code | vision-code | 라벨에서 LOT-2026-001 을 읽음 | 읽은 코드 · 형식 |
정밀 검사 precision | vision-flange | 부품 위치를 찾고(위치 맞춤 점수 60 이상) 구멍 지름 9.85~10.15 mm | 위치 맞춤 점수 · 구멍 지름 · 읽은 로트(정밀 검사 화면) — 16-1 |
준비(관리자, 열기 전에)
vision-sample-images.zip(3.2 MB)을 받아 풉니다. 그림 폴더 넷(6 · 6 · 6 · 8 장)과 보정 연습 파일(calibration/)이 있습니다.vision_count · vision_area · vision_code · vision_flange, 그림 폴더 vision-count · vision-area · vision-code · vision-flange, 한 장 간격 2500 ms.PASS · FAIL 같은 글은 검사 엔진이 그림에 직접 그리는 글이라 화면 언어와 상관없이 영어로 보입니다. 판정 띠와 화면 글은 화면 언어를 따릅니다.vision 기능이 없으면 화면은 열리고 각 칸에 비전 검사 기능이 설치되지 않음이 보입니다.넷째 작업 precision 은 판 부품 한 장에서 도구 셋을 차례로 돌립니다: Locate(패턴 모델로 위치 맞춤) → Bore(구멍 지름) → Lot(로트 글자 읽기). Bore 와 Lot 의 영역은 Locate 가 찾은 위치를 따라 옮겨집니다(위치 맞춤 결과를 받는 입력 Align). 카메라 vision_flange 의 보정(격자 판 그림으로 만든 0.1 mm/화소)이 프로젝트에 함께 실려 있어 지름이 mm 로 나옵니다.
처음 레시피는 연습을 위해 일부러 덜 가르쳐 두었습니다. 패턴 모델은 회전 ±5° 까지만 찾고, 글자 모델에는 8 표본이 없습니다.
| 그림 | 부품 | 처음 레시피 | 연습 뒤 |
|---|---|---|---|
flange_01_ok_ref | 기준 자세 | OK | OK |
flange_02_ok_shift · 07_ok | 밀린 부품 | OK | OK |
flange_03_ok_rot · 05_ok_rot | 11~12° 돈 부품 | NG — 위치를 못 찾음(점수 약 31) | OK(①) |
flange_04_ng_big · 06_ng_small | 구멍 지름 10.42 · 9.62 mm | NG | NG |
flange_08_ok_lot8 | 로트 2610B08 | OK, 로트를 2610B0B 로 읽음 | 2610B08(③) |
연습(관리자 · 라이선스 vision-teach) — 작업 카드 › 레시피 조정으로 작업대를 열고, 영상 출처는 폴더 재생 그림 vision-flange 에서 고릅니다. 자세한 화면은 17 의 각 절에 있습니다.
vision_flange 를 고르면 10.02 mm 로 OK 가 됩니다.2610B08 입력 → (3) 표본으로 더하기 → (4) 학습 시작 → (5) 이 영상 읽기 가 2610B08. 표본은 약 90 개라 학습은 맥에서 1 초가 안 걸립니다.세 가지를 마친 뒤 게시로 새 버전을 만들고 게시 창에서 precision 을 고르면 운전 검사에 쓰입니다. 처음 상태로 돌아가려면 버전 관리에서 원본 버전으로 되돌립니다.
calibration/ 에 격자 판 그림(5 mm 칸)과 그것으로 만든 보정 파일 vision_flange.cal 이 있습니다. 캘리브레이션 탭에서 지우기 · 올리기를 연습할 때 씁니다 — 지우면 작업이 보정 없이 다시 적용되어 지름이 화소로 나오고 모두 NG 가 됩니다.동봉 샘플 자동차 번호판 인식(프로젝트 › 샘플)은 검사 작업 하나(plate)가 합성 번호판 그림 20 장을 읽고, 프로젝트 스크립트 plate-judge 가 읽은 글자를 등록 차량 목록과 맞춰 등록 차량 · 미등록 차량 · 읽기 실패 로 가릅니다. 번호판과 번호는 모두 컴퓨터로 그린 합성물(번호는 무작위)이라 실제 차량 번호와 우연히 같을 수 있고, 실제 차량 판독이나 출입 통제에 쓸 수 없습니다.
준비(관리자, 열기 전에)
plate-sample-images.zip(0.3 MB)을 받아 풉니다. plate-demo 폴더에 JPEG 20 장, 등록 목록, 글꼴 고지(SIL OFL 1.1)가 있습니다.plate_cam, 그림 폴더 plate-demo, 한 장 간격 2500 ms. 카메라를 저장하기 전에 창 아래 그림 폴더 판의 JPEG 올리기로 그림 20 장을 먼저 올립니다(저장한 뒤에 더 올리면 카메라를 다시 저장해야 반영됩니다).판정 규칙(검사 엔진은 글자를 읽었는지만 압니다 — 기준 글자는 비워 둡니다)
| 순서 | 조건 | 결과 |
|---|---|---|
| 1 | 검사 결과가 none(카메라 지연·시간 초과 등) | 갱신하지 않고 누적도 올리지 않음 |
| 2 | 엔진이 글자를 못 읽음(ng) | 읽기 실패(글자를 읽지 못함) |
| 3 | 공백을 뺀 글자가 번호판 꼴(숫자 2~3 + 한글 1 + 숫자 4)이 아님 | 읽기 실패(번호판 자리 수가 맞지 않음) |
| 4 | 등록 목록에 있음 | 등록 차량 — 차단기 열림 |
| 5 | 그 밖 | 미등록 차량 — 경보(plate-unreg) |
PLATE.REGISTRY(쉼표로 구분, 15 대)입니다. 태그 값을 바꾸면 스크립트를 고치지 않고 목록이 바뀝니다. 처음 열 때 비어 있으면 스크립트가 기본 목록을 써 넣습니다.NNHNNNN|NNNHNNNN, 한글 칸 폭 1.0)를 켜고 학습했습니다 — 받침 없는 한글(예: demo_08 의 '가')이 자음·모음 두 조각으로 갈려 숫자로 읽히던 것을 한 글자로 묶습니다.PLATE.ALERT 가 2 초 펄스로 켜졌다 꺼져 알람 이력에 발생·해제가 쌍으로 쌓입니다. 누적은 누적 되돌리기 단추로 0 으로 돌립니다.vision 기능이 없으면 화면은 열리고 비전 검사 기능이 설치되지 않음 이 보입니다.동봉 샘플 주차장 출입 번호판 장면(프로젝트 › 샘플)은 16-2 와 달리 판만 찍은 그림이 아니라 입구 장면(1280×720)을 봅니다. 검사 작업 gate 의 레시피는 도구 둘 — 번호판 찾기(Finder)가 장면에서 판 자리를 찾아 그 영역을 글자 읽기(Plate)의 검사 영역으로 넘깁니다. 차 위치 · 판 크기(0.8~1.15 배) · 기울기(±5°) · 밝기가 장마다 다릅니다. 스크립트 gate-judge 가 16-2 와 같은 규칙으로 등록 차량 · 미등록 차량 · 읽기 실패를 가르고, 판을 못 찾은 장은 차 없음(누계 · 경보에 넣지 않음)으로 둡니다. 장면 · 번호판 · 번호는 모두 합성이며 실제 차량 · 현장 판독에 쓸 수 없습니다.
준비(관리자, 열기 전에)
plate-scene-images.zip(3.9 MB)을 받아 풉니다. gate-scene 폴더에 장면 28 장(차 24 · 빈 차로 4), 등록 목록(18 대), 글꼴 고지가 있습니다.gate_cam(그림 폴더 gate-scene, 한 장 간격 2500 ms)을 만들고, 저장하기 전에 그림 28 장을 올립니다.NNHNNNN|NNNHNNNN). 샘플에 안 쓴 합성 장면 200 장에서는 194 장을 바르게 읽고 6 장은 읽기 실패, 다른 유효 번호로 잘못 읽은 판은 없었습니다.동봉 샘플 컨베이어 물체 세기(프로젝트 › 샘플)는 같은 합성 컨베이어 영상(상자 8 개가 왼쪽 → 오른쪽 160 px/s, 한 바퀴 약 38 초)을 초당 2 · 5 · 10 장 세 폴더로 나란히 돌립니다. 작업 셋(c2 · c5 · c10)의 레시피는 같은 꼴 — 글자 읽기(Label, 맨 앞) · 움직임 영역(Motion) · 물체 추적(Track)이고, 화면은 작업마다 개수(A→B · B→A · 합) · 지난 바퀴 / 이번 바퀴 · 최근 사건(번호 · 읽은 라벨) · 한 장 처리 시간 중앙값 · 배우는 중을 보입니다. 영상은 합성이며 실제 현장 계수에 쓸 수 없습니다.
준비(관리자, 열기 전에)
conveyor-sample-images.zip(21 MB)을 받아 풉니다. 폴더 셋 conveyor-2fps(76 장) · conveyor-5fps(190 장) · conveyor-10fps(380 장) — 장 수 × 간격이 셋 다 38.0 초라 오래 돌려도 세 칸 장면이 어긋나지 않습니다.conv2_cam · conv5_cam · conv10_cam, 그림 폴더는 같은 이름, 한 장 간격 500 · 200 · 100 ms. 각각 저장하기 전에 그림을 올립니다.track.*)와 스크립트 conveyor-events 가 모은 최근 사건으로 보입니다. 결과 태그는 마지막 사건 하나뿐이라 한 프레임에 두 물체가 함께 선을 넘으면 목록에는 하나만 보입니다(개수는 둘 다 셉니다).검사 레시피의 임계값·선택 값을 영상으로 돌려 보며 맞추는 작업대입니다. 운전 검사와 따로 연 엔진에서 돌므로, 작업 덮기로 저장하거나 게시해 작업에 적용하기 전에는 운전 검사가 바뀌지 않습니다. 관리자만 쓰고, 라이선스에 vision-teach 기능이 있어야 합니다(시험 버전에서는 열리지 않습니다).
여는 길
영상 출처 — 머리의 영상 출처에서 다섯 가지 중 고릅니다: 카메라 지금 한 장 · 폴더 재생 그림 · 파일 올리기(JPEG·PNG, 8 MB) · 검사 기록 NG 그림 · 시험 묶음 그림. 검사 기록 그림은 보통 결과를 덧그린 겹그림이라 그 위에서 다시 돌린 판정은 참고만 하세요. 작업 편집 › 결과 그림의 NG 원본도 남김을 켜 두면 NG 마다 카메라 원본을 함께 남겨 그것을 씁니다(같은 용량 상한).
화면
| 자리 | 하는 일 |
|---|---|
| 도구(왼쪽) | 레시피의 도구 차례, 도구마다 OK·NG·걸린 시간, 전체·부분 판정. 누르면 캔버스에서 그 영역이 강조됩니다. |
| 캔버스(가운데) | 원본 해상도 영상. 휠·두 손가락으로 확대, 끌어서 이동, 맞춤·1:1. 겹그림은 벡터(초록 OK · 빨강 NG · 점선 = 아직 안 돎 또는 기준 위치, 화면 언어)와 엔진 그림(엔진이 그린 결과 — 글은 영어) 사이를 바꿉니다. |
| 속성(오른쪽) | 고른 도구의 입력. 수·참거짓·글자·열거와 검사 영역(사각형·회전 사각형·원·고리·화살표)을 바꿀 수 있습니다. 영역은 캔버스에서 손잡이를 끌거나(안쪽 = 옮기기, 변·꼭짓점 = 크기, 위 동그라미 = 회전) 숫자 칸에 넣습니다. 도구가 받지 않는 모양을 고르면 거절 까닭이 보입니다. 다각형과 연결된 입력은 보기만 됩니다. 연결된 입력은 연결 출처만 보입니다. 바꾼 칸에는 레시피 값으로 단추가 생깁니다. 아래에 마지막 실행의 출력 값. |
자동 미리보기를 켜 두면 값을 바꿀 때마다 잠시 뒤 한 번 돌립니다. 끄면 돌리기를 누릅니다.
시험 묶음 — 머리의 시험 묶음에서 OK·NG 그림을 모아(한 묶음 100 장, 전체 200 MB) 한꺼번에 돌립니다. 기대는 기대 들이기로 expected.json(그림 이름 → judgment OK·NG, outputs 의 {"eq": 값}·{"min": a, "max": b}, 열쇠는 도구 이름.출력 이름)을 넣습니다. 결과는 조정 값과 열 때 값 두 갈래로 나란히 나오고, 맞음·거짓 합격·거짓 불합격·바뀐 판정 수를 보입니다. 어긋난 것만·CSV 받기·캔버스로(그 그림을 영상으로)를 씁니다. 시험 묶음은 게이트웨이에 남지만 프로젝트 묶음(.acproj)에는 담기지 않습니다.
저장 — 작업 덮기로 저장은 지금 조정 값을 같은 레시피를 쓰는 작업의 입력 덮기로 저장합니다. 레시피 값으로 되돌린 칸은 덮기에서 빠집니다. 저장한 다음 검사부터 운전에 쓰입니다. 영역 바꾼 것은 덮기로 남지 않습니다 — 게시하세요.
게시 — 머리의 게시는 지금 조정 값과 영역을 레시피의 새 버전으로 담습니다(엔진이 저장한 꼴, 메모를 붙임). 기존 버전은 바뀌지 않고, 게시 창에서 고른 작업만 새 버전을 씁니다. 세션을 연 작업은 입력 덮기 지움이 기본으로 켜집니다(그 덮기 값은 이미 새 버전에 들어 있습니다). 다른 작업의 덮기는 새 버전에 들어가지 않으므로 작업마다 따로 골라 지웁니다. 옛 버전과 같은 내용을 게시하면 새 버전을 만들지 않고 그 버전이 다시 게시 버전이 됩니다. 엔진이 레시피 저장을 못 하는 버전이면 게시 단추가 꺼집니다. 폴링 중에는 게시·적용이 거절됩니다.
버전 관리 — 검사 레시피 탭의 버전 관리에서 한 계보의 버전(게시·지난)을 보고, 지난 버전을 게시 버전과 비교하고(값이 다른 칸·연결·도구 이름·판정 논리), 이 버전으로 되돌리기로 작업이 옛 버전을 쓰게 합니다. 처음 올린 원본 버전은 늘 남고, 그 밖에 쓰는 작업이 없는 지난 버전은 계보마다 3 개까지 남깁니다(오래된 것부터 지움). 프로젝트 묶음에는 작업이 쓰는 버전과 게시 버전만 실립니다 — 원본·지난 버전은 이 게이트웨이에만 남고, 프로젝트를 다른 장비로 옮기면 버전 이력은 따라가지 않습니다(옮긴 장비에서는 실린 버전이 새 계보의 첫 버전처럼 보이고, 없는 앞 버전을 가리켜도 깨지지 않습니다). 이 장비 전체가 128 MB 를 넘으면 쓰지 않는 지난 버전부터 지워 자리를 내고, 그래도 모자라면 게시·올리기를 거절합니다. 작업대 머리와 게시 창에 남은 여유를 보입니다.
되돌리기·초안 — 머리의 되돌리기·다시하기(Ctrl+Z · Ctrl+Shift+Z)는 값·영역 바꾸기를 한 단계씩 거꾸로 돌립니다(세션당 100 단계). 바꾼 세션은 30 초마다 초안으로 자동 저장되고(머리에 "자동 저장 시각"), 닫거나 시간이 지나도 남습니다. 다시 열 때 초안이 있으면 이어서 열지, 버리고 게시 버전에서 열지 묻습니다. 초안이 다른 버전에서 시작했으면 그 버전 번호를 함께 보이고, 이어서 열면 초안의 버전으로(작업 덮기 없이) 열립니다. 초안은 프로젝트 묶음에 담기지 않습니다. 같은 레시피(계보)는 한 사람만 고칠 수 있습니다.
자동 설정·작업 이름·중간 영상·진단(비전 검사 기능 버전 r6 이상)
작업대 머리 아래 줄에 마스터 영상: 있음 W×H 또는 없음 과 지금 영상 넣기 · 지우기 가 있습니다. 지금 세션 영상을 레시피의 기준 영상으로 넣습니다.
보정이 실리면 지름 · 길이 · 각도 · 면적 같은 측정 도구가 화소 대신 보정의 단위(보통 mm)로 값을 냅니다. 보정은 카메라마다 파일 하나이고 레시피와 따로 둡니다.
올리기 — 비전 검사 화면의 캘리브레이션 탭에서 카메라 줄의 올리기(있으면 바꾸기) → 보정 파일 고르기 → 가로 · 세로(비우면 파일에 든 원본 영상 크기, 0 이면 크기를 보지 않음) · 메모 → 올리기. 게이트웨이가 검사 기능으로 읽어 본 뒤 담고, 그 카메라를 쓰는 작업을 다시 적용합니다(“다시 적용한 작업 n · 실패 f”). 지우기는 그 작업들을 보정 없이 다시 적용합니다. 내려받기는 담은 파일 그대로입니다.
작업대에서 고르기 — 머리 아래 줄에 보정: <카메라> 또는 보정 없음 과 고르기 가 있습니다. 영상 출처가 카메라 지금 한 장이면 그 카메라의 보정이 저절로 실립니다. 폴더 재생 · 파일 · 검사 기록 · 시험 묶음 그림은 보정 없음 으로 시작하므로 고르기 → 세션 보정 고르기 창에서 카메라를 고릅니다. 그런 그림으로 영상을 바꾸면 다시 보정 없음이 되니 다시 고릅니다. 세션에서 고른 보정은 운전 작업의 보정을 바꾸지 않습니다. 캘리브레이션 탭에서 파일을 바꾸면 줄에 “(보정 파일이 바뀜 — 다음 카메라 영상 때 다시 실음)” 이 보입니다.
위치 맞춤처럼 패턴 모델 입력이 있는 도구는 속성 판의 모델 줄에 패턴 모델 있음(또는 패턴 모델 없음(아직 가르치지 않음))과 가르치기 단추가 있습니다. 세션 영상이 있어야 켜집니다.
글자 읽기 도구의 모델 줄에 표본 n 과 글자 학습 단추가 있습니다. 글자 읽기 학습 창은 다섯 단계입니다.
NNHNNNN|NNNHNNNN) 칸이 보입니다. 둘 다 기본은 끔이고, 켠 레시피는 그 기능이 없는 옛 버전 장비에서 쓸 수 없습니다. 한 모델의 표본은 한 나누기 설정이라, 표본이 있으면 설정이 잠깁니다(바꾸려면 표본을 모두 지웁니다).학습 시간 · 진행률 — 시작 전에 “표본 n · 이 장비 예상 약 t · 메모리 약 m MiB” 가 보이고, 남은 메모리가 모자라면 시작하지 않습니다(리눅스 장비). 학습 중에는 “p % · 지난 시간 / 예상 약 t” 와 단계(특징 만들기 · 분류기 맞추기 · 교차 검증)가 보이며, 진행률은 예상 시간의 몫이라 지난 시간과 거의 같이 갑니다. 창을 닫아도 학습은 계속되고 머리 줄에 “글자 학습 p %” 가 남습니다. 학습 취소는 표본 · 모델을 그대로 둡니다. 게이트웨이마다 한 번에 하나만 학습합니다.
운전 보호 — 학습은 운전 검사와 같은 게이트웨이에서 돕니다. 먼저 운전 검사의 평소 걸린 시간을 잡고(“운전 검사 기준을 잡는 중”), 학습하는 동안 운전 검사가 늦어지면 학습을 멈췄다가 처음부터 다시 시작합니다(자동 재개 3 회). 3 회를 다 쓰면 지금 재개를 사람이 누릅니다. 그래도 끝나지 않으면 세 길이 있습니다.
표본 보존(8 MiB) — 표본 보존을 켜면 학습 뒤에도 표본이 레시피에 남아 나중에 표본을 더해 다시 학습할 수 있습니다. 끄면 레시피가 작아지는 대신 그 레시피로는 다시 학습할 수 없습니다. 학습하면 예상 레시피가 8 MiB 이하이면 표본 보존이 기본으로 켜지고, 넘으면 기본으로 꺼집니다 — 끌 때는 먼저 표본을 내보내기로 받아 두세요. 표본을 보존한 채 레시피가 32 MiB 를 넘으면 학습을 거절합니다.
| 보이는 글 | 할 일 |
|---|---|
| 세션 영상이 없습니다 — 영상 출처를 먼저 고르세요 | 머리의 영상 출처에서 영상을 고릅니다. |
| 가르치기 설정이 틀렸거나 영역이 없습니다 — 모델은 그대로입니다 | 영역을 그렸는지, 설정 값이 범위 안인지 봅니다. |
| 패턴 모델을 가르치지 못했습니다 — 모델은 그대로입니다 | 영역에 에지가 있는지, 영역이 영상 안인지 봅니다. 에지 임계값을 낮춰 봅니다. |
| 모델 가르치기가 30 초를 넘어 멈췄습니다 | 영역을 줄이거나 피라미드 단계를 올립니다. |
| 글자를 나누지 못했습니다 — 글자가 없거나 영역이 비었거나 영상 밖입니다 | 글자 영역 · 이진화 오프셋 · 밝은 바탕을 맞춥니다. |
| 글자 수가 나눈 상자 수와 다릅니다 | 상자 수만큼 칩니다(건너뛸 상자는 빈칸). |
| 글자가 풀어 쓴 꼴(조합형 자모 · 결합 부호)입니다 | 완성형으로 다시 칩니다. |
| 이 모델의 표본과 나누기 설정이 다릅니다 | 설정을 표본과 같게 두거나, 표본을 모두 지운 뒤 바꿉니다. |
| 글자가 두 종류 이상이어야 학습할 수 있습니다 | 다른 글자의 표본을 더합니다. |
| 표본을 보존하면 레시피가 32 MiB 를 넘습니다 | 표본 보존을 끄거나(먼저 내보내기) 표본을 줄입니다. |
| 다른 글자 학습이 이 게이트웨이에서 도는 중입니다 | 그 학습이 끝나거나 취소된 뒤 합니다. |
| 남은 메모리가 모자라 학습하지 않습니다 | 표본을 줄이거나 다른 게이트웨이에서 학습해 레시피를 올립니다. |
| 보정 파일이 아닙니다 — 지금 보정은 그대로입니다 | 검사 기능이 저장한 보정 파일인지 봅니다. |
| 보정 파일 합계가 16 MiB 를 넘습니다 | 쓰지 않는 카메라의 보정을 지웁니다. |
| 레시피가 32 MiB 를 넘어 앞 상태로 되돌렸습니다 | 마스터 영상을 지우거나 표본 보존을 끕니다. |
레시피에 움직임 영역이나 물체 추적(비전 검사 기능 r15 이상)이 있으면 그 작업은 카메라 하나의 프레임 흐름입니다. 트리거마다 프레임 한 장을 차례로 넣어 배경을 배우고 물체에 번호를 붙여 따라갑니다. 고정 카메라와 주기 트리거로 씁니다.
learning 과 작업 카드 '배우는 중' 으로 보입니다.settling) · learning 참입니다. 엔진 개수의 바탕은 그동안에도 따라가므로 구간이 끝난 뒤 늘어난 만큼만 셉니다. 원인은 레시피의 다수결 학습(r18)으로 먼저 막고, 이 구간은 다수결 학습이 못 막는 현장 — 물체가 화면을 절반 넘게 덮는 붐비는 벨트, 학습 중 멈춰 있던 물체 — 의 방어용으로 씁니다(그동안 지난 물체는 세지 않습니다). 물체가 늘 지나가는 라인은 빈 틈이 한 번 지나가는 시간보다 길게 둡니다. 구간 동안 지나간 물체는 세지 않으니 누계는 그만큼 모자랄 수 있습니다.WarmupMajority, 기본 끔) — 켜면 학습 프레임 동안 화소마다 가장 자주 보인 값을 배경으로 배웁니다. 학습 중 지나가는 물체를 배경으로 배우지 않으므로, 물체가 지나가는 중에 흐름이 시작 · 재개되어도 유령 영역이 남지 않습니다(위 안정 구간이 막던 원인). 학습 시간의 절반 넘게 한자리에 머무는 물체(느리거나 멈춘 물체)는 배경이 될 수 있으니 학습 프레임 수를 물체가 한 자리를 지나는 시간의 두 배보다 길게 둡니다(컨베이어 샘플은 4 초분). 물체가 화면을 절반 넘게 덮을 만큼 붐비거나 화면이 흔들리면 덜 정확합니다. 끄면 예전처럼 평균으로 배우고 레시피에 쓰지 않습니다 — 켠 레시피는 r17 이하 장비에서 열리지 않습니다. 다수결 학습만으로 모자란 현장에서만 안정 구간을 함께 켭니다(구간은 빈 프레임이 와야 끝나므로 물체가 늘 보이는 장면에서는 그만큼 세지 않는 시간이 남습니다).track.countAtoB·track.countBtoA·track.countTotal(누적, 9 장의 누적 자동 리셋·되돌리기를 따름), track.active(지금 추적 수). 다시 배워도 누적은 이어집니다.track.lastId·track.lastDir(1 A→B · 2 B→A)·track.lastText·track.lastTs 와 검사 기록·작업 카드에 남습니다. 이벤트 기록에도 남기기는 기본 끔입니다 — 켜면 작업마다 분당 30 건까지 남기고 넘은 수는 한 줄로 알립니다(이벤트 기록을 많이 씁니다).track.lastText·검사 기록으로 나갑니다. 글자 읽기 작업의 영상 입력은 검사 영상이어야 합니다(전처리 출력에 이으면 읽지 못함). 검사 영역 입력은 연결해도 됩니다(물체 영역을 따로 넘깁니다). 검사 시간 상한 안에서만, 프레임마다 정한 수까지 읽습니다.CharScores·Score 가 보입니다. 작업 편집 글자 읽기 최소 점수(기본 0 = 끔)를 켜면 점수가 그보다 낮은 OK 검사는 판정 없음(사유 '읽기 불확실', 판정·출력 태그 불확실 — 알람은 울리거나 꺼지지 않고, PLC 결과 쓰기는 판정 없음 값 규칙, 결과 그림은 원래 판정 OK 로 남길지 정함)이 됩니다. NG(엔진 NG·범위 밖)는 점수가 낮아도 NG 그대로입니다. 또 물체별 읽기는 가장 좋은 읽기가 그보다 낮으면 그 글을 '읽기 불확실'로 냅니다(track.lastText 불확실, PLC 결과 쓰기는 빈 글 — 판정 없음 값을 두었으면 그 값 — 이라 앞 물체 글이 남지 않음). 모름(−1)은 거르지 않습니다. 값은 현장에서 정합니다 — 실제 카메라로 바르게 읽은 것과 틀리게 읽은 것 몇 장의 점수를 검사 기록에서 보고 그 사이로 둡니다. 합성 글자는 대부분 900 대이지만, 실제 글자·한글은 바르게 읽어도 훨씬 낮을 수 있습니다(합성 번호판 시험에서 바르게 읽은 판의 점수가 28~954). 점수는 같은 모델 안에서만 비교합니다 — 다시 학습하면 같은 영상의 점수도 바뀝니다.레시피에 선명도 작업(비전 검사 기능 r24 이상)이 있으면 작업 카드 더보기의 초점 맞추기(operator 이상)로 렌즈 초점을 맞춥니다. 카메라 한 장으로 선명도 작업의 값만 읽고 그림은 받지 않으며, 누적 수·결과 태그·PLC 결과 쓰기·검사 기록은 바뀌지 않습니다. 작업 상태 조건은 한 장 시험과 같습니다.
| 상태 | 뜻 |
|---|---|
| 잰 것 없음 | 아직 값이 없습니다(읽기 실패 포함) |
| 측정 | 값을 쟀습니다 |
| 평평함 | 영역에 초점 점수를 잴 화소가 없습니다. 무늬·모서리가 있는 곳으로 영역을 옮깁니다. |
레시피에 선명도 작업이 없거나 카메라·검사가 실패하면 막대 자리는 비고 까닭이 보입니다.
안전 기능이 아닙니다 — 물체 검출은 인증된 안전 기능이 아닙니다. 사람의 안전이나 설비 보호를 위한 유일한 수단으로 쓰지 마세요. 검출 결과는 조명·카메라 각도·모델에 따라 달라지며, 물체를 놓치거나 잘못 검출할 수 있습니다.
레시피에 물체 검출 작업이 있으면 그 작업의 결과가 vision.<작업>.det.* 결과 태그로 나옵니다. 물체 검출 작업이 여럿이면 레시피 앞의 작업 하나입니다. 상자(위치)는 태그로 내지 않습니다 — 결과 그림의 겹그림과 물체 추적 입력으로 씁니다.
| 태그 | 뜻 |
|---|---|
det.isResult | 1 · 0 — 대상 갈래 개수가 최소~최대 개수 안이면 1 |
det.count | 걸러진 갈래의 상자 수 |
det.targetCount | 대상 갈래의 상자 수 |
det.maxScore | 가장 높은 점수(천분율 0~1000) |
det.classes · det.scores | 상자마다 갈래 번호 · 점수(천분율), 점수 높은 차례 — JSON 배열 글자 |
det.classCounts | 갈래 번호마다 상자 수 — JSON 배열 글자 |
det.valid | 1 · 0 — 이번 검사의 검출 값을 믿을 수 있으면 1. 판정 없음 · 검출 작업 오류 · 실행에서 건너뛴 검출 작업이면 0(늘 값이 있어 알람에 씁니다) |
detector_error)입니다. 판정식이 'NOT 검출 작업'처럼 되어 있거나 검출 작업을 판정식에 넣지 않았어도 OK 로 나가지 않고, NG 로도 세지 않습니다. 판정 없음이므로 result 는 none, judgment · 출력 태그는 불확실, PLC 결과 쓰기의 ok · ng 같은 판정 칸은 판정 없음 값을 둔 줄만 그 값을 쓰고, 잇단 NG(ngStreak)는 끊지도 잇지도 않습니다 — 그래서 잇단 NG 알람으로는 검출 오류를 잡을 수 없습니다. 검출 오류 · 모델 없음 · 카메라 끊김은 det.valid 가 1 보다 작으면 울리는 알람으로 잡습니다(작업 카드 알람 제안이 만들어 줍니다). 검사 기록에는 엔진 판정이 따로 남습니다.det.* 태그는 모두 불확실(값 없음)이고 det.valid 는 0 입니다. 검사기는 오류 때 개수 0 을 내지만 그 0 을 '물체 없음'으로 내지 않습니다. 불확실한 태그로는 알람이 울리지 않으므로 det.valid 가 1 보다 작으면 울리는 알람을 함께 둡니다.det.isResult · det.count · det.targetCount · det.maxScore · det.valid 를 출처로 고를 수 있습니다(배열은 쓰지 않음). 값을 모르면 판정 없음 값을 둔 줄만 그 값을 쓰고, 두지 않은 줄은 쓰지 않습니다(PLC 에 지난 값이 남음). 판정 없음 값을 −1 처럼 두거나 det.valid(늘 1 · 0 을 씀)를 함께 쓰면 PLC 가 '모름'을 가릴 수 있습니다.det.targetCount 가 1 이상, 경고)와 검출 결과를 믿을 수 없음(det.valid 가 1 보다 작음 — 모델 없음 · 카메라 끊김 · 오류, 심각). 검출 결과 태그에 알람을 걸거나 검출 작업에 PLC 결과 쓰기를 새로 이을 때 위 고지를 확인하는 창이 뜹니다.vision.detector.link)와 이벤트 기록에 남고, 작업 카드에 '검출 결과가 알람 · PLC 에 연결됨'이 늘 보입니다.