최근 미니프로젝트를 진행하면서 electron을 사용하게 되었다.

일렉트론에서 console.log("한글") 과 같이 한글을 출력하고자 하였는데, 물음표로 cmd 창에 도배가 되었다.

문제의 화면이다.

일단 해결방법!

chcp 65001

해당 명령어를 electron 앱 시작 명령어를 치는 cmd 창에서 입력하면 된다!

그렇게 하면  Active code page :  65001 이라고 나타나게 된다.

chcp가 UTF-8로 적용된듯 하다.

 

기본적인 Nodejs에서는 한글 출력이 원활하였으나,

electron으로 앱을 제작했을 때, 한글이 출력되지 않아 당황스러웠다.

electron에서 한글 언어팩을 지원하지 않거나, 대략적으로 encoding 문제였을 것이라고 짐작하고 있었지만 해결방법을 몰라 2주정도 헤메이게 되었다.

stackoverflow에 글도 작성했다. ㅋㅋㅋ 

https://stackoverflow.com/questions/70999781/electron-app-console-log-output-is-question-marks-when-i-printed-korean-characte

 

Electron app console log output is question marks when i printed korean character

I faced some problems. I want to print out Korean character in my electron app. But it printed out only question marks.. Could you tell me how to print out different language in electron app? Here ...

stackoverflow.com

 

카카오톡 오픈채팅방에서 electron 개발 하시는 분들 단톡방에 들어가서 해결 방법을 알게 되었다.

[추가 검색 출처]

https://mins01.github.io/tech-916-post/

 

chcp (윈도우 cmd 창 언어셋 설정)

C:\>chcp /?Displays or sets the active code page number.

mins01.github.io

  • chcp 437 : 영문
  • chcp 949 : 한글(확장완성형)
  • chcp 65001 : UTF-8

 

file 이름을 pickle.py 로 하면 안된다는 것이다.

[ 참고 블로그 ]

https://nadocoding.tistory.com/57

 

[파이썬 기본편] 8-4.pickle

컴퓨터로 문서 작업을 하다가 갑자기 프로그램이 먹통이 되면서 '응답 없음' 상태로 빠지는 아찔한 경험은 아마 한 번씩 해보셨을 겁니다. 운이 좋으면(?) 잠시 후에 정상으로 돌아오기도 하지만

nadocoding.tistory.com

 

python 전용으로 binary file로 다뤄주는 모듈 pickle을 공부하다가 아주 간단한 에러를 직면했다.

file 이름을 pickle.py 로 하면 안된다는 것이다.

참고한 블로그의 내용이다!

Q) pickle 사용 시 아래와 같이 에러가 나는데 어떻게 해야 하나요?
AttributeError: partially initialized module 'pickle' has no attribute 'dump or load' (most likely due to a circular import)

A) 소스코드 작성중인 파일명을 pickle.py 로 하셨을텐데 my_pickle.py 등과 같이 변경해주셔야 합니다. 사용하시려는 모듈과 동일한 이름으로 파일을 생성하면 import 시에 동일한 경로에 있는 이 파일을 먼저 인식하게 되기 때문에 그렇습니다.

이를 응용했을 때, 다른 것에도 똑같이 파이썬 기본 내장 모듈을 사용한 파일명은 사용하지 않아야 할 것이다!

ex) pickle.py  logging.py  configparser.py  argparse.py

 

깃허브에서 파이썬 기본에 대한 예제를 기록한 레포 링크이다.

https://github.com/updaun/PythonBasic/tree/master/file_handing

 

GitHub - updaun/PythonBasic: PythonBasic

PythonBasic. Contribute to updaun/PythonBasic development by creating an account on GitHub.

github.com

 

사용하던 라이브러리에서 에러가 발생하였다.

 

[ Error Message ] 

urllib.error.HTTPError: HTTP Error 410: Gone

 

Youtube Downloader 프로그램을 만들어서 사용하고 있는데, 동영상이 다운로드 되지 않는 문제가 발생하였다.

 

원인을 분석해보니, 유투브가 업데이트 되면서 pytube 라이브러리가 그것을 수용하지 못한 거 같다.

조금 기다려보니 pytube 라이브러리 개발자가 오류를 수정하였다.

 

[ 조치사항 ]

[ 내용 수정 ] 

- 최신 버전의 pytube로 업데이트한다. ( 11.0.0 버전 다운로드 )

pip install -U pytube

 

