글쓴이는 python 3.5를 매우매우 잘 사용하는중에 python 2.7버전도 사용할 필요성을 느껴서 (글 작성일 기준 OpenCV는 python 2.7까지만 지원) python 2.7과 python 3.5버전을 둘 다 사용하는 방법에 대해서 포스팅하려합니다.


저는 기존 local에 python 3.5버전이 먼저 설치되어 있었고 CMD에서 "python"을 입력할 경우 다음과 같이 출력됩니다.


python 3.5.2버전이 설치되어 있다고 나오네요.


글쓴이가 원하는것은

"python" 명령어를 이용해서 python 3 버전을 사용하고,

"python2" 명령어를 이용해서 python 2 버전을 사용하는것 입니다.


다음과같이 말이죠.


먼저 시스템엔 python3이 설치되어있다고 가정하겠습니다. (물론 환경변수도 설정되어 있어야 CMD창에서 python을 입력시 python 3가 실행되겠죠?)


그리고 python.org에서 python 2.7버전도 설치합니다.

설치 과정은 그냥 '다음', '다음' 쭉 누르면서 설치합니다. (기본 경로는 C:\python27입니다)


아마 다른 블로그에서 python 2 버전 설치하는걸 보신분은 중간에 "add to python.exe~~" 이렇게 환경변수를 자동으로 추가해주는 옵션을 활성화 시키고 다운받으라고 가이드를 하는 블로그도 있지만, 여기선 그냥 무시하고 넘어감니다.

=> 왜냐하면, 현재 로컬에서는 python 3가 설치되어 있기 때문에 CMD창에서 "python"입력 시 python 3.5가 실행이 됩니다.

=> 만약, python 3가 설치되어 있지 않다면!!! 위 "add to python.exe~~" 옵션을 활성화 시키고 다운받는다면 "python"명령어 입력시 python 2가 실행됩니다.

==> 두개의 python버전이 같은 명령어로 실행을 시키기 때문에 하나 이상의 명령어를 변경해줘야합니다.

그러니 그냥 python 2는 환경변수로 추가하지 않습니다.


만약 python 3, python 2 모두 환경변수에 추가되어 있다면, 환경변수에서 값이 먼저 나오는게 우선순위를 가집니다.


이제 로컬에는 python 3, python 2가 다 설치되어 있습니다.


그런데 아직 CMD에서 "python2" 입력 시 아무것도 실행되지 않습니다.


이 부분은 심볼릭 링크를 통해서 해결합니다.


CMD에서 다음과 같이 입력합니다.


mklink C:\Windows\python2.exe C:\python27\python.exe 


위 명령어는

mklink : 링크를 만들건데

C:\Windows\python2.exe :  여기다가 만들거야

C:\python27\python.exe : 이 파일의 링크를

라고 이해하시면 되겠습니다.


가운데 python2.exe라고 되는 부분이 CMD에서의 명령어입니다. (해당부분을 "py2.exe"라고 변경하면 CMD에서 py2라고 입력해서 실행이 되겠죠??)


여기까지 하셨다면 python을 입력해서 3버전을, python2를 입력해서 2버전을 실행 할 수 있습니다.


그리고 또 하나. pip가 있습니다.


기본 pip명령어는 python 3버전에서 사용하고 있을겁니다.


그리고 python 2에서 사용하는 pip는 C:\python27\Scripts에 위치합니다.


그럼 다음과 같은 위치로 이동해보면

C:\python27\Scripts


폴더안에 pip.exe, pip2.exe, pip2.7.exe 등이 존재합니다.

"python2"라고 입력해서 python 2가 실행되는데 pip도 pip2로 입력을 하면 실행되게 하면 좋겠네요.


이 부분은 환경변수로 직접 가서 추가시켜줍니다.


1. 윈도우키 + R을 누르면 실행창이 나옵니다.


2. "sysdm.cpl"을 입력합니다. (시스템 속성이 뜰겁니다)


3. "고급"텝으로 이동합니다.


4. 하단 "환경 변수"를 클릭합니다.

5. "Path"라는 변수를 찾고 "편집"을 누릅니다.


