레이블이 Python3인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Python3인 게시물을 표시합니다. 모든 게시물 표시

2022년 1월 24일 월요일

Python 으로 텍스트 인코딩 정보 확인하기 (Python3, 파이썬3)

윈도우에서 파이썬을 사용하다보면 텍스트 파일 (csv) 등을 읽을 때 인코딩 이슈가 자주 있다. 판다스로 csv 파일을 읽어올 때 인코딩 타입을 지정해줘야 하는데, 가끔 쓰는 툴 마다 인코딩이 달라서 에러가 발생한다. 예를 들어 MS Office Excel 은 euc-kr (cp949 로 읽을 수 있다.) 인데, 파이썬은 UTF-8 이고, 언리얼은 한글 포함된 문서 한정으로 UTF-16 이고 아닐 때는 UTF-8 이다. 판다스로 읽을 때 아래와 같이 인코딩 타입을 꼭 지정해줘야 하는데, 입력되는 소스의 인코딩이 제각각일 때는 약간 피곤하다. Notepad++ 로 읽어서 인코딩 바꿔주는것은 어렵진 않지만 많은 양을 매번 바꿀 때는 번거롭다.

data = pd.read_csv('targetFileName', delimiter=',', encoding='cp949', engine='python') #인코딩타입은 꼭 바꿔주야 한다.
그래서 귀찮을 때 나를 도와주는 파이썬에게 부탁하여 해결해보았다. 아래 코드를 사용한다.

import chardet
#import sys

# 윈도우 환경에서 cp949 텍스트 인코딩 때문에 발생하는 문제를 우회하기 위한 코드이다.

# 아래는 만일을 위해 출력하는 것 
#print(sys.stdin.encoding) #인풋 인코딩 타입
#print(sys.stdout.encoding) #아웃풋 인코딩 타입

file = ".\\확인할대상.csv" #csv 나 txt 등 텍스트 파일의 인코딩 타입을 확인하고 싶은 것의 경로를 입력한다.

def getDetectEncoding(file) :

    try:
        print("Fast Detect!!!")
        with open(file, 'r') as f:
            file_data = f.readlines() #텍스트로 읽어본다. 잘 읽히면 문제 없다. 보통 cp949 에러가 발생한다.
            f.close()
            #print(chardet.detect(file_data))
        return chardet.detect(file_data[1])['encoding'] #0번째 줄은 보통 컬럼 헤더로 정보고 1번째 줄이 실제 내용이다. 빠른 처리를 위해 1줄만 읽어본다.
    
    except:
        print ("Except!!! not UTF-8 or 16. Retry Now... ")
        with open(file, 'rb') as f:
            file_data = f.read() #cp949 에러가 발생했을 때는 그냥 파일을 바이너리로 통채로 읽는다. 용량이 클 수록 느려진다. 하지만 쉽게 해결하는 방법
            f.close()
    
    #print(chardet.detect(file_data))
    return chardet.detect(file_data)['encoding']

print(getDetectEncoding(file))
여기까지이고, 만일 판다스에서 인코딩을 자동으로 하게하려면 리턴되는 스트링을 encoiding에 바인딩 시키면 된다. 끝!! 파이썬 3.9 기준이다.

2020년 2월 6일 목요일

Python 폴더 내 모든 wav 파일의 length를 가져와 모두 합치기 (duration 초 누산)

python 3.6.6 에서 확인했습니다.
wave 파일을 읽어서 frame수 / rate를 하면 길이가 sec으로 나옵니다.



#path_dir에 wav파일만 있다고 가정합니다.
#path_dir 에 있는 모든 파일을 읽어서 list에 넣고 length(duration)을 모두 더합니다.

import wave
import contextlib
import os
#import sys

path_dir = '드라이브:/경로/경로/' #경로 끝에 / 꼭 붙이기
file_list =os.listdir(path_dir) #경로 읽어 파일명 리스트 만들기
file_list.sort() #정렬

# 누적값 초기화
acc = 0

for i in file_list:

 with contextlib.closing(wave.open(path_dir + i,'r')) as f:
  frames = f.getnframes()
  rate = f.getframerate()
  duration = frames / float(rate)
  #print(duration)
  acc += duration #누적값

#결과 출력
print (acc)

2017년 2월 1일 수요일

BossSensor - 얼굴 화상 인식을 이용한 월급 루팡 프로그램을 직접 실행해보았다. (수정내용 첨부)


점심시간이 끝나고 지루한 오후...

우리 팀에서 제일 재밌는 분이 팀 단체 쪽지를 보냈다.

쪽지 : 케이! 케이!! 이것 좀 만들어줘!!!"

나 : ㅋㅋㅋㅋ

----------------------------

오늘의 유머 사이트
제목 : 월급 루팡을 하려는 프로그래머