그리고 라이브러리만 수정하여 사용하려고 했는데,

테스트 과정에서 한 가지 더 오류가 발견되었다.

해상도가 아주 낮게 동영상이 다운되는 문제가 발생했는데,

youtube 다운로드 구문에 " .filter(res="720p") " 를 추가하여 해상도를 지정하였다.

YouTube(youtube_url).streams.filter(res="720p").first().download('./Downloads/')

 

[ 향후 보완 사항 ]

현재 프로그램을 다른 사용자가 사용했을 때 불편할 수 있는 점이 있는데,

1. pytube 라이브러리가 없으면 자동으로 설치를 하는 구문을 추가하자.

2. pytube 버전이 11.0.0 미만이면 업데이트 알림을 제공하도록 하자.

python 3.7.7 버전에서 dlib 라이브러리 설치에서 Error가 발생하였다.

조치하는데 생각보다 많은 시간이 걸려서 나와 같은 사람이 있을 것 같아, 글을 작성해본다.

[error 내용]

ERROR: Command errored out with exit status 1: 'C:\Users\jdu\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\jdu\\AppData\\Local\\Temp\\pip-install-zsqykg6o\\dlib_aebf39f99fce459994812d9033b95078\\setup.py'"'"'; __file__='"'"'C:\\Users\\jdu\\AppData\\Local\\Temp\\pip-install-zsqykg6o\\dlib_aebf39f99fce459994812d9033b95078\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\jdu\AppData\Local\Temp\pip-record-nk1s1red\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\jdu\anaconda3\Include\dlib' Check the logs for full command output.

dlib 설치

pip install dlib

당연히 설치 될 줄 알았지만 설치가 되지 않았다면, 아래의 조치 방법을 한 뒤, 설치를 해보자.

최후의 방법도 준비되어 있다!

 

[조치방법]

1. CMake 설치

pip install cmake

 

2. Visual Studio 설치

https://visualstudio.microsoft.com/ko/downloads/

 

Windows 및 Mac용 Visual Studio 2019 다운로드

프로젝트에 대해 알려주시면 적절한 다운로드 및 자습서를 찾는 데 도움을 드리겠습니다.

visualstudio.microsoft.com

Visual Studio 설치시 Windows용 C++ CMake 도구가 체크되어 있는지 확인한다.

CMake를 설치하고 다시 시도해보자.

pip install dlib

그럼에도 안되면 최후의 방법이다.

3. dlib-19.17.0-cp37-cp37m-win_amd64.whl 다이렉트 설치(Python 3.7버전만 가능)

dlib-19.17.0-cp37-cp37m-win_amd64.whl
2.97MB

해당 파일을 다운로드 받은 뒤, 원하는 경로에 위치 시킨다.

cmd에서 해당 경로로 들어가 준다!

pip install dlib-19.17.0-cp37-cp37m-win_amd64.whl

 

[ 새롭게 추가한 부분! ] 

4. python 3.8 버전용도 새롭게 찾아 내었다!

dlib-19.19.0-cp38-cp38-win_amd64.whl
3.19MB

해당 파일을 다운로드 받은 뒤, 원하는 경로에 위치 시킨다.

cmd에서 해당 경로로 들어가 준다!

pip install dlib-19.19.0-cp38-cp38-win_amd64.whl

 

각각의 파이썬 버전마다 해당 파일이 존재하는 듯하다.

다른 파이썬 버전을 사용한다면, 해당 설치 파일을 찾아서 설치해야한다.

이 글이 도움이 되길 바란다.

dlib 설치 후 돌려본 오프소스!

opencv에서 이미지를 입력하는 중 에러가 발생했다.

[Error Message]

OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_xlv4eex\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

 

opencv에서 이미지를 입력하는 방법은 세 가지가 있다.

1. 이미지 사진    2. 동영상    3. 카메라로 촬영

나는 그 중에 3번, 카메라로 이미지를 입력하는 방법을 사용했는데,

원인을 분석해보니, cv::cvtColor 함수에서 이미지를 로드하지 못하고 있다.

이미지가 정상적으로 로드되지 않으면 해당 에러가 발생한다고 한다.

 

cap = cv2.VideoCapture(1)

이 부분에서 이미지 로드가 안 되었던 것인데,

전에 USB웹캠을 연결해서 사용하다가 카메라 우선순위를 1번으로 세팅했었던 것을 그대로 유지한 것이 원인이 되었다.