6. "새로 만들기"를 클릭해서 "c:\python27\Scripts"를 입력합니다.

(새로 만들기를 통해서 입력할경우 환경변수 가장 하단에 위치할것입니다. 여기서 "c:\python27\Scripts" 값을 상단에 위치시킬 경우 pip명령어가 python 2 버전의 pip로 실행될것입니다.)


7. 확인을 누르고 종료합니다.


이제 CMD에서 다음과 같은 결과를 확인 할 수 있을것입니다.


이제 pip2 명령어를 통해서 python 2버전의 패키지를 다운받을 수 있습니다.

'etc.' 카테고리의 다른 글

Python2.7에서 OpenCV 설치하기 (Windows)  (0) 2017.01.29
스피커 출력을 마이크 입력으로  (1) 2016.12.05
wireshark로 SSL or TLS 패킷 복호화  (0) 2016.09.26

이 글은 Windows 환경에서 Python 2.7.x버전의 환경에서 OpenCV를 설치하는 방법에 대해서 매우 간단히 서술합니다.


OpenCV를 사용하기 위해서는 다음과 같은 두가지 패키지가 필요합니다.


1. Numpy

2. Matplotlib (이 패키지는 옵션입니다. 하지만, OpenCV를 사용함에 있어서 필수적으로 사용될것이므로 다운받는걸 추천합니다)


위 두 패키지는 pip명령어를 통해서 쉽게 다운받을 수 있습니다.



이제 OpenCV를 다운받아야합니다.


http://opencv.org/


위 사이트로 이동해서 Windows용 OpenCV를 설치합니다.


설치하면 .exe 파일이 생기는데 해당 파일 더블 클릭해서 압축을 풀어주면 됩니다. (그냥 다음, 다음 쭉 누르시면 됩니다)


그러면 "opencv" 라는 폴더가 생깁니다.


opencv폴더에서 다음과 같은 경로로 이동합니다.


opencv\build\python\2.7\x86


(설치하는 PC가 64bit라고한다해도 32bit로 설치해야합니다.

왜냐하면, Numpy 패키지가 공식적으론 64bit는 없고 32bit만 존재하기 때문입니다.)




해당 위치까지 접근하면 다음과 같은 파일이 있습니다.

해당 파일을 복사해서 본인의 python2.7경로로 이동하고, 다음과 같은 폴더에 접근합니다.

Python27 -> Lib ->site-packages 


(글쓴이 같은 경우 python27을 디폴트값에 설치를 했기때문에 아래와 같은 경로에 존재합니다.

C:\Python27\Lib\site-packages )


복사한 파일을 이 경로에 그대로 붙여넣기하면 됩니다.


그리고 python을 열어서 


다음과 같은 코드를 실행해보면,


import cv2

print cv2.__version__


OpenCV가 잘 설치된것을 확인 할 수 있습니다.

'etc.' 카테고리의 다른 글

python 2, 3 동시에 사용하기 (Windows)  (0) 2017.01.29
스피커 출력을 마이크 입력으로  (1) 2016.12.05
wireshark로 SSL or TLS 패킷 복호화  (0) 2016.09.26

아마도 인터넷 개인방송을 보신분들은 방송 진행자가 마이크로 말하는 목소리와 방송을 진행하는 PC에서 나오는 노래? 게임소리? 같은걸 들어보신적 있을겁니다.


후자의 경우가 스피커로 출력되야할 부분을 다시 입력으로 넣는 방법입니다.


아마 가장 대중적인 방법은 "STEREO MIX"를 이용한 방법으로 윈도우 우측 하단에 스피커를 우클릭해서... 녹음장치 들어가서 블라블라...

뭐 이런방법일거에요. (이건 인터넷에 스테레오믹스 치면 나와요)


그리고 또 하나의 방법이자 이 포스팅에서 다룰건

Virtual Audio Cable.

이 방법은 STEREO MIX가 없을경우 사용하시면 됩니다.


STEREO MIX가 없는경우는 두가지로 나뉩니다. 드라이버가 구식이거나 없는경우와 현재 제가 사용하는 labtop처럼 H/W에서 지원하지 않는경우입니다..뭐 다른경우도 있을수있고요... (현재 글쓴이는 Thonkpad X1 carbon 3gen모델을 사용중입니다.)

