목록AI (114)
기록하는삶
파이썬 파일(.py)을 cmd 창에서 실행 시 전달하는 인자 값을 코드 내에서 활용하거나, 그 인자가 무엇이냐에 따라 다른 실행을 하도록 해야하는 상황이 있다. 가장 간단하게는 'python --version' 이라는 입력은 --version에 대한 입력을 ''로 받아 파이썬 버전을 출력하는 코드로 연결된다. 이때 활용할 수 있는 것이 argparse다. import argparse parser = argparse.ArgumentParser(description='예시') parser.add_argument('--model_path', type=str, required=True) parser.add_argument('--audio_path', type=str, required=True) parser.ad..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tZEVx/btrnpzTBGUf/5oA8hT3SwI6XqQDL6qwArk/img.png)
아직은 파이썬을 활용해서 함수를 미분을 해야하는 일을 겪지는 못했지만,, 해당 목적을 달성할 수 있는 모듈이 sympy다. (외에도 정말 많은 기능을 제공하는 것 같다.) 예시는 아래와 같다. import sympy as sym from sympy.abc import x,y,e # sym.diff(함수, 변수(원하는 미분 횟수만큼)) sym.diff(sym.poly(x**2), x) sym.diff(sym.cos(x**2), x) sym.diff(sym.cos(e**x), x) sym.diff(sym.cos(y**2 + x**3 + x*y), x) sym.diff(sym.cos(y**2 + x**3 + x*y), y) # sym.idiff(수식, y, x) -> 수식=0의 방정식에 대한 dy/dx sym..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/AT6by/btrno3HFNbm/uWQ4U0yIOXkzae0Md6QMH0/img.png)
학습을 시키거나 반복문을 돌리는 등 오래 걸리는 작업을 하거나, 결과물을 text 형태로 저장하고 싶은 경우 메모장(.txt)을 활용해 기록하는 것이 편리할 때가 있다. 이때 중복 파일을 피한다거나 내용에 시간을 기록해야 하는 경우 활용할 수 있는 것이 datatime 모듈이다. from pytz import timezone import datetime as dt now = dt.datetime.now().astimezone(timezone('Asia/Seoul')) formattedDate = now.strftime("%m%d_%H시%M분") 위처럼 datetime 모듈의 datetime.now()는 해당 코드가 실행되는 시점의 시간을 내부적인 형식으로 가진다. 다시 now의 attribute인 str..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c8LuxG/btrmSwQoZ70/V1zk2w8HVTfyXkET7ycQxK/img.png)
특정 경로에 존재하는 모든 하위 디렉토리를 탐색하며 원하는 파일을 찾고자 하는 때가 있다. 이때 활용할 수 있는 것이 os.walk 또는 glob.glob이다. import os for (path, dir, files) in os.walk("D:/"): for filename in files: ext = os.path.splitext(filename)[-1] if ext == '.ipynb': print("%s/%s" % (path, filename)) 위의 코드는 D:/ 드라이브의 하위폴더에서 확장자가 .ipynb인 모든 파일을 탐색하고 출력한 예시이다. os.walk(시작폴더)는 시작 위치로부터 모든 하위 폴더를 차례대로 방문하게 해주는 함수라고 한다. (출처: 점프 투 파이썬) glob 모듈은 특정..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KkKUx/btrmTcc5cQr/k7WsPcklaD0JX68GXIQ35K/img.png)
코랩에서는 local에 존재하는 파일을 등록한 뒤 사용할 수 있긴하지만, 연결이 끊어질 때마다 파일을 새로 업로드 해주어야 하는 번거로움이 있다. 15GB 이상을 사용하려면 유료 결제가 필요하긴 하지만, 구글 드라이브에 파일을 올려놓으면 간단한 코드 한 줄로 코랩과 연결하여 접근할 수 있다. from google.colab import drive drive.mount('/content/drive') #mount안에 경로를 던져준다. 또한 이 방법을 이용하면, 코랩에 접속하고 있는 아이디의 구글 드라이브가 아니라 다른 아이디의 구글 드라이브에도 접근이 가능하다. 이렇게 링크가 나오면, 연결하고자 하는 구글 드라이브를 보유한 아이디로 로그인 한 뒤 아래처럼 코드를 받아 입력하면 된다. 그 후 왼쪽 files..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bFqKKH/btrmLAeqxyH/jm8XFbKNrS9e1Sl7ty9cA1/img.png)
클래스 혹은 함수 등을 다룰 때 종종 등장하는 데코레이터(@)의 활용법, 그 중에서도 함수에서의 활용법에 대해 정리해보자. 파이썬의 함수는 일급 객체로(first-class object: 일반 객체에 적용 가능한 모든 연산이 지원되는 객체) 함수 자체를 변수에 할당하거나, 또 다른 함수에 변수로 집어넣는 것 등이 모두 가능하다. 따라서 함수 안에 또 다른 함수가 존재하거나, 특정 함수를 다른 함수의 독립변수로 넣어주는 경우를 빈번하게 볼 수 있는데 이런 과정을 보다 보기 좋게 표현할 수 있는 방법 중 하나가 바로 데코레이터(@)다. 예를 들어, def star(f): def innerf(*args, **kargs): print(args[1]*30) f(*args, **kargs) print(args[1]..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/m7JKA/btrl5nn9Jda/ugQkFggpxANwjfGdkrhaHk/img.png)
STT(Speech to Text)는 음성 인식, 말 그대로 음성을 인식하여 그 내용을 텍스트로 전환하는 것을 말한다. 시리, 빅스비 등의 서비스가 가능한 것 역시 이러한 음성 인식 기술의 발전 덕분이다. 최근에는 네이버 크로버가 서비스를 개시하며, 이전에 회의록을 작성하기 위해 녹취를 멈추고 듣기를 반복했던 나의 과거를 아득하게 만들기도 했다. 영어가 아닌 한국어에 대해 STT 기능을 구현할 수 있는 오픈 소스 알고리즘은 아직까지 흔하지 않은데, 그중 kospeech에 대해 프로젝트를 진행하며 조금씩 정리해보려 한다. 1) kospeech? kospeech: https://github.com/sooftware/kospeech GitHub - sooftware/kospeech: Open-Source To..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c6eLnU/btrl4pFpMbk/nQheCYGgAOsH6Mg05zKXb0/img.png)
떄로 문자열로 적혀있는 것을 실행하고 싶은데, 데이터형(data type)이 맞지 않아 곤란한 경우가 있다. 수식이나 함수, 혹은 구문에 한해 해당 문자열이 말하는 내용을 그대로 실행시켜주는 함수가 eval과 exec이다. 1) eval(str) 예를 들어, "2+2*20-50+9999/3-2 계산해봐 메롱ㅋ" 이라는 문자열 코드의 앞 연산을 진행하고 싶은 경우, 숫자와 수식 기호까지 문자열로 표현되어 있기 때문에 해당 부분의 문자열의 형을 변환하는 과정이 필요하다. 하지만 eval을 사용한다면? eval()은 인자로 받는 표현(수식, 함수 등)에 대해 해당 문자열을 코드로 실행했을 때의 결과를 반환한다. 이런 식이다. 즉, 위 예시와 같은 상황도 쉽게 해결이 가능하다. 위처럼 문자열 형태로 받은 배열,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/czoPyO/btrlLw6N9Tk/au2OtmNRA9yA5byL2TLd2k/img.png)
파일을 열 때 encoding='UTF-8', json.dumps 로 파일을 불러올 때 ensure_ascii = False를 지정함으로써 한글 깨짐을 해결할 수 있다. import json import os for x in os.listdir("D:\sample"): with open("D:\sample" + "/" + x, 'r', encoding='UTF-8') as f: json_data = json.load(f) print(x) print(1, json.dumps(json_data["transcription"]["Reading"], ensure_ascii = False) )
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xkmGL/btrlPn8VbF8/KMfA6MkShJ7KCpyzCrTXxK/img.png)
SpeechRecognition은 한국어를 포함해 영어, 프랑스어, 중국어 등 다양한 언어의 음성 인식 관련 라이브러리로, 내부적으로 구글, 마이크로소프트, ibm등 빅테크 기업들의 우수한 알고리즘이 사용된 api를 이를 통해 쉽게 사용할 수 있다. # 필요 library 설치 !pip install SpeechRecognition !pip install librosa 위와 같이 설치하고 난 뒤, 사용 예시는 아래와 같다. import speech_recognition as sr r = sr.Recognizer() # recognize_google() : Google Web Speech API # recognize_google_cloud() : Google Cloud Speech API # recogni..