IDS NXT와의 인터페이스

공장 자동화에서 IDS NXT 카메라를 통합하는 방법

IDS NXT를 통해 산업용 어플리케이션을 위한 차세대 비전 시스템을 개발했는데, 이것은 공장 자동화에서 강력한 비전 센서로 사용될 수 있습니다. 또한, 딥 러닝과 연계하여 IDS NXT Experience Kit을 실행하는 것은 사용하기에 특히 쉽습니다. 올인원 솔루션(all-in-one solution)은 개별 신경망을 엣지에서(on-the-edge) 직접 실행함으로써, 강력한 인퍼런스 카메라를 생성하는 데 필요한 모든 것을 제공합니다. 이미지 획득 및 관리로부터, AI 교육, 및 최종 작동 IDS NXT 인퍼런스 카메라에 이르기까지, 단지 몇 단계 이내만 거치면 됩니다. 그러나, 인퍼런스 카메라는 어떻게 주위 환경에 통합될까요?

이 테크팁에서, IDS NXT 카메라를 통합하기 위한 인터페이스를 특별히 다룹니다. 그리고, 사용자 자신의 환경에서 인퍼런스 결과를 사용하는 방법을 포괄적으로 보여줍니다.

IDS NXT 인터페이스

컴팩트한 임베디드 비전 시스템으로서의 IDS NXT 카메라는, 이미지 처리 작업을 직접 현장에서 바로 처리하고 추가 PC 없이 결과를 제공할 수 있습니다. 그 결과, IDS NXT 카메라를 자율 비전 센서로 사용할 수 있게 됩니다. 외부 시스템에 대한 액세스 및 데이터 교환 요구 사항의 측면에서, 주로 PC 기반 이미지 처리를 위한 이미지 공급자 역할을 하는 일반적인 산업용 카메라와 IDS NXT 카메라는 근본적으로 다릅니다. 따라서, 우리는 IDS NXT 카메라에 IoT 유형 어플리케이션 시나리오에서 사용하기에 더 쉽고 더 유연한 인터페이스를 장착하였습니다.

IDS NXT cockpit
IDS NXT cockpit은 IDS NXT 산업용 카메라의 모든 중요한 설정들과 기능들에 대한 액세스를 제공하며, REST 인터페이스에 전적으로 기반합니다.
추가적으로, Vision 앱을 설치하거나 설정할 수 있습니다. 여러분이 카메라 작업을 위하여 나중에 어떤 인터페이스를 사용하든지 간에, IDS NXT cockpit에는 카메라 어플리케이션을 편리하게 셋업하고 런타임 동작에 대하여 설정할 수 있는 사용하기 쉬운 GUI가 있습니다.

IO 및 RS-232

Industry 4.0 시대에도, 디지털 입력/출력 및 UART 기반 직렬 인터페이스와, 이에 기반한 필드버스(fieldbus)는 최신 후속 제품에 비해 수많은 이점들을 제공합니다. 복잡한 부품 검사 및 이미지 기반 검증의 경우에도, 추정상 단순한 결과 IO 또는 NIO는 대규모의 현대적인 산업 라인에서 제품을 빠르고 쉽게 제어하기에 일반적으로 충분합니다. 그 어떤 다른 인터페이스도 디지털 입력 또는 출력만큼 쉽고 저렴하게 구현될 수 없습니다. 마찬가지로, RS-232를 갖는 직렬 장치 통신은 너무나 많은 제조업체들과 사용자들에 의하여 지원됩니다. 더 포괄적인 범위의 검증된 악세서리는 없습니다. 이것이 RS-232가 오늘날에도 여전히 산업용 통신 표준들 중 하나인 이유입니다.

IO 및 RS-232 인터페이스가 장착된 IDS NXT 카메라는, 기존 인프라를 변경하지 않고도 컴팩트하고 강력한 임베디드 비전 솔루션으로써 많은 기존 시스템들을 보완합니다.

IDS NXT REST 인터페이스

REST (Representational State Transfer) 웹 서비스와 함께, IDS NXT 카메라는 손쉬운 네트워킹을 가능하게 하는 기계간의 통신을 위한 표준화된 개방형 인터페이스를 제공합니다. 이를 통해 카메라의 파라미터와 결과를 변경하거나 질의할 수 있습니다. REST 웹 서비스는 HTTP 프로토콜에 기반하므로, 대부분의 네트워크들에서 사용할 수 있습니다.

