Framegrabber API#
| Library | 목적 |
|---|---|
| fglib5 |
|
| siso_genicam |
|
| clsersis |
|
| iolibrt |
|
| display_lib |
|
Framegrabber API를 사용하면 Basler 프레임 그래버에 연결된 카메라에서 이미지를 획득하고 처리하는 애플리케이션을 작성할 수 있습니다. Camera Link 및 CoaXPress 표준을 사용하는 카อล메라는 Basler 프레임 그래버 및 Framegrabber API에서 지원됩니다.
정보
Framegrabber API 버전 5.9부터 API에 몇 가지 변경 사항이 적용되었습니다. 문서 전반에 걸쳐 이러한 변경 사항은 해당 섹션에서 강조 표시되어 있습니다. 모든 변경 사항은 문서의 ‘변경 내역’ 부분에 요약되어 있습니다.
바슬러(Basler) 프레임 그래버는 직접 메모리 액세스(DMA)를 사용하여 하나 이상의 카메라에서 캡처한 이미지를 애플리케이션이 할당한 메모리로 직접 전송합니다. 카메라에서 프레임 그래버를 거쳐 애플리케이션 메모리로 이동하는 이미지 데이터의 경로는 ‘ Framegrabber API ’의 맥락에서 DMA 채널이라고 합니다( Framegrabber API 의 관점에서 볼 때, 이미지 데이터는 애플리케이션 메모리로의 DMA 전송을 통해 애플리케이션 컨텍스트로 들어갑니다).
애플리케이션이 획득 루프에서 새 이미지를 대기하도록 설계하거나, 새 이미지를 사용할 수 있게 되었을 때 Framegrabber API에 의해 호출될 함수를 등록할 수 있습니다. 두 경우 모두 애플리케이션은 새 이미지가 컴퓨터 메모리로 완전히 전송된 후에만 이를 인식하며, 애플리케이션에서 이미지 데이터를 안전하게 처리할 수 있습니다.
애플리케이션은 새 이미지를 대기할 시간(일반적으로 초 단위)을 항상 지정해야 합니다. 새 이미지 대기를 위해 호출되는 함수는 Framegrabber SDK 설치에 제공되는 운영 체제 드라이버를 호출하며, 새 이미지가 도착하거나 지정된 시간이 경과할 때까지(둘 중 먼저 발생하는 조건 기준) 호출 스레드를 대기 상태로 전환할 수 있습니다. 지정된 대기 시간 내에 이미지가 도착하지 않으면 타임아웃 오류가 발생하여 애플리케이션에 보고됩니다.
Framegrabber API의 작동 방식은 새 이미지를 대기하는 동안 낮은 프로세서 사용량을 보장하며 카메라에서 애플리케이션으로의 저지연 이미지 데이터 전송을 보장합니다. 하지만 이는 대부분의 애플리케이션이 별도의 스레드에서 이미지 획득을 실행하도록 구현되거나, Framegrabber API가 관리하는 별도의 스레드에서 획득 루프를 다시 실행하는 콜백 메커니즘을 사용해야 함을 의미합니다. 그렇지 않으면 애플리케이션이 새 이미지를 대기하는 동안 애플리케이션 메인 스레드가 차단될 수 있습니다.
또한 새 이미지 대기 시간으로 인해 애플리케이션이 운영 체제 드라이버 호출에서 스레드가 반환될 때까지 먼저 대기하지 않고는 종료되지 못할 수 있습니다. 예를 들어 시스템의 단일 사용자 인터페이스로 실행되는 애플리케이션의 경우 이는 큰 문제가 되지 않지만, 다목적 컴퓨터에서 실행되며 애플리케이션 종료 시 빠른 응답성이 요구되는 애플리케이션의 경우 짧은 대기 시간을 사용하고 그에 따라 타임아웃 오류를 처리해야 합니다.
Framegrabber API의 함수는 서로 다른 스레드에서 안전하게 사용할 수 있지만, 서로 다른 스레드가 동일한 기능이나 DMA 채널을 동시에 제어해서는 안 됩니다.
Basler 프레임 그래버는 이미지 데이터가 애플리케이션 메모리로 전송되기 전에 사전 처리를 적용할 수 있습니다. 대부분의 프레임 그래버는 일반적으로 사용되는 표준 사전 처리 기능 세트를 지원하지만, Basler VisualApplets 및 Basler의 프로그래밍 가능한 프레임 그래버를 사용하는 애플리케이션 개발자는 더 정교한 사전 처리를 구현하여 CPU에서 프레임 그래버의 FPGA로 이미지 처리를 오프로드할 수 있습니다.