Vision Acquisition 소프트웨어를 사용하여 GigE Vision 카메라에서 수집하는 방법

업데이트 됨 Jun 2, 2022

환경

소프트웨어

  • LabVIEW

드라이버

  • Vision Acquisition Software

이 튜토리얼은 Vision Acquisition Software와 함께 GigE Vision 카메라를 사용하는 것에 관한 Part I의 논의를 계속합니다. 이 부분에서는 획득을 위한 하드웨어 및 소프트웨어 요구 사항에 대해 설명합니다. 그런 다음 LabVIEW API를 사용하여 먼저 카메라에서 이미지를 수집하고 카메라 설정을 제어한 다음 카메라 트리거링을 설정합니다.

GigE Vision 표준의 기본 사항을 이해하려면 애플리케이션 노트를 읽으십시오.
Vision Acquisition 소프트웨어를 사용하여 GigE Vision 카메라에서 수집

하드웨어 및 소프트웨어 설정

GigE Vision 카메라에서 이미지를 획득하려면 먼저 올바른 하드웨어와 소프트웨어가 모두 있는지 확인해야 합니다. 다음은 요구 사항 목록입니다.

하드웨어

  • GigE Vision 카메라: 카메라는 GigE Vision 표준을 준수해야 합니다. 기가비트 이더넷 포트가 있지만 GigE Vision과 호환되지 않는 카메라가 있는 경우 Vision Acquisition Software를 사용하여 이미지를 획득할 수 없습니다. 카메라의 사용 설명서 또는 마케팅 자료에서 GigE Vision 로고를 찾아야 합니다.
  • 기가비트 이더넷 포트: 각각 10MB/s 및 100MB/s를 지원하는 이더넷 및 고속 이더넷 포트를 사용하여 이미지를 획득할 수 있지만 이는 매우 느린 프레임 속도와 작은 해상도에서만 작동합니다. 기가비트 이더넷 NIC (네트워크 인터페이스 컨트롤러)를 사용하는 것이 좋습니다.

소프트웨어

  • Vision Acquisition Software: NI-IMAQdx 3.0 이상을 설치하려면 Vision Acquisition Software 8.2.1 이상이 필요합니다. NI-IMAQdx는 USB3 Vision, GigE Vision 및 IEEE 1394 카메라에서 이미지를 수집하는 기능이 포함 된 드라이버입니다.
  • ADE (Application Development Interface) : LabVIEW, LabWindows/CVI, Visual Studio 6.0 또는 모든 ANSI C 컴파일러를 사용하여 이미지를 수집할 수 있습니다.

네트워크 구성

하드웨어와 소프트웨어를 올바르게 설치했으면 네트워크도 구성해야 합니다. I부에서 논의한 바와 같이 GigE Vision 카메라는 DHCP 서버에서 IP 주소를 얻거나 LLA (Link Local Addressing)를 사용하여 IP 주소를 선택할 수 있습니다. DHCP 서버를 사용하여 카메라를 기가비트 이더넷 네트워크에 연결하면 카메라가 자동으로 감지됩니다. 카메라가 컴퓨터에 직접 연결되어 있는 경우(일반 케이블 또는 크로스 오버 케이블 사용) 카메라가 DHCP 요청에서 시간 초과될 때까지 약 1분정도 기다렸다가 LLA를 사용해야 합니다. Windows 운영 체제는 네트워크 카드의 작동이 제한적이라는 경고를 표시 할 수 있습니다. 이 경고는 무시해도 됩니다. 참고: 지연은 Windows Vista 운영 체제가 아닌 Windows XP 및 2000에만 적용됩니다.


그림 1. 카메라가 직접 연결되면 Windows에 경고가 표시됨

점보 패킷

일반적으로 네트워크 드라이버는 1500 바이트보다 큰 데이터를 여러 패킷으로 분할합니다. 그러나 GigE Vision 표준은 최대 9014 바이트의 패킷 크기를 허용합니다. 점보 패킷이라고 하는 이러한 대용량 패킷을 사용하면 카메라가 네트워크를 통해 데이터를 보다 효율적으로 전송할 수 있습니다. Windows 장치 관리자에서 네트워크 카드를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하여 많은 네트워크 카드에서 점보 패킷을 활성화 할 수 있습니다.


그림 2. Intel PRO/1000 어댑터에서 점보 패킷을 설정하는 예

네트워크 방화벽

