반응형

안녕하세요. 

제가 먼가 파이썬을 공부할 때, 처음부터 문법을 보면서 하는게 아니라 무언가를 만들고자 할 때 

그 때마다 필요한 부분을 구글링을 해서 찾습니다. 

 

이번에 필터링 어플리케이션을 만들 때, 가장 큰 난관이 return값을 여러 개 뿌렸을 때, 

제가 여러 값을 어떻게 받을 수 있을까 였습니다. 

 

예를 들어 필터링 어플리케이션을 만들면서 

 

 

 

return wav_name, sr, time, x

 

return 된 값이 4가지를 어떻게 하면 받을 수 있을까 고민했습니다.  

 

심지어 리턴되는 타입들이 서로 다 다릅니다.

아이고 두야...

그러면 어떻게 해야할까요? 

 

time과 x는 wav파일에 따라 가변적으로 변하는 값의 배열이였습니다. 

 

여기서 파이썬의 매력에 한 번 또 빠지게 됩니다.

 

복수 개의 인자를 한 번에 처리할 수 있는 키워드가 있습니다.

 

*arg (argument 매개 변수의 줄임말)

 

저는 *이 붙어 있길래 포인터인가 지레 겁먹었는데, 포인터가 아닌 복수개의 인자를 의미합니다.

 

좀 더 쉽게 함수에 값을 받는 부분에 저 녀석만 넣어주면 return값이 몇 개든 다 받을 수 있다는겁니다.

 

예제로 보겠습니다.

 

 

 

 

LPF(audio_read(wav_file_name))

 

1. audio_read(wav_file_name)

 

=> return wav_name, sr, time, x

 

2. LPF(*arg)

 

=> *arg == wav_name, sr, time, x

 

그렇다면 arg가 LPF에 인자로 들어간다면 arg의 타입을 한 번 찍어봐야겠죠?

 

tuple!

엇 tuple은 배열과 비슷한 것이 아닌가? 그럼 index를 가지고 있겠지? 

 

그렇다면 튜플의 쪼개는 것을 알아봐야합니다. 슬라이싱, 여러가지가 있는데 저는 for문을 써서 쪼개도록 하겠습니다.

 

생각보다 간단하네요?!

 

그러면 한 번 값을 제대로 전달되었는지 찍어보겠습니다.

 

네. 타입이 제대로 들어가 있네요. 원래는 값으로 봐야하는데... 머 오류없이 값이 잘나오니 넘어가겠습니다.

 

파이썬의 매력이 느껴지시나요? 저도 아직 파이썬스러운 코딩은 잘못하지만 하나씩 잡기술을 늘려 가고 있습니다.

 

그럴 때마다 오! 내꺼가 되었구나! 유용하네? 그런 느낌이 들 때마다 블로그에 적습니다.

 

개발잘하는 사람들이 프로그래밍 공부할 때는 1강부터 보면서 하는게 아니라 무언가를 계획하고 만들면서 

코딩을 공부하라고 합니다. 

 

저는 C로 시작했고, 어려워 코딩을 별로 좋아하지 않았습니다. 

당연히 무언가를 만드는걸 꺼려했습니다. 

하지만 파이썬은 마치 소통하듯이 비전공자들도 만들어가면서 할 수 있습니다. 

여러분들도 힘내시길 바랍니다

 

728x90
반응형
반응형

filter_adapter_application_1.py
0.00MB
setup.py
0.00MB

 

안녕하세요! 오늘은 조금 무겁게 시작하겠습니다.

 

python을 공부한지 언 3주 째 되가고 있는데...

 

이번에 처음으로 exe파일을 만들어 보았습니다...

 

python이 high level언어이지만, exe이를 만들 때는 정말 무겁다는 것을 이번에 뼈저리 느끼게 됐습니다.

 

c언어를 할 때는 디버깅을 하면 자동으로 exe만들어서 몰랐는데 파이썬은 정말 어려웠습니다.

 

많은 사람들이 pyinstaller로 exe파일을 만드시길래 저 또한 pyinstaller를 사용하였는데...

 

이틀동안 자존감이 떨어졌습니다...

 

결국 pyinstaller를 포기하고 다른 라이브러리인 cx_freeze라는 구세주를 맞이했습니다.

 

이 글은 pyinstaller에 지친 사람들을 위해 쓰는 글입니다. 

 

아! 그리고 이번에 jupyter notebook에서 pycharm으로 개발환경을 바꿨습니다. 

 

나중에 pycharm 사용법에 대해 글을 쓰도록 하겠습니다.

 

시작하겠습니다!

 

우선 cx-Freeze 깔도록 합시다. 오늘 기준으로 6.1버젼을 사용합니다.

 

