총 3 건
1. 소개 Open eVision은 이미지 처리와 분석을 위한 Software Tool이며, 이미지 획득을 위한 3’rd party device를 지원합니다. Host memory에서 이미지 처리 수행됩니다. 사용자의 Application에 통합할 수 있게 설계되어 있습니다. Libraries(DLLs), .NET classes 개발 환경에 대해 광범위하게 지원 Libraries 구성 32/64bit libraries : C++ / .NET 참고 문서 사용자가 사용하기 쉽게 HTML Documentation 형태로 제공합니다. C++ / .NET 예제 제공 Open eVision 22.04: https://documentation.euresys.com/Products/OPEN_EVISION/OPEN_EVISION_22_04/ko-kr/Content/00_Home/home.htm 튜토리얼 HTML Documentation에서 알고리즘 별 Step by Step 교육 자료를 제공합니다. Open eVision 의 주요 기능에 대해 중요한 설명이 포함되어 있습니다. 테스트를 위한 샘플 이미지도 제공합니다. Visual C++ MFC MBCS Library for Visual Studio 2013이 반드시 설치되어 있어야 합니다. MSVC와 같은 C++ 컴파일러가 반드시 설치되어 있어야 합니다. 가상 시스템에 제품을 설치할 수 없습니다. 2. 기초 설명 이미지 구조 이미지 구조화 각 용어의 설명 Pointer: 메모리상에 존재하는 이미지 버퍼의 시작 주소. Width: 이미지의 가로 크기. Height: 이미지의 세로 크기. Padding Data: 4byte 정렬을 맞추기 위한 데이터. Buffer Pitch: 패딩(Padding) 데이터를 포함한 전체 가로 크기. 이미지 관심 영역 (Region Of Interrest) ROI 이미지의 관심 영역을 직사각형으로 제공합니다. 다음과 같은 상속 관계입니다. ROI를 이미지에 붙여 (Attach) 사용합니다. Region 이미지의 관심 영역을 임의의 모양으로 제공합니다. 여러 개의 Region을 연산하여 새로운 Region을 생성할 수 있습니다. 해당 기능을 Open eVision Studio에서 제공하지 않습니다. 코드에서만 사용가능합니다. 서브 픽셀 (Sub-Pixel) 다음의 라이브러리에서 1/10 수준으로 제공합니다. EasyMatch EasyFind EasyGauge EasyObject EasyMatch만 서브 픽셀 선택이 가능합니다. 그 외의 모든 라이브러리는 사용자가 선택할 수 없습니다. 멀티 코어 처리 기본적으로 병렬 처리는 비활성화 되어 있습니다. 시스템에서 사용 가능한 물리적 CPU 코어 수를 확인하고, 설정할 수 있습니다. (하이퍼 스레딩 제외) Thread-Safe 클래스 Open eVision은 멀티 스레드에 의한 동시 실행은 지원하지만, 데이터는 한번에 하나의 스레드에서만 접근이 가능합니다. 3. SDK 사용 방법 예제 코드 Open eVision 리소스의 기본 경로는 다음과 같습니다.Open eVision 리소스의 기본 경로는 다음과 같습니다. 예제 코드: C:\Users\Public\Documents\Euresys\Open eVision XX.YY\Sample Programs 예제 이미지: C:\Users\Public\Documents\Euresys\Open eVision XX.YY\Sample Images 딥 러닝, 3D 관련 자료는 홈페이지에서 다운받아야 합니다. https://www.euresys.com/ko/Support/Download-area?Series=9de20c1e-c26c-470c-a5ae-93a48539b4e0 편집하며 계속하기 Open eVision은 ‘편집하며 계속하기‘ 기능을 지원하지 않습니다. 편집하며 계속하기는 메모리를 저장, 재컴파일 그리고 메모리 교체가 발생합니다. 메모리가 단순한 상태가 아닐 때 실패할 가능성이 있으며, Open eVision을 이용한 메모리 매핑은 간단하지 않습니다. 편집하며 계속하기 기능으로 라이선스 프로세스가 다시 시작되어, 오랜 시간이 걸릴 수 있습니다. 라이브러리 참조 방법 C++ ‘프로젝트 속성 > C/C++ > 일반 > 추가 포함 디렉터리’에 라이브러리 include 경로를 추가합니다. 기본 경로: C:\Program Files (x86)\Euresys\Open eVision XX.YY\Include ‘프로젝트 속성 > C/C++ > 명령줄’에 -Zm256과 /bigobj 옵션을 추가합니다. 다음의 헤더 파일을 추가합니다. C# 솔루션 플랫폼을 x86 또는 x64 중 하나만 사용합니다(Any CPU는 지원하지 않습니다.). 플랫폼에 맞는 ‘프로젝트 > 참조’에 Open_eVision_NetApi_XX_YY.dll 파일을 추가합니다. 기본 경로: C:\Program Files (x86)\Euresys\Open eVision XX.YY\Bin32 또는 Bin64 다음의 네임스페이스를 추가합니다. 라이선스 모델 지정 라이선스 초기화 과정에서 생기는 지연을 방지하기 위해, 사용하는 모델만 설정하여 지연 시간을 최소화 합니다. 어떠한 Open eVision Library API를 호출하기 전에, 반드시 최초로 호출합니다. 라이선스 모델은 다음과 같이 열거형으로 정의되어 있습니다. 여러 개의 라이선스 모델을 사용한다면, 다음과 같이 호출합니다. 초기화 어떠한 Open eVision Library API를 호출하기 전에, 반드시 최초로 호출합니다. 앞에서 설명한 Preconfiguration 이후에 호출합니다. 해제 더 이상 Open eVision Library API를 사용하지 않는다면, 가장 마지막에 호출합니다. 예외 처리 Open eVision Library는 에러가 발생하면 예외를 던집니다. 사용자는 반드시 try-catch를 사용하여 예외를 처리해야 합니다. 예외를 처리하지 않으면, 예외 발생 시 프로그램이 비정상 종료될 수 있습니다. .NET 객체 관리 객체 관리 .NET에서 Open eVision Library를 사용할 때, 더 이상 사용되지 않는 객체는 Dispose()를 호출할 것을 적극 권장합니다. Garbage Collector가 .NET객체를 적절하게 해제하는 반면, Open eVision Library 객체는 그렇지 못하기 때문입니다. 연관된 객체 관리 일부 객체는 내부에 다른 객체가 연관되어 있습니다. 연관된 객체에 접근한 후 순서대로 적절하게 해제해야 합니다. C++ dll에서 사용하기 -dll 내부에서만 객체 사용하기 주의 사항 Preconfiguration을 제외한 Open eVision API 호출 전에, 반드시 Easy::Initialize()를 먼저 호출합니다. 더이상 Open eVision API를 사용하지 않는다면, Easy::Terminate()를 호출합니다. Open eVision 객체를 전역(Global object)으로 사용하지 않습니다. C++ dll에서 사용하기 - dll 외부에서 dll 내부로 객체 넘기기 주의 사항 Preconfiguration을 제외한 Open eVision API 호출 전에, 반드시 Easy::Initialize()를 먼저 호출합니다. 더이상 Open eVision API를 사용하지 않는다면, Easy::Terminate()를 호출합니다. Open eVision 객체를 전역(Global object)으로 사용하지 않습니다. 동일한 버전의 Open eVision Library를 dll 내부, 외부에서 사용합니다. C++ dll에서 사용하기 - dll 외부에서 dll 내부로 포인터 넘기기 주의 사항 Preconfiguration을 제외한 Open eVision API 호출 전에, 반드시 Easy::Initialize()를 먼저 호출합니다. 더이상 Open eVision API를 사용하지 않는다면, Easy::Terminate()를 호출합니다. Open eVision 객체를 전역(Global object)으로 사용하지 않습니다. 동일한 버전의 Open eVision Library를 dll 내부, 외부에서 사용합니다. 3'rd party 버퍼 연동하기 버퍼 연결 이미지 컨테이너 객체에 버퍼(예: 카메라)를 연결하기 위해 SetImagePtr()를 사용합니다. width : 이미지의가로크기(픽셀 단위). height : 이미지의세로크기(픽셀 단위). imagePointer : 4byte 정렬된 버퍼의 시작 주소. bitsPerRow : 패딩 데이터가 포함된, 행의 전체 비트 수. 이 값이 0 또는 없다면, 4byte(32bit) 배수에 맞춰 가능한 가장 작은 값이 계산됨. 주의 사항 해당 함수는 깊은 복사가 아닙니다. imagePointer가 삭제되거나 내용이 달라지면 이미지 컨테이너 객체도 영향을 받습니다. 기본적으로, Open eVision은 이미지 버퍼가 4byte(32bit) 정렬이 되어있다고 가정합니다. 이는 이미지의 모든 행의 시작 주소가 4의 배수임을 의미합니다. 또한, 이미지의 가로 크기가 4의 배수라면 문제가 없지만, 4의 배수가 아니라면 이미지 정렬에 문제가 생깁니다. 이미지가 4의 배수가 아니라면, bitsPerRow 인자에 값을 넣어야 합니다. 이미지 버퍼의 버퍼 피치를 취득하여 bit로 변환하여 인자를 넘깁니다. 즉, 8bit 기준으로 buffer pitch * 8 을 인자로 넘겨야 하며, 이 값은 32배수여야 합니다. 만약, SDK에서 버퍼 피치를 얻을 수 없고, 이미지 정렬에 문제가 생긴다면 카메라의 가로 크기를 4의 배수로 맞춰야 합니다. 코드 예시 4의 배수인 경우 4의 배수가 아닌 경우
2022.10.261. 소개 SDK 소개 Spinnaker SDK는 머신 비전 개발자를 위해 구축된 FLIR의 차세대 API라이브러리 입니다. GigE, 10GigE, USB3 Vision 인터페이스만 연결이 가능합니다. Spinnaker SDK 주요 구성 AdapterConfigGUI 네트워크 어댐터 및 카메라 IP설정을 도와주는 툴입니다. SpinView 다수의 카메라 이미지 취득과 제어를 할 수 있는 툴입니다. 지원 환경 2. SDK 환경 설정 라이브러리 참조 방법 ‘프로젝트 속성 > C/C++ > 일반 > 추가 포함 디렉터리’에 라이브러리 include 경로를 추가합니다. 기본 경로: C:\Program Files\FLIR Systems\Spinnaker\include ‘프로젝트 속성 > 링커 > 일반 > 추가 라이브러리 디렉터리’에 라이브러리 lib 경로를 추가합니다. 기본 경로: C:\Program Files\FLIR Systems\Spinnaker\lib64\vs2015 ‘프로젝트 속성 > 링커 > 입력 > 추가 종속성’에 lib 파일을 추가합니다. lib 파일: Spinnakerd_v140.lib(Debug 용) / Spinnaker_v140.lib(Release 용) C# ‘프로젝트 > 참조’에 SpinnakerNET_v140.dll 을 추가합니다. (Debug Mode는 SpinnakerNETd_v140.dll ) 만약, GUI를 사용한다면 SpinnakerNETGUI_v140.dll 을 추가합니다. 기본 경로: C:\Program Files\FLIR Systems\Spinnaker\bin64\vs2015 다음의 네임스페이스를 추가합니다. 3. 예제 코드 설명 공식 예제 코드 및 레퍼런스 메뉴얼 기본 설치 경로에 언어 별 예제 코드가 제공 됩니다. 언어 별 레퍼런스 메뉴얼은 아래 경로에 제공 됩니다. 주요 예제 코드 Acquisition 카메라를 연결/해제하고 이미지 데이터를 취득하는 예제 코드. AcquisitionUserBuffer 카메라를 연결/해제하고 이미지 데이터를 사용자 버퍼로 연결하는 예제 코드. AcquisitionMultipleCameraRecovery 동작 중 카메라 연결이 끊겼을 때 이벤트와 다시 연결하는 방법을 보여주는 예제 코드. ExceptionHandling SDK 예외 처리 방법을 보여주는 예제 코드. Exposure 카메라의 노출 시간을 설정하는 예제 코드. Trigger 카메라를 트리거 모드로 변경하고 이벤트에 따라 이미지 데이터를 취득하는 예제 코드. SpinSimpleGUI_MFC WPF GUI 모듈을 사용하는 예제 코드. 디버그 모드에서는 사용 불가. Spinnaker GUI Spinnaker SDK는 WPF GUI 모듈을 제공합니다. Image Drawing Window Camera Selection Window Property Grid Window 설정 방법 WOF 기반으로 제작된 객체이기 때문에 MFC 프로젝트에서 사용 시 별도의 설정이 필요합니다. MFC InitInstance() 함수에 아래 코드를 삽입 합니다. "프로젝트 속성 > 링커 > 입력 > 추가 종속성"에 아래의 lib 파일을 추가합니다. lib 파일: SpinnakerGUI_WPFd_v140.lib(Debug 용) / SpinnakerGUI_WPF_v140.lib(Release 용) ‘프로젝트 속성 > 링커 > 입력 > 지연 로드된 DLL’에 아래의 dll 파일을 추가합니다. 주의 사항 코드 사용 방법은 SpinSimpleGUI MFC 예제 코드를 참고 합니다. Debug 모드에서 실행하면 액세스 위반 에러 메세지가 발생 합니다. WPF GUI 모듈은 Release 모드로 빌드한 exe 파일을 실행했을 때에만 정상 동작 합니다. 화인스텍 예제 코드 사용자가 쉽게 SDK를 사용할 수 있도록 Wrapping Class를 제공한 예제 코드를 제공 합니다. 예제 코드 이름 : FTech_SpinnakerEx MFC Dialog 기반 솔루션 구성 예제 코드 이름 : FTech_SpinnakerEx LostAndRecovery 카메라 끊김 및 재연결 예제 코드. MultiCamera_Async 최대 4대의 카메라를 연결하는 예제 코드. 카메라의 이미지 획득과 버퍼 획득이 비순차적으로 수행되는 예제 코드. SingleCamera_Sync 1대의 카메라를 연결하는 예제 코드. 카메라의 이미지 획득과 버퍼 획득이 순차적으로 수행되는 예제 코드. LostAndRecovery 카메라를 연결하면 DeviceLostThread가 동작하고, Device Lost 상태를 체크합니다. 만약 Device Lost가 발생하면 카메라 핸들을 해제 (Close) 합니다. 그리고 Re-Open을 N회 시도 합니다. 동작 흐름 MultiCamera_Async 동작 설명 카메라가 이미지를 그랩(Grab)하는 것과 이미지 버퍼를 취득하는 동작이 비동기적(Asynchronous)으로 진행됩니다. 최대 4대의 카메라를 연결할 수 있도록 구현되어 있습니다. OnBnClickedBtnConnection() 함수에 카메라 연결이 구현되어 있습니다. SetEnableImageCallback(true)를 호출하여 카메라 객체의 이미지 콜백을 활성화합니다. 카메라 객체는 가장 마지막 버퍼를 보관하고 있습니다. 이미지 그랩 여부는 m_grabDone 핸들로 확인합니다. 카메라 연결 후 Main Dialog에서 DisplayThread를 구동합니다. "Bayer To color" 버튼의 체크 여부에 따라 Mono(Bayer8) 또는 RGB24 영상이 그려집니다. Color Conversion이 필요한 경우 체크합니다. SingleCamera Sync 동작 설명 카메라가 이미지를 그랩(Grab)하는 것과 이미지 버퍼를 취득하는 동작이 동기적(Synchronous)으로 진행됩니다. 1대의 카메라를 연결할 수 있도록 구현되어 있습니다. OnBnClickedBtnConnection() 함수에 카메라 연결이 구현되어 있습니다. SetEnableImageCallback(false)를 호출합니다. 이미지 콜백을 사용하지 않는 설정입니다. Start() 후 Grab() 함수를 호출하여 타임아웃 시간 내에 버퍼를 취득합니다. Acquisition Start인 Start() 함수를 호출합니다. Software Trigger Mode라면 트리거 이벤트인 TriggerSoftware를 호출합니다. Color Conversion이 필요한 경우 ColorConversion() 함수를 호출합니다.
2022.10.241. SDK 소개 Pleora에서 제공하는 eBUS SDK는 비전 시장에서 수십 년간의 전문 지식을 바탕으로 구축된 Vision SDK 입니다. JAI 카메라는 Pleora eBUS SDK를 사용하여 비전 애플리케이션을 개발 할 수 있습니다. eBUS SDK 주요 구성 eBUS Player Gige Vision과 USB3 Vision 카메라 호환이 가능한 프로그램 입니다. 카메라 제어 및 영상 취득이 가능합니다. eBUS Universal Pro Driver NIC 및 USB 3.0 컨트롤러의 기존 드라이버 성능을 향상 합니다. CPU 사용률을 최소화하면서 이미지 수집 처리량 및 성능을 높이고 대기 시간과 지터를 줄여주는 역할을 합니다. 2. SDK 환경 설정 c++ ‘프로젝트 속성 > C/C++ > 일반 > 추가 포함 디렉터리’에 라이브러리 include 경로를 추가합니다. 기본 경로: C:\Program Files\JAI\eBUS SDK\Includes 또는 $(PUREGEV_ROOT)\Includes ‘프로젝트 속성 > 링커 > 일반 > 추가 라이브러리 디렉터리’에 라이브러리 lib 경로를 추가합니다. 기본 경로: C:\Program Files\JAI\eBUS SDK\Libraries 또는 $(PUREGEV_ROOT)\Libraries C# 플랫폼에 맞는 ‘프로젝트 > 참조’에 PvDotNet.dll과 PvGUIDotNet.dll을 추가합니다. 기본 경로: C:\Program Files (x86)\Common Files\Pleora\eBUS SDK\PvDotNet.dll 및 PvGUIDotNet.dll 다음의 네임스페이스를 추가합니다. 3. 예제 코드 설명 공식 예제 코드 기본 설치 경로에 C++ 및 C# 예제 코드가 제공 됩니다. C++/C# 폴더 별 예제 코드 문서가 제공 됩니다. 주요 예제 코드 PvStreamSample 카메라를 어떻게 연결/해제하고 영상을 취득하는지 보여주는 콘솔 버전의 예제 코드. 스트리밍을 위한 버퍼 리스트를 직접 생성하고 해제하여 버퍼를 관리하는 방식. PvPipelineSample 카메라를 어떻게 연결/해제하고 영상을 취득하는지 보여주는 콘솔 버전의 예제 코드. PvPipeline class를 사용하여 버퍼를 관리하는 방식. SimpleGUIApplication 카메라를 어떻게 연결/해제하고 영상을 취득하는지 보여주는 MFC Dialog 버전의 예제 코드. DeviceFinder 시스템에 존재하는 카메라를 탐색하는 예제 코드. ConnectionRecovery 카메라 구동 중 연결이 끊어졌을 때의 이벤트를 발생하고, 어떻게 다시 연결하는지 보여주는 예제 코드. GenICamParameters Communication, Stream 그리고 카메라 파라미터에 어떻게 접근하는지 보여주는 예제 코드. LostAndRecovery 동작 설명 카메라를 연결하면 DeviceLostThread가 동작하고 , Device Lost 상태를 체크 합니다. 만약 , Device Lost가 발생하면 카메라 핸들을 해체 (Close) 합니다. 그리고 Re_Open을 N회 시도 합니다. 동작 흐름 MultiCamera_Async 동작 설명 카메라가 이미지를 그랩(Grab)하는 것과 이미지 버퍼를 취득하는 동작이 비동기적(Asynchronous)으로 진행됩니다. 최대 4대의 카메라를 연결할 수 있도록 구현되어 있습니다. OnBnClickedBtnConnection() 함수에 카메라 연결이 구현되어 있습니다. SetBufferThread(true)를 호출하여 카메라 객체 내부의 버퍼 스레드를 구동합니다. 내부 버퍼 스레드가 구동하여, 카메라 객체는 가장 마지막 버퍼를 보관하고 있습니다. 이미지 그랩 여부는 m_grabDone 핸들로 확인합니다. 카메라 연결 후 Main Dialog에서 DisplayThread를 구동합니다. 버튼의 체크 여부에 따라 Mono(Bayer8) 또는 RGB24 영상이 그려집니다. Color Conversion이 필요한 경우 체크합니다. SingleCamera_Sync 동작 설명 카메라가 이미지를 그랩(Grab)하는 것과 이미지 버퍼를 취득하는 동작이 동기적(Synchronous)으로 진행됩니다. 1대의 카메라를 연결할 수 있도록 구현되어 있습니다. OnBnClickedBtnConnection() 함수에 카메라 연결이 구현되어 있습니다. SetBufferThread(false)를 호출합니다. 내부 버퍼 스레드를 사용하지 않는 설정입니다. Start() 후 Grab() 함수를 호출하여 타임아웃 시간 내에 버퍼를 취득합니다. Acquisition Start인 Start() 함수를 호출합니다. Software Trigger Mode라면 트리거 이벤트인 를 호출합니다. Color Conversion이 필요한 경우 ColorConversion() 함수를 호출합니다.
2022.10.21