카메라가 이미지를 획득하면 즉시 해당 데이터 패킷을 호스트로 스트리밍합니다. 그러나 방화벽은 일반적으로 시작되지 않은 들어오는 트래픽을 차단하기 때문에 네트워크 방화벽은 패킷이 대상에 도달하는 것을 허용하지 않습니다. 따라서 GigE Vision 카메라에서 이미지를 획득하려면 방화벽을 비활성화해야 합니다. 제어판(시작»제어판)에서 Windows 방화벽을 비활성화 할 수 있습니다. 그러나 Intel PRO/1000 칩셋이 장착된 네트워크 카드가 있고 고성능 드라이버를 사용하는 경우 방화벽을 비활성화할 필요가 없습니다. 고성능 드라이버는 수신되는 GigE Vision 패킷이 방화벽에 도달하기 전에 NI-IMAQdx 커널 드라이버로 리디렉션하므로 방화벽 설정은 이미지 수집에 영향을 주지 않습니다.
 

MAX에서 이미지 수집

MAX(Measurement and Automation Explorer)는 카메라를 발견하고 이미지를 획득할 수 있는지 확인하는 데 사용됩니다. NI-IMAQdx 드라이버는 플러그 앤 플레이 (PnP)를 지원하기 때문에 호스트와 동일한 서브넷에 있는 모든 GigE Vision 카메라는 디바이스 및 인터페이스 서브 트리에 자동으로 나타나야 합니다. GigE Vision 카메라는 NI-IMAQdx 하위 트리 아래에 열거되며 특수 아이콘으로 식별됩니다. NI IMAQdx 4.3.5 또는 이후 버전을 사용하는 경우 GigE Vision 카메라가 네트워크 디바이스 서브 트리에 나타납니다.


그림 3. MAX는 동일한 서브넷에 있는 모든 GigE Vision 카메라를 자동으로 감지합니다.

MAX는 호스트와 동일한 서브넷에 있는 모든 GigE Vision 카메라를 표시합니다. 그러나 NI-IMAQdx를 사용하면 원격 서브넷의 카메라에서도 이미지를 수집할 수 있습니다. NI-IMAQdx API에서 적절한 함수를 호출하여 원격 서브넷에서 카메라를 찾을 수 있습니다. 예를 들어 C 함수 IMAQdxDiscoverEthernetCameras()에는 카메라를 검색 할 서브넷을 지정하는 매개 변수가 있습니다.

MAX에서 카메라를 발견하면 다음 단계는 카메라에서 이미지를 획득하는 것입니다. 서브 트리에서 카메라를 선택하여 메인 창에서 엽니다. 다음은 획득 탭의 다양한 부분과 설명입니다.


그림 4. 획득 속성 페이지

  • 비디오 모드(Video mode): 이 속성은 IEEE 1394 카메라에만 유효합니다. GigE Vision 카메라의 경우 회색으로 표시됩니다.
  • 픽셀 형식(Pixel Format): 사용 가능한 픽셀 형식 목록을 표시합니다. 일반적인 형식은 Mono8, Mono16 및 YUV422Packed입니다.
  • 관심 영역(Region of Interest): 획득 창의 왼쪽, 위쪽 너비 및 높이를 지정합니다.
  • 타임 아웃(Timeout): 타임 아웃 오류를 반환하기 전에 드라이버가 획득이 완료되기를 기다리는 시간(밀리 초)을 설정합니다.
  • 패킷 크기(Packet Size): 각 데이터 패킷에서 전송되는 바이트 수를 지정합니다. 이 숫자는 네트워크 카드에서 허용하는 최대 패킷 크기보다 작아야 합니다 (점보 패킷이 비활성화 된 경우 1500, 점보 패킷이 활성화된 경우 9014).

획득 매개 변수를 올바르게 설정했으면 스냅(Snap)을 클릭하여 하나의 이미지를 획득하거나 잡기(Grab)를 클릭하여 이미지를 계속 획득합니다.
 

LabVIEW에서 이미지 수집

NI-IMAQdx는 IEEE 1394, USB3 Vision 및 GigE Vision 카메라에서 이미지를 수집하기 위한 통합 API를 제공합니다. 일부 기능은 한 유형의 버스에만 적용되지만 대부분의 함수와 VI는 두 유형의 카메라 모두에서 사용할 수 있습니다. 이를 통해 이미지 획득을 위해 버스에 구애 받지 않는 개발이 가능합니다. 코드를 거의 또는 전혀 변경하지 않고 IEEE 1394 카메라를 GigE Vision 카메라로 또는 그 반대로 교체할 수 있습니다.