GET, POST, PUT, PATCH 등과 같은 표준 HTTP 메소드는 통일된 인터페이스로 사용됩니다. 즉, IDS NXT REST 인터페이스는 플랫폼 독립적일 뿐만 아니라, HTTP 메소드의 광범위한 사용으로 인하여 다양한 클라이언트들 (PC, 스마트 폰, 태블릿)에서 사용될 수 있습니다. C++ 어플리케이션은 완전히 셋업된 개발 환경이 필요하지만, REST(ful) API는 추가 소프트웨어나 게이트웨이 없이 웹 사용가능 장치 클래스들에 의하여 서비스될 수 있습니다. 이를 통해, 시작하기 더 쉬워질 뿐만 아니라, 광범위한 설정 작업을 간단한 스크립트로 패키지화할 수도 있습니다.
자율적으로 작동하는 비전 센서와의 일반 통신을 위해서, REST는 GenICam과 같은 PC 기반 인터페이스보다 더 쉽고 적은 오버 헤드로 IIoT (산업용 사물 인터넷)뿐만 아니라 IoT (사물 인터넷)의 환경에서도 사용될 수 있습니다. IDS NXT 카메라의 경우, REST는 데이터 및 결과 전송을 위한 "런타임" 인터페이스일 뿐만 아니라, 카메라, 카메라의 앱 및 인터페이스(IO, RS232)의 설정 (예: IDS NXT cockpit)에도 사용됩니다.

왜 REST인가요?

  • 비상태(Stateless)
    비상태 통신은, 각 클라이언트-서버 메시지가 독립적이고 현재 어플리케이션 상태에 대한 모든 필요한 정보를 포함하도록 합니다. 이는 REST 서비스가 실행들 사이에 아무것도 저장할 필요가 없음을 의미합니다. 따라서, 서버에서의 세션 관리가 필요하지 않게 되어, 네트워크에서 필요에 따라 웹 서비스의 규모를 조정할 수 있습니다. 이것은 REST가 IoT에서 사용하기에 이상적으로 만듭니다.
  • 통일되고 플랫폼-독립적
    REST와 함께, 시스템은 쉬운 네트워킹을 가능하게 하는 웹 기술에 기반하여 표준화된 개방형 인터페이스를 제공합니다. 프로토콜 변환이나 게이트웨이 없이 모든 (I)IoT 장치들 간에 데이터와 결과가 교환될 수 있습니다.
  • 쉽고 리소스-절약적
    대부분의 경우에서, 간단한 REST API 호출의 결과를 생성, 전달 및 아마 처리하는 데는 처리 능력이 거의 필요하지 않습니다. 게다가, 표준 HTTP 메소드가 널리 사용되기 때문에, REST 통신에 필요한 기술 요구 사항들은 추가 소프트웨어 없이 대부분의 웹 사용 가능 장치들에서 이미 사용될 수 있습니다.
  • 위치 독립적
    클라이언트와 서버는 분리하여 동작할 수 있습니다 ("분산 시스템"). 서로 다른 서버에서 호스트될 지라도, REST를 통한 통신은 여전히 가능합니다.
  • 산업 및 웹-호환가능
    데이터의 손쉬운 액세스 및 전송은 IIoT의 필수적인 부분입니다. 광범위하게 사용 가능한 리소스를 사용할 수 있는 유연성과 기능으로, REST는 산업 자동화를 단순화할 수도 있습니다. 어플리케이션 간의 통신 및 장치 간의 통신을 사용하여, 많은 시스템과 장치를 빠르고 쉽게 통합할 수 있습니다. 웹 호환성은 더 포괄적인 통합 전략을 위한 열쇠입니다. 산업의 진화 및 발전도 새로운 시스템과 기술에 대하여 열려 있음으로 인하여 이득을 얻게 됩니다.

IDS NXT REST의 웹 서비스는 다음의 기능들로 구현됩니다:

  • REST 웹 서비스는 정규 작업 중에 항상 활성화됩니다.
  • 액세스 보호는 HTTP 기본 인증을 통해 구현됩니다. 즉, 요청마다 인증에 대해 권한을 가진 사용자의 사용자 데이터가 필요하고, 이것은 Base64 인코딩으로 전송됩니다.
  • 응답은 JSON 또는 XML 형식으로 전송됩니다.

