본문 바로가기

Development113

Raspberry Pi Realtime Audio Processing RtAudio완전히 C++기반으로 구현된 오디오 라이브러리. 설치방법 on Raspberry Pisudo apt-get install autoconf libtool automakesudo apt install libasound2 libasound2-devgit clone https://github.com/thestk/rtaudio.git./autogen.shmake 설치확인(* 라즈베리파이의 jack에 스피커를 연결하고, USB mic를 연결한다.)cd rtaudio/tests./audioprobe --> input device id와 output device id확인./testall./duplex 1 44100 [input device id] [output device id] Extreme Latenc.. 2020. 6. 14.
Synergy로 윈도우와 Linux를 하나의 키보드, 마우스로 다루기 Synergy 하나의 키보드와 마우스를 이용해 동일한 네트워크에 연결한 여러가지 device를 컨트롤 할 수 있게 해주는 프로그램이다. 현재 유료로 전환되었지만, 구버전을 설치할 경우 아직도 무료로 사용할 수 있다고 한다. 유료인 경우 현재 29달러를 내면 basic을 구매할 수 있고, 개인은 한 번 구매시 평생 이용가능하다. Windows(Server) Download 페이지에서 Windows 64-bit 설치 후 synergy프로그램을 실행한다. Mouse Without Borders (* 만약 오직 window OS간의 마우스/키보드를 공유하고 싶다면, 무료 프로그램인 Microsoft Garage Mouse without Borders를 사용해도 좋다.) 그리고 이때 Mouse Without Bo.. 2020. 6. 14.
Windows 10에서 PDF에 펜으로 필기하기 PDF에 디지타이저를 이용해서 필기하기 Inkodo무료이다. 펜압을 인지하는 펜을 사용하려거든, marker로 변경해주어야한다.사용해보니 매우 불편하다.... Drawboard PDF무료버전으로도 충분히 기본적인 필기는 가능프로버젼은 한달에 7 달러로 유료인 대신 가장 기능이 우수함 드로우보드 상세팁: https://www.clien.net/service/board/lecture/13297353 참고자료https://gigglehd.com/gg/soft/4403534 2020. 6. 8.
Windows 10 절전모드 문제 해결 자동 절전 모드가 제대로 동작하지 않을 때 관리자모드로 명령프롬프트를 실행하고, powercfg -requests 을 입력해보면 어떤 device의 요청으로 인해 절전모드가 막혀 있는지 알아낼 수 있다. 그러나 이것으로 모든 문제의 원인을 다 확인할 수는 없다. powercfg 관리자권한으로 cmd를 실행한다음, powercfg /energy 위 명령어를 입력하면 컴퓨터에서 cpu를 많이 사용하는 process와 절전모드 관련 문제를 보고해준다. 해결 방법 * 기본 절전모드 세팅 https://www.technipages.com/windows-10-wont-sleep#:~:text=Select%20%E2%80%9CChange%20advanced%20power%20settings,%E2%80%9CPreve.. 2020. 6. 8.
Windows10 심볼릭 링크 생성 심볼릭 링크가 필요한 상황Dropbox 등의 동기화 폴더 위치가 컴퓨터마다 경로가 똑같지 않은 경우, 여러가지 환경설정 등이 깨질 수 있다. 이럴 때 각 컴퓨터에 동일한 위치로 심볼릭 링크를 만들어두면 드랍박스 폴더를 옮기지 않고도 쉽게 문제를 해결할 수 있다. 방법1. 명령프롬프트 실행2. mklink /d "심볼릭링크의 경로" "원본의 경로"ex) mklink /d "D:\Dropbox" "C:\Users\User\Dropbox" https://zetawiki.com/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%EC%8B%AC%EB%B3%BC%EB%A6%AD_%EB%A7%81%ED%81%AC_%EC%83%9D%EC%84%B1 2020. 5. 28.
Python Audio Processing Realtime Fast Audio Library: sounddevice소리를 녹음하거나 재생하려면 sounddevice라는 라이브러리를 사용하는 것이 가장 빠르다. Sounddevice는 PortAudio라는 library의 python wrapper에 해당하며 Audio stream을 numpy로도 다룰 수 있게 해준다.단, Windows 10의 WSL 1을 사용하는 경우 사운드에 대한 device접근이 불가능해서 동작이 안된다. 이러한 경우 WSL 2(?)가 해당 기능을 제공하거나, 혹은 anaconda를 사용해야한다. https://www.reddit.com/r/learnpython/comments/9cpkql/fastest_possible_implementation_for_recording/ht.. 2020. 5. 2.
Deep Learning Model Fast Serving Fast Model Inference TensorFlow Lite빠른 inference를 위한 tensorflow버전. 학습에 필요한 operation이 전부 삭제되어 있다.- TFLite is for mobile devices, works on CPU and a few mobile GPUs, Plus TPUs. Including the Edge TPUs. Pytorch MobilePytorch에서도 TF Lite와 동일한 목적의 프로젝트로 Pytorch Mobile을 만들고 있다.https://pytorch.org/mobile/home/ TensorRTTensorRT는 cuda의 wrapper로써 Nvidia GPU에서만 동작하는 방식이다. TensorFlow에서도 TensorRT를 backend로 지.. 2020. 4. 28.
한글을 Sub-character level로 파싱하기(python으로 유니코드 파싱) # -*- coding: utf-8 -*- cho = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ" # len = 19 jung = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ" # len = 21 jong = "ㄱ/ㄲ/ㄱㅅ/ㄴ/ㄴㅈ/ㄴㅎ/ㄷ/ㄹ/ㄹㄱ/ㄹㅁ/ㄹㅂ/ㄹㅅ/ㄹㅌ/ㄹㅍ/ㄹㅎ/ㅁ/ㅂ/ㅂㅅ/ㅅ/ㅆ/ㅇ/ㅈ/ㅊ/ㅋ/ㅌ/ㅍ/ㅎ".split('/') # len = 27 test = cho + jung + ''.join(jong) hangul_length = len(cho) + len(jung) + len(jong) # 67 def is_valid_decomposition_atom(x): return x in test def decompose(x): in_char = x if x ord.. 2020. 4. 16.
MongoDB에서 특정 오브젝트 삭제하기 주피터나 python 스크립트를 이용해서 삭제할 수도 있지만, 가능하면 GUI툴을 이용해 보다 안전하게 처리해보자. 먼저 Robomongo 3T라는 gui기반 몽고DB tool을 portable로 설치한다.https://robomongo.org/download 그 다음 query에 아래를 입력하여 원하는 조건의 항목을 나열한다. db.getCollection('ccai_cdr').find({"record_date":"200406"}) 그다음 나열된 항목들을 전체 선택한 뒤 우클릭해서 delete document를 클릭하면 안전하게 데이터를 삭제할 수 있다. 물론 db.getCollection('ccai_cdr').remove({"record_date":"200406"}) 로 한방에 삭제할 수도 있지만, .. 2020. 4. 9.
Linux 운영체제별 사용 팁 리눅스 버전 확인uname -o cat /proc/version CentOSapt-get 대신 yum을 사용한다. Ubuntuyum대신 apt-get을 사용한다. 기본 패키지 설치 방법 - apt-get 설치wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_2.0.1_amd64.deb - dpkg 설치yum install dpkg 2020. 4. 6.
CSV파일 인코딩(Encoding) CSV파일 인코딩(Encoding) 문제 해결하기 1. 현재 가지고 있는 csv파일에서 encoding이 무엇인지 알아내기 import chardet import pandas as pd filename = "Data_kr_v2.0.0_no_label_all_train3.csv" with open(filename, 'rb') as f: result = chardet.detect(f.readline()) # or read() if the file is small. print(result['encoding']) 이와 같은 방식으로 해당 라인의 encoding이 무엇인지 알아낼 수 있다. 2. Excel에서 csv 저장할 때 encoding변경하기 그런데 실제로 이렇게 옵션을 주고 해봐도, 제대로 encodin.. 2020. 3. 23.
On demand와 On the fly On demand: As soon as possible유저의 요청을 하면, 그 즉시 시작해서 최대한 빨리 return 해주는 시스템 On the fly: While in progress유저가 요청을 하면, 그 과정에서 멈추지 않고 무언가를 처리해서 return 해주는 시스템 https://ell.stackexchange.com/questions/140402/how-to-describe-the-difference-between-on-demand-and-on-the-fly ML에서의 예시On demand 전처리 : 유저가 학습 버튼을 클릭하면, 그 즉시 전체 데이터에 대한 전처리가 이뤄짐On the fly 전처리 : 유저가 학습 버튼을 클릭하면, 전체 데이터에 대한 전처리가 끝날 때까지 기다리지 않고 즉시(.. 2020. 3. 19.
ML Python 프로젝트의 test code만들기(feat. Pytest) Test Code의 필요성ML뿐만 아니라, 거대한 규모의 프로그램을 개발할 때에는 반드시 테스트 코드가 필요하다. 물론 협업을 하고, 대규모 프로젝트를 오랜 기간 서비스하기 위해서도 테스트 코드는 반드시 필요하다. 머신러닝 코드는 특히나 numerical한 연산을 다루기 때문에 버그를 잡기가 쉽지 않고, 엄청나게 많은 configuration이 존재하고, 학습의 재현성이 필요하기 때문에 코드의 검증이 오래 걸린다. 또한 협업을 하다보면 누군가가 추가하면서 바꾼 기능 때문에 내가 예전에 쓰던 코드가 동작하지 않는 일이 너무나 빈번하다. 이러한 일을 막고 버그를 줄이는 방법은 테스트 코드를 작성하는 것이다. Test for ML project머신러닝 프로젝트에 대해서도 공동 개발을 할 경우에는 pytest를.. 2020. 3. 16.
Conda로 Python 버전 별 설치, 관리, 삭제하기 Ubuntu에 다른버전의 Python 설치하기 필자처럼 다른 버전의 python을 설치하려고 src부터 빌드하는 것은 절대로 해서는 안될 짓이다. 컴파일 과정이 굉장히 복잡하고 또 엄청나게 오래걸리며, 버전 변경 또한 어렵기 때문이다. 그런데 pyenv를 쓰거나, apt-get도 버전 관리가 안되기 때문에 별로 좋지 않은 방법이다. 결국 가장 좋은 방법은 python을 conda로 설치해서 관리하는 것이다. 왜냐하면 conda는 완전한 동작을 보장하는 dependency들을 한방에 설치해주고, 자유로운 버전 변경도 가능하기 때문이다. 게다가 여러 버전을 동시에 사용할 수 있는 가상환경도 쉽게 만들 수도 있다. Conda 설치하기 최신(2023.02.26) conda는 linux에서 배포되는 매우 다양한 .. 2020. 2. 27.
Python Multiprocessing 가이드 Multiprocessing 가이드공식 레퍼런스 문서를 참고하여 작성하였다. 다음이 요소들이 multiprocessing의 가장 기본이고, 우선 이 네가지만 잘 알면된다. ProcessPoolQueuePipe Process단일 프로세스를 생성하는 경우, Process()를 사용한다. from multiprocessing import Process, Queuequeue = Queue()p = Process(target = my_function) #, args=(queue, 1))p.start()# p.join() # this blocks until the process terminates# result = queue.get()https://stackoverflow.com/questions/2046603/i.. 2020. 2. 20.
Python에서 directory 관련 명령어 가장 간단한 형태의 glob을 이용 wild_card copy(recursive 보장 안됨) import os import glob import shutil def glob_copy(src, dst, name_pattern="*"): if not os.path.exists(dst): os.mkdir(dst) shutil.copystat(src, dst) including = glob.glob(os.path.join(src, name_pattern)) print("including:", including) for file in os.listdir(src): print("file:", file) file = os.path.join(src, file) if file in including and os.path.. 2020. 2. 19.
Python 코드 안에서 git과 pip 사용하기 Python 코드 안에서 pip install하기import sys import subprocess def pip_install(package): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", package]) def pip_install_requirements(requirements_dir): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", "-r", requirements_dir.rstrip(".txt")+".txt"]) https://stackoverflow.com/questions/12332975/installing-python-module.. 2020. 2. 19.
Advanced Python Scheduler Advanced Python Scheduler (APScheduler) Python으로 이뤄진 전처리나 ETL 을 주기적으로 실행해야하는 경우, dynamic task scheduler가 팔요하다. 이에 대한 선택지로는 Airflow나 dask, zenkins 등이 있으나, 매우 간단하게 single machine에서의 job scheduling으로는 좀 오버스팩이 아닐 수 없다. 이러한 경우에 APS를 사용하면 편리하다. 설치방법pip install apscheduler API문서https://apscheduler.readthedocs.io/en/stable/modules/schedulers/base.html#module-apscheduler.schedulers.base 간단한 예제from dateti.. 2020. 2. 18.
Airflow Airflow튜토리얼 에어플로우는 dask와 유사한 프로젝트로, 분산 환경에서의 python 자동 실행 스케줄러이다. 그런데 dask에서 더 나아가서 자동으로 지정된 시간과 조건에 따라 스크립트를 순차적으로 실행시켜주는 젠킨스(?) 와 같은기능도 한다. Airflow에 새로운 패키지 설치하기worker, scheduler, webserver 세군데에 모두 동일한 python 패키지를 설치해주어야만 에러가 나지 않는다. 실제 실행되는 환경은 worker이지만, scheduler와 webserver도 실행할 수 있어야 에러가 나지 않는다.(이는 dask와 동일한 부분) 그래서 requirements.txt를 생성해서 각각의 컨테이너에 전달하여 간단한 패키지는 쉽게 설치할 수 있다. 그러나 복잡한 설치를 요하.. 2020. 2. 11.
Black: Uncompromising Python Coding Convetion Black: Uncompromising Python Coding ConvetionPython의 coding convention에 따라서 강제로 현재의 소스코드를 reformatting 시켜주는 오픈소스프로젝트이다.Window에서 Pycharm anaconda 환경에서 setup하기pipi install blackC:\ProgramData\Anaconda3\Scripts\black.exe 경로 복사Pycharm에서 File-Setting-Tools-External Tools에서 추가버튼 누르고, 다음을 입력 Name: BlackDescription: Black is the uncompromising Python code formatter.Program: Arguments: "$FilePath$" 사용법: .. 2020. 2. 4.