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