IO 및 RS-232를 통한 IDS NXT 통신

디지털 입력/출력 또는 직렬 인터페이스를 통해 카메라 이미지 처리 결과를 통신하기 위하여, IDS NXT cockpit을 통해 두 개의 IDS NXT Vision Apps "GPIO Gateway"와 "RS-232 Gateway"를 시작하고, 어떤 비전 앱으로부터 특정한 결과를 출력할 지를 설정하는 것이 그저 필요합니다. 프로그래밍은 필요하지 않습니다. 모든 설정들은 GUI를 통해 이루어질 수 있습니다.

예를 들어, 카메라 AI ("ImageNet1000"를 갖는 CNN manager)가 특정 오브젝트(예: "양호" 또는 "나쁨")를 분류할 때마다, 디지털 출력이 특정 시간 동안 활성화되도록 설정할 수 있습니다. 또는 감지된 오브젝트 클래스와 인퍼런스의 확률을 직렬 연결을 통해 결과 값으로 통신할 수 있습니다.

IDS NXT REST 통신

개발자를 위한 REST의 큰 장점은 웹 호환성과 필요한 도구들의 단순함입니다. 그러므로, 어떻게 HTTP 메소드들, GET, POST, PUT 및 DELETE를 사용하여 IDS NXT 카메라로부터 데이터를 검색하는지에 대한 예시들을 보여줍니다.

이 테크팁은 REST API 사용에 대한 포괄적인 문서가 되기 위하여 의도된 것이 아닙니다. 보다 쉽게 시작할 수 있도록 기초적인 힌트를 제공하고자 합니다. "나머지"는 여러분에게 달려 있습니다!

다음의 예시들을 재현하기 위하여, 같은 네트워크 내의 Windows PC를 통해 액세스할 수 있는 IDS NXT 카메라가 필요합니다. 파라미터들의 어리석은 쿼리들을 피하기 위하여, 카메라가 유용한 뭔가를 수행하게 할 것입니다. 우리는 카메라 AI와 사전 설치된 CNN "KritzelNN"을 사용합니다. 이를 통해, 카메라 AI는 사람, 개, 고양이 및 카메라의 그림을 인식할 수 있습니다. REST-API를 통해, 자기가 그린 그림들에서 무엇을 인식하는 지를 요청합니다.

테스트 시나리오 "여러분이 보지 못하는 것을 보았습니다."

  • IDS NXT rio 또는 rome 카메라 및 Windows PC와의 네트워크
  • 사전에 설치된 신경망 "KritzelNN"으로 비전 앱 "CNN Manager"를 실행합니다.
  • 사람, 카메라, 고양이 또는 개의 다양한 그림들.

"cURL"(명령 라인)을 사용한 REST 호출

cURL은 URL을 통해 데이터를 전송하기 위한 명령 라인(command line) 도구이고, 명령 프롬프트(또한, cmd.exe)에서 간단히 실행할 수 있습니다. 마지막 카메라 이미지의 인퍼런스 결과 (KritzelNN)를 쿼리하기 위하여, 원하는 리소스 '/vapps/cnnmanager/resultsources/last'로 'GET' 요청을 보냅니다.

카메라 이미지:

C:\Users\ids>curl -sX GET http://192.168.2.102/vapps/cnnmanager/resultsources/last --user admin:ids
{
    "inference": {
        "Top1": "person",
        "Top2": "camera",
        "Top3": "cat",
        "Top4": "dog"
    },
    "inference_propability": {
        "Top1": "0.99",
        "Top2": "0.01",
        "Top3": "0.00",
        "Top4": "0.00"
    },
    "inferencetime": {
        "Content": "43"
    }
}
C:\Users\ids>curl -sX GET http://192.168.2.102/vapps/cnnmanager/resultsources/last --user admin:ids | jq ".inference.Top1, .inference_propability.Top1"
"person"
"0.95"

이제 테스트를 위해 카메라 렌즈 앞에 다양한 그림들을 배치하고, 각각의 인퍼런스 결과를 호출하세요.

브라우저에서 REST 호출

주소 라인을 통해 직접적으로