cx-Freeze를 깔았다면, setup.py를 만들어야 합니다. 

 

예시로 제가 만든 프로그램을 기준으로 설명하겠습니다.

 

from cx_Freeze import setup, Executable
import sys

buildOptions = dict(packages = ["matplotlib","scipy","numpy"],  # 1
excludes = ["scipy.spatial.cKDTree"])

exe = [Executable("filter_adapter_application_1.py")]  # 2

# 3
setup(
    name= 'Filter',
    version = '0.1',
    author = "YJS",
    description = "FIlter Adapter Application",
    options = dict(build_exe = buildOptions),
    executables = exe
)

 

package은 우리가 썻던 라이브러리의 함수를 적습니다. 

예를 들어 PyQt5라이브러리를 사용했다면,

 

buildOptions = dict(packages = ["PyQt5"], excludes = [])

이렇게 넣어줍니다. 

 

혹여 제외해야할 함수가 있다면 excludes를 넣어줍니다. 

제가 만들었던 프로그램은 scipy.spatial.cKDTree가 오류가 자꾸 떠서 제외시켜 주었습니다.

 

제 친구 stackoverflow에서 찾아보니,

scipy.spatial.ckdTree와 scipy.spatialcKDTree가 이름이 겹쳐서 부딪히기 때문에 

아예 제외시켜주라던구요...

 

일단 포함할 라이브러를 package 써준 후에, 만들고 있는 도중에 해당 라이브러리에 오류가 뜬다면

excludes에 오류 부분을 넣어주면 됩니다.

 

이제 거의 다 왔습니다. 

 

exe = 자신이 exe만들고자 하는 .py 

 

setup부분에서 

name = 이름

version = 버젼

author = 만든이

description = 설명

option = buildOption =>라이브러리 추가할건지, 제외할건지

exe = 실행 파일 

 

이제 끝입니다. 

 setup.py를 만들고 exe파일을 만들 .py랑 위치를 같게 해줍니다. 

 

이제 제가 한 번 만들어 보겠습니다.

일단 오류없이 잘되네요.

 

pyinstaller는 .dll 때문에 너무 마음 고생을 했는데 ex_freeze는 그 문제를 알아서 해결해줍니다.  

 

build 파일 생겼습니다.

폴더가 생겼네용

exe파일이 있네요. lib 한 번 들어가볼까요?

라이브러리에 온통 다 들어가있네요... 이러니 무겁지..

 

하지만 안심해서는 안됩니다. 이제 exe파일을 돌려봐야 합니다. 생성됐다고 끝난 것이 아닙니다.

 

위에 matplot에서 문제가 있지만 돌아가는데에는 문제가 없네요. 

 

다음 시간에는 저희들이 cmd창에서 요즘 누가 사용합니다. 

 

ui를 포함한 것도 exe파일을 만들어 보도록 하겠습니다.

728x90
반응형
반응형

안녕하세요. 글은 계속 쓰는데 적는데 마음에 안들어서 전부 비공개로 해놨는데...

 

네 그렇다구요.

 

이번 글은 파이썬에서 Scipy를 통해서 음성신호를 필터링해볼려고 합니다. 

음성신호를 필터링했으면 matplotlib 라이브러리로 파형 한 번 확인해보고,

샘플링 된 음성파일을 저장해 들어볼려고 합니다.

 

https://www.scipy.org/

위 주소는 Scipy, 사이파이라고 과학기술계산을 위한 Python 라이브러리입니다.  

 

우선 그럼 설치부터 해볼까요.

 

cmd 창에 아래처럼 적어줍시다.

pip install scipy

만약 Fatal error in launcher : 블라블라 라고 뜨면

python -m pip install scipy

이렇게 적어줍니다. 아마 아나콘다 다운로드를 하면 자동적으로 다운되는 걸로 알고 있습니다.

 

다운로드가 되었다면 import 해봅시다.

 

import가 잘되네요. 

음성 파일 경로, 이름 한 번씩 확인해볼까요?

 

scipy.io => io : input, output

경로는 data에 들어가 있고, 이름은 test네요.

 

음성 파일 불러온 후에 파형 한 번 확인해봅시다.

 

wavefile.read는 scipy.io에 들어있습니다. 

x축으로는 시간, y축으로는 진폭을 나타냅니다. 

혹시 모르니 sr, x 값 찍어볼까요?

sr = sample rate는 48000이고

x = wav의 데이터들이 list로 들어가 있습니다. 

파형을 보니 음성파일 시간은 3초짜리 영상이네요. 

 

