짧은 시간에 다양한 이미지 캡처와 평가를 동시에 수행하는 드라이브 사용방법
NeuroCheck
1. 소개
NeuroCheck 6.0/6.1 소프트웨어에는 고급 사용 사례를 위한 특수 이미지 캡처 모드(즉, 이미지 스택 획득)가 있다. 이 모드를 사용하면 짧은 시간 내에 여러 이미지를 캡처하고 지금까지 획득한 이미지를 동시에 평가할 수 있다. 이미지 캡처 및 평가는 서로 완전히 독립적으로 작동하여 이미지를 매우 빠르게 캡처한 후 지연이 없이 평가할 수 있다. 이 특별한 이미지 캡처 방법은 NeuroCheck 디지털 카메라 시리즈용 NeuroCheck 6.0/6.1 하드웨어 드라이버에서 제공한다.
2. 동기
본문에서는 지금까지의 이미지 캡처 방법에 대해 설명하고 추가 이미지 캡처 모드의 필요성에 대해 설명한다.
(1) 이미지를 차례로 캡처 및 평가
NeuroCheck의 표준은 이미지를 캡처하고 평가한 후 다음 이미지를 캡처하는 것이다.
(2) 이전 이미지를 동시에 평가하면서 다음 이미지를 캡처
사용 시간이 이미지 캡처 및 평가에 충분하지 않기 때문에 일부 애플리케이션은 첫 번째 방법으로 구현할 수 없다. NeuroCheck를 사용하면 이미지를 병렬 모드로 캡처할 수 있다. 즉, 하나의 이미지가 캡처되는 동안 이전 이미지가 평가된다.
(3) 빠른 이미지 시퀀스 캡처 및 후속 평가
특별한 경우 여러 이미지를 빠른 순서로 캡처하여 그 사이에 평가할 시간이 없을 수도 있다. 예를 들어, 물체가 카메라 앞에서 빨리 지나가는 경우다. 이 경우 이미지는 먼저 이미지 트레이로 전송되고 모든 이미지가 캡처된 후 이미지 트레이에서 로드되어 평가된다.
(4) 새로운 기능: 이미지 스택 획득(캡처된 이미지를 평가하면서 이미지 시퀀스 캡처)
이미지 캡처 시간이 짧고 시퀀스의 마지막 이미지와 다음 시퀀스의 첫 이미지 사이의 시간이 캡처된 이미지를 평가할 수 있을 만큼 길지 않은 애플리케이션의 경우 NeuroCheck는 이미지를 캡처하는 새로운 방법을 도입했다(이미지 스택 획득).
3. 이미지 스택 획득 개념
이미지 스택 획득의 기본 아이디어는 하나의 카메라로 이미지를 캡처하는 동시에 검사 루틴을 독립적으로 실행하는 것이다. 이를 위해, 이미지 캡처는 백그라운드 스레드(background thread)에서 실행된다. 점검 루틴이 실행되는 동안 스택의 이미지가 아직 캡처되지 않은 경우에도 스택의 캡처된 이미지에 이미 액세스 할 수 있다. 비전시스템의 여러 NeuroCheck 카메라는 이미지 스택 획득을 동시에 독립적으로 적용할 수 있다.
- 이미지 스택 획득은 NeuroCheck NCG 및 NCF 디지털 카메라 용 NeuroCheck 6.0 및 6.1 카메라 드라이버의 특수 기능이므로 다른 카메라 유형에서는 사용할 수 없다.
- 카메라 드라이버의 이미지 스택 획득 개념을 NeuroCheck 표준 소프트웨어에서 제공하는 이미지 트레이와 혼동해선 안 된다. 여러 이미지도 저장할 수 있다.
- 이미지가 많은 이미지 스택을 사용하려면 많은 양의 컴퓨터 메모리가 필요하다.
4. 기본 기능
이미지 스택 캡처 제어는 NeuroCheck 표준 검사 기능 제어 장치를 사용하여 수행된다. 이미지 스택을 캡처하려면 최소한 세 단계가 필요하다.
1. 이미지 수 결정
2. 이미지 스택 캡처 시작
3. 스택에서 캡처된 이미지 전송
본문에는 필요한 제어 장치 호출을 소개한다.
4.1. 이미지 수 결정
먼저 스택의 이미지 수를 설정해야 한다. 스택의 이미지 수를 설정하려면 도구 범주에서 제어 장치 확인 기능을 추가하고 매개 변수 대화 상자를 연다. 이미지 스택 획득에 사용할 카메라를 선택한다. 속성 설정 필드에서 ‘이미지 스택 크기’를 선택하고 캡처할 이미지 수를 입력한다.
참고 사항:
- 이미지 스택의 크기를 고정 값으로 설정해야 이미지 스택을 얻을 수 있다. 따라서 이 검사 기능은 이미지 스택 획득을 시작하기 전에 한 번 이상 실행해야 한다.
- 이미지 스택 획득이 이전에 시작되었고 아직 불완전한 경우 검사 기능 실행이 실패한다.
- 이미지 수는 2와 100 사이에서 선택할 수 있다.
- 0을 입력하면 이미지 스택에 대해 캡처된 이미지가 지워진다.
4.2. 이미지 스택 캡처 시작
이미지 스택 크기를 정의한 후 스택에 대한 이미지 캡처를 시작할 수 있다. 제어 장치 확인 기능을 사용하여 이미지 스택 캡처가 시작된다. 이를 위해 확인 기능을 추가하고 카메라를 선택한 다음 매개 변수 대화 상자의 방법 실행 필드에서 ‘이미지 스택 획득’을 선택한다. 이 점검 기능이 실행될 때마다 새로운 이미지 스택 획득이 시작되고 백그라운드에서 실행된다.
참고 사항:
- 그 때까지 마지막 이미지 스택 캡처가 완료되지 않으면 확인 기능 실행이 실패한다.
- 하나의 이미지 캡처가 카메라의 속성 대화 상자에 정의된 시간 초과 값을 초과하면 이미지 스택 캡처가 중단된다. 애플리케이션이 트리거 신호를 오랫동안 기다려야 하는 경우 카메라의 속성 대화 상자에서 시간 초과를 비활성화한다.
- 검사 기능 이미지 캡처, 이미지 캡처 병렬 및 이미지 획득 제어를 실행하고 라이브 이미지 대화 상자를 열면 장치 관리자가 이미지 스택 캡처를 중단한다.
- 이미지 스택 획득이 백그라운드에서 완전히 실행되므로 이미지 스택 캡처가 완료되는 시점에 대한 사용자 인터페이스에 피드백이 없다. 그러나 이미지 스택 획득이 완료되자마자 NeuroCheck 로그 파일에 입력된다(‘진단 수단’ 참조).
4.3. 이미지 데이터를 NeuroCheck의 런타임 데이터 풀로 전송
마지막 단계는 이미지 데이터를 선택하여 드라이버가 NeuroCheck 런타임 데이터 풀로 전송하는 것이다. 이전의 두 단계는 일반적으로 이미지 스택 캡처를 시작하기 위해 점검 루틴 실행 당 한 번만 실행되지만 세 번째 단계는 각 이미지에 대해 여러 번 실행된다. 이미지를 전송하려면 이미지 스택에서 전송할 이미지를 선택해야 한다.
이미지 스택에서 이미지 선택은 이미지의 0부터 시작하는 인덱스를 사용하여 수행된다. 즉, 스택의 첫 번째 이미지에는 인덱스 0, 두 번째에는 인덱스 1, 세 번째에는 인덱스 2 등이 있다. ‘이미지 스택의 활성 인덱스’를 선택하여 점검 기능 제어 장치를 사용해 이미지의 인덱스를 설정할 수 있다.
참고 사항:
- 확인 기능은 올바른 인덱스를 가진 이미지가 캡처될 때까지 기다려야 한다. 이미지 캡처가 지연된 경우(예: 트리거 신호가 없기 때문에 점검 루틴이 계속되지 않는다. NeuroCheck가 멈추거나 반응하지 않는 것처럼 보일 수 있다.
- 이미지 스택 캡처가 실행되지 않은 경우 확인 기능이 실패한다. 그런 다음 NeuroCheck 디지털 카메라 용 NeuroCheck 6.0/6.1 드라이버는 선택한 이미지의 데이터를 제공한 다음 소스 모드 카메라의 ‘이미지 전송’ 확인 기능을 사용하여 NeuroCheck 런타임 데이터 풀로 전송할 수 있다.
5. 고급 이미지 스택 옵션
5.1. 두 개의 타임 아웃
이미지 스택 획득은 Check Routine 실행과 비동기 적으로 실행되는 메커니즘이다. 이미지 스택은 두 프로세스 간의 전송 데이터 구조이며, 이미지 스택 획득은 이미지 스택을 채우고 루틴 점검은 이미지 스택에 액세스한다.
이미지 스택 획득의 비동기 프로세스는 이미지 스택 획득을 통해 루틴 확인에서 시작된다. 카메라는 트리거 신호(다음 그림에서 파란색으로 표시됨)를 기다리고 있으며 트리거 신호를 통지하면 이미지를 획득한다. 점검 루틴의 이미지 스택 크기 매개 변수에 의해 정의된 이미지의 양에 도달 할 때까지 이 과정이 반복된다. 카메라는 트리거 신호를 위해 정의된 시간 동안 기다린다. 이 시간 범위는 NeuroCheck의 장치 관리자에서 카메라의 속성 대화 상자에서 구성할 수 있다.
그림의 녹색 화살표로 표시되는 이미지 스택의 활성 인덱스를 사용하여 이미지 스택의 특정 인덱스에 액세스 할 수 있다. 그러나 어떤 경우에도 특정 색인에서 사용 가능한 이미지가 있는지 보장 할 수는 없다. 따라서 사용 가능한 이미지가 없을 때 루틴 점검이 대기하는 시간 범위를 정의하는 것이 좋다. 이미지 스택에서 활성 인덱스를 설정하기 위해 타임 아웃으로 수행할 수 있다.
확인을 위한 이미지의 획득 및 공급은 서로를 유발하는 두 가지 시간 초과에 따라 달라진다. 획득에 실패하면 이미지 스택을 채울 수 없으며 결과적으로 특정 인덱스에서 이미지에 액세스 할 수 없다. 다음 표는 어떤 경우에 시간 초과가 발생했는지 보여준다.
5.2. 이미지 인덱스 설정을 위한 시간 초과 구성
지금까지 설명한 단순 점검 루틴에서 점검 기능 제어 장치는 이미지가 캡처될 때까지 ‘이미지 스택의 활성 이미지’ 에서 대기한다. 때때로 시간 종료 후 대기를 종료하는 것이 유리할 수 있다. 이를 위해 점검 기능 제어 장치를 추가하고 ‘이미지 스택에서 활성 인덱스 설정 시간 초과’ 속성을 설정해야 한다. 설정 값은 이미지 캡처 대기가 중단된 후의 시간(밀리 초) 이다.
참고 사항:
- 이미지 스택이 캡처되는 경우 검사 기능 실행이 실패한다.
- 설정된 시간 초과는 제어 장치를 통해 ‘이미지 스택의 활성 인덱스’를 호출 할 때마다 적용된다.
- 유효한 시간 초과 값은 1ms와 99999ms 사이다. 무한 시간 초과의 경우 0을 값으로 설정한다.
- 이미지 인덱스 설정을 위한 시간 초과는 이미지 스택 획득 초기화 중에 구성해야 한다.
5.3. 이미지 스택 획득 중단
여러 가지 이유로 시리즈에서 이미지 스택 크기에 대해 구성된 것보다 적은 트리거 신호가 전송될 수 있다. 이러한 경우 이미지 스택 획득은 마지막 트리거 신호와 마지막 이미지를 헛되이 기다린다. 이미지 스택 획득이 완료되지 않으면 새 이미지 스택 획득을 시작할 수 없다. 이 경우 불완전한 이미지 스택 획득을 중단해야한다. 이를 위해 검사 기능 제어 장치는 ‘이미지 스택 획득 중단’ 작업을 호출해야 한다.
참고 사항:
- 이미지 스택이 없거나 수집되지 않은 경우 검사 기능을 실행하지 못한다. ‘이미지 스택 획득 중단’ 작업이 호출 될 때 이미지 스택 획득이 이미 완료된 경우 작업이 수행되지 않는다. 따라서 검사 루틴이 끝날 때마다 다음 번 검사 루틴을 실행하여 새 이미지 스택 획득을 시작할 수 있도록 ‘이미지 스택 획득 중단’ 작업을 호출하는 것이 좋다. 최종 동작은 항상 점검 루틴 실행과 독립적으로 실행되므로 최종 동작으로 이미지 스택 획득을 중단하는 것이 좋다.
6. 진단 수단
이미지 스택 획득은 백그라운드에서 수행되므로 이미지 스택 획득 상태에 대한 시각적 피드백은 수동 또는 자동 모드가 아니다. 그럼에도 불구하고, 이미지 스택 획득 실행을 수행할 수 있도록 정보가 NeuroCheck 로그 파일에 기록된다.
이미지 스택 획득은 NeuroCheck 용 하드웨어 드라이버의 기능이므로 드라이버 정보 대화 상자의 로그 메시지 출력과 NeuroCheck의 소프트웨어 설정에서 로그 파일 작성을 모두 활성화해야 한다.
로그 파일 항목에 대한 설명:
1) SetDevicePropertyValue : SizeOfImageStack을 10으로 설정한다. 이미지 스택의 크기가 이 경우 10으로 설정되었다.
2) SetDevicePropertyValue : IndexTimeOut을 200으로 설정한다. 이미지 인덱스를 설정하기 위한 시간 초과는 이 경우 200ms로 설정되었다.
3) 백그라운드 스레드를 사용하여 일련의 10 개 이미지 획득을 시작합니다 : 이 예에서는 10개의 이미지 범위로 새로운 이미지 스택 획득이 시작되었다.
4) 475ms 내에 10 개의 이미지가 성공적으로 획득되었습니다 : 이미지 스택이 완전히 캡처 되었다. 이 경우 이미지 스택은 475ms에서 캡처한 10개의 이미지로 구성된다.
5) SetDevicePropertyValue : ActiveIndexInImageStack을 0으로 설정한다. 이미지 스택에서 이미지가 선택되었다. 이 이미지는 이제 ‘이미지 전송’을 사용하여 NeuroCheck 런타임 데이터 풀로 전송된다. 이 경우 인덱스가 0 인 첫 번째 이미지이다.
6) 사용자 요청으로 이미지 스택 실행이 중단되었습니다 : 이미지 스택 획득이 중단되었다.
7. 일상적인 예 확인
이름이 ImageStackAcquisition_ExampleProject.zip 인 별도의 ZIP 파일에는 몇 가지 점검 루틴 예제가 있다. 이 파일의 압축을 풀고 내용을 NeuroCheck 6.1 프로젝트 폴더에 새 프로젝트로 복사한 다음 NeuroCheck 6.1 프로젝트 관리자에서 이 프로젝트를 할당한다.
NeuroCheck 6.1을 시작할 때 즉시 NeuroCheck 장치 관리자를 열고 샘플 프로젝트에서 구성된 카메라 유형을 실제 카메라로 교체해야 한다. 그런 다음 예제 점검 루틴을 로드할 수 있다. 모든 샘플 검사 루틴은 이미지 스택 획득을 사용하지만 획득된 이미지를 처리하는 방식이 다르다.
7.1. 간단한 점검 루틴
샘플 검사 루틴 '01-Simple Check Routine.chr'은 NeuroCheck를 사용하여 이미지 스택 획득을 설계하는 가장 간단한 방법을 보여준다. 각 이미지는 별도의 개별 검사로 처리된다. 필요한 단계는 다음에 설명되며 샘플 점검 루틴에서 개별 점검으로 찾을 수 있다.
1) 이미지 스택 획득 초기화는 시작 동작에서 수행된다. 초기화하는 동안 이미지 개수가 먼저 결정되고 ('이미지 스택 크기') 이미지 스택 캡처가 시작된다('이미지 스택 획득').
2) (6에서) 다음의 개별 점검 중에는 캡처된 이미지가 개별적으로 평가된다. 처리할 이미지의 인덱스를 설정하여 각 검사가 시작된다('이미지 스택의 활성 인덱스'). 이 점검 기능은 올바른 인덱스를 가진 이미지가 캡처 될 때까지 기다린다. 전송 이미지를 사용하면 이미지가 평가 될 런타임 데이터 풀에 제공된다.
7.2. 루프로 획득한 이미지를 처리하기 위한 루틴 점검
획득한 모든 이미지를 동일한 방식으로 처리하려고 한다. 따라서 단일 개별 검사로 처리하고 루프에서 여러 번 처리하는 것이 좋다.
7.2.1. 루프로 루틴 점검
두 번째 샘플 점검 루틴 ‘02-Check Routine with Loop.촉’ 은 루프에서 이미지 처리를 통해 점검 루틴을 설계하는 가장 쉬운 방법을 보여준다. 3개의 개별 검사로 구성되며, 마지막 검사 ‘이미지 전송 및 평가’가 여러 번 실행된다.
루프를 구현하려면 이 점검 루틴을 위해 ‘입력 값’ 범주에 ‘정수 값’ 유형의 두 개의 데이터 레지스터를 작성해야 했다. 첫 번째 데이터 레지스터는 루프 실행 중에 이미지 스택에서 인덱스를 동적으로 설정하기 위한 것이다. 두 번째 데이터 레지스터는 최대 루프 실행 수를 정의하며 처리할 총 이미지 수에 해당한다.
이 점검 루틴 샘플의 세 가지 개별 점검은 다음과 같이 설계되었다:
1) 이미지 스택 획득 초기화: 수집 할 이미지 수는 동적 데이터 입력을 사용하여 데이터 레지스터 '이미지 수'에서 설정한다.
2) 데이터 레지스터 초기화: 이 개별 점검에서 데이터 레지스터 'Loop Index'는 값 0으로 초기화된다.
3) 이미지 전송 및 평가: 이 개별 검사는 속성 페이지에서 루프로 실행되도록 구성되었기 때문에 여러 번 실행된다. 루프 실행 횟수는 ‘이미지 스택 크기’에 해당하며 동적 데이터 입력을 사용하여 제어된다. 이 개별 점검 내에서 루프 카운터를 나타내는 데이터 레지스터 값은 점검 기능 ‘레지스터의 데이터 수정’을 사용하여 1씩 증가한다. 전송된 다음 이미지의 인덱스를 카메라 장치에 알려주는 검사 기능의 데이터 입력은 이 값이 루프 카운터를 나타내는 데이터 레지스터에서 가져 오는 방식으로 구성된다.
7.2.2. 루프로 루틴 점검– 종료 전략
세 번째 샘플 점검 루틴 ‘03-Check Routine with Loop– Exit Strategy.chr’ 은 입력 신호에 의해 조절된 루프를 빠져 나갈 가능성을 제공한다. 이를 위해서는’Boolean’ 유형의 추가 데이터 레지스터가 필요하다.
이 데이터 레지스터는 PLC의 신호에 연결되었다. 각 루프 실행이 시작될 때 이 신호를 읽는다. 이 신호가 있는 경우에만 ‘Read Data into Register- Check if signal is present’ 기능을 점검하면 ’OK’가 표시되고 검사 기능 ‘이미지 전송’을 통해 평가할 이미지만 제공된다. 점검 기능이 ‘not OK’를 나타내면 이 시점에서 루프가 끊어진다. 이 종료 전략을 사용하여 PLC 또는 마스터 컴퓨터에서 종료 신호를 보내 이미지 스택 획득을 조기에 종료할 수 있다. 예를 들어, 더 이상 이미지를 얻을 수 없는 카메라 고장 시에 사용할 수 있다.
7.3. GOTO로 일상 점검
NeuroCheck에서는 검사 루틴 내에서 개별 검사를 여러 번 실행할 수 있는 가능성이 있다. GOTO를 사용하면 개별 검사의 흐름 동작이 차례로 실행되지 않는 방식으로 변경되지만 개별 검사 실행 후 검사 루틴 내에서 임의의 개별 검사로 점프 할 수 있다. 전에 실행 된 개별 점검으로 돌아간다. 이 방법으로 여러 개별 검사에 대해 ‘루프’를 설계할 수 있다. 현재 이미지를 하나의 개별 검사에서 다른 검사로 전달하기 위해 다음 예에서 NeuroCheck 표준 이미지 트레이가 사용된다.
7.3.1. GOTO로 일상 점검
네 번째 샘플 점검 루틴 '04-Check Routine with GOTO.chr'은 GOTO 명령을 사용하는 점검 루틴 설계를 보여준다. 다음과 같은 개별 검사가 포함된다.
1) 이미지 스택 획득 초기화
2) 데이터 레지스터 초기화
3) 현재 이미지 전송: 현재 루프 인덱스에서 이미지 스택에 액세스하여 이 이미지를 NeuroCheck 이미지 트레이로 전송한다.
4) 이미지 평가: 이미지 트레이에서 이미지를 복사하여 평가한다.
5) 루프 조건: 데이터 레지스터를 증가시키고 해당 값이 이미 총 이미지 수에 해당하는지 확인한다. 이 개별 검사의 흐름 속성은 속성 대화 상자에서 조정되어 ‘확인’ 실행 후 개별 검사의 흐름 실행이 세 번째 개별 검사 ‘이미지 전송’으로 되돌아간다.
7.3.2. 종료 전략으로 일상 점검
다섯 번째 샘플 점검 루틴 ‘05-Check Routine with GOTO– Exit Strategy.chr’ 는 점검 루틴 설계를 보여 주어 실행 중 루프에서 벗어날 가능성을 제공한다. 루프의 출구 전략과 유사하게, 이 예에서는 ‘Boolean’ 유형의 추가 데이터 레지스터가 추가되어 PLC의 신호에 연결되었다. 개별 점검 ‘루프 출구 점검’에서 이 신호를 읽고 평가한다. 이 개별 점검의 흐름 특성은 신호가 존재하지 않을 경우 전체 점검 루틴 실행이 종료되도록 특성 대화 상자에서 조정되었다. 다시 이 예는 GOTO 명령을 사용하면 다른 작업을 다른 개별 검사로 더 잘 구성할 수 있음을 보여준다.
7.4. 옵션으로 일상 점검
여섯 번째 샘플 검사 루틴 '06-Simple Check Routine with Options.chr'은 ‘고급 이미지 스택 옵션’ 장에 표시된 옵션을 통합하여 첫 번째 샘플 검사 루틴을 향상시킨다. 이미지 인덱스를 설정하기 위한 시간 종료 구성이 시작 조치에서 보완되었다. 검사 루틴 실행이 끝날 때 이미지 스택 획득이 완료되지 않은 경우 이미지 스택 획득이 중단되도록 최종 작업에서 이미지 스택 획득 중단이 도입되었다.
자료 제공: NeuroCheck(www.neurocheck.com)










