이 애플리케이션 노트에서는 VisualApplets에서 이미지 처리 애플리케이션(=applet)을 설계하고 생성하여 프레임 그래버에서 사용하는 방법을 배웁니다. 또한 런타임 시 microDisplay와 Framegrabber API를 사용하여 이 applet을 사용하는 방법과 이 소프트웨어에서 applet의 파라미터를 구성하는 방법을 배웁니다. microDisplay에서 런타임 시 applet을 설계, 빌드 및 사용하는 방법에 대한 소개는 Getting Started에서 확인할 수 있습니다. 본 애플리케이션 노트에서는 Sobel 에지 필터 애플리케이션의 예시를 통해 위에서 언급한 applet 개발 및 사용 단계를 학습합니다. 더 짧은 안내 과정은 From Empty Design to Running Applet 튜토리얼 주제를 참조하세요.
작업 흐름은 다음과 같습니다.
-
VisualApplets에서 applet 설계.
-
VisualApplets에서 applet 시뮬레이션 및 디자인 규칙 검사(DRC) 수행.
-
applet 빌드.
-
mE5 플랫폼의 경우: applet 플래싱.
-
microDisplay 또는 Framegrabber API를 통해 하드웨어에서 applet 사용.
applet 설계 단계는 VisualApplets에서 진행됩니다. VisualApplets를 열려면 VisualApplets.exe (으)로
bin VisualApplets 설치 디렉터리의 폴더를 클릭하거나 Windows 시작 메뉴 또는 바탕 화면의 VisualApplets 프로그램 아이콘을 클릭하십시오.
-
먼저 프로젝트가 로드되지 않은 상태로 VisualApplets 메인 창이 열립니다.
-
File+New ( Ctrl+N )을 클릭하거나 아이콘 바에서 아이콘을 사용하십시오. 프로젝트 이름, 타겟 하드웨어 플랫폼, 타겟 런타임을 지정할 수 있는 창이 열립니다. 이러한 설정은 나중에 언제든지 변경할 수 있습니다.
-
여기서 예제를 따라 하려면 다음 설정을 사용하십시오.
-
를 클릭하여 설정을 확인합니다.
이제 VisualApplets가 새 프로젝트를 시작하고 프로그램 창 중앙에 빈 디자인 창이 표시됩니다. 오른쪽에 있는 탭에는 프로젝트 이름, 타겟 하드웨어, 타겟 플랫폼 등 현재 프로젝트와 관련된 정보가 표시됩니다.
VisualApplets에서 이미지 처리 작업은 operator로 표현됩니다. 이러한 모든 operator는 VisualApplets 디자인 창 오른쪽에 있는 에서 찾을 수 있습니다. 드래그앤드롭을 사용하여 디자인 창에 operator를 매우 쉽게 배치할 수 있습니다.
디자인 내 operator의 인스턴스를 module이라고 합니다. Operator는 입력 및 출력 포트를 가질 수 있습니다. 디자인 내의 operator(즉, module)는 이러한 포트를 사용하여 연결할 수 있습니다. module 간의 연결은 링크라고 하며 디자인 창에서 화살표로 표시됩니다. 이러한 module과 링크는 이미지(또는 신호) 처리 파이프라인을 나타냅니다. 따라서 작업 순서는 module의 순서에 따라 결정됩니다.
Operator와 링크에는 이미지 크기 등 현재 이미지 처리 파이프라인과 관련된 설정을 설명하는 Property가 있습니다. 이러한 Property를 보고 편집하려면 operator를 두 번 클릭하십시오. Operator의 Property는 의 operator 문서에 자세히 설명되어 있습니다.
이 예제는 Sobel 에지 필터 알고리즘을 구현합니다.
VisualApplets 디자인 샘플 라이브러리에는 에지 필터링 및 기타 이미지 처리 어플리케이션을 위한 "즉시 사용 가능한(ready-to-use)" 샘플이 포함되어 있습니다. 이러한 디자인 예제는 다음 위치에서 확인할 수 있습니다. Examples\Processing 해당 문서와 함께 VisualApplets 설치 디렉터리에 있으며, 다음을 참조하십시오. Processing Examples. 이러한 예제 디자인을 사용자만의 어플리케이션을 위한 기반으로 활용할 수 있습니다.
이 샘플 Sobel 필터 디자인을 구현하려면 에서 오퍼레이터를 찾아 디자인 영역으로 드래그한 다음, Getting Started 섹션에 설명된 대로 링크로 연결합니다.
디자인의 가독성을 높이고 런타임 시 더 쉽게 사용할 수 있도록 나중에 모듈의 이름을 변경할 수 있습니다.
디자인을 더 쉽게 파악할 수 있도록 유용한 경우 HierarchicalBoxes를 사용하여 디자인을 구성하십시오.
그리고 수시로 디자인을 저장하는 것을 잊지 마십시오.
이 어플리케이션 노트의 샘플 디자인은 다음 그림과 같이 다음과 같은 구성 요소로 이루어져 있습니다.
-
Camera Link 흑백 카메라 인터페이스
-
이미지 버퍼
-
x 및 y 방향의 에지 필터링 기능을 갖춘 Sobel 에지 필터 모듈(예제 참조
SobelMultiGradient.vad위치:Examples\Processing\Filter\EdgeDetection\Sobel_Multi_GradientVisualApplets 설치 디렉터리 내) -
런타임 시 디스플레이에 이진화된 이미지를 더 잘 시각화할 수 있도록 조절 가능한 이진화 임계값과 스케일 오퍼레이터
-
PC로의 DMA.
카메라에서 취득한 이미지 대신 시뮬레이션용 이미지 소스로 디자인 내에서 CoefficientBuffer를 사용할 수 있습니다. SourceSelector 오퍼레이터를 통해 VisualApplets 및 런타임 시 처리 파이프라인을 위한 이미지 입력 소스를 선택할 수 있습니다.
오퍼레이터와 링크를 매개변수화하려면 각 요소를 더블 클릭하여 매개변수를 편집할 수 있습니다.
링크에는 최대 이미지 크기, 이미지 프로토콜, Bit Width, 그리고 최대 가능한 대역폭과 관련된 매개변수인 Parallelism(즉, 하나의 디자인 클럭 사이클에서 전송되는 픽셀 수) 등 처리된 이미지의 속성을 정의하는 속성이 있습니다. 이 링크가 특정 오퍼레이터(해당 오퍼레이터 문서 참조)(예: 카메라 인터페이스 오퍼레이터)에 연결된 경우, 목적에 맞게 이러한 속성을 편집하고 조정할 수 있습니다.
선택한 최대 이미지 크기와 Parallelism이 클수록 FPGA 리소스 소비량이 증가합니다. 따라서 Basler는 FPGA 리소스를 절약하기 위해 필요한 만큼만 이러한 값을 설정할 것을 권장합니다. 링크 속성은 VisualApplets의 디자인 단계에서만 변경할 수 있습니다.
오퍼레이터 속성에는 static과 dynamic의 두 가지 유형이 있습니다. static 매개변수는 VisualApplets의 디자인 단계에서만 변경할 수 있는 반면, dynamic 매개변수는 디자인 단계와 런타임 시 모두 변경할 수 있습니다. 오퍼레이터 IS_GreaterThan의 static 및 dynamic 매개변수 예제는 아래 스크린샷을 참조하십시오.
이 예제 디자인에서 다음 파라미터를 설정합니다.
- Operator IS_GreaterThan:
-
파라미터 Number를 600으로 설정합니다.
이는 에지의 그레이스케일을 식별합니다. 에지의 그레이스케일을 확인하려면 IS_GreaterThan operator 앞에 시뮬레이션 프로브를 설정하고, 시뮬레이션을 실행한 후 에지가 포함된 픽셀을 확대하여 해당 그레이스케일을 확인합니다. 이는 런타임 중에 변경할 수 있는 동적 파라미터입니다.
- Operator SCALE:
-
파라미터 ScaleFactor를 255로 설정합니다.
이는 에지의 시인성을 높여줍니다. 이는 동적 파라미터입니다. 그러나 FPGA 리소스를 절약하기 위해 이 파라미터를 Static으로 설정할 수 있습니다.
런타임 중에 동적 파라미터를 변경할 수 있습니다. 일반적인 유스 케이스는 디자인에 많은 operator가 있고, 디자인 내의 여러 다른 operator에 대해 이미지 치수와 같은 동일한 파라미터를 변경해야 하는 경우입니다.
라이브러리 Parameters 는 단 하나의 파라미터만 제어하여 디자인의 다양한 모듈 파라미터에 액세스할 수 있는 operator를 제공합니다. 또한 이러한 operator는 액세스 파라미터가 특정 계층 수준에 표시되도록 합니다. 이러한 옵션을 통해 런타임 중 파라미터 구성이 더 쉬워집니다. 예제 디자인 Sobel_Filter.va
(자세한 내용은 그림 189, '예제 디자인 구현 Sobel_Filter.va')은 변환 및 참조 파라미터를 사용하여 계층 수준에서 이미지 너비 및 높이, 이미지 소스 셀렉터, 임계값 및 스케일 팩터에 쉽게 액세스합니다
. 이를 위해 빈 HierarchicalBox를 만들고 이름을 (으)로 지정한 다음, 해당 변환 및 참조 파라미터의
DisplayHierarchy 파라미터를 (으)로 설정합니다. 라이브러리에 대한 Parameters 자세한 설명은 해당 문서를 참조하십시오. Library Parameters.
디자인 단계에서는 시뮬레이션 소스와 프로브가 매우 유용합니다. 시뮬레이션 소스를 사용하면 테스트 이미지를 로드하고 VisualApplets의 처리 파이프라인 내 모든 링크에서 처리된 이미지를 잠시 후에 확인할 수 있습니다. 예외: 신호는 시뮬레이션할 수 없습니다. 또한 시뮬레이션은 구현의 형식적 정확성을 위해 Design Rule Check Level 1을 수행합니다. 시뮬레이션 결과는 런타임 결과와 동일합니다. 시뮬레이션 소스 및 프로브의 사용법에 대한 자세한 설명은 'Simulation' 아래의 상세 문서를 참조하십시오.
In 그림 189, '예제 디자인 구현 Sobel_Filter.va' 예제 디자인의 시뮬레이션 소스에 로드된
Sobel_Filter.va테스트 이미지를 볼 수 있습니다. 임계값 적용 후와 DMA 이전 단계에서 현재 처리 단계의 결과를 확인할 수 있습니다.
구현을 완료한 후 Design Rule Check Level 1 및 2를 수행하는 것이 좋습니다. Design Rule Check Level 1 및 2를 수행하려면 Analysis+Design Rules Check Level 1 and 2를 선택하거나 아이콘 바에서 아이콘을 사용합니다.
Design Rule Check Level 1은 구현의 형식적 오류와 디자인 내의 정확한 위치를 보고합니다. 디자인을 하드웨어 어블릿으로 변환하기 전에 이러한 오류를 수정해야 합니다.
Design Rule Check Level 2는 디자인에서 사용되는 예상 FPGA 리소스에 대한 추가 정보를 제공합니다. 이 정보를 통해 이미지 처리 구현을 위해 충분한 FPGA 리소스가 사용 가능한지 확인할 수 있습니다. 리소스가 FPGA 리소스 중 100%를 초과하는 경우, 리소스를 절약하기 위해 구현을 다시 설계해야 합니다.
In 그림 192, '예제 디자인에 대한 Design Rule Check 1 및 2
Sobel_Filter.va' Design Rule Check 1 및 2의 결과가 표시됩니다. 모든 항목이 올바르게 설계되었으며 사용 가능한 Lookup Table의 약 36%, FlipFlop의 22%, Block RAM의 15%, 그리고 사용 가능한 embedded ALU의 2%가 사용됩니다. 디자인 내의 각 요소가 소비하는 FPGA 리소스의 세부적인 개요를 확인할 수 있습니다(참조 그림 193, 'FPGA 리소스 추정'). 항목: 분석+FPGA 리소스 예측
하드웨어 applet 빌드 프로세스는 Xilinx 도구가 올바르게 설치된 경우에만 수행할 수 있습니다. 다음 항목에서 https://docs.baslerweb.com/visualapplets/installing-visualapplets#which-xilinx-toolchain-and-version-for-which-frame-grabber-platform 프레임 그래버 플랫폼에 적합한 Xilinx 버전에 대한 상세한 개요를 확인할 수 있습니다. 이 예제 디자인에서는 Sobel_Filter.va
microEnable 5 marathon VCL 플랫폼이 선택되었습니다. 따라서 Xilinx ISE 버전 14.7 또는 2016.1과 2020.1 사이의 Vivado 버전이 적합합니다.
이제 예제 디자인을 완료하고 Sobel_Filter.va 디자인을 하드웨어 applet으로 변환하고자 합니다. 이 변환 프로세스는 빌드 (라고 부름)라고 하며, 올바른 Xilinx 빌드 설정을 선택해야 합니다. Settings+빌드 설정을(를) 열고 settings64.bat 파일 시스템에서 해당하는 Xilinx 버전의 배치 파일(권장: Xilinx Vivado 2018.2)을 선택하고 OK로 확인합니다. 빌드 설정 편집에 대한 상세한 설명은 다음에서 확인할 수 있습니다. '빌드 설정'.
VisualApplets는 이제 Xilinx 도구를 사용하여 애플리케이션을 FPGA 비트스트림, 즉 프로그램 또는 applet(으)로 변환합니다..
이 프로세스의 소요 시간은 디자인의 복잡성에 따라 다릅니다. 매우 복잡한 디자인의 경우 빌드에 몇 시간이 걸릴 수 있습니다. 이 예시 구현의 경우
Sobel_Filter.va, 빌드 시간은 약 15분입니다. 빌드가 성공적으로 완료되면
applet이 완전히 생성됩니다. applet의 이름
(*.hap 파일)은 디자인 파일의 이름과 동일합니다
(*.va): Sobel_Filter.hap
프레임 grabber의 하드웨어에서 applet을 실행하려면, 프로그래밍 가능한 (V Series) 프레임 grabber (하드웨어)가 시스템에 설치되어 있어야 합니다. 또한 PC에 Framegrabber SDK 소프트웨어가 설치되어 있어야 합니다. microEnable 5 marathon VCL용 이 예시 applet의 경우, 최신 Framegrabber SDK 버전은 5.7입니다.
이 예시처럼 microEnable 5 marathon 프레임 grabber를 사용하는 경우, microDiagnostics를 사용하여 새로운 applet으로 프레임 grabber를 플래시해야 합니다.
microEnable IV 프레임 grabber 또는 최신 CXP 12 시리즈의 프레임 grabber에서 새 applet을 사용할 예정인 경우 이 섹션을 건너뛰십시오.
프레임 grabber를 플래시하려면 다음 단계를 수행하십시오:
-
다음 위치에서 microDiagnostics 도구를 시작하십시오
binFramegrabber SDK 설치 디렉터리 내. -
프레임 grabber를 선택하십시오.
-
대화 상자의 왼쪽에 있는 를 선택하십시오.
-
하드웨어 applet을 표시된 파티션 중 하나(0~7)에 할당합니다: 생성된 하드웨어 applet이 있는 디렉터리로 이동하여 파일을 선택하십시오.
-
클릭
-
새 펌웨어가 완전히 설치될 때까지 기다리십시오. 플래싱이 완료되면 microDiagnostics에 메시지가 표시됩니다.
-
메시지의 지침을 따르십시오.
applet을 테스트하고 Sobel_Filter.hap 일부 초기
매개변수를 설정하려면 microDisplay 프로그램을 사용하십시오. applet을 로드하려면 다음 단계가 필요합니다:
-
applet을 저장합니다(여기서:
Sobel_Filter.hap). 항목:Hardware Applets\<your frame grabber>(여기서: mE5-MA-VCL) Framegrabber SDK 설치 디렉터리에 저장합니다. -
Framegrabber SDK 설치 디렉터리의
bin폴더에서 microDisplay를 시작하십시오. -
microDisplay의 에서 사용할 프레임 grabber를 선택하십시오. 즉시 선택한 프레임 grabber에서 사용할 수 있는 모든 applet이 표시됩니다.
-
선택하십시오
*.hap사용할 파일(여기서는Sobel_Filter.hap)을 더블 클릭하여 선택합니다.
applet을 로드한 후 microDisplay에서 파라미터 트리와 이미지 취득 창을 확인할 수 있습니다. 아래에는 microDisplay에
Sobel_Filter.hap 로드된 applet의 스크린샷이 나와 있습니다.
왼쪽에는 파라미터 트리가 표시됩니다. 이 파라미터들은 VisualApplets의 설계 단계에서의 연산자 이름과 동일합니다. 취득을 위해 조정하려는 올바른 파라미터를 찾으려면 연산자 이름을 알기 쉽게 지정하는 것이 중요합니다. 동적 파라미터는 런타임 중에 조정할 수 있습니다. 동적 파라미터에는 취득 시작 전에만 조정할 수 있는 파라미터(예: DMA dimensions)와 이미지 취득 중에도 조정할 수 있는 파라미터(예: 연산자 IS_GreaterThan의 임계값)의 두 가지 종류가 있습니다.
이 예제에서는 시뮬레이터 소스의 이미지를 사용하여 이미지 취득을 수행하고 이진화 임계값을 150으로 설정합니다. VisualApplets의 설계 단계에서 Parameters 라이브러리의 파라미터를 통합한 경우, 파라미터 트리의 계층 수준에서 모든 관련 동적 파라미터를 설정할 수 있습니다. 그렇지 않은 경우, 설정하려는 올바른 파라미터를 찾기 위해 여러 계층 수준을 거쳐야 합니다.
이 예제에서는 계층 수준으로 이동하여 펼칩니다.
-
를 마우스 우클릭합니다. 결과적으로 이미지 취득에 사용할 예제 이미지를 선택할 수 있습니다.
-
를 클릭하여 이 이미지를 로드합니다.
-
파라미터 ImageSource selector를 Simulator로 설정하고 Binarization Threshold을 값 150으로 설정합니다.
-
이미지 크기를 1024x1024 픽셀로 설정합니다.
이 파라미터들(또는 applet과 관련된 모든 파라미터)을 설정한 후 취득을 시작할 수 있습니다. 여기서는 연속 그랩, 시퀀스 그랩 또는 단일 프레임 그랩 중에서 선택할 수 있습니다. 연속 그랩을 중지하려면 중지 버튼을 클릭합니다. 멀티 프로세스 설계의 경우, 각 단일 프로세스의 이미지 취득을 별도로 시작하고 중지할 수 있습니다.
microDisplay를 이용한 applet 구성 및 취득에 대한 자세한 설명은 https://docs.baslerweb.com/frame-grabbers/what-is-micro-display-x를 참조하세요.
microDisplay X에서 applet 구성 및 취득을 수행하는 대신, 사용자의 SDK 환경에 이를 통합할 수도 있습니다. 이 섹션에서는 이미지 취득 및 구성을 위한 관련 SDK 구성 요소의 기본 기능에 대해 소개합니다.
C++ SDK의 기반으로 VisualApplets 내부의 SDK 코드 생성기를 사용할 수 있으며, 아이콘 메뉴 또는 VisualApplets의 Build+Generate SDK Example에서 찾을 수 있습니다. 이 기능은 SDK 코드의 기반으로 사용할 수 있는 해당 CMake 파일과 VisualStudio 프로젝트 파일을 자동으로 생성합니다.
프로젝트 파일에 생성된 C++ 코드 vasFgProject.cpp
는 다음과 같은 코드 구성 요소를 포함합니다:
-
프레임 그래버: 초기화
취득 주기 수 정의, 보드 인덱스 정의,
Fg_Init("Sobel_Filter.hap", boardIndex)함수 호출을 통해 applet을 시작합니다. -
취득을 위한 버퍼 메모리 할당.
함수를 호출합니다.
Fg_AllocMemEx(fg, ..., ...) -
Frame Grabber: Process0에 대한 Get* 및 Set* 파라미터
함수:
Fg_setParameterWithType(fg, ..., ..., ...)및Fg_getParameterWithType(fg, ..., ..., ...)디자인에 포함된 모든 파라미터가 여기에 나열됩니다. 가독성을 높이기 위해 Basler는 런타임 중에 조정할 필요가 없는 모든 파라미터를 삭제할 것을 권장합니다.
-
디스플레이 생성
함수
CreateDisplay() -
존재하는 각 포트에 대해 앱렛 및 카메라에서 취득(Acquisition) 시작:
함수를 호출합니다.
Fg_AcquireEx(fg, 0, nrOfCycles, ...,...); -
이미지 그랩(Grab):
함수를 호출합니다.
Fg_getLastPicNumberBlockingEx(fg, ..., ..., ..., ...); -
취득 중지
기능
Fg_stopAcquireEx(fg, .., .., ...) -
디스플레이 닫기
함수
CloseDisplay(...); -
버퍼 메모리 해제
함수
Fg_FreeMemEx(fg, ..); -
Frame Grabber 초기화 해제
함수
Fg_FreeGrabber(fg);
SDK 함수에 대한 자세한 설명과 설명은 https://docs.baslerweb.com/frame-grabbers/sdk/basler__fg_8h.html에서 확인할 수 있습니다.
Framegrabber API 소개는 https://docs.baslerweb.com/frame-grabbers/framegrabber-api.html에서 확인할 수 있습니다.
생성된 샘플 SDK 코드를 더 큰 SDK 환경에 통합하여 프레임 그래버가 (전처리한) 이미지에 대한 추가 소프트웨어 처리를 수행할 수 있습니다.













이전