노트북에 내장되어 있는 웹캠의 우선순위는 0번 이므로,

# cap = cv2.VideoCapture(1)

cap = cv2.VideoCapture(0)

 

에러를 수정한 뒤, 정상적으로 가동되는 모습이다!

 

나와 같은 에러가 난 사람들이 잘 참고하면 좋겠다!

'SW > opencv' 카테고리의 다른 글

[opencv] AttributeError: module 'cv2.cv2' has no attribute 'face'  (0) 2021.04.13

눈 깜빡임 감지 인공지능 모델을 돌려보다 에러가 발생했다.

[ Error Message ]

predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

RuntimeError: Unable to open shape_predictor_68_face_landmarks.dat

dlib에서 어떤 파일을 호출하는 것에서 에러가 발생한 듯하다.

얼굴을 찾는 모델인 것 같다.

구글링을 한 결과, stack overflow의 글을 잘 읽고 참고하였다.

https://stackoverflow.com/questions/64643440/how-do-i-fix-runtimeerror-unable-to-open-shape-predictor-68-face-landmarks-dat

 

How do I fix "RuntimeError: Unable to open shape_predictor_68_face_landmarks.dat" while using google colab?

I am writing the following Python code in Google Colaboratory and get an error: Code: import cv2 import dlib cap = cv2.VideoCapture(0) hog_face_detector = dlib.get_frontal_face_detector()

stackoverflow.com

[ Linux ]

!wget   http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 # DOWNLOAD LINK

!bunzip2 /content/shape_predictor_68_face_landmarks.dat.bz2

datFile =  "/content/shape_predictor_68_face_landmarks.dat"

 

[ Windows ]

인터넷 웹 주소창에 해당 주소를 입력하여 파일을 다운로드 받아준다.

http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

 

7-zip을 활용하여 압축을 해제한다.

[7zip Download link] https://www.7-zip.org/download.html

 

Download

Download .7z Any / x86 / x64 LZMA SDK: (C, C++, C#, Java)

www.7-zip.org

 

압축을 해제하면, "shape_predictor_68_face_landmarks.dat" 파일이 나오는데, 

이 파일을 사용하고자하는 경로에 두고 호출하면 된다.

나는 working directory에 바로 넣고,

predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

로 호출하여 사용하였다.

 

그리하여 눈깜빡 감지 모델 오픈 소스를 돌려볼 수 있었다!

 

다른 분들도 해메지 않고 금방 극복하길 바란다! :)

지난 시간, 파이썬 로우 버전 설치에 대해서 알아보았다.

현재 글쓴이 또한 파이썬 버전을 여러 개를 다루고 있는데, 각 파이썬마다 설치되어 있는 라이브러리 버전도 다르므로 필요에 따라 파이썬 버전을 사용하고 있다.

아나콘다를 사용하면서 python3.8버전이 설치되었고, 개인 공부를 하다가 python3.7버전도 설치하였다. 

오늘은 환경변수를 편집하여 파이썬 우선순위를 설정하는 방법에 대해서 알아보자!

시작 버튼을 누루고 검색창에 '환경' 이라고 검색을 하면 "시스템 환경 변수 편집" 이 나온다.

 

고급 탭에서 환경 변수를 클릭해준다.

 

오늘 다룰 것은 시스템 변수의 Path이다.  시스템 변수의 Path를 더블 클릭한다.

 

현재 상태를 보면, python37이 python38보다 위에 있는데,

이렇게 되면 cmd 창에서 python으로 호출 했을 때, 위에 있는 것을 호출하게 된다.

만약, Python의 경로가 변수로 추가되어있지 않다면, 

사용자 변수에 등록되어 있는 것을 확인하고 그 경로를 복사하여 시스템 변수를 새로 만들기 해주면 된다.

 

python 3.8 버전을 기본으로 사용하고 싶다면.

위로 아래로 이동 버튼을 사용하여 우선순위를 변경해 주면 된다!

변경 후 cmd 창을 닫고 새로 열어 주면

기본 파이썬이 변경된 것을 알 수 있다.

 

환경 변수를 편집하지 않고 명령어로 다른 버전의 파이썬을 호출하는 방법도 있는데

기본 3.7버전에서 3.8버전을 호출하여 외부 라이브러리를 설치하는 명령어는 다음과 같다.

py -3.8 -m pip install mediapipe

python을 실행시켜 파이썬 파일을 동작시키는 방법은 다음과 같다.

