기본 콘텐츠로 건너뛰기

windows subsystem for Linux(WSL) 완벽설치방법 #feat 개고생

필자는 머신러닝에 입문한 초보자임을 말씀드리며 이글을 적습니다.  window10을 이용하되, window상에서 리눅스를 사용하고 싶은 독자가 읽어줬으면 한다. window10에 linux를 설치하는 걸 window subsystem for linux 라고 한다. 우선 microsoft store 에 들어가서 ubuntu18.04를 설치한다. 여러가지 버전중에서 본인이 마음에 들어하는 것을 설치하면 된다. command line 라인 상에서 gui를 설치하기 위해서 연결해주는 프로그램이 필요하기 때문에 Xming을 설치한다. https://sourceforge.net/projects/xming/     에서 다운 받아 설치 진행 그림 상단에 설치된 모습 확인 x ming을 실행한다. 좌측하단에 xming이 실행이 된다. 하지만, 특별하게 바뀐건 없다. command window로 이동한다. export DISPLAY==:0.0  명령어 실행 sudo apt-get update sudo apt-get install firefox firefox 다음과 같이 실행되는 걸 확인할 수 있다. firefox상에서 anaconda prompt 를 실행 여기서 리눅스, python3.7을 선택해서 설치를 진행한다. 다음과 같이 Anaconda3-5.0.0.1-Linux-x86_64.sh 와같이 파일이 설치 된것을 확인할 수 있다. bash Anaconda3-5.0.0.1-Linux-x86_64.sh source ~/.bashrc conda list 이제 파이참을 설치할거다. 위와 같은 방법으로 firefox로 pycharm으로 가서 pycharm을 설치 한다. https://www.jetbrains.com/pycharm/download/#section=linux pycharm 의 bin 폴더로 이동해서 sh pycharm.sh 실행 sudo apt...

python; cv2.cvtColor ;RGB 영상 이미지 처리 방법

디지털 영상  - 디지털 영상은 2차원 행렬의 형태로 표현되는데, 격자 하나를 하나의 픽셀이라고 부릅니다. 이를 3차원 영상처리에서는 복셀로 부르게 되는데요.  - 각자의 기준점에서 영상 좌표를 지정하고 그리고 변경함에 따라서 선택적으로 영상을 처리할 수 있게 됩니다. Digital Image의 유형은  Binary Image : 0 혹은 1로 나누어진 이미지를 의미하고,   Gray scale image :  color image - RGB color : - HSV color :   H(ue) : 0 : red, 120도 : Green, 240도 : Blue)   S(aturation) : 채도를 의미하고 색이 흐리다 , 진하다를 의미   V(alue) : 명도를 의미, 색이 어둡다 깊다를 의미 사용법 cv2.cvtColor(scr, code) parameter scr : input image code :  - grayscale을 BGR로 변환하기 위해서는 cv2.COLOR_BGR2GRAY를 사용하면 된다. 예제 aaa = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) pl.imshow(aaa) -원래 이미지 결과 이미지

python; cv2,filter2D

사용법  cv2.filter2D(scr,ddepth,kernel[,dst[,anchor,[,delta,[borderType]]]) parameter src => input 이미지 dst => output 이미지 ddepth =>  delta =>  borderType => 예제 disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) cv2.filter2D(dst, -1, disc, dst)

python; cv2.getStructuringElement

사용법 cv2.getStructutinElement(shape,ksize[,anchor]) parameter shape :  - MORPH_RET : 사각형  - MORPH_ELLIPSE : 타원형  - MORPH_CROSS : 십자 ksize => 커널의 사이즈를 의미 예제 :  element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7)) pl.imshow(element)

python; cv2.normalize 이미지 수치 표준화 시키기

사용법 cv2.normalize(src[,dst[,alpha[,beta[, norm_type[, dtype[, mask]]]]]]) parameter :  src : input  이미지 dst : output 이미지 alpha : 수치의 표준화를 진행할때 하한값  beta : 수치의 표준화를 진행할때 상한값 norm type :   옵션사항으로 넣지 않아도 분석진행은 가능. dtype :  mask :  예시  cv2.normalize(roihist, roihist, 0, 255, cv2.NORM_MINMAX)

python; cv2:calcHist : 히스토그램으로 이미지 필요영역 선택하기

사용법 cv2.calcHist(images, channels, mask, histSize, ranges,[0,hist,[0,accumulate]]) Parameter image : Array 형태의 이미지를 넣으면 된다.   channel :  채널. 이미지가  - graysacle이면 [0],  - color 이미지이면 [0],[0,color] 형태(1 : Blue, 2: Green, 3: Red) mask   – 이미지의 분석영역. None이면 전체 영역. histSize   –. [256] ranges   – 범위 값. [0,256] 예제 aaa = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256]) 결과 cv2.imshow('aa', aaa)

