코로나 간이 검사를 받았습니다. ㅜ.ㅜ
잠실운동장 건너편 아시아공원 입구에 있는 간이 검사소에서... 점심시간전에 방문했는데 대기자 6~7명 수준으로 대기시간 10분이내에 진행이 되네요.
코에서 검체를 체취하는데 고통스럽습니다.
빨리 백신이 도입되어야 할 것 같네요.의료진들 봉사자들 모두 힘내세요..
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
현재 디렉토리 하위에 있는 file명이 from으로 시작되는 모든 파일(fromxxx.xx)을 to로 시작하는 파일로 한번에 변경
rename 명령어로 변경하기
형식 : rename 's/파일명/변경할파일명/' 대상파일필터
예)
1.확장탭을 누르고 2.검색창에 "arduino"를 입력하면 arduino관련된 확장모듈이 검색된다. 첫번째로 검색된 Microsoft에서 나온 Arduino 확장의 3. install버튼을 클릭한다.
Additional Board Manager URLs
in the board manager.
Image처리를 하다보면 memory buffer에 있는 image raw데이터를 BMP포멧으로 저장할 필요가 있다.
OpenCV를 ARM용으로 Cross Compile후 strip실행시 아래와 같은 오류 발생
$ strip -s *.sostrip: Unable to recognise the format of the input file 'libopencv_calib3d.so'
원인은 strip을 호스트용을 사용해서 발생한 것으로 ARM용으로 strip을 할수 있는 arm-linux-gnueabi-strip을 사용하면 정상적으로 strip이 되는것을 확인할 수 있다.
$ arm-linux-gnueabi-strip -s *.so
Windows 10 OS에서 Visual Studio Code 환경에서 C++ 컴파일 환경을 구축해보자
우선 Visual Studio Code를 여기(code.visualstudio.com)서 다운로드 받아 설치합니다.
VSC를 다운받아 설치하고 실행하면 환영창이 나오고, 좌측에 파일탐색, 찾기, Git, 실행/디버그, 확장(extension) 탭 5개가 있는것을 확인할 수 있다.
제일 아래쪽에 위치한 녹색으로 표시한 확장 탭을 누르고, 노란색으로 표기한 검색창에 "C++"을 입력하면 위의 사진과 같이 검색 결과 표시된다.
OS : Windows 10 ver. 16237.0이상
Architecture : x64, ARM64
윈도우즈 제어판 -> 프로그램 및 기능 -> Windows 기능 켜기/끄기
Windows 기능 켜기/끄기에서 "Linux용 Windows 하위 시스템"을 체크하고 확인 버튼을 클릭하면 아래와 같이 필요한 파일들을 검색하고 세팅한후 재부팅 메세지가 출력된다.
OrangePi Lite 2 Memory 1G를 사용중인데 약간 크기가 큰 것들을 컴파일 하면 시스템이 아주 아주 느려져 재부팅을 시키게 되는 일이 잦아 진다. 이때 swap 영역을 잡아 주면 시스템이 느려지는 현상을 상당히 완화 시킬 수 있다.
리눅스에서 swap메모리는 윈도우즈의 가상 메모리와 동일하며, 시스템의 램(RAM)이 부족한 경우 swap메모리를 이용하게 된다.
스왑메모리 영역을 설정하는 방법은 스왑 파티션이용방법과 스왑파일을 만들어 사용하는 방법이 있다. 스왑파일을 만들어 사용하는 방법을 간단히 정리한다.
권한 설정
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ free$ swapon -s
재부팅이후에도 스왑메모리가 자동으로 지정되게 하려면 /etc/fstab에 아래 내용 추가
$ sudo nano /etc/fstab/swapfile swap swap default 0 0
/etc/fstab에 저장된 스왑메모리의 마운트 내용 삭제 또는 주석처리
$ sudo nano /etc/fstab/swapfile swap swap default 0 0 제거 또는 주석처리$ sudo swapoff -v /swapfile$ sudo swapoff on /swapfile$ sudo rm -r /swapfile
사용 Image : OrangePi_lite2_ubuntu_xenial_desktop_linux5.3.5_v2.0.1.img
발행일 : 2019년 12월 31일
OrangePi 이미지를 설치하고 나서 처음 부팅했을때 rootfs를 사용하고 있는 SD카드의 전체를 사용하도록 확장할 필요가 있다.
확장하기전 상태
$ df h
rootfs확장 스크립트 실행
$ resize_rootfs.sh
확장후 상태
$ df -h
$ sudo raspi-config
$ sudo apt install x11vnc
$ x11vnc -storepasswd
$ x11vnc -forever -shared -rfbauth ~/.vnc/passwd
위에서 설정한 비밀번호를 복사
$ sudo cp ~/.vnc/passwd /etc/x11vnc.pass
/etc/rc.local파일에서 exit 0위에 아래 내용 삽입
$ sudo nano /etc/rc.local
x11vnc -display :0 -auth /var/run/lightdm/root/:0 -forever -bg -o /var/log/x11vnc.log -rfbauth /etc/x11vnc.pass -rfbport 5900
$ ifconfig
OrangePi를 재부팅하고 로그인한다.
Chrome 브라우저에서 좌상단의 "앱"버튼을 누르고 VNC Viewer를 실행한다.
VNC Viewer에서 Address에 위에서 확인한 IP주소 값을 넣고 Connect버튼을 누른다.위에서 설정한 패스워드 값을 입력한다.
$ wget http://1.229.109.140:3562/tensorflow/tensorflow-2.2.0.armv7l/tensorflow-2.2.0-cp37-none-linux_armv7l.whl
--2020-09-03 16:45:10-- http://1.229.109.140:3562/tensorflow/tensorflow-2.2.0.armv7l/tensorflow-2.2.0-cp37-none-linux_armv7l.whl
Connecting to 1.229.109.140:3562... connected.
HTTP request sent, awaiting response... 200
Length: 157689306 (150M)
Saving to: ‘tensorflow-2.2.0-cp37-none-linux_armv7l.whl’
tensorflow-2.2.0-cp 100%[===================>] 150.38M 2.03MB/s in 82s
2020-09-03 16:46:31 (1.84 MB/s) - ‘tensorflow-2.2.0-cp37-none-linux_armv7l.whl’ saved [157689306/157689306]
$ pip3 install tensorflow-2.2.0-cp37-none-linux_armv7l.whl
기존에 OpenCV가 설치되어 있었을 경우 다음과 같이 삭제하고 진행한다.
$ sudo apt purge libopencv* python-opencv
$ sudo apt autoremove
$ sudo apt update
$ sudo apt upgrade
기존에 OpenCV가 설치되어 있지않았다면 위를 건너 뛰고 OpenCV라이브러리를 빌드하기 위한 필요 라이브러리들을 설치한다.
$ sudo apt install -y -y build-essential cmake
$ sudo apt install -y pkg-config
$ sudo apt install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt install -y libv4l-dev v4l-utils
$ sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt install -y libqt4-dev libgtk2.0-dev
$ sudo apt install -y mesa-utils libgl1-mesa-dri libqt4-opengl-dev
$ sudo apt install -y libatlas-base-dev gfortran libeigen3-dev
$ sudo apt install -y python2.7-dev python3-dev python-numpy python3-numpy
$ git clone https://github.com/opencv/opencv.git
$ cd opencv
$ git checkout tags/3.4.9
$ cd ..
$ git clone https://github.com/opencv/opencv_contrib.git
$ cd opencv_contrib
$ git checkout tags/3.4.9
$ cd ..
현재 4.4.0까지 릴리즈되어 있다. 3.4.9버전이 아니라 다른버전을 사용하고자 할때는 tags/3.4.9를 원하는 버전으로 바꾸어 사용하면 된다. tag를 보는 방법은 $ git tag
OpenCV 라이브러리 빌드
$ 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=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_CUDA=OFF \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_OPENCV_PYTHON2=ON \
-D BUILD_OPENCV_PYTHON3=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
../
cmake를 수행했을때 위와 같이 config done이 출력되면 make파일이 성공적으로 만들어진 경우다 계속 진행하자
$ time make -j4
$ sudo make install
$ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig
$ sudo apt upgrade
위에서 make하기 전에 스왑메모리를 늘려주어야 컴파일시 internal error가 발생하지 않는다.
$ sudo nano /etc/dphys-swapfile
내용중 CONF_SWAPSIZE=100 을 CONF_SWAPSIZE=2000 으로 변경 하고 저장
$ sudo /etc/init.d/dphys-swapfile restart
Make가 끝난후에 다시 size를 100으로 변경한다.
관련문서
apt-get은 데비안 계열(ubuntu)의 리눅스에서 사용되는 패키지관리 명령어 도구
apt-get, apt-cache 대신 apt를 사용하세요. 진행사항을 프로그레스로 보여준다던가 업데이트해야할 갯수등 Option을 넣어야하는것들을 기본으로 사용하게 합니다.
Package Index정보를 업데이트 - /etc/apt/source.list에 있는 인텍스 정보를 최신 정보로 갱신
$ sudo apt update
Package 설치
$ sudo apt install 패키지이름
$ sudo apt install 패키지이름
$ sudo apt remove 패키지이름
$ sudo apt --purge remove 패키지이름
$ sudo apt source 패키지이름
$ sudo apt build-deb 패키지이름
$ sudo apt upgrade
$ sudo apt dist-upgrade
$ sudo apt search 패키지이름
$ sudo apt show 패키지이름
프로토콜 버퍼란?
구글에서 만들어서 공개한 구조화된 데이터를 직렬화 하기 위한 언어중립적이고, 플랫폼 중립적인 확장 메카니즘이며, 저장을 목적으로 서로 통신할 프로그램을 개발할 때 유용하다.
지원 언어 : C++, Python, JAVA, GO
환경 :
- 라즈베리파이 4 with 라즈베리안
- OpenCV 4
guvcview로는 video가 나오는데 테스트하려는 코드에서는 아래와 같은 오류 발생..
[ WARN:0] global /home/pi/work/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (933) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
[ WARN:0] global /home/pi/work/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (1184) setProperty OpenCV | GStreamer warning: GStreamer: unhandled property
설치된 라이브러리의 버젼을 확인하고자 할 때 pkg-config 명령으로 아래와 같이 확인.
예를 들어 python의 버젼을 확인하고자 할때
$ pkg-config --modversion python
시스템에 설치된 모든 python버젼을 찾고 싶을때
$ pkg-config --list-all | grep python
프로젝트 생성 프로젝트를 생성하고자 하는 폴더에서 npx @react-native-community/cli init [ 프로젝트명 ] npx @react-native-community/cli init firstapp 해당 폴더에 [프로젝트명...