
임베디드 비전 키트
임베디드 비전을 향한 기존 머신 비전의 진화는 빠르게 이루어지고 있습니다. 비용 요소가 중요한 역할을 하는 이러한 소형 시스템은, 성능을 향상시킴으로써 에너지를 더 적게 소비합니다. 그러나 임베디드 비전 장치를 개발하는 것은 시간과 비용이 많이 들 수 있습니다. 데이터 인터페이스, 성능, 저장 공간 및 사용자 인터페이스와 관련하여 고도로 전문화된 이러한 장치의 한계는 표준 컴포넌트를 갖춘 데스크탑 워크 스테이션에 비해 하드웨어 처리 및 소프트웨어 개발을 매우 어렵게 만듭니다. 특히 독점적인 개발 (하드웨어 플랫폼, 펌웨어 및 소프트웨어)의 경우 첫 번째 결과를 사용할 수 있을 때까지 많은 시간을 낭비할 수 있습니다.
그러나 특히 개발-전 단계에서는 즉시 사용 가능한 테스트를 허용하는 여러 적합한 임베디드 표준 컴포넌트들이 있습니다. 검증된 소프트웨어 솔루션과 함께, 비전 어플리케이션에 대한 첫 번째 통찰을 매우 빠르게 도출할 수 있습니다.
테크팁은 uEye 카메라와 Raspberry Pi 3로 간단한 임베디드 비전 어플리케이션을 구현하는 방법을 몇 가지 간단한 단계로 보여줍니다.
배경
빠른 이미지 처리 결과를 위해 OpenCV (Open Computer Vision) OpenSource 라이브러리를 사용합니다. 알고리즘 컬렉션 외에도 머신 비전의 다양한 측면에 대한 샘플 코드도 제공합니다. BSD 라이선스를 사용하면, OpenCV는 개인 및 상업용 프로젝트에 무료로 제공되며, Raspbian OS와 함께 사전 설치됩니다.
OpenCV에는 빠른 시작과 쉬운 개발을 위한 Python 인터페이스가 있습니다. 따라서 대화형 어플리케이션 프로그래밍과 같은 Python의 많은 장점을 활용할 수 있습니다. 이를 통해 완전한 개발 환경의 복잡한 설정 없이 짧은 코드 조각을 작성하고 테스트할 수 있습니다.
새로운 "PyuEye"인터페이스를 통해 이제 모든 uEye 카메라를 오브젝트-지향 프로그래밍 언어인 Python과 함께 사용할 수 있습니다. OpenCV Python wrapper와 함께 사용하면, Raspberry Pi를 포함한 임베디드 시스템에서 프로토타입을 쉽게 개발할 수 있습니다.
PyuEye 인터페이스가 설치되면, "uEye"모듈을 Python 어플리케이션으로 가져와서 설치된 uEye SDK의 모든 uEye 기능과 유형에 액세스 할 수 있습니다. 함수와 파라미터의 호출 구문은 uEye 매뉴얼에 완전히 맞춰져 있습니다.
접근
데모 프로젝트의 하드웨어 플랫폼으로 uEye USB 카메라 및 Raspbian OS 버전 "Jessie"와 함께 Raspberry Pi 3를 사용합니다.
데모 프로젝트를 가능한 간단하게 유지하기 위해, Raspbian Jessie 및 Python Package Index (PyPI)의 패키지 소스에서 얻을 수 있는 소프트웨어 컴포넌트만 사용합니다.
Raspberry Pi에 다음 소프트웨어 컴포넌트를 추가로 설치해야 합니다.
- 최신 임베디드 uEye 카메라 드라이버
- 새로운 uEye Python 인터페이스 "PyuEye"
- OpenCV in. Python 인터페이스
1단계: 하드웨어 준비
Raspbian OS로 Raspberry Pi 3를 설정하고 시스템을 최신 소프트웨어 버전으로 업데이트합니다.
pi @ raspberrypi : ~ $ sudo apt-get 업데이트 & & apt-get 업그레이드
Raspberry Pi 설정에 대한 지침은 인터넷에서 찾을 수 있습니다. 기본적으로 다른 ARMv7 호환 임베디드 보드 (예 : Odroid XU4)를 데모에 사용할 수 있습니다. 그러나, 쿼드 코어 CPU가 장착된 Raspberry Pi3는 간단한 이미지 처리 작업에 충분한 성능을 제공하며 Raspbian OS에는 많은 사전-설치된 컴포넌트가 함께 제공됩니다. 다른 모든 것은 패키지 소스를 통해 쉽게 설치할 수 있습니다.
uEye USB 카메라를 Raspberry Pi의 USB 포트에 연결합니다.
2 단계: 카메라 드라이버 및 인터페이스 설치
최신 임베디드 uEye 카메라 드라이버를 설치하세요. 드라이버를 성공적으로 설치한 후, 포함된 uEye 데모 어플리케이션과 함께 uEye USB 카메라를 사용할 수 있습니다.
"PyuEye"에 대한 정보는 Python uEye 인터페이스 웹 사이트에서 찾을 수 있습니다. Pyueye는 Python Package Index (https://pypi.org/project/pyueye/)에서 OpenSource 프로젝트로 호스팅됩니다. 패키지로 다운로드하거나 Python 패키지 관리 프로그램 "PIP"를 통해 직접 설치할 수 있습니다. 필요한 모든 요구 사항은 Raspbian에 사전-설치되어 있습니다.
pi @ raspberrypi : ~ $ sudo pip install pyueye
그러면 Python 2.7과 함께 사용할 uEye Python 인터페이스가 설치됩니다. 필요한 모듈 종속성은 PIP에 의해 자동으로 설치됩니다. 올바른 설치를 확인하려면 Python 인터프리터를 사용하고 uEye 모듈을 가져오십시오.
pi@raspberrypi:~ $ python
Python 2.7.9 (기본값, 2016 년 9 월 17 일, 20:26:04)
linux2의 [GCC 4.9.2]
자세한 내용을 보려면 "help", "copyright", "credits"또는 "license"를 입력하세요.
>>> pyueye 가져오기 ueye에서
>>>
오류 메시지가 반환되지 않으면 성공적으로 설치된 것입니다.
3 단계: OpenCV 설치
OpenCV 개발 라이브러리는 Raspbian 패키지 소스에서 쉽게 설치할 수 있습니다. 이전 버전 (2.4.9.1)이 있지만, 데모에는 충분합니다. OpenCV 라이브러리에 대한 Python 2.7 바인딩은 패키지 소스에서 설치할 수도 있습니다. Python 3을 사용하려면 임베디드 플랫폼용 코드 소스에서 직접 컴파일해야 합니다. 온라인에서 간단한 지침을 찾을 수도 있습니다.
pi @ raspberrypi : ~ $ sudo apt-get install libopencv-dev python-opencv
OpenCV 모듈 "cv2"를 가져와서 Python interpreter로 이 설치를 확인할 수도 있습니다.
4 단계: PyuEye 샘플 어플리케이션 다운로드 및 실행
테크팁 웹 사이트에 링크된 소스 코드 예제를 다운로드하여, uEye 및 Python 인터페이스로 자체 이미지 처리 어플리케이션을 시작하고, Raspberry Pi의 디렉토리에 압축을 풉니다.
소스 코드 예제는 완전히 Python으로 작성되었습니다. 따라서 Raspberry Pi의 시스템 아키텍처 (ARMv7 A)에 대해 교차 컴파일할 필요가 없습니다. 따라서 플랫폼에 독립적이며 직접 실행할 수 있습니다. 즉, 이러한 시스템에 요구 사항 (uEye 드라이버, PyuEye 인터페이스, Python 2.7)이 설치된 경우 Windows 또는 Linux 데스크톱 시스템에서 이 소스 코드 예제를 실행할 수도 있습니다. PyuEye 소스 코드 예제는 예제 프로그램의 여러 부분에 대한 클래스와 기능을 제공하는 4개의 Python 파일로 구성됩니다.
1) pyueye_example_camera.py
자주 사용하는 카메라 기능이 포함된 "카메라" 클래스를 제공합니다.
2) pyueye_example_gui.py
"PyuEyeQtView"및 "PyuEyeQtApp" 클래스를 사용하여 간단한 Qt 위젯 GUI 어플리케이션을 만들 수 있습니다. 이 모듈은 Qt4를 기반으로 하며 Python Qt4 바인딩 (PyGt4)을 사용합니다. Qt4는 이미 Raspbian Jessie에 통합되어 있습니다. 따라서 패키지 소스에서 Python 바인딩을 설치할 수 있습니다.
pi @ raspberrypi : ~ $ sudo apt-get install python-qt4 python-qt4-doc
3) pyueye_example_utils.py
이 모듈은 카메라 어플리케이션을 개발할 때 매우 유용한 중요한 편의 기능과 클래스를 제공합니다. 예외 처리에서 카메라 데이터 및 이미지 저장 관리에 이르기까지 유용한 옵션이 많이 있습니다.
4) pyueye_example_main.py
메인 모듈은 간단한 Qt 어플리케이션 프레임 워크를 생성하고, 연결된 카메라를 열고 초기화하며, OpenCV를 사용한 간단한 이미지 처리가 구현되는 이미지 처리 콜백 기능을 제공합니다. 실행 중인 데모는 연결된 카메라의 라이브 이미지를 보여주고, 처리 결과를 오버레이합니다.
pi@raspberrypi:~/example $ python pyueye_example_main.py
OpenCV 이미지 처리
OpenCV를 사용한 간단한 이미지 처리 작업은 이미지에서 원을 검색하고, 강조 표시합니다.
OpenCV에는 이 작업을 위한 cv2.HoughCircles() 함수가 포함된 완전한 구현이 포함되어 있기 때문에, 메인 모듈의 몇 줄의 코드만으로도 충분합니다. OpenCV로 작업하기 위해, "cv2"및 "numpy"를 가져왔습니다.
from pyueye_example_camera import Camera
from pyueye_example_utils import FrameThread
from pyueye_example_gui import PyuEyeQtApp, PyuEyeQtView
from PyQt4 import QtGui
from pyueye import ueye
import cv2
import numpy as np
cv2.HoughCircles()의 기능적 원리와 호출 파라미터는 OpenCV 문서에 매우 자세히 설명되어 있습니다. 이것이 바로 어플리케이션 소스 코드로 가는 이유입니다.
이미지 데이터는 1차원 8비트 데이터 배열로 사용할 수 있어야 합니다. pyueye_example_utils.py 모듈에 있는 ImageData 클래스의 "as_1d_array()"함수와 OpenCV 함수 "cvtColor()"가 이 작업을 처리합니다. 만약 cv2. HoughCircles()는 이미지에서 원을 감지했으며 OpenCV 그리기 기능으로 강조 표시됩니다. 샘플 Qt 어플리케이션은 이미지 데이터를 표시합니다.
def process_image(self, image_data):
# reshape the image data as 1dimensional array
image = image_data.as_1d_image()
# make a gray image
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#image = cv2.medianBlur(image,5)
# find circles in the image
circles = cv2.HoughCircles(image, cv2.cv.CV_HOUGH_GRADIENT, 1.2, 100)
# make a color image again to mark the circles in green
image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
if circles is not None:
# convert the (x, y) coordinates and radius of the circles to integers
circles = np.round(circles[0, :]).astype("int")
# loop over the (x, y) coordinates and radius of the circles
for (x, y, r) in circles:
# draw the circle in the output image, then draw a rectangle
# corresponding to the center of the circle
cv2.circle(image, (x, y), r, (0, 255, 0), 6)
# show the image with Qt
return QtGui.QImage(image.data,
image_data.mem_info.width,
image_data.mem_info.height,
QtGui.QImage.Format_RGB888)
OpenCV로 어플리케이션을 쉽게 수정하고, 다른 처리 작업을 테스트할 수 있습니다. Python의 경우, 일반적으로 수정된 어플리케이션을 직접 실행할 수 있습니다.
요약
임베디드 uEye 카메라 드라이버 외에, 임베디드 비전 프로젝트를 빠르고 쉽게 구현할 수 있는 또 다른 컴포넌트로 새로운 PyuEye 타사 인터페이스를 소개합니다. Python 베이스를 사용하면 플랫폼에 독립적인 어플리케이션에서 강력한 uEye 카메라 SDK를 사용할 수 있습니다. Windows 데스크톱 PC에서 Python 프로그램 코드를 개발하고, 다른 개발 환경 설정에 대해 생각하지 않고 Raspberry Pi에서 어플리케이션을 실행하세요. 또한, Python은 오늘날 가장 널리 사용되는 프로그래밍 언어 중 하나이며, 이는 거의 모든 중요한 영역에서 프레임 워크를 고가용성으로 만듭니다. 웹 어플리케이션, 사용자 인터페이스, 데이터 분석 및 통계 및 이미지 처리 (예: OpenCV)를 잊지 마세요. Python에는 이미 임베디드 비전을 발견한 대규모 커뮤니티가 있습니다. 따라서 uEye Python 인터페이스를 통해 거대한 임베디드 비전 키트에 액세스할 수 있습니다.
Manual
All information at a glance - you can either view the manual online here or download it for offline use.
ReadMe
IDS peak 1.2.1 for Windows
Release Notes
These release notes describe the changes of IDS peak 1.2, which supports Python as an additional programming language besides .NET (incl. C#) and C/C++.