개발환경 갖추기 Show 참고글: http://cafe.naver.com/circuitsmanual/138901 1) 파이선 설치 www.python.org 나는 Python 2.7 버전으로 설치 (한글 사용을 편하게 하기 위해 3.4 (64bit)으로 재설치) 설치시 경로 추가 옵션을 반드시 선택하자. *참고: 파이선 공부자료 http://www.hakawati.co.kr/387 2) 경로에 파이썬 추가 (윈도우) 참고: http://www.lucypark.kr/blog/2013/02/06/python-and-ipython-on-windows/ 만약 경로를 추가해서 설치했는데도 cmd 창에서 python이 실행되지 않는다면 아래 방법을 시도해보자. 명령프롬프트에서 C:\> setx PATH "C:\Python27;C:\Python27\Scripts;C:\Python27\Lib\site-packages" 나는 이렇게 해도 추가가 안되길래 내컴퓨터-속성-고금시스템설정-환경변수-(아래쪽)시스탬변수-Path에서 직접 추가해줬다. (C:\> setx PATH "C:\Python34;C:\Python34\Scripts;C:\Python34\Lib\site-packages") *설치시에 경로 추가 옵션이 있어서 추가했지만 C:\Python34만 추가되어 결국 수작업으로 위 모든 경로를 추가했다. 3) 패키지 관리도구 설치 다운로드: https://bootstrap.pypa.io/get-pip.py c:\에 위 파일을 붙여 넣고 명령프롬프트에서 C:\> python get-pip.py 실행 우분투에서 설치 sudo apt-get install python-pip http://pip.readthedocs.org/en/stable/installing/ (sudo를 쓰는 것을 잊지 말 것) 4) 통합개발환경 IDE 설치 Wing IDE 101 버전은 아무런 라이센스 없이 사용 가능 다운로드: http://wingware.com/downloads/wingide-101 5) 다음은 speech recognition 툴 설치 What are the top ten speech recognition APIs? https://www.quora.com/What-are-the-top-ten-speech-recognition-APIs 여러 api들을 접근하는 파이선 interface: https://github.com/Uberi/speech_recognition 본인은 파이선을 이용해 구글 음성인식 api를 사용하는 내용을 씀 (여러 언어 가능, 온라인이어야 함) Sphinx도 사용해봤지만 내 영어 발음이 안좋은지 인식률이 별로임 ㅠㅠ (다른 언어 쓰려면 좀 복잡한듯.. 오프라인도 가능) -PyAudio 설치 (sudo) pip install pyaudio pyaudio0.2.9 Be sure to install the portaudio library development package ( sudo apt-get install portaudio19-dev sudo apt-get install python-all-dev
다운로드: http://people.csail.mit.edu/hubert/pyaudio/#downloads (python 3.3 64bit 버젼에서는 non official 버젼으로 설치해야 한다. 링크: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio 여기서 PyAudio‑0.2.8‑cp33‑none‑win_amd64.whl 버젼으로) .whl 파일을 설치하는 방법은 명령프롬프트에서 pip install PyAudio‑0.2.8‑cp33‑none‑win_amd64.whl 입력 pip이 실행되지 않는다면 C:\Python33\Scripts\ 여기로 이동 후 실행 우분투는 위 다운로드 링크에서 파일을 받은 후 아래 명령 입력 sudo dpkg -i python{,3}-pyaudio_0.2.8-1_{i386,amd64}.deb sudo dpkg -i (다운로드된 파일명.확장자) -Speech Recognition 설치 명령프롬프트에서 sudo pip install SpeechRecognition 설치법은 여기 참고: https://github.com/Uberi/speech_recognition 테스트: python -m speech_recognition 덧) 윈도우 마이크 입력 옵션에서 성능향상시키기 기능을 끄는 것이 좋다. (안그러면 말을 하고 있지 않은 상황임에도 불구하고 노이즈가 증폭되어 소리가 계속 들어오고 있다고 입력되기 때문) 심심이 api 접근 참고링크: http://developer.simsimi.com/api 1) 무료 테스트 버젼, 유료 버젼 있음 2) 예제 코드는 python 2.x 버젼용인듯 3) python 3.x 버젼으로 재구성 필요 -requests 설치 (python 3.x 버전에서는 urllib 보다 사용하기 쉬움) pip install requests -참고코드: https://github.com/mapix/SimSimiChat/blob/master/simsimi.py TTS (구글 TTS) https://pypi.python.org/pypi/gTTS/1.0.2 pip install gTTS (이미 깔려 있었음) 구글 TTS는 여러번 시도하면 IP 차단당하는듯 -_- 기타링크 리눅스에 파이선 설치 http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_python_%EC%84%A4%EC%B9%98 리눅스에서 파이선 공부 http://blog.naver.com/hgh73/220483134024 python numpy tutorial http://cs231n.github.io/python-numpy-tutorial/ 오디오 → 텍스트감성분석, 문서 분류, 개체명 인식 등 자연어 처리를 위한 전제조건은 텍스트 데이터로 기계판독이 가능한 형태여야만 한다. 이를 위해서
파이썬 라이브러리¶오디오 데이터를 다루는데 자주 사용되는 파이썬 라이브러리는 다음과 같다.
SpeechRecognition 설치¶
오디오 파일을 다루는데 기본지식¶오디오 파일 포맷¶오디오 파일을 다루기 위해서 기본적인 오디오 지식이 필요로 한다.
오디오 주파수¶아나로그 오디오 신호는 디지털 음원으로 주파수(kHz)로 저장된다.
In [1]: from IPython.display import YouTubeVideo YouTubeVideo('WIIKXOrt3bk') Out[1]:
In [2]: # ! pip install SpeechRecognition ## 환경설정 import speech_recognition as sr recognizer = sr.Recognizer() recognizer.energy_threshold = 300 ## wav 파일 읽어오기 harvard_audio = sr.AudioFile("data/audio/OSR_us_000_0010_8k.wav") with harvard_audio as source: audio = recognizer.record(source) recognizer.recognize_google(audio_data=audio, language="en-US") Out[2]: 'the Birch canoe slid on the smooth planks glue the seat to the dark blue background it is easy to tell the depth of a well these days a chicken leg is a verb dish rice is often served in roundels the juice of lemons makes fine punch the box was the one beside the pump truck the Hogs are such hot corn and garbage 4 hours of study works' 한국어¶CJK - 중국어¶다음으로 중국어를 대상으로 동일한 작업을 통해 중국어 텍스트를 추출해보자.
In [3]: # 중국어 wav 파일 읽어오기 chinese_audio = sr.AudioFile("data/audio/OSR_cn_000_0072_8k.wav") with chinese_audio as source: mandarin = recognizer.record(source) recognizer.recognize_google(audio_data=mandarin, language="zh-CN") Out[3]: '院子门口不远处就是一个地铁站这是一个美丽而神奇的景象树上长满了又大又甜的桃子海豚和鲸鱼的表演是很好看的节目邮局门前的人行道上有一个蓝色的邮箱' In [4]: from IPython.display import YouTubeVideo YouTubeVideo('ZjUlP4bRjUo') Out[4]:
In [5]: import IPython IPython.display.Audio("data/audio/choi.mp3") Out[5]:
오디오 dplyr - PyDub¶직사각형 데이터를 다루는데
In [6]: from pydub import AudioSegment choi_file = AudioSegment.from_mp3("data/audio/choi.mp3") type(choi_file) Out[6]: pydub.audio_segment.AudioSegment 오디오 파일 듣기¶오디오 파일을 파이썬 응용프로그램 개발 중 듣고자 하는 경우
In [7]: # from pydub.playback import play # audio_file = AudioSegment.from_file(file="data/audio/OSR_cn_000_0072_8k.wav") # play(audio_file) .mp3 → .wav앞서 In [8]: choi_file.export(out_f="data/audio/choi.wav", format="wav") Out[8]: <_io.BufferedRandom name='data/audio/choi.wav'> data/audio/choi.mp3 data/audio/choi.wav .wav 파일에서 텍스트 추출¶영어, 중국어 오디오 파일에서 텍스트를 추출한 것처럼 한국 오디오 파일에서 텍스트를 추출한다. In [10]: # 중국어 wav 파일 읽어오기 choi_audio = sr.AudioFile("data/audio/choi.wav") with choi_audio as source: choi_jtbc = recognizer.record(source) recognizer.recognize_google(audio_data=choi_jtbc, language="ko-KR") Out[10]: '없어 차에 드린 것처럼 지금부터는 이른바 청와대 비서실 새로 지목된 최순실씨 관련 소식을 집중보도 하겠습니다 지난주 JTBC는 최순실 씨의 최측근이라고 하는 고영태 씨를 취재한 내용을 단독으로 보내 드렸습니다 최순실 씨가 유일하게 잘하는 것이 대통령 연설문을 수정하는 것이다라는 내용이었는데요이 내용을 보도하자 청와대 비서실장은 정상적인 사람이면 믿을 수 있겠느냐 봉건시대도 있을 수 없는 얘기 다 이렇게 얘기 한 바 있습니다 JTBC가 보도한 배경에는 사실 또 다른 믿기 어려운 정황이 있기 때문이었습니다 JTBC 취재팀은 최순실 씨의 컴퓨터 입수해서 분석을 했습니다 3시간 대통령 연설문을 바닥 왔다는 사실을 확인할 수 있었습니다 그런데 최씨가 연설문 44개를 파일 형태로 받은 시점은 모두 대통령의 연설을 하기 의견이었습니다 먼저 김길중 기자의 단독 보도입니다 계속해서 이어가겠습니다 최순실씨 사무실에 있던 pc에 저장된 파일들입니다 각종 문서도 가득합니다 파일은 모두 200여개의 일입니다 그런데 최씨가 보관 중인 파일에 대부분이 청와대 와 관련된 내용이었습니다 히트맨 특히 제시가 대통령 연설문을 수정했다는 최측근 고영태 시에 준수 관련해 연설문에 주목했습니다 첼시가 갖고 있던 연설문 또는 공식 빠른한테 파일은 모드 44개 왔습니다 대선 후보 시절 박 대통령의 연설문에 비롯해 대통령 취임 연설문 드리기로 했습니다 그런데 첼시가이 물건을 받아 여러분 시점은 대통령이 실제 발언했던 것보다 길게는 4월이나 없었습니다 상당수 대통령 연설문 이사 전에 청와대 내부에서도 공유 되지 않는다는 점을 감안하면 연설문이 사전에 청와대 아무거나 제시에게 전달된 사실 이른바 비선실세 놀란 거 관련해서 큰 날 것으로 보입니다 JTBC 김필준이다' 음성 쪼개기¶최순실 특종을 JTBC 뉴스를 통해서 내보내면, 2명의 화자가 나온다. 한명은 손석희 앵커와 김필준 기자다. 이 두명을 따로 떼어내서 쪼개는 것이 데이터 분석을 위해서도 필요하다. In [11]: from pydub import AudioSegment choi_wav = AudioSegment.from_file("data/audio/choi.wav") print(f"원채널수: {choi_wav.channels}") jtbc_channels = choi_wav.split_to_mono() print(f"분리한 채널: \n 손석희: {jtbc_channels[0].channels}, \n 김필준: {jtbc_channels[1].channels}") # Save new channels separately jtbc_channel_sohn = jtbc_channels[0] jtbc_channel_kim = jtbc_channels[1] 원채널수: 2 분리한 채널: 손석희: 1, 김필준: 1 오디오 파일 통계¶채널, 주파수 등 다양한 오디오 파일 통계를 가지고 있는 것이 대량의 오디오 파일을 다룰 경우 도움이 된다. In [12]: def descriptive_stats(file_name): audio_segment = AudioSegment.from_file(file_name) print(f"- 채널수: {audio_segment.channels}") print(f"- 샘플 길이: {audio_segment.sample_width}") print(f"- 프레임율(frame rate): {audio_segment.frame_rate}") print(f"- 프레임폭(frame width): {audio_segment.frame_width}") print(f"- 길이 (ms): {len(audio_segment)}") return audio_segment # Try the function descriptive_stats('data/audio/choi.wav') - 채널수: 2 - 샘플 길이: 2 - 프레임율(frame rate): 44100 - 프레임폭(frame width): 4 - 길이 (ms): 125318 Out[12]: |