이 게시물은 제가 한 것을 기록한 것으로 성공한 사례가 아닌 실패한 사례입니다.
주의하시기 바랍니다!
1. 카메라 캘리브레이션
저는 realsense d435i를 이용하여 camera calibration을 진행하였습니다.
제가 진행한 calibration관련 게시물입니다.
2021.05.21 - [ROS] - Realsense로 camera calibration하기(2)
2. opencv 버전확인하기
$ pkg-config --modversion opencv
3. 버전 4와 충돌일어나지않게 이전 opencv 지우기
(여기서 부터 잘못됐던것 같습니다ㅠㅠ 그냥 있는 버전 쓸걸 왜 지워가지고..)
$ sudo apt-get purge libopencv* python-opencv
$ sudo apt-get autoremove
4. 기존 설치된 패키지 업데이트하기
$ sudo apt-get update
$ sudo apt-get upgrade
6. opencv 컴파일전 필요한 패키지 설치하기
$ sudo apt-get install build-essential cmake
$ sudo apt-get install pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libqt4-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libqt4-opengl-dev
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy
7. opencv 설정과 컴파일 및 설치하기
$ mkdir opencv
$ cd opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
$ unzip opencv_contrib.zip
$ ls -d */
$ cd opencv-4.2.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_TBB=OFF \ -D WITH_IPP=OFF \ -D WITH_1394=OFF \ -D BUILD_WITH_DEBUG_INFO=OFF \ -D BUILD_DOCS=OFF \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_EXAMPLES=OFF \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D WITH_QT=OFF \ -D WITH_GTK-ON \ -D WITH_OPENGL=ON \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.2.0/modules \ -D WITH_V4L=ON \ -D WITH_FFMPEG=ON \ -D WITH_XINE=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON ../
위 코드를 이용하여 cmake설정을 해줘도 되고 $ ccmake .. 을 쳐서 직접 입력을 해도됩니다. 저는 설정이 제대로 되지않아 ccmake ..을 이용하여 직접 바꿨습니다. 다 입력을 하고 키보드 c 와 g 를 눌러줍니다. c 는 configure 을 의미하고 g 는 generate 를 의미합니다. ccmake .. 이 뭐였지...
컴파일을 하기전 사용중인 컴퓨터의 cpu 코어수 확인하기
yehjin@yehjin-900X3L:~$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
아래 명령어는 전체 개수만을 알려주는 명령어입니다.
yehjin@yehjin-900X3L:~$ cat /proc/cpuinfo | grep processor | wc -l
4
컴파일 시작하기
yehjin@yehjin-900X3L:~/opencv/opencv-4.2.0/build$ time make -j4
컴파일 성공했을때
[100%] Linking CXX executable ../../bin/opencv_test_video
[100%] Built target opencv_test_video
[100%] Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python2
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-36m-x86_64-linux-gnu.so
[100%] Built target opencv_python3
real 34m31.021s
user 99m37.873s
sys 4m16.715s
컴파일 결과물 설치
$ sudo make install
yehjin@yehjin-900X3L:~/opencv/opencv-4.2.0/build$ cat /etc/ld.so.conf.d/*
/usr/lib/x86_64-linux-gnu/libfakeroot
# libc default configuration
/usr/local/lib
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
yehjin@yehjin-900X3L:~/opencv/opencv-4.2.0/build$ sudo ldconfig
opencv 설치 확인
$ pkg-config --modversion opencv
터미널에서 버전을 확인하려고 했을때 안뜰수도있습니다. sudo apt-get 명령어를 통해서 설치한 것이 아니면 안뜰가능성이 있다고 합니다.
파이썬에서 아래와 같이 나오면 opencv가 깔려있는것입니다.
yehjin@yehjin-900X3L:~$ python2
Python 2.7.17 (default, Feb 27 2021, 15:10:58)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.2.0'
ctrl+D를 하면 파이썬을 빠져나올수있습니다.
g++에러
yehjin@yehjin-900X3L:~$ g++ -o facedetect /usr/local/share/opencv4/samples/cpp/facedetect.cpp $(pkg-config opencv4 --libs --cflags)
Package opencv4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv4' found
g++: error: /usr/local/share/opencv4/samples/cpp/facedetect.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
ros 환경에서 파이썬을 실행해도되지만 opencv를 설치하는 과정이 까다롭기때문에 설치가 완료됐어도 없다고 오류가 뜰수있습니다. 그럴때는 ros환경에서 실행시키는 것이 아니라 코드가 있는 폴더로 이동하여 python으로 실행시키면 됩니다.
yehjin@yehjin-900X3L:~/catkin_ws/src/marker/src$ python aruco_marker_detection.py
opencv 로 yaml python파일을 load하기
import cv2
fs = cv2.FileStorage("./calib_asus_chess/cam_calib_asus.yml", cv2.FILE_STORAGE_READ)
fn = fs.getNode("camera_matrix")
print(fn.mat())
코드를 입력하여 실행해보았을때 오류가 떠서 실행되지않습니다. 먼저 노트북의 웹캠이 작동하는지 보았는데 /dev/video0자체가 없더라구요
realsense를 꽂고 실행시킨후 ls /dev/video*를 해도 없다고 뜹니다
lsusb로 연결은 된것을 확인했는데 왜 dev에는 없는건지 모르겠습니다.
$ sudo apt-get install cheese
$ cheese
하면 된다고 하는데 사진이 없다고 뜹니다.
marker라는 패키지를 만들어서 python코드를 실행시키려고 했봤습니다.
위 코드처럼 터미널에서 오류가 떠서 실행되지않습니다.
cvtColor오류는 이미지를 불러들이는 path가 잘못돼서 그렇다고 하는데 코드에서 path가
cap = cv2.VideoCapture() 이부분이라고 생각하는데 아닌것같아서 잘못된곳을 못찾겠습니다.
원래 사이트에서 코드를 조금 고쳤는데 함수를 track(matrix_coefficients, distortion_coefficients) 이렇게 쓰는게 아닌가요...? 왜 실행이 안되는 걸까요. 저거는 그냥 함수부분 자체문제가 있다는 뜻이었습니다... 저 함수를 사용하는데는 문제가 없는거 같아요
계속 path가 문제라고 하길래 video를 받아오지 못하면 empty frame이라고 출력하도록 했는데 역시 path문제가 맞았습니다....
제가 저장한 calibration파일에서 행렬을 못불러오는거같아서 직접 입력을 했는데 행렬이 여전히 들어가지는 못해요.
이 문제는 print를 통해 해결을 했습니다.
카메라를 불러오는데 문제가 있었기 때문에 연결이 문제인가했는데
usb에 연결됐다고는 떠도 실시간 영상을 불러오지는 못하더라구요. 코드자체도 애초에 webcam을 받아오라는 코드였는데 webcam만 따로 켜보려고해도 켜지지않았습니다. 이걸로 일주일 넘게 고민했는데 알고보니 하드웨어 오류...
다른 노트북에서 하니까 webcam이 잘 켜지더라구요 코드문제인줄알았는데 아니였네요..
진작 하드웨어인지 의심해볼걸 그랬어요
ros에서 python을 실행시키는게 python [파일이름] 이었는데 저는 그걸모르고 python에 들어가서 하는거랑 ros에서 하는거랑 다른건줄 알았네요. 근데 왜 쟤는 파일이 없다고 할까요ㅎㅎㅎ
다른 컴퓨터에서 해봤는데 카메라는 되는데 이제 함수부분이 문제네요....
* 포트 보는방법
코드에 포트번호를 입력할때 Bus 옆에 번호를 넣으면 됩니다.
왜 함수에 대한 잘못된 인수라고 뜰까요? 어떤 형식으로 값을 넣어야되는지 모르겠습니다.
변수이름만 넣어도 안되고 배열로 지정하고 넣어도 안되고 어떤 형식으로 적어야 할까요...
저거는 들어가는 변수의 개수가 더 많아서 그런거였습니다. 뒤에 cameraMatrix, distCoeff부분을 지우니까 됐습니다. 카메라는 작동하는데 이제는 마크 자체를 인식을 못하네요.
realsense로 해보려고 했는데 videocapture가 웹캠에 사용되는 거라서 realsense로는 되지않기때문에 카메라를 웹캠으로 바꿨습니다. 예전에 차선인식할때 realsense로 해봤던거 같은데 그때 어떻게 했지...
id: dictionary 에 속한 마커들 중 사용할 마커의 id 입니다. DICT_6X6_250의 경우 0부터 249까지의 id를 지정할수있습니다.
마크를 인식하기는 하는데 하자마자 카메라가 꺼졌습니다. 왜그런가 했더니 웹캠으로 다시 camera calibration을 해야한다고 합니다. 사진크기가 이전에 realsense와 달라서 불러온 matrix가 문제가 있는거 아닌가 하는 것입니다.
웹캠으로는 어떻게 하지.......
제 노트북에서 realsense로 영상을 받아오는게 안됐다고 위에서 말씀드렸는데요.
카메라 usb port색에 따라서 버전이 다른데요 포트 부분이 파란색은 3.0 흰색은 2.0이라고 합니다.
노트북에 포트가 2.0이라서 realsense의 3.0포트가 맞지않아서 코드를 통해 실시간 영상을 불러오는게 안될수도 있다고 합니다.
realsense camera로 마커인식하는 것은 다음에 다시 도전하겠습니다...일단 webcam으로 먼저 해볼게요..
*참고
[출처] OpenCV 2.4 제거 후 3.x 설치|작성자 Breaker
https://webnautes.tistory.com/1186
calibration 코드 참고 : https://aliyasineser.medium.com/opencv-camera-calibration-e9a48bdd1844
marker 코드 참고 : https://aliyasineser.medium.com/aruco-marker-tracking-with-opencv-8cb844c26628
marker 코드 참고2 : https://m.blog.naver.com/cjsal95/221330088063
3 : http://www.gisdeveloper.co.kr/?p=6317
https://answers.opencv.org/question/31207/how-do-i-load-an-opencv-generated-yaml-file-in-python/
marker mean : https://webnautes.tistory.com/1040
camera calibration code : https://stackoverflow.com/questions/34588464/python-how-to-capture-image-from-webcam-on-click-using-opencv
'ROS' 카테고리의 다른 글
Webcam으로 Aruco 마커인식하기 (0) | 2021.06.30 |
---|---|
마커인식한 후 로봇 위치 인식,조정하기[작성중] (0) | 2021.06.23 |
Realsense로 camera calibration하기(2) (0) | 2021.05.21 |
Kobuki 실행해보기 (0) | 2021.04.28 |
Realsense Camera로 Camera Calibration하기 (2) | 2021.02.26 |