Jetson Nano의 Docker로 OpenCV 4.1.0 컴파일
11832 단어 siftJetsonNanoOpenCVJetson도커
소개
본 기사는 Jetson Nano에서 OpenCV 4.1.0을 설치한 기록이다. Jetson Nano의 베이스 이미지인 JetPack 4.2에는 OpenCV 3.3.1이 포함되어 있지만 OpenCV 4 계열을 사용하고 싶기 때문에 설치를 실시했다.
컴파일에 있어서 「Jetson Nano에 OpenCV 4.1.0 설치 」를 전면적으로 참고로 했다. 감사.
컴파일에 Docker를 사용하는 의미
OpenCV 컴파일은 무게급이고 apt에 상당히 많은 포장을 설치할 필요가 있다. 이것은 개발 환경과 실행 환경의 2개를 겸하는 Jetson nano에서는 문턱이 높다. 따라서 컴파일에는 Docker
를 사용하기로 한다. 다행히 128GB의 SD 카드를 구입했기 때문에 용량으로서는 틀림없다.
컴파일에 사용한 Dockerfile 외는 하기 URL에 놓았다.
htps : // 기주 b. 코 m / 야마 모토와 / 지 츠 ぉ ん _ 나노 / t 네 / 마 s r / 오 펜 CV _ 코 m ぇ
OpenCV 4.1.0 시작
중량급 컴파일에도 불구하고 위의 참고 URL 스크립트를 사용하면 문제없이 OpenCV 4.1.0이 설치됩니다. 컴파일 시간은 약 2시간 30분 3시간 1 . 놀라운!
Docker 컨테이너 내foo@0a8f8ac6951a:~$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'
특징 추출 SIFT/SURF 사용
소스 코드 작성
다음과 같은 스크립트를 작성하여 두 이미지의 특징 추출 & 매칭을 시도한다.
커맨드 라인 인수로부터 알고리즘을 선택할 수 있도록 하고 있다.
test_xfeature2d.pyimport numpy as np
import cv2
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('algo')
parser.add_argument('image1')
parser.add_argument('image2')
parser.add_argument('output')
args = parser.parse_args()
print('OpenCV version: {}'.format(cv2.__version__))
im1 = cv2.imread(args.image1)
im2 = cv2.imread(args.image2)
gray1 = cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(im2,cv2.COLOR_BGR2GRAY)
descriptor = eval('cv2.xfeatures2d.{}_create()'.format(args.algo))
kp1, desc1 = descriptor.detectAndCompute(gray1, None)
kp2, desc2 = descriptor.detectAndCompute(gray2, None)
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(desc1, desc2)
n_matches = 100
im3 = cv2.drawMatches(
im1, kp1,
im2, kp2,
matches[:n_matches], im2.copy(), flags=0)
cv2.imwrite(args.output, im3)
if __name__ == '__main__':
main()
실행
입력 이미지로 비슷한 이미지가 필요하지만, 딱 좋은 느낌으로 비슷한 이미지가 있었다(슬) 2
그럼 실행.
Docker 컨테이너 내foo@0a8f8ac6951a:~$ python3 test_xfeature2d.py SIFT data/fan_12v_mini.jpg data/fan_5v_mini.jpg features.jpg
OpenCV version: 4.1.0
Traceback (most recent call last):
File "test_xfeature2d.py", line 39, in <module>
main()
File "test_xfeature2d.py", line 22, in main
exec('descriptor = cv2.xfeatures2d.{}_create()'.format(args.algo))
File "<string>", line 1, in <module>
cv2.error: OpenCV(4.1.0) /tmp/opencv_contrib-4.1.0/modules/xfeatures2d/src/sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is
patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'
···. 2시간 30분에 걸쳐 컴파일한 결과가 에러 토했다. 즉
(-213:The function/feature is not implemented)
This algorithm is patented and is excluded in this configuration
OPENCV_ENABLE_NONFREE 옵션을 유효하게 하지 않으면 SIFT나 SURF는 사용할 수 없는 것 같다・・・.
...
-D OPENCV_ENABLE_NONFREE=ON \ ←追加
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
...
컴파일은 계속된다・・・.
결과
3시간 후, 컴파일은 무사히 종료. 상기를 실행한 결과를 나타낸다.
SIFT 결과
SURF 결과
왠지 미묘한 결과가 되어 버렸다. 이미지가 너무 어려웠을지도 모른다.
덤
원래 NONFREE는 무엇일까 하는 것으로 조사했다. 아래는 SIFT의 예로 미국 특허다.
"Method and apparatus for identifying scale invariant features
in an image and use of same for locating an object in an image,"
David G. Lowe, US Patent 6,711,293 (March 23, 2004).
예를 들면 SIFT의 경우, 아래에 상세가 쓰여져 있습니다.
오리지널의 소스 코드(링크처의 웹 사이트는 벌써 없다)를 사용한다면 「저작권법」과 「특허법」의 양쪽에 따르라고 써 있다. 게다가 바이너리 배포를 한다면
OpenCV 컴파일은 무게급이고 apt에 상당히 많은 포장을 설치할 필요가 있다. 이것은 개발 환경과 실행 환경의 2개를 겸하는 Jetson nano에서는 문턱이 높다. 따라서 컴파일에는
Docker
를 사용하기로 한다. 다행히 128GB의 SD 카드를 구입했기 때문에 용량으로서는 틀림없다.컴파일에 사용한 Dockerfile 외는 하기 URL에 놓았다.
htps : // 기주 b. 코 m / 야마 모토와 / 지 츠 ぉ ん _ 나노 / t 네 / 마 s r / 오 펜 CV _ 코 m ぇ
OpenCV 4.1.0 시작
중량급 컴파일에도 불구하고 위의 참고 URL 스크립트를 사용하면 문제없이 OpenCV 4.1.0이 설치됩니다. 컴파일 시간은 약 2시간 30분 3시간 1 . 놀라운!
Docker 컨테이너 내foo@0a8f8ac6951a:~$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'
특징 추출 SIFT/SURF 사용
소스 코드 작성
다음과 같은 스크립트를 작성하여 두 이미지의 특징 추출 & 매칭을 시도한다.
커맨드 라인 인수로부터 알고리즘을 선택할 수 있도록 하고 있다.
test_xfeature2d.pyimport numpy as np
import cv2
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('algo')
parser.add_argument('image1')
parser.add_argument('image2')
parser.add_argument('output')
args = parser.parse_args()
print('OpenCV version: {}'.format(cv2.__version__))
im1 = cv2.imread(args.image1)
im2 = cv2.imread(args.image2)
gray1 = cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(im2,cv2.COLOR_BGR2GRAY)
descriptor = eval('cv2.xfeatures2d.{}_create()'.format(args.algo))
kp1, desc1 = descriptor.detectAndCompute(gray1, None)
kp2, desc2 = descriptor.detectAndCompute(gray2, None)
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(desc1, desc2)
n_matches = 100
im3 = cv2.drawMatches(
im1, kp1,
im2, kp2,
matches[:n_matches], im2.copy(), flags=0)
cv2.imwrite(args.output, im3)
if __name__ == '__main__':
main()
실행
입력 이미지로 비슷한 이미지가 필요하지만, 딱 좋은 느낌으로 비슷한 이미지가 있었다(슬) 2
그럼 실행.
Docker 컨테이너 내foo@0a8f8ac6951a:~$ python3 test_xfeature2d.py SIFT data/fan_12v_mini.jpg data/fan_5v_mini.jpg features.jpg
OpenCV version: 4.1.0
Traceback (most recent call last):
File "test_xfeature2d.py", line 39, in <module>
main()
File "test_xfeature2d.py", line 22, in main
exec('descriptor = cv2.xfeatures2d.{}_create()'.format(args.algo))
File "<string>", line 1, in <module>
cv2.error: OpenCV(4.1.0) /tmp/opencv_contrib-4.1.0/modules/xfeatures2d/src/sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is
patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'
···. 2시간 30분에 걸쳐 컴파일한 결과가 에러 토했다. 즉
(-213:The function/feature is not implemented)
This algorithm is patented and is excluded in this configuration
OPENCV_ENABLE_NONFREE 옵션을 유효하게 하지 않으면 SIFT나 SURF는 사용할 수 없는 것 같다・・・.
...
-D OPENCV_ENABLE_NONFREE=ON \ ←追加
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
...
컴파일은 계속된다・・・.
결과
3시간 후, 컴파일은 무사히 종료. 상기를 실행한 결과를 나타낸다.
SIFT 결과
SURF 결과
왠지 미묘한 결과가 되어 버렸다. 이미지가 너무 어려웠을지도 모른다.
덤
원래 NONFREE는 무엇일까 하는 것으로 조사했다. 아래는 SIFT의 예로 미국 특허다.
"Method and apparatus for identifying scale invariant features
in an image and use of same for locating an object in an image,"
David G. Lowe, US Patent 6,711,293 (March 23, 2004).
예를 들면 SIFT의 경우, 아래에 상세가 쓰여져 있습니다.
오리지널의 소스 코드(링크처의 웹 사이트는 벌써 없다)를 사용한다면 「저작권법」과 「특허법」의 양쪽에 따르라고 써 있다. 게다가 바이너리 배포를 한다면
foo@0a8f8ac6951a:~$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'
소스 코드 작성
다음과 같은 스크립트를 작성하여 두 이미지의 특징 추출 & 매칭을 시도한다.
커맨드 라인 인수로부터 알고리즘을 선택할 수 있도록 하고 있다.
test_xfeature2d.py
import numpy as np
import cv2
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('algo')
parser.add_argument('image1')
parser.add_argument('image2')
parser.add_argument('output')
args = parser.parse_args()
print('OpenCV version: {}'.format(cv2.__version__))
im1 = cv2.imread(args.image1)
im2 = cv2.imread(args.image2)
gray1 = cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(im2,cv2.COLOR_BGR2GRAY)
descriptor = eval('cv2.xfeatures2d.{}_create()'.format(args.algo))
kp1, desc1 = descriptor.detectAndCompute(gray1, None)
kp2, desc2 = descriptor.detectAndCompute(gray2, None)
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(desc1, desc2)
n_matches = 100
im3 = cv2.drawMatches(
im1, kp1,
im2, kp2,
matches[:n_matches], im2.copy(), flags=0)
cv2.imwrite(args.output, im3)
if __name__ == '__main__':
main()
실행
입력 이미지로 비슷한 이미지가 필요하지만, 딱 좋은 느낌으로 비슷한 이미지가 있었다(슬) 2
그럼 실행.
Docker 컨테이너 내
foo@0a8f8ac6951a:~$ python3 test_xfeature2d.py SIFT data/fan_12v_mini.jpg data/fan_5v_mini.jpg features.jpg
OpenCV version: 4.1.0
Traceback (most recent call last):
File "test_xfeature2d.py", line 39, in <module>
main()
File "test_xfeature2d.py", line 22, in main
exec('descriptor = cv2.xfeatures2d.{}_create()'.format(args.algo))
File "<string>", line 1, in <module>
cv2.error: OpenCV(4.1.0) /tmp/opencv_contrib-4.1.0/modules/xfeatures2d/src/sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is
patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'
···. 2시간 30분에 걸쳐 컴파일한 결과가 에러 토했다. 즉
(-213:The function/feature is not implemented)
This algorithm is patented and is excluded in this configuration
OPENCV_ENABLE_NONFREE 옵션을 유효하게 하지 않으면 SIFT나 SURF는 사용할 수 없는 것 같다・・・.
...
-D OPENCV_ENABLE_NONFREE=ON \ ←追加
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
...
컴파일은 계속된다・・・.
결과
3시간 후, 컴파일은 무사히 종료. 상기를 실행한 결과를 나타낸다.
SIFT 결과
SURF 결과
왠지 미묘한 결과가 되어 버렸다. 이미지가 너무 어려웠을지도 모른다.
덤
원래 NONFREE는 무엇일까 하는 것으로 조사했다. 아래는 SIFT의 예로 미국 특허다.
"Method and apparatus for identifying scale invariant features
in an image and use of same for locating an object in an image,"
David G. Lowe, US Patent 6,711,293 (March 23, 2004).
예를 들면 SIFT의 경우, 아래에 상세가 쓰여져 있습니다.
오리지널의 소스 코드(링크처의 웹 사이트는 벌써 없다)를 사용한다면 「저작권법」과 「특허법」의 양쪽에 따르라고 써 있다. 게다가 바이너리 배포를 한다면
"Method and apparatus for identifying scale invariant features
in an image and use of same for locating an object in an image,"
David G. Lowe, US Patent 6,711,293 (March 23, 2004).
라고 적혀있다. 필요한 표기가 행해진 파일을 함께 배포하면 가능할 것 같지만···.
apt로 hdf5나 blas를 추가하면 컴파일 시간이 늘어났다. ↩
자세한 내용은 "Jetson Nano의 팬 구매를 조심하십시오!"을 참조하십시오. ↩
Reference
이 문제에 관하여(Jetson Nano의 Docker로 OpenCV 4.1.0 컴파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamamo-to/items/d95ed920fe18cbb4b452텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)