반응형

안녕하세요.

 

오늘은 필터 exe파일을 만들면서 막혔던 오류 부분을 설명하도록 하겠습니다.

 

pyinstaller는 pycharm 이나 pip를 통해 깔아줍니다.

 

pyinstaller 사용법은 아주 간단합니다.

 

pyinstaller [파일명].py

 

가장 많이 사용하는 옵션을 설명하겠습니다.

 

-w : 콘솔창을 띄우지 않습니다.

-F : 파일 하나만 생성합니다. 

 

pyinstaller -w -F [파일명].py or pyinstaller -noconsole -onefile [파일명].py

 

기본적인 사용방법입니다. (당연히 [파일명].py가 존재하는 경로에 pyinstaller를 해주어야 합니다.)

 

아마 이 글을 읽으시는 분들이 방법은 알지만 오류로 인해 검색하시다 보니 여기까지 오시게 되었겠죠?

 

대단한 것은 아니지만 제가 exe파일을 만들면서 접했던 오류들을 해결하면서 배웠던 것을 적도록 하겠습니다.

 

 

 

 

 

 

 

1. unicodeDecodeError : 'utf-8' codec can't decode byte 0xff

 

아마 utf-8 오류가 떠서 uft-8 decoding을 해주셨을겁니다.

 

#-*- coding:utf-8 -*-

 

아마 이 부분을 추가해주셨겠지요?

 

하지만 아쉽게도 uft-8 decoding을 해주어도 똑같은 오류가 발생합니다. 

 

이 오류가 뜨는 이유는 여러분들이 잘못을 한 것이 아니라 pyinstaller의 고질적인 문제라고 합니다.

 

https://github.com/pyinstaller/pyinstaller/pull/3895

 

Specify the utf-8 encoding when opening a text file by bjones1 · Pull Request #3895 · pyinstaller/pyinstaller

This is a fix for #3605, and generally for a number of places in the code where the encoding wasn't specified when opening a file. Since getting this working required more complexity than I exp...

github.com

Python\Lib\site-packages\Pyinstaller\compat.py

 

위 경로에 compat.py를 찾아 열어줍니다.

 

compat.py에 저 아래 라인을 수정해 줍니다.

 

out = out.decode(encoding)

 

a. 해결방법 -> out = out.decode(encoding, errors='ignore')

b. 해결방법 -> out = out.decode(encoding, "replace")

 

저렇게 수정해주시고 다시 돌려보시면 에러를 무시한채 해결됩니다.

 

 

 

 

 

 

2. import module error

 

library를 많이 쓰다 보면 module error가 발생하게 됩니다.

 

pyinstaller로 파일을 만들면은 

 

pycache

build

dist

[파일명].spec

 

이렇게 생성될겁니다.

 

[파일명].spec 을 열어줍니다.

 

[파일명].spec

hiddenimports = []

 

위 부분에 오류가 뜨는 함수를 적어주면 됩니다.

 

예를 들어

 

numpy, matplotlib가 오류가 발생한다면,

 

hiddenimports = ['numpy', 'matplotlib'] 이렇게 추가해주시면 됩니다.

 

pyinstaller가 완전한 실행 프로그램이 아니라서 오류가 많이 발생합니다.

 

저는 프로그램 만드는 것보다 exe파일 만드는 부분에 힘을 너무 많이 사용해서...

 

python이 코딩엔 상당히 강력하지만, exe나 속도는 상당히 취약합니다...

 

하지만 데이터처리나, 라이브러리이 너무 매력적이라서... 

 

pyinstaller 글을 마치도록 하겠습니다.

 

왠지 pyinstaller는 아마 계속해서 새로운 오류가 발생해서 글을 마칠 수 없을 것 같습니다 ㅎ

 

728x90
반응형
반응형

안녕하세요. 

 

몇 일동안 글을 못올렸습니다. 

 

그 이유가 제가 이번에 하이패스필터, 로우패스필터, 밴드패스 필터를 구현하였습니다.

 

파이썬응용에 글에 썻던 scipy는 사용하지 않았습니다.

 

공식을 보고 하나 하나 구현하였습니다. 

 

하지만 문제가 하나 발생했습니다. 어휴... 티스토리 동영상 업로드가 안되네요...

 

열심히 찍었는데... 안올라가더라구요 ㅠ. HTML을 손보면 된다는데... 힘쓰는게 너무 싫어서... 그냥 스크린샷으로 하겠습니다.

 