인퍼런스 쿼리는 웹 브라우저 (예: Firefox 또는 Google Chrome)를 통해 매우 쉽게 수행될 수도 있습니다. 이렇게 하려면, 주소 라인에 다음의 URL을 입력하세요.
http://admin:ids@192.168.188.21/vapps/cnnmanager/resultsources/last
사용자 자격 증명은 표준 HTTP 인증 헤더로 전송됩니다.

아쉽게도, 보안상의 이유로, 모든 브라우저(예: IE)가 더 이상 URL에 임베디드된 자격 증명을 지원하는 것은 아닙니다!

브라우저 플러그인으로

Rest API 브라우저 플러그인
REST 호출을 테스트하기 위한 매우 명확한 GUI를 갖는 유용한 브라우저 플러그인도 많이 있습니다.

브라우저에서 직접적인 REST 통신을 위한 편리한 GUI 인터페이스
브라우저에서 직접적인 REST 통신을 위한 편리한 GUI 인터페이스
Postman은 Rest API를 위한 개발 및 테스트 환경입니다.
Postman은 Rest API를 위한 개발 및 테스트 환경입니다.

따라서 반복적으로 필요한 데이터가 변수로 편리하게 제공될 수 있습니다. 그러나 Postman의 가장 중요한 기능은 코드 발생일 것입니다. cURL, C, C#, Python, Java 또는 Swift와 같은 여러 일반 프로그래밍 언어 및 기타 클라이언트를 위하여, 버튼을 누르면, 클라이언트는 여러분의 테스트되고 저장된 REST 호출로부터 완전히 유용한 코드 스니펫을 생성합니다.

Postman 코드 스니펫은 IDS NXT 카메라를 자체 프로그래밍된 어플리케이션에 통합하기 위한 좋은 기반을 제공합니다.

프로그래밍된 어플리케이션으로 REST API의 통합

IDS NXT 카메라를 위한 개발 SDK는 제공되지 않음에도 불구하고, 예를 들어 C++ 어플리케이션에 대하여, 이는 카메라의 프로그래밍 방식 통합이 가능하지 않은 것을 의미하지 않습니다. 제조업체로부터의 추가 소프트웨어 없이, 대부분의 프로그래밍 언어들에서 REST 또는 HTTP 연결을 사용할 수 있습니다. 이것이 바로 Postman과 같은 REST 클라이언트가 직접적 사용을 위하여 완전한 기능의 코드 스니펫을 제공할 수 있는 이유입니다.

AI 카메라 결과를 예시로 사용하여, 어떻게 Python에서 REST 호출을 프로그래밍하는 지를 보여줍니다.

Python로 REST 호출

import http.client
import mimetypes
conn = http.client.HTTPSConnection("192.168.188.21")
payload = ''
headers = {
  'Authorization': 'Basic YWRtaW46aWRz'
}
conn.request("GET", "/vapps/cnnmanager/resultsources/last", payload, headers)
res = conn.getresponse()
data = res.read()
# output camera response
print(data.decode("utf-8"))

Python은 IoT에서 매우 일반적인 프로그래밍 언어입니다. 따라서, Python을 사용하여 IDS NXT 카메라를 생산 자동화 시스템에 통합하는 것을 더 자세히 설명하고자 합니다.

1 로그인 및 이미지 전송 (connect_and_get_image.ipynb)
첫 번째 예시는 어떻게 GET 명령문을 사용하여 IDS NXT 카메라로부터의 이미지를 승인하고 검색하는 지를 보여줍니다.

2. 노출 시간 변경 (change_exposure.ipynb)
두 번째 예시는 카메라 파라미터를 요청하고 수정하는 방법을 보여줍니다. 이를 위하여, PATCH 명령을 사용하여 노출 값을 변경합니다.

3. 이미지 획득의 트리거 (trigger_image_acquisition.ipynb)
POST 명령을 사용하여, 수정된 장면의 이미지 내용을 검색하기 위해 이미지 캡처를 어떻게 트리거하는지를 세 번째 예시에서 보여줄 것입니다.

4. IO 게이트웨이 설정 (set_gpio_gateway.ipynb)
네 번째 예시에서는, CNN 매니저 비전 앱의 결과에 따라 어떻게 카메라 디지털 출력을 토글하는 지를 보여줍니다.