linux; permission #

 # 블로그나 계시판의 내용을 공개 혹은 비공개 할지 선택한다.  대표적으로 유저가 file과 directory의 접속여부를 결정하는 것. 권한 은 read, write, execute(실행)에 대한 권한.  예시 : 파일을 만든다. yju에서 파일을 만든다. touch perm.txt echo 'hi' > perm.txt cat perm.txt perm.txt 파일의 형태 -rw-rw

linux; id, who # 다중사용자, 사용자 추가

다중사용자 시스템이 되는 순간 시스템의 복잡도는 제곱으로 어려워 진다. 즉, 권한에 대한 체크가 어려워 진다. 보안성이 떨어진다. id  # 나는 누구인가를 알려주는 정보. udi=1000(egoing) who # 누가 접속해있는지 알수 있는 명령어.  ctrl C는 명령어 취소 사용자는 크게 super(root) user   VS user 일반유져 : $가 붙어 있다. 슈퍼유저 : #이 붙어 있다. man su sudo passwd -l root sudo passwd -u root sudo 사용자로 접속을 했을 때 directory가  /root 이다. 일반사용자의 최상위 directory는 cd ~라고 하면 된다. 일반사용자는 /home라고 한다. # 사용자 추가 sudo useradd -m jiung # superuser가 일반 user를 추가하는 입장이기 때문에 sudo를 붙인다. sudo pwd sudo usermod -a -G sudo jiung

linux; CRON # crontab

# 정기적으로 실행해야할때 예를 들면 정기적으로 인터넷을 통해서 시간을 조정해야 할 때... #CRON crontab -e # 정기적으로 작업을 시행하고 싶을 때 여기에 추가하면 된다. m h dom mon dow command m : 분 (0-59) h : 시간(0-23) dom : day of month(0-31) mon : month(1-12) dow :  day of week(0-6), sunday=0 */10  : 10분에 한번 */1 * 24 10 1 : 한시 10분에 실행된다. 1/* * 24 : 매달 24일 1/* * * * *  date >> date.log 2>1 # 2>1 : 2는 표준 에러, 1은 표준 출력. 즉, 표준 에러를 표준 출력으로 redirection 한다는 의미. tail -f date.log # tail : 문서의 끝을 보여주는 명령어, -f는 실시간 데이터를 업데이트 해주는 명령어이다. 확인차 작성하는 것. 크론으로 할 수 있는 일 - 정기적으로 시스템이 작성되는 것.

linux; daemon # service

# 프로그램을 실행하는 방법중에 하나. daemon : 항상켜져 있는 프로그램. 언제 사용할지 모르는 프로그램들 ls, rm, mkdir 과 같은 것들은 필요할때만 사용하는 것들. server와 같은 프로그램들은 항상켜져 있어야 한다. daemon의 대표적인 예다. client는 인터넷을 통해서 server에 접속한다. user 입장에서는 필요할때 프로그램을 일시적으로 사용하여야 하지만, sever 관점에서는 user가 언제 데이터를 사용할지 모르기 때문에 항상 on  해야만 한다. server를 daemon 혹은 service라고 명명한다. 웹서버를 설치해보자. sudo apt-get install apache2 cd /etc/init.d/     # /etc/init.d/의 경로는 daemon 프로그램들이 있는 저장소 이다. sudo service apache2 start  # daemon 프로그램을 on , off할때 사용하는 명령어를 의미한다. ps aux | grep apache2 # 실행되고 있는  프로그램을 확인할 수 있다. sudo service apache2 stop # 실행되고 있는 프로그램을 멈춘다. rc3.d : cli 기반으로 구동하고 있을 때 사용 rc5.d : gui 기반으로 구동하고 있을 때 사용한다. cd /etc/rc3.d # 여기에 S02apache2 -> 라고 있을때  S라고 시작되면  뒤에 이름에 해당되는  프로그램은 rc3.d 경로에 있으면 콘솔에 있으면 cli로 부팅된 컴퓨터에서 자동으로 실행된다는 의미이다. K로 적혀있는 프로그램은 부팅될때 실행되지 않는다. 숫자 01, 02는 우선순위를 명명한다. 즉, rc3.d 에 링크를 걸면된다. 링크 : /etc/rc5.d/S02apache2    # 현재 링크에 apache가 없음에도 apache가 실행된다...

linux; locate, find #파일의 위치를 찾는 방법

man locate locate (파일의 명령어) 예 ) locate *.log # 디렉토리를 뒤지지 않고 데이터 베이스를 뒤진다. 파일들의 정보가 있는 데이터베이스를 찾아서 가지고 오기 때문에 빠르다. 이런 데이터 베이스를 mlocate라고 한다.  man find # 직접파일을 뒤지기 때문에 다양한 사용법들이 많다. 검색해보자 sudo find . -type f -name *.log  # 확장자, .log로 끝나는 파일명을 찾을 수 있다. man whereis whereis rm : 지정한 명령어(rm)의 실행파일의 위치를 표현해준다. $PATH를 뒤져서 표시해준다. $PATH 는 뭐냐면 우리가 보통 directory에 ls의 프로그램이 없어도 실행이 되는 것은 $PATH 이기 때문이다.