NI-IMAQdx LabVIEW API는 하이 레벨 및 로우 레벨 VI로 나뉩니다. 고급 VI를 사용하여 간단한 스냅(Snap), 잡기(Grab) 또는 시퀀스 작업을 프로그래밍 할 수 있습니다. 로우 레벨 VI를 사용하면 하이 레벨 VI와 동일한 작업을 수행 할 수 있지만 실행 세부 사항을 더 잘 제어 할 수 있습니다. NI-IMAQdx를 사용하여 이미지 수집을 프로그래밍하는 방법을 이해하려면 LabVIEW와 함께 제공되는 예제를 살펴보십시오.


그림 5 . 간단한 잡아 예제

위의 예제는 LabVIEW의 간단한 Grab 수집을 보여줍니다. 획득한 이미지는 이미지 디스플레이에 표시됩니다. 이 예는 버퍼 번호 표시기의 버퍼 번호를 보여줍니다. while 루프의 루프 속도가 카메라의 프레임 속도보다 높지 않으면 버퍼가 손실될 수 있습니다. 이러한 경우, 메모리의 버퍼에 복사된 이미지는 원본 이미지를 처리하기 전에 다른 이미지로 덮어 씁니다. 대부분의 머신 비전 사례에서 누락된 프레임이 있으면 사용자에게 알리는 것이 중요합니다.
 

카메라 속성 이해

카메라는 일반적으로 다양한 제약 조건이 있는 다양한 환경에서 작동 할 수 있도록 카메라가 충분히 유연할 수 있도록 몇 가지 설정 가능한 속성을 지원합니다. 대부분의 머신 비전 카메라는 게인, 셔터 속도 또는 비트 심도와 같은 몇 가지 일반적인 속성을 지원하지만 많은 카메라에는 해당 카메라 또는 카메라 제품군에만 고유한 고유 속성 하위 집합이 있습니다.


그림 6. MAX의 카메라 속성 탭은 모든 속성을 표시합니다

GigE Vision 표준은 이미지를 캡처하는 데 필요한 최소한의 속성 집합을 정의합니다. 이미지 너비, 높이, 픽셀 형식 등과 같은 이러한 속성은 모든 GigE Vision 카메라에서 지원되어야 합니다. 그러나 카메라에서 지원하는 추가 속성은 GenICam 표준을 사용하여 노출될 수 있습니다.

GenICam 표준

GigE Vision 사양은 EMVA (European Machine Vision Association)의 표준인 GenICam을 사용하여 카메라가 지원하는 기능(속성)을 설명합니다. 모든 GigE Vision Camera는 GenICam 구문을 준수하는 XML 장치 설명 파일을 제공해야 합니다. 카메라가 연결되고 MAX에서 처음 선택되면 이 XML 파일은 NI-IMAQdx에 의해 검색되고 해석되어 카메라가 지원하는 속성을 열거합니다. 각 카메라 공급 업체가 각 카메라에 특정한 XML 파일을 제공하기 때문에 NI-IMAQdx는 해당 카메라에 특정한 속성을 자동으로 채울 수 있습니다.

 <Integer Name=“Gain" NameSpace="Standard">
    <ToolTip>Analog Gain setting for camera</ToolTip> 
    <DisplayName>Gain</DisplayName> 
    <pValue>GainReg</pValue> 
    <Min>0</Min> 
    <Max>128</Max> 
    <Inc>1</Inc> 
    <Representation>Logarithmic</Representation>
</Integer>
 
<IntReg Name="GainReg">
    <ToolTip>Access node for the camera's Gain feature</ToolTip>
    <Address>0x0815</Address>
    <Length>2</Length>
    <AccessMode>RW</AccessMode>
    <pPort>Device</pPort>
    <Sign Unsigned </Sign>
    <Endianess>BigEndian</Endianess>
</IntReg>

그림 7. 이득 속성(gain attribute)을 설명하는 XML 파일의 스니펫
 

그림 7은 XML 파일에 설명 된 이득 속성(gain attribute)의 매우 간단한 예를 보여줍니다. 이 XML 코드 스니펫을 분석 할 때 NI-IMAQdx는 다음을 결정합니다.

  • 기능 이름은 Gain입니다.
  • 최소값과 최대 값은 각각 0과 128이고 최소 증분은 1입니다.
  • 게인 값은 로그 형식으로 표시됩니다.
  • 현재 이득 값은 BigEndian Unsigned 형식의 주소 0x0815의 레지스터에 저장되며 길이는 2 바이트입니다.
  • 드라이버는 이 레지스터에 대한 읽기 및 쓰기 액세스 권한을 모두 가지고 있습니다.