제 labtop 모델은 사운드카드 드라이버를 다시 깔고 업그레이드하고 지지고 볶아도 STEREO MIX가 안나옵니다. H/W에서 지원하지 않거든요.


그래서 Virtual Audio Cable을 사용합니다.

http://software.muzychenko.net/eng/vac.htm

이 사이트에 접속하시면 아래로 내려가시면 Download있습니다.

다운로드 받고 안에 setup파일 본인 pc 비트수에 맞춰서 다운받으시고

우측 하단에 "스피커/헤드폰"을 우클릭하고 녹음장치 들어가보시면 아래 사진같이 나올겁니다.

저기 line1을 사용함으로 두고, 상단 탭에서 재생으로 이동해서 같은 line1을 사용함으로 하면 PC에 출력이 입력으로 들어오게됩니다.


물론 사용 안할때는 아래 사진처럼 사용안함으로 해주시고요.


이걸 이용하면 아래 링크 글에 적어놓은 Google WEB speech API를 PC 사운드 출력으로 테스트할수 있습니다.

http://http2.tistory.com/16


여기서 2번째 Web speech API사이트가서 마이크 클릭하고 YOUTUBE나 인강같은거 실행시키면 해당 동영상 사운드를 입력받아 Text로 출력해줍니다.

-끝-

STT는 Speech To Text의 약자로, ASR(Automatic Speech Recognition)라고도 부릅니다.


사람이 음성으로 말을하면 그것을 듣고 Text로 결과를 보여줍니다.


이 반대는 TTS로 Text to Speech의 약자로, Text를 컴퓨터가 읽는것이라고 생각하면됩니다.


글쓴이가 아는 STT를 서비스를 하는곳은 구글, IBM, 네이버?, 삼성의 갤럭시... MS 오피스도 지원이 됩니다.


구글, 네이버, 갤럭시는 한국어를 지원하고,,,, IBM은 아직까진 한국어를 지원하지 않습니다.

글로만 배우니 1도 모르겠다....나도 해보고싶다....지금 당장.


1. 가장 쉽게 접하는 방법은 만약 본인의 핸드폰이 갤럭시라면 "음성녹음" 앱으로 들어가서 "음성 메모"를하면 녹음하고있는걸 Text로 만들어줍니다. 


2. 구글에서 서비스하는 Web Speech API.

https://www.google.com/intl/en/chrome/demos/speech.html

위 링크는 해당 서비스 경로.(크롬에서 실행하세요) 한국어를 선택하고 블라블라 말하면 Text로 변환해준다. 이 역시도 5분이 지나면 자동으로 마이크 버튼이 비활성화 되면서 꺼집니다.



3. 역시 구글...에서 서비스하는 Cloud Speech API.

DEMO로 30초까지 간략한 내용을 변환해볼수있습니다.

https://cloud.google.com/speech/





-끝-