ps, top, htop

ps # process list를 보여준다. ps aux  # 백그라운드 프로그램 모든 것을 보여준다. sudo kill (pid number) sudo top sudo apt-get install htop sudo htop # load average : (첫번째 숫자: 순간적인 속소), 두번째 숫자, 3번째 숫자. 등등

linux; process

ssd, hdd : storage, 가격이 저렴= 저장용량이 크다, 저장 및 읽는 속도가 느리다. ram : memory, 비싸다=저장용량이 비싸다 cpu : 중앙처리장치, processor 프로그램은 storage에 깔려있다. 사용할 프로그램에 ram에 올려서 cpu로 돌린다. 예를 들면 /bin, /sbin 과 같은 프로그램(program) 들은 storage에 저장된다. 그리고 명령어들이 ram에 적제되어 cpu(processor)에 의해서 실행된다.

linux; directory structure

1. / : 최상위 디렉토리 : root 2. /bin : user binaries  : 상용자들이 사용하는 directory. 3. /sbin : system binaries : system program.  : 컴퓨터를 사용하거나 끄거나 할때 사용하는 명령어들, 시스템관리자(root user) 들이 사용하는 명령어들임. 일반사용자들이 사용하기 어려운 용어들. 4. /etc  : linux의 설정을 바꿀 때는 파일을 바꿀 때 사용. 운영체제에 대한 설정, 프로그램에 대한 설정 들이 있는 곳. 5. /dev : Device File 6. /proc : Process Information 7. /var : variable Files  : 바뀔 수 있는 파일들. 용량이 바뀌거나, 내용이 바뀌거나 등등. 어떻게 바뀔 수 있는지는 알 수 없다. 8. /temp : temporary files : 임시파일들이 적혀있는 곳  : 컴퓨터를 껏다 켜면 사라지는 파일 들. 9. /home : Home directories; (cd ~)  : 사용자들의 경로, 작업하고 있는 경로 10. /usr : user programs 11. /boot : Boot loader files 12. /lib : system libraries 13 /opt : optional add on applications  : 소프트웨어를 설치할때 어디에 설치는 경로를 여기에 하면 좋다. whereis (program name) : 하면 14. /mnt : mount directory 15. /media 플로피 디스크 사용하던 시절에는 컴퓨터를 킬때 필요한 것은 bin, sbin 에 저장, 컴퓨터에 필요하지 않는 경우파일 들은 usr에 저장 했었다.(과거) 요즘에는 home 경로로 인해서 usr의 힘이 많이 빠졌다.

linux; shell script, 예시 1

shell script : 명령에 대한 각본을 나타낸다. log로 끝나는 파일들을 bar 파일로 빼는 작업을 하고 싶다. 우선 경로를 만든다. mkdir  script     # scrpit라는 파일경로를 설정한다. touch a.log b.log c.log      # a,b,c 가각의 log 파일을 생성한다. mkdir bak   # bak라는 파일의 경로를 만든다. cp *.log bak        # *.log는 log가 달려있는 파일의 총을 나타낸다. cp는 copy의 줄인말. ------------------------------------------------------------------------------------------ ls /bin      # 현재 사용되고 있는 명령어를 모두 확인 할 수 있다. #! /bin/bash    # 우리가 작성하고 있는 프로그램을 실행했을 때 운영체제는 첫번재 줄에 있는 #! 와 bin/bash를 본다. => bin/bash를 근간으로하여  아래 있는 코드들이 해석된다 라는 것을 의미한다.  이건 약속임. if [ -d bak ]; then # 현제 디렉토리에 bak라는 directory가 존재 하는가? 라는 말을 의미한다. if ! [ -d bak ] # 현제 디렉토리에 bak라는 directory가 존재하지 않는다면, 라는 말을 의미한다. mkdir bak fi cp *log bak 참고! chmod +x backup #이것을 해주면 백업이 실행이 된다.  즉 backup 실행파일의 실행기능을 추가한다.

linux; bash VS zsh

bash와 zsh의 근간  우선 zsh를 설치를 하자 sudo apt-get install zsh를 사용해서 설치 한다.

linux ; shell vs kernel

SHELL : 껍데기. 사용자(나) Kernel : core 우리가 예를들면 터미널에 명령어를 입력하면 shell이 그 명령어를 이해해서 kernel에 전달을 한다. 그러면 kernel이 hardware를 제어하는 과정이 되겠다. 왜? shell과 kernel을 분리 했을까/?  분리했을 때 장점은 여러가지 shell이 만들어 질 수 있는데, 사용자가 원하는 shell을 선택해서 하드웨어를 제어하면 되겠다. 즉 서로다른 shell을 사용해야만 kernel을 통해서 hardware를 제어 할 수 있겠다.