내용을 보았다.






최근에 업무차 OpenCV와 딥러닝을 공부하고 있던 입장에서 흥미로운 내용이었다.

내용은 단순하게 보면 Face Recognize 샘플인데 가까운데,
저런 재밌는 아이디어를 생각만으로 끝내지 않고, 실제로 만들어서 실행했다는게 큰 차이.

잉여력 방출은 언제나 재밌고 즐겁다.

원문 블로그는 여기
http://ahogrammer.com/2016/11/15/deep-learning-enables-you-to-hide-screen-when-your-boss-is-approaching/

(블로그 주소 이름이 무려 아호그래머다;;; あほ=멍청이,
똑똑하게 삽질하는 멋진 블로그인듯... >_<! 이런 것 너무 좋다.)

--------------------------

처음부터 만들까 하다가 원작자가 소스를 오픈해 둔 터라
시간 절약 + 재미로 바로 실행해볼 요량으로 달려들었다.

원문 블로그에 공개한 보스 센서 오픈소스 GitHub


최근까지도 수정되고 있는 소스지만..
당연히 그대로 실행될리가 없지.

에러 메시지를 하나씩 확인하며 해결해 나가기 시작했다.

필요한 라이브러리나 그 외 환경 세팅하는 시간이 오히려 꽤 걸리기 시작하면서

그렇게 야근이 시작되었다. ㅋㅋㅋㅋ

누군가 해보고 싶은 사람에게 도움이 되도록 결과 자료를 남긴다.



--------------------------

# 실행한 환경

- 맥북프로 2016 15 Late
- iSight MacBook 내장 웹캠
- macOS Sierra 10.12
- Anaconda (Miniconda3)
- OpenCV3

IDE 는 Pycharm

※ 검증해보지는 않았지만, Windows 에서도 동작하지 않을까?

# 설치된 Python Library Version
직접 검증한 최신 버전의 라이브러리들

h5py (2.6.0)
Keras (1.2.1)
mock (2.0.0)
numpy (1.12.0)
pbr (1.10.0)
pip (9.0.1)
protobuf (3.2.0)
PyYAML (3.12)
scikit-learn (0.18.1)
scipy (0.18.1)
six (1.10.0)
sklearn (0.0)
tensorflow (0.12.1)
Theano (0.8.2)

------------------

# 문제 해결 1-2-3

1. PyQt4 설치가 안된다. (macOS Sierra)
brew install pyqt4 가 안된다!!!
구글링 해도 답이 없어 찾아보니 os 버전이 최신이라서 그런듯...

어디서 사용하나 코드를 보니 굳이 PyQt4일 필요는 없더라.
 PyQt5를 설치하고, 스크린 관련 코드를 4에서 5로 새로 옮겨준다.
이 작업은 조금 귀찮은 정도. 다른 이를 위하여 내 GitHub 포크에 업로드 해두었다.

덤. PyQt5 를 아나콘다로 설치하기
사용할 환경으로 소스를 바꾼 뒤
> conda install pyqt

2. requirements.txt 에 필요한 라이브러리가 설치가 안된다.
파이썬 라이브러리 목록과 버전이 잘 정리되어 있긴 한데,  해당 버전으로 설치할 수 없는 라이브러리 패키지가 있다.

예를 들면 tensor flow 0.10.0...
이 때문인지 keras도 조금 문제가 생기는데, 이것도 최신 버전으로 설치하자.
예전 버전 그대로 두면 사진 트레이닝 할 때 트러블이 있다.
requirements.txt 도 수정해서 내 GitHub 포크에 업로드 해두었다.

3. model 데이터를 저장할 경로를 미리 만들어줘야 한다. 
하위 경로로 미리 ./store/ 폴더를 만들어두면 오류가 없다.
내 GitHub 포크에는 미리 생성해두어 해결했다.

4. 모델데이터를 새로 생성할 때는 기존 모델 파일을 삭제할 것
boss_train.py를 이용하여 모델데이터를 학습하면 ./store/model.h5 가 생성되는데,
새로 학습시킬때 이 파일을 생성하기 전에 미리 지워줄 것 (덮어쓰기 오류 남)
덮어쓰게 수정 하려다가 이건 귀찮아서 패스...

5. 얼굴 인식률이 떨어진다.
다양한 각도로 약 500 - 1200 장 정도 학습을 시켜야 한다.

# GitHub Fork Repository

GitHub Fork 해서 수정한 내용 커밋해두었다.
혹시 오리지널 GitHub 출처에서 실행이 어려운 분이나
내가 수정한 내용이 필요하신 분은 아래의 경로에서 다운을...

https://github.com/prscu24/BossSensorPyQt5


# 실행화면 영상
내 얼굴을 학습 시킨 후, 비상 이미지는 실행되지 않게 하여 실행.
카메라 근처를 어슬렁거려보았다.