(오늘은 scipy에 대해 알아보는 시간이니 numpy, matpltlib는 생략하도록 하겠습니다. )

 

그럼 먼저 LPF(Low Pass Filter : 저역통과필터) 한 번 돌려볼까요?

오늘의 핵심 포인트!!

signal.firwin 이 함수 하나로 hpf, lpf, bpf 다 구현할 수 있습니다. 함수 원형 한 번 확인해볼까요.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html

 

scipy.signal.firwin — SciPy v1.4.1 Reference Guide

If True, the gain at the frequency 0 (i.e. the “DC gain”) is 1. If False, the DC gain is 0. Can also be a string argument for the desired filter type (equivalent to btype in IIR design functions). New in version 1.3.0: Support for string arguments.

docs.scipy.org

signal.firwin(101, cutoff=500, fs=sr, pass_zero='lowpass')

 

함수 중요한 부분만 적어본다면,

signal.firwin(차수, 차단주파수, 필터)

차수 : 영어로 order, 필터의 길이입니다. 어느정도 값을 크게 줘야합니다. 

차단주파수 : 어디서부터 주파수를 자를 것인지 결정합니다. 

필터 : 말보단 사진으로 보여드리겠습니다.

필터

오... bandpass, lowpass, highpass 뿐만아니라 bandstop도 되는군요. 

만약 쓰고 싶은 필터가 있으면 pass_zero = 'bandstop' 이렇게 하시면 됩니다.

 

제가 적용한 함수를 보면

차수는 101, 차단주파수는 500hz, 필터는 low pass filter를 사용합니다. 

차수 : 홀수

주의사항으로 차수는 must be odd if a passband includes the Nyquist frequency라고

반드시,  나이키스트 주파수 때문에 홀수를 사용해야 한다고 합니다.

 

 

파형 보겠습니다.

아래 주파수는 잘린 것을 확인할 수 있습니다.

 

그럼 이제 low pass 필터링된 음성들어보겠습니다.

잘 들어가 있네요?

혹여나 경로가 이상하다고 생각하실 수 있는데

저 같은 경우는 주피터 노트북을 실행할 때

cd C:\Users\Mangnani\Desktop\train

변경을 해줬기 때문에 기본 주소가 train으로 잡혀있습니다. 

요렇게요. 그럼 한 번 들어보겠습니다.

 

네. 필터링이 아주 잘된 것 같습니다. 하하..잘들리시나요?

 

그럼 High Pass Filter 가보겠습니다.

이번에는 한 번에 적었습니다. 한 번 들어볼까요?

네.. 이번에도 잘된 것 같습니다.

 

만약 필터링을 해보고 싶으시다면 위와 같이 하시면 될 것 같습니다.

 

좀 더 자세하게 깊게 하고 싶으시다면 차수, 차단주파수 등등 위에 있는 레퍼런스에 따라 

 

실험해보시면 될 것 같습니다.

728x90
반응형
반응형
type(nums)

pytorch1.ipynb
0.01MB

안녕하세요. 이제 파이토치로 딥러닝할 준비가 다 되었습니다.

이제 딥러닝을 하기 전에 파이토치 문법 구조에 대해서 알아보겠습니다.

 

텐서플로우는 numpyarray를 기본으로 텐서(3차 이상)를 사용한답니다. 

우리들이 공부할 파이토치는 torch를 가지고 놉니다. 

 

그냥 numpy = torch 이렇게 보시면 될 것 같습니다. 

이번 시간에 파이토치의 기본인 torch는 데이터 전처리 과정이라고 볼 수 있습니다. 

 

수천 수만 데이터를 다루기 위해서는 전처리 과정을 거쳐야 합니다. 

모델을 구상하고, 반복, 학습만큼 데이터 전처리 과정은 상당히 중요합니다. 

 

1. 기본 구조

import torch
import numpy as np

nums = torch.arange(9)
nums

 

tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])

 

nums.shape

 

torch.Size([9])

 

type(nums)

 

torch.Tensor

 

 nums.numpy()

 

array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int64)

 

nums.reshape(3,3) # 데이터 전처리하는데 가장 많이 사용

 

tensor([[0, 1, 2],

           [3, 4, 5],

           [6, 7, 8]])

 

randoms = torch.rand((3,3))
randoms

 

tensor([[0.5127, 0.8462, 0.1646],

           [0.1679, 0.7492, 0.1046],

           [0.6169, 0.6014, 0.1144]])

 

zeros = torch.zeros((3,3))
zeros

 

tensor([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])

 

ones = torch.ones((3,3))
ones

 

tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])

 

torch.zeros_like(ones)

 

tensor([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])

 

 

2. 연산

import torch
import numpy as np