카메라에서 지원하는 이러한 모든 속성에는 속성 매개 변수를 정의하는 XML 파일에 코드 섹션이 있습니다. <Program Files>\National Instruments\NI-IMAQdx\Data \XML 디렉토리에서 XML 파일을 열어 수동으로 검사할 수 있습니다. 참고: 위의 예는 속성을 매우 단순하게 표현한 것으로 학문적 연습으로 제공됩니다. 일반적인 XML 파일은 훨씬 더 복잡하고 많은 상호 참조를 포함합니다.

프로그래밍 방식으로 카메라 설정 제어

MAX(그림 6 참조)를 사용하여 XML 파일에 노출된 속성 값을 설정하여 카메라 설정을 제어할 수 있습니다. 그러나 많은 응용 프로그램에는 프로그래밍 방식으로 카메라 속성을 변경할 수 있는 기능이 필요합니다. NI-IMAQdx API는 XML 파일에 노출된 속성의 값을 변경하는 방법을 제공합니다. 카메라 속성은 지원되는 모든 API에서 설정할 수 있지만 LabVIEW에서의 구현에 대해 논의할 것입니다.

카메라에서 지원하는 모든 속성은 다음과 같은 속성으로 정의됩니다.

  • 이름: 속성의 고유 이름
  • 표현: 정수, 부동 소수점, 부울, 열거, 문자열 또는 명령 일 수 있습니다.
  • 측정 단위: 값이 나타내는 단위 (예 : 마이크로 초 (μs))
  • 액세스: 읽기 전용, 쓰기 전용 또는 읽기/쓰기

카메라 제조업체는 각 속성의 속성을 자세히 설명하는 문서를 제공할 수 있습니다. 문서를 사용할 수 없는 경우 MAX를 사용하여 특정 속성의 속성을 확인할 수 있습니다. 이렇게 하려면 카메라 속성 탭에서 원하는 속성을 선택하기만 하면 됩니다. 예를 들어 Basler Scout scA640-70gm 카메라의 ExposureTimeAbs 속성을 조사합니다. 그림 8에서 ExposureTimeAbs 속성이 마이크로 초를 단위로 하는 부동 소수점 숫자임을 확인할 수 있습니다.


그림 8. MAX의 ExposureTimeAbs 속성

LabVIEW에서 프로퍼티 노드를 사용하여 속성 값을 설정할 수 있습니다. 그러나 개발 시 LabVIEW는 속성의 이름이나 표현을 알 수 없습니다. 따라서 속성 이름을 제공하고 속성 표현(정수, 문자열, 부울 등)에 따라 적절한 함수를 호출해야 합니다.


그림 9. Basler scA640-70gm의 ExposureTimeAbs 속성 설정

GenICam은 카메라를 제어하는 유연한 방법을 제공하지만 표준은 상호 운용성을 보장하기에 충분하지 않습니다. 상호 운용성은 서로 다른 카메라 간에 전환하고 애플리케이션 소프트웨어의 기능을 계속 유지하는 기능입니다. 예를 들어 위의 예에서 Basler 카메라를 다른 제조업체의 카메라로 교체 한 경우입니다. 이 카메라에는 나노초 또는 정수로 표시되는 ExposureTimeAbs 속성이 있을 수 있으며 다른 이름으로 속성을 참조 할 수도 있습니다. 분명히, 각 카메라는 동일한 입력에 대해 다른 획득 결과를 생성합니다.

상호 운용성을 개선하기 위해 EMVA는 카메라 제조업체와 협력하여 GenICam 표준 기능 명명 규칙을 만들었습니다. 이 문서의 목표는 대부분의 카메라에 공통적 인 여러 속성의 이름, 표현, 액세스, 단위 및 기능을 표준화 하는 것입니다. 이 명명 규칙을 GenICam 표준과 함께 사용함으로써 카메라 제조업체는 표준 기능에 대해 다른 카메라와의 상호 운용성을 촉진하는 동시에 사용자에게 카메라의 고유 한 기능에 대한 액세스를 제공 할 수 있습니다.

 

GigE Vision에서 트리거링

대부분의 머신 비전 애플리케이션에서 카메라는 실제 이벤트를 기반으로 이미지를 촬영해야 합니다. 예를 들어, 병 검사 시스템은 병이 카메라와 관련하여 컨베이어 벨트에서 정확히 동일한 위치에 있을 때 각 이미지를 캡처해야 합니다. 이렇게 하면 병이 이미지에서 정확히 동일한 위치에 나타나므로 이미지 처리가 단순화됩니다. 하드웨어 트리거를 사용하여 이러한 제어를 수행할 수 있습니다.