py -3.8 Holistic_turtleneck_demo_2.py

 

python의 버전을 정확하게 다루고 마음대로 사용해보자!

Google Mediapipe의 Holistic을 사용한 미니 프로젝트를 진행했다.

공부나 작업을 하면 노트북으로 작업을 하는데,

노트북의 웹캠을 사용하여 자세를 교정하자는 아이디어를 제안 받았다. 

https://google.github.io/mediapipe/solutions/holistic.html

 

Holistic

Cross-platform, customizable ML solutions for live and streaming media.

google.github.io

Holistic은 기존 Mediapipe의 Multi-hand, Pose, Face-Mesh를 합쳐놓은 모듈이다.

Face-Mesh의 턱 좌표와, 양 어깨 좌표의 중심과의 거리를 측정한다.

 

작업을 하다가 거북목이 되어 그 거리가 짧아지게 되면, 거북목이라고 생각하고, 알림을 제공하도록 했다.

win10toast 라이브러리를 사용하여 알림을 제공하도록 하였다.

 

해당 프로젝트를 공유해 본다.

https://github.com/updaun/Holistic.git

 

GitHub - updaun/Holistic: HolisticProject to using mediapipe python

HolisticProject to using mediapipe python. Contribute to updaun/Holistic development by creating an account on GitHub.

github.com

 

먼저 프로젝트 소스를 다운로드 받아 압축을 해제한다.

 

압축을 해제하고 폴더를 열어 들어간다. (requirments.txt 파일이 있는 곳까지 들어간다.)

 

해당 파일 탐색기의 주소창에 "cmd" 라고 입력하면 해당 경로의 명령 프롬프트를 쉽게 열 수 있다.

방금 다운로드 받은 소스 위치의 cmd 창을 열 수 있다.

 

기본적으로 Python이 설치되어 있어야 한다.

cmd 창에 ' python ' 이라고 입력하여 파이썬이 설치되어 있는지 확인한다.

python

 

만약 설치되어 있지 않다면, 아래의 글을 먼저 읽고 설치하도록 하자!

https://updaun.tistory.com/entry/python-python-low-version-install

 

[python] python low version install

Window OS 에서 여러 버전의 Python을 설치하는 방법에 대해서 알아보자! [Python 설치 주소] https://www.python.org/downloads/ Download Python The official home of the Python Programming Language www.pyt..

updaun.tistory.com

파이썬 버전은 3.7 이상 버전을 사용하도록 하자.

설치된 것을 확인했다면, ' exit() ' 를 입력하여 파이썬을 종료한다.

>> exit()

프로젝트에 필요한 라이브러리를 설치해보자.

pip install -r requirments.txt

명령어를 입력하면 OpenCV, Mediapipe, win10toast 등 필요한 라이브러리를 모두 다운로드 받게 된다.(약 2분 소요)

 

설치가 되었다면, Python을 사용하여 프로그램을 동작시켜보자!

[ 데모 1 실행 ] 

python Holistic_turtleneck_demo.py

첫 번째 데모 프로그램은 단순히 턱과 어깨 중심 사이의 거리만 측정한다.

그런데, 웹캠과 조금 멀어지게 되면 거리가 줄어든 것으로 인식되어 거북목으로 감지되었다.

거리가 줄어든다면, 윈도우 토스트 알림이 올 것이다.

 

[ 데모 2 실행 ]

python Holistic_turtleneck_demo_2.py

mediapipe 에서 제공하는 z value를 사용하여 웹캠과의 거리를  추측하고

거리에 따라 감지되는 임계치를 변경하도록 하였다.

거북목 자세를 취하면 토스트 알림이 올 거이다.

 

[ 실사용 버전 실행 ]

python Holistic_turtleneck_noimgview.py

print문 및 mediapipe의 draw 기능을 지워 연산 속도를 올렸다.

opencv의 imshow를 제거하여 웹캠을 작동하지만 사용자에게 보여지지는 않는다.

이 프로그램을 켜놓고 작업을 진행한 결과, 중간 중간 자세를 바르게 하라고 알림이 와서 나름 효과적이었다.

 

향후 보완사항

- z value를 더욱 효과적으로 사용하여 현재 목의 길이로만 측정되는 부분을 보완하고자 한다.

- 코의 3차원 좌표와 어깨의 3차원 좌표 값의 차이를 추가적으로 활용해볼 예정이다.

+ Recent posts