어제 HTTP/1.1과 HTTP/2.0을 핑덤을 이용해서 비교하는 포스팅을 했다. (어제 포스팅 : http://http2.tistory.com/14)


HTTP/2.0의 load time이 더 빠른 결과를 보여주긴 했지만, 어떠한 경우에는(사이트 규모가 작은경우) 그 차이를 체감하기 어려웠고, page size, request 숫자의 차이 등으로 100% 같은 환경에서 테스트해본것은 아니다.


HTTP/2.0이 빠르다는건 알겠는데 조금 찝찝한부분이있긴하다...


그래서 어제의 포스팅보다 조금 더 확신을 가질만한 사이트를 가져왔다.


(매달 데이터가 부족한 스마트폰 사용자는 이 포스팅만 봐도 충분하니 접속하는걸 권하진 않는다)

http://www.httpvshttps.com/ <- 이 사이트이다.


또한, 브라우저에서 HTTP/2.0을 지원하지 않을수도있다(대부분의 브라우저가 지원하긴 하지만,,)

브라우저가 HTTP/2.0의 지원하는지는 http://caniuse.com/#search=http2 여기서 확인하기 바란다.


먼저 위 사이트를 들어가면 0.62MB의 이미지 파일을 불러오면서 시간을 체크한다.

HTTP/1.1의 경우 14.7초. (여러번 시도해도 12~14초정도 나온다)


다음은 HTTP/2.0이다.

1.7초로 큰 차이를 보인다. (여러번 테스트한 결과 1~ 3초정도로 나온다,,, 이렇게 차이나도 되나 싶을정도로 빠르다;;)


HTTP와 HTTPS라고 나와서 HTTP/2.0으로 통신하는건지 확인해봤는데 HTTP/2 and SPDY indicator에 파란불이 들어오는것을 확인했다. -> HTTP/2.0으로 통신하는게 맞다.



이 사이트 말고도 HTTP/1.1과 HTTP/2.0을 비교하는 다른 사이트도 있는것 같은데...

어떠한 이유에선지 404 not found로 뜬다.

https://loadimpact.com/http2-vs-http1.1-performance

https://loadimpact.com/http2old

위 주소에서 찾았는데 현재 서비스는 하지 않는것같다.

'HTTP2.0' 카테고리의 다른 글

#1 HTTP/1.1 vs HTTP/2.0  (1) 2016.10.19
HTTP/2.0 기본, 헤더 압축  (0) 2016.10.16
#4 http2 지원여부 확인 (keycdn)  (0) 2016.10.16
#3 http2 지원여부 확인 (curl)  (0) 2016.10.15
#2 http2 지원여부 확인 (개발자 도구)  (0) 2016.10.09

지금까지 HTTP/2.0에대한 공부를하면서 이론적으로는 HTTP/1.1보다 더 빠르다는것을 배웠는데

실제 테스트에서도 같은 결과가 나오는지 궁금해서 실제로 1.1 버전과 2.0버전을 지원하는 사이트를 대상으로 테스트를 해봤다.


웹사이트의 성능을 측정을 도와주는 사이트는 대략적으로 이렇다.

1. https://tools.pingdom.com/

2. https://www.webpagetest.org/

3. https://developers.google.com/speed/pagespeed/insights/

4. https://gtmetrix.com/


그리고 HTTP/1.1과 HTTP/2.0을 지원해주는 사이트를 찾아야한다. (HTTP/2.0을 지원하는 사이트는 HTTP/1.1을 거치고 2.0으로 넘어가기 때문에 HTTP/1.1을 지원한다)


일단 잘 알고있는 nghttp2.org사이트가 두 버전 모두를 지원한다.

http://nghttp2.org로 접속하면 HTTP/1.1이고

https://nghttp2.org로 접속하면 HTTP/2.0이다. (클라이언트에서 https로 접속하고 다음에 http로 접속하면 cache때문인지 https로 접속이 된다.)


HTTP/1.1

다음은 핑덤 + http://nghttp2.org의 결과이다.



HTTP/2.0

그리고 핑덤 + https://nghttp2.org의 결과이다.



사이트 크기가 작아서 그런지 큰 차이는 없다.

(사실 이 포스팅을 하는 이유가 어제까지만해도 HTTP/2.0이 로딩속도가 2.3초정도로...1.1버전보다 느렸다. 이상하게 지금 해보니까 비슷하네;;)



조금 더 큰 규모의 사이트를 찾아보면 (보통 쇼핑몰 사이트가 사진이 많아서 규모가 크다)

다음은 알렉사 TOP500에서 찾은 사이트다.

1. http://www.aliexpress.com/

2. https://www.aliexpress.com/


그리고 다음은 핑덤 + 위 사이트이다.

HTTP/1.1



HTTP/2.0


HTTP/2.0이 속도면에서 많이 빠르다. 사이즈는 더 커졌다...? 리퀘스트도 조금 다르다...


테스트 지역을 달라스로 변경하고 다시 테스트 해보면


HTTP/1.1



HTTP/2.0




리퀘스트도 조금 다르고 사이즈는 아까와 다르게 작아졌다.


속도면에서 "HTTP/2.0이 HTTP/1.1보다 더 빠르다" 정도만 신뢰하면 될것같다.

'HTTP2.0' 카테고리의 다른 글

#2 HTTP/1.1 vs HTTP/2.0  (0) 2016.10.20
HTTP/2.0 기본, 헤더 압축  (0) 2016.10.16
#4 http2 지원여부 확인 (keycdn)  (0) 2016.10.16
#3 http2 지원여부 확인 (curl)  (0) 2016.10.15
#2 http2 지원여부 확인 (개발자 도구)  (0) 2016.10.09

HTTP/2.0의 기본 목표는 요청과 응답 멀티플렉싱을 통하여 레이턴시를 줄이고,

HTTP header필드를 압축하여 프로토콜 오버헤드를 최소화하며,

요청 우선순위서버푸시기능을 지원하는것이다.



HTTP/2.0에는 frame이라는게 존재한다.

frame이란 http/2.0 통신에서 사용되는 가장작은 단위를 말하며,

frame 2개가 합처지면 stream이다. 예를들면 header frame, data frame 이 두개를 하나의 stream으로 부를 수 있다.

( HTTP/1.1에서  head of line blocking문제를 HTTP/2.0에서는 frame, stream으로 해결했다)


사진을보면 클라이언트가 서버에게 HEADERS frame을 보낸다. (해당 요청은 GET요청이라서 HEADERS frame만 존재한다)

그리고 괄호안에 stream1이라고 나와있는데 이것은 스트림id값을 나타낸 부분이다.

클라이언트가 만든 스트림에 대한 id값은 1,3,5...로 홀수이고

서버가 만든 스트림은 2,4,6...으로 짝수가 된다.


위 경우는 클라이언트가 스트림id 1번에 대한 응답이기 때문에 서버는 스트림id 1번으로 HEADERS frame + DATA frame = 하나의 스트림으로 응답을 했다. header에는 HTTP 상태코드, 버전, 서버 등의 정보가 있고 data프레임에는 아마 우리가 ctrl+u를 누르면 보이는 소스가 있을것이다.


그리고 HEADERS frame에서 보면 'user-agent:' 으로 표시가 된 부분이 있고 ':path:'처럼 ':' 이 표시가 앞뒤로 있는게 있는데

user-agent는 HTTP/1.1, HTTP/2.0에서 쓰는 필드이고 ':'이 표시가 앞뒤로 있는것은 HTTP/2.0에서만 쓰는 필드이다.


다음은 naver로 GET 요청을 캡처한 화면이다.


HTTP/1.1에서 메타데이터는 단순한 text이고 크기는 500~800바이트정도이다. (만약 쿠키가 포함된 경우 킬로바이트까지 올라간다)

지금처럼 naver를 요청한 상태에서 또 다른 요청을 하게되면 아마 헤더는 크게 변함이 없을것이다.

중복된 필드가 존재할것이고 (대표적으로 User-agent) HTTP/1.1에서는 이런 중복된 데이터를 다시 보낸다.

하지만 HTTP/2.0에서는 중복전송하지 않는 방식으로 header를 압축한다.


다음은 HTTP/2.0에서 요청화면이다.

첫번째 요청에서는 6개의 필드를 보냈고, 두번째 요청에서는 중복되는 5개는 제외하고 1개의 필드만을 전송했다.

이렇게 HTTP/2.0은 중복헤더 데이터를 전송하지 않으므로 매 요청마다 오버헤드를 크게 줄일 수 있다.

같은 요청을 폴링하는 경우는 헤더가 변한게 없으므로 헤더 오버헤드는 0바이트이다.


이렇게 헤더 중복을 제거하고, 과거 포스팅한 Huffman coding방식으로 또 한번 압축을 진행한다.

이런 방식으로 HTTP/2.0에서는 header필드를 압축하여 프로토콜 오버헤드를 줄일 수 있다.


헤더 압축에 대해서 자세한 사항은 RFC7541 문서를 참고하기 바란다.



'HTTP2.0' 카테고리의 다른 글

#2 HTTP/1.1 vs HTTP/2.0  (0) 2016.10.20
#1 HTTP/1.1 vs HTTP/2.0  (1) 2016.10.19
#4 http2 지원여부 확인 (keycdn)  (0) 2016.10.16
#3 http2 지원여부 확인 (curl)  (0) 2016.10.15
#2 http2 지원여부 확인 (개발자 도구)  (0) 2016.10.09

HTTP/2.0을 지원하는지 확인하는 방법 4번째로 keycdn.com 사이트를 이용하는 방법이 있다.


https://tools.keycdn.com/http2-test


위 링크로 이동하면 다음과 같은 화면이 나온다.

URL에 원하는 사이트를 입력하고 test버튼을 누르면 해당 URL이 HTTP/2.0을 지원하는지 나온다.

하단 부분에는 최근에 검색한 리스트가 나온다.


HTTP/2.0을 지원하는지 확인하는 방법 3번째로 curl 명령어가 있다. (과거 포스팅자료에서 잠시 등장한적이 있다)


윈도우를 사용하는 경우에는 curl명령어를 다운받아야한다. 이 글은 윈도우 기준으로 작성한다. (다른 OS라고 크게 다르지 않다)

    리눅스, 맥OS는 기본적으로 설치되어있다

    파이썬 아나콘다를 설치한 경우 아나콘다에 curl이 포함되어있어서 별도의 다운로드가 필요 없을수도있다.


RFC7540문서에는 HTTP/2.0을 지원하기 위한 조건에 http://, https:// 두가지 모두 지원한다고 나와있다.

하지만, 우리가 사용하는 대부분의 브라우저에서 http://, HTTP/2.0 의 조합을 지원하지 않는다.

현실적으로 HTTP/2.0을 사용하기 위해선 https://로 통신해야 한다고 생각하면된다.

https://로 통신하기 위해선 인증서가 필요하다. 그러므로 curl 명령어를 위한 인증서도 준비되어 있어야한다.



curl, 인증서는 아래 링크를 통한 사이트에서 받을 수 있다.

http://winampplugins.co.uk/curl/

해당 사이트에서 32bit or 64bit 본인에게 맞는것을 다운로드 하고 압축을 풀면 인증서와 curl이 나온다.

두 파일을 C:\Windows\System32안에 넣어주면 된다.


현재 PC에 curl이 설치되어 있는지 확인하기 위해선

    1. window + r을 눌러서 실행을 킨다

    2. cmd를 입력한다

    3. curl -V 를 입력한다 (V는 대문자이다)


다음과 같이 나오면 curl이 다운로드 된 상태이다.



이 curl의 옵션을 이용해서 우리는 HTTP/2.0 지원 여부를 확인할 수 있다.

(버전이 낮은 경우에는 이 옵션이 없을수 있으니 최신 버전으로 설치할것을 권장한다.)


curl -I --http2 URL -> 이 옵션을 통해서 확인이 가능하다.

    -I (대문자 i)는 header를 보는 옵션이다.

    --http2는 http/2.0으로 통신하기위한 옵션이다. (정확히는 header의 필드값을 추가시켜준다)

    URL부분에 우리가 목표로할 사이트의 주소를 넣어주면 된다.


http://nghttp2.org 사이트를 대상으로 위 옵션을 적용해서 실행해보면


다음과 같이 노란박스 안에 HTTP/2로 나온다.

그런데 위에 HTTP/1.1 101 Switching Protocols가 먼저 응답을 했다.


이번엔 https://nghttp2.org로 테스트를 해보면 (아까와 차이점은 http , https의 차이이다)


역시 해당 사이트는 HTTP/2.0을 지원하므로 1.1이 아닌 2.0버전으로 통신하는게 보인다.


하지만 101 스위칭 프로토콜 부분은 보이지 않는다.

이 부분에 대해선 RFC7540문서에서 다음을 참조하기 바란다.

3.2.  Starting HTTP/2 for "http" URIs

3.3.  Starting HTTP/2 for "https" URIs

http2로 통신하는 여부를 확인하는 또 다른 방법은 개발자 도구를 이용하는것이다.


F12를 통해서 개발자 도구를 실행시키면 Network 탭을 누르고 새로고침을 하면 다음과같은 창이 뜨는데


여기서 주황박스 위치를 우클릭하고 빨간 박스를 클릭하면 프로토콜을 볼 수 있다



google은 SPDY를 사용하고있는걸 확인 할 수 있다.






+ Recent posts