일반적인 하드웨어 트리거 시스템에서 근접 센서 또는 인코더는 펄스를 전송하여 획득을 트리거합니다. 대부분의 경우 트리거는 수집을 시작하는 프레임 그래버에 연결됩니다. 그러나 GigE Vision 카메라 (최대 100 미터)로 가능한 먼 거리로 인해 프레임 그래버를 트리거할 수 없습니다. 따라서 모든 트리거 신호는 카메라에 직접 연결되어야 합니다.

GenICam에서 트리거 모드 선택은 카메라 속성 설정과 동일하게 작동합니다. 실제로 트리거 모드는 GenICam의 속성입니다. 이전 섹션에서 설명한 것과 동일한 API를 사용하여 트리거 모드를 설정할 수 있습니다. GenICam 표준 기능 명명 규칙은 트리거 된 작업의 동작을 사용자 정의 할 수 있는 여러 트리거 제어 기능을 정의합니다. 카메라 제조업체가 모든 트리거링 모드를 구현할 필요는 없지만 가장 일반적으로 사용되는 모드는 아래에 설명되어 있습니다.

  • AquisitionStart: 트리거는 카메라에서 수집을 시작합니다.
  • AcquisitionActive: 트리거가 활성화되어있는 동안 카메라가 이미지를 획득합니다.
  • FrameStart: 카메라가 각 트리거에 대해 하나의 이미지를 캡처합니다.
  • LineStart: 카메라가 각 트리거에 대해 한 줄을 캡처합니다 (라인 스캔 카메라에 사용됩니다).
  • ExposureStart: 트리거는 한 프레임 (또는 선)의 노출을 시작합니다.
  • ExposureActive: 트리거가 활성화되어 있는 동안 프레임(또는 선)이 노출됩니다.

그림 10. Prosilica GE650 카메라의 트리거 속성
 
예를 들어 Prosilica GE650 GigE Vision 카메라의 트리거링 모드를 살펴 보겠습니다. MAX의 카메라 속성 탭은 그림 10에서 볼 수 있습니다. 카메라가 Line1에 연결된 트리거의 각 상승 에지에 대해 하나의 이미지를 캡처하도록 선택했습니다. 이 설정은 MAX에 저장되면 카메라가 API에서 열릴 때 자동으로 로드됩니다. 그러나 프로그래밍 방식으로 설정을 지정할 수 있습니다. 그림 11은 LabVIEW를 사용하여 카메라를 그림 10과 동일한 설정으로 프로그래밍 방식으로 구성합니다.

그림 11. LabVIEW의 간단한 트리거링 예제

주의 사항 및 함정

점보 패킷 : NIC 장치 또는 중간 네트워크 하드웨어 (스위치, 라우터 등)가 점보 패킷을 지원하지 않는 경우 1500 바이트 미만의 패킷 크기로 제한됩니다. GigE Vision 패킷 크기는 NIC에서 허용하는 최대 패킷 크기보다 클 수 없습니다.

방화벽: 많은 기업 네트워크는 네트워크 보안을 위해 방화벽을 사용합니다. 그러나 High Performace 드라이버를 사용하지 않는 한 방화벽이 활성화 된 GigE Vision 카메라에서 획득 할 수 없습니다. 회사의 네트워크 정책이 방화벽을 비활성화 하거나 다른 네트워크 드라이버를 사용하는 것을 허용하지 않는 경우 회사 네트워크의 일부가 아닌 이미지 획득 전용 시스템을 사용해야 합니다.

손상된 XML 파일: 새로운 표준과 마찬가지로 카메라 제조 회사는 정기적으로 펌웨어의 새 버전을 출시합니다. XML 파일이 손상되었다는 오류가 발생하면 카메라 제조업체에 최신 버전의 펌웨어를 문의하십시오.

상호 운용성: GenICam은 카메라 제조업체에게 사용자 정의 속성 세트를 생성 할 수 있는 유연성을 제공하지만 코드를 수정하지 않고 카메라 간에 쉽게 전환하기 어렵게 만듭니다. GenICam 표준 기능 명명 규칙은 이 문제를 어느 정도 완화하지만 대부분의 규칙은 요구 사항이 아니라 권장 사항 일 뿐입니다. 따라서 카메라 제조업체가 관례에서 벗어날 수 있으며,이 경우 응용 프로그램 소프트웨어를 다른 카메라와 상호 운용 할 수 있도록 수정해야 합니다.