처음 시작 부분입니다.

 

 

메뉴바에서 파일선택부분입니다.

 

 

만약 파일을 선택하지 않으면 필터가 잠겨있습니다.
파일여는 부분입니다.

 

아래 상태창에 경로 뜨는거 보이시죵 ㅎ... 왠지 멋잇어보여서
고역패스필터가 선택되어있네용
이거는 로우패스필터네용

 

 

이번엔 차수가 2이네요

 

 

적용을 하니 save가 열리네요

 

적용된 파일이 저장되어있네요

어후... 막상 스크린샷을 찍어서 올리긴 했는데

 

너무 난잡하고 뭘 설명하는지 모르겠네요...

 

내일 다시 한번 동영상 올리도록하겠습니다. 

 

제가 먼가 pyqt5, 필터, librosa 함수 여러가지를 공부했다는것을 뿜뿜 하고싶은데 블로그에서 막혀버리네용

 

일주일동안 열심히 만들었는데... ㅠ

 

728x90
반응형
반응형

안녕하세요. 오늘은 정말 신기하고 재미있는 라이브러리를 가지고 왔습니다. 

 

제가 요즘 딥러닝을 위해 파이썬으로 여러가지를 만들어 보고 있는데, 음성쪽을 찾다보니 발견하였습니다.

 

단, 6줄로 구현하는 구글 음성 인공지능 API!

 

저도 구현은 그렇다치더라도 과연 잘될까? 라는 고민을 했지만, 

 

과연 우리의 사람 말을 인식해서 글로 표현할 수 있을까?

 

상상 이상으로 잘되어 깜짝놀랐습니다. 

 

바로 실습해보도록 하겠습니다. 

파이참을 키고 설치를 준비합니다.

speechRecognition을 검색합니다.

설치가 완료되었네요. 

 

만약 pycharm이 아니시라면, cmd에 

 

python -m pip install speechrecognition 

 

오늘자 기준으로 3.8.1 최신버젼기준입니다. 

 

코딩이 엄청 짧으니 한 번에 올리도록 하겠습니다.

 

import speech_recognition as sr

r = sr.Recognizer()
harvard = sr.AudioFile('test.wav')
with harvard as source:
audio = r.record(source)
print(r.recognize_google(audio))

test.wav
0.28MB

제가 실습한 음성입니다. 한 번 이 음성에 맞게 인식했는지 print해보겠습니다.

결과

와... 이 실험 음성이 혀를 너무 굴려서 무슨말인지 몰랐는데, 구글 api는 저보다 확실히 알아냅니다.

 

만약 한글로 인식시키고 싶으시면 저렇게 하시면 됩니다.

 

 

음성파일은 4가지가 가능합니다.

 

  • WAV: must be in PCM/LPCM format
  • AIFF
  • AIFF-C
  • FLAC: must be native FLAC format; OGG-FLAC is not supported

google API뿐만 아니라 

 

7가지나 제공합니다... 이야...

 

하지만... sphinx를 제외한 나머지 6개는 인터넷이 연결되어 있어야 합니다.

 

제가 때마침 음성을 filter프로그램을 만들고 있는데... 노이즈가 잔뜩 낀 음성을 필터링한 이 후에 인공지능을 돌려봐도 재밌을 것 같습니다. 

 

구간을 지정할 수도 있습니다.

 

 

이런 식으로 구간을 1초씩 쪼개면 어떻게 될까요?

잉??

 

초 단위로 단어를 쪼개게 되면 단어 또한 함께 쪼개지게 됩니다.

 

녹음된 파일뿐만 아니라 실시간으로 음성을 인식해 Text를 뽑아내는 방법도 있습니다.

 

https://pythonspot.com/speech-recognition-using-google-speech-api/

 

Speech Recognition using Google Speech API

Speech Recognition using Google Speech API Google has a great Speech Recognition API. This API converts spoken text (microphone) into written text (Python strings), briefly Speech to Text. You can simply speak in a microphone and Google API will translate

pythonspot.com

실시간으로 음성을 텍스트로 변환하고 싶으시다면 위 사이트로 올라가시면 됩니다. 

728x90
반응형
반응형

안녕하세요. 

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

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

 

이번에 필터링 어플리케이션을 만들 때, 가장 큰 난관이 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
반응형

+ Recent posts