nums = torch.arange(9)
nums * 3

 

tensor([ 0, 3, 6, 9, 12, 15, 18, 21, 24])

 

nums = nums.reshape((3,3))
nums + nums

 

tensor([[ 0, 2, 4],

          [ 6, 8, 10],

          [12, 14, 16]])

 

result = torch.add(nums, 10)

 

array([[10, 11, 12],

        [13, 14, 15],

        [16, 17, 18]], dtype=int64)

 

 

그 외 사칙연산은 이 방법과 전부 일치합니다. 

 

하지만 조금 연산에 주의해야 하는 부분은 곱셈 쪽입니다.

torch는 하나의 행렬(1, 2차)이며, 텐서(3차, dim = 3, rank = 3)로 볼 수 있습니다.

 

  • * : 스칼라 곱
  • dot : 벡터 내적
  • mv : 행렬과 벡터의 곱
  • mm : 행렬과 행렬의 곱
  • matmul : 인수의 종류에 따라서 자동으로 dot, mv, mm을 선택

곱셈의 종류가 상당합니다. 

스칼라 곱, 행렬 곱은 우리들이 공부했던 고등수학에 나오는 것과 일치합니다.

 

하지만 dot은 어떻게 할까요?

dot은 2차에서는 행렬의 곱과 똑같으나 3차 이상에서는 계산이 많이 달라집니다. 

 

수학적인 부분도 중요하나, 저는 코딩 쪽에 비중을 두면서 공부하도록 하겠습니다.  

 

좀 정리하고 보니 별로네요..

코드블럭을 처음 써봤는데 이상하기도 하고,

다음 글은 좀 더 필요하고 유용한 필요한 부분만 써야할 것 같습니다.

728x90
반응형
반응형

안녕하세요. 딥러닝 2번째 시간입니다. 딥러닝 공부를 하는데 와... 상당히 어렵더라구요.

 

천천히 공부하고 있는데, 아무리 쉽다 쉽다 하지만 어렵습니다.

 

하지만 포기하지 않고, 조금씩 공부하다 보면 1년 뒤에는 어느정도 할 수 있지 않을까요?

 

오늘은 파이토치를 설치를 해보겠습니다.

 

https://pytorch.org/

 

PyTorch

An open source deep learning platform that provides a seamless path from research prototyping to production deployment.

pytorch.org

들어가줍니다.

 

요렇게 나오죠?? 이제 자신에게 맞는 것을 선택해줍니다. 저는 일단 GPU가 없기 때문에 CUDA는 NONE으로 하겠습니다.

만약 GPU로 하고 싶으시다면 

https://tutorials.pytorch.kr/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py

 

PyTorch가 무엇인가요? — PyTorch Tutorials 1.3.1 documentation

Note Click here to download the full example code PyTorch가 무엇인가요? Python 기반의 과학 연산 패키지로 다음과 같은 두 집단을 대상으로 합니다: NumPy를 대체하면서 GPU를 이용한 연산이 필요한 경우 최대한의 유연성과 속도를 제공하는 딥러닝 연구 플랫폼이 필요한 경우 시작하기 Tensors Tensor는 NumPy의 ndarray와 유사하며, 추가로 GPU를 사용한 연산 가속도 가능합니다. from

tutorials.pytorch.kr

여기에 들어가셔서 쭉 내려보시면 있습니다. 전 일단 GPU가 없으니 ㅜㅜ...

 

저에게 맞게 설정 했다면 Run this Command에 드래그해서 복사해줍니다. 

 

저건 pytorch 경로에 들어가 다운로드하겠다는 겁니다.

 

anaconda prompt에 들어가줍니다. 

 

복사한 경로를 그대로 붙여넣기 해줍니다. 

 

the following packages will be downloaded  

다운로드 될 품명들인가봐요.

conda-4.8.1

머 등등 

pytorch 1.4.0 이네요.

torchvision은 데이터셋이나 유용한 함수들이 다양하게 있는거라고 하네요. 옛날에는 없었는데 이제 파이토치를 설치하면서 자동적으로 깔리나봐요.

 

계속 진행할까요??

 

당연히 Y겟죠?

 

설치되고 있네요. 노트북에 와이파이라 그런지 조금 느리네요. 많이 느리네요? 

5분이 지났는데요. 생각보다 오래 걸리네요. 

 

어찌저찌 다운로드까지 완료가 되었네요. 그렇다면 이제 import 한번 시켜볼까요.

 

네 잘되었네요. 오늘은 우선 여기까지만 하고, 본격적으로 딥러닝에 대해 들어가도록 하겠습니다.

728x90
반응형

+ Recent posts