# 마무리

학습 데이터가 부족해서 인식률은 떨어지지만
원래 목적인 경고의 의미로는 나쁘지 않은 동작을 보인다.
 - 인식률이 나쁘면 보스가 출몰하지 않았는데도 나왔다고 오인식을 해버리는 문제가;;;
그리고 사장님 얼굴을 양해하지 않고 그렇게나 많이 모을 수 있을까?
이것은 고양이 목에 방울을 다는 상황이 생각난다.

거기다가 실행 비용도 커서 항상 실행해두기는 좀 부담되는 정도 ^^;; (CPU 사용률이...)

학습용으로 토이용도로 재밌게 사용해보면 될 것 같다.

<오늘의 삽질 !>

2017년 1월 31일 화요일

Anaconda 설치 하기

파이썬 환경 관리를 위해 필요해졌다.

급하게 세팅한 후 나중에 내가 다시 볼 메모로 쓰려고 글을 남긴다.



아래의 미니콘다를 퀵가이드에 따라 설치하자.

https://conda.io/miniconda.html



설치가 완료 되면 MacOS 터미널을 닫고 다시 터미널을 열자.

아래의 명령어로 환경을 만들고 없앨 수 있다.



설치 확인

conda info --envs
새 환경 만들기

conda create --name kpaper
환경 활성화

source activate kpaper
환경 비활성화

source deactivate

환경 지우기

conda remove --name kpaper --all

환경 클로닝 하기
conda create --name kpaper --clone anotherenv

설치 가능한 패키지 확인하기
conda search --full-name python
--full-name 은 완전히 패키지 이름이 일치할 때에만 표시한다.


파이썬2 설치하기
conda create --name kpaper python=2
아래와 같이 입력해서 파이썬 버전을 확인할 수 있다.
source activate kpaper
python --version

파이썬3 설치하기
conda create --name kpaper python=3

모든 환경 목록 보기

conda info --envs

새로운 패키지를 어떤 환경에 설치하기

conda install --name kpaper beautifulsoup4
------------------

사용 소감 :

완전 좋다! 편리하다!;;;
진작 알았으면 좋았을걸!!
아니 예전에는 알았어도 체감을 못했을 것 같긴하다 ^^;


2017년 1월 1일 일요일

Twitter API, search 시 return 데이터의 팁

일단 트위터 라이브러리는 아래의 깃헙에 잘 정리 되어 있다.

https://github.com/sixohsix/twitter

설치는 pip 로 가능
pip install twitter 

timeline 은 잘 되는데, 같은 코드를 돌려도 search 는 잘 안되서 왜이러나 하고 보니, 구조가 조금 다르다.
아래와 같이 써주면 된다.

statuses = t.search.tweets(q='#Lovelyz', lang='en', count=10)['statuses'] # 그지같다 -_-;... 디버그 로그 보고 알았다...


별거 아닌게 시간버렸다. ㅜㅜ

[PyperClip] plain text 클립보드 사용하기

주소를 복사 붙여넣기 하는데 사용한 아주 심플한 클립보드 사용 라이브러리


# 확인 환경
Win10/Python3.4

# 설치 방법 :
pip install pyperclip 

>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'
윈도우에서는 다른 모듈 설치 없이 바로 사용 가능
다른 플랫폼도 큰 무리는 없을 것 같은데, 자세한 내용은 아래 링크에서 확인 가능
Git : https://github.com/asweigart/pyperclip

[cx_freeze] 사용 후기인가 팁인가? 덕분에 Python 3.5 -> 3.4 했던 기록

파이썬으로 만든 무언가를 실행 파일로 배포하고 싶었다.

이와 관련해서 조금 조사를 해보았다.

파이썬2 에서는 실행 파일 단독으로 빌드해주는 라이브러리를 쉽게 찾을 수 있었는데, 
문제는 파이썬3였다.

뒤늦게 입문하는 사람의 입장에서 파이썬3로 시작했었다가, 살짝 멘붕이 ^^;;


일단 단독 실행파일 형태로 빌드는 불가능하더라도, 일단 배포를 준비해야 했다.

여러가지 시험해보았더니
cx_freeze 라는 라이브러리가 제일 간단하고 확실했다.

하지만 문제는 또 있었으니 ^^;


작년에 직접 확인한 시점으로는 이 라이브러리는 파이썬 3.5에서 제대로 동작하지 않았다.

3.5에서 해보려고 엄청 삽질을 했는데, 몇일 시간만 버렸고...

일단 3.4에서는 정상 동작을 확인했기 때문에...
나는 파이썬3.4로 다운그레이드 하여 보류같은 해결을 했다.


다음에 빌드할 일이 생길 때 이 팁은 업데이트 될 것이다. (허허... 계획 없음...)