Python 패키지를 설치하다가 Protobuf compiler not found 에러가 발생한 경우 해결방법입니다. 2023. 2. 22 최초작성 https://github.com/protocolbuffers/protobuf/releases 에서 이름에 win64.zip가 붙은 파일을 다운받아서 적당한 곳에 압축을 풀어주고 해당 폴더안에 있는 bin 폴더의 경로를 시스템 변수 PATH에 추가해줍니다. 글 작성 시점에서 다운로드 받은 최신 릴리즈 버전은 protoc-22.0-win64.zip 입니다. 주의할점은 명령 프롬프트창을 새로 열어야 추가한 PATH 가 반영됩니다. 참고 https://github.com/nanopb/nanopb/issues/713
Conda 환경에서 pip와 conda를 사용하여 패키지 설치시 어디에 설치되는지 확인해보았습니다. 윈도우 10에 설치된 Miniconda에서 확인한 결과입니다. 2022. 4. 13 Miniconda에 다음 두 개의 가상환경 base와 newenv가 생성되어 있는 상태입니다. 각각 가상환경을 위한 파일들이 있는 위치가 옆에 표시되어 있습니다. (base) C:\Users\webnautes>conda env list # conda environments: # base * C:\Users\webnautes\miniconda3 newenv C:\Users\webnautes\miniconda3\envs\newenv 두 개의 명령 프롬프트에 하나는 base 다른 하나는 newenv로 가상환경을 변경해두고 테스트..
OpenCV Python을 사용하여 깊이 이미지 depthmap을 화면에 보여주는 예제코드입니다. 2023. 8. 6 최초작성 코드에서는 다음 링크에 있는 depthmap 파일을 다운로드하여 사용했습니다. https://github.com/unclearness/pyrgbd/blob/master/data/cmu_panoptic/171026_cello3/depth_00000.png 실행해보면 다음처럼 보입니다. 깊이 이미지에 대응하는 컬러 이미지는 다음과 같습니다. 출처 – https://github.com/unclearness/pyrgbd/blob/master/data/cmu_panoptic/171026_cello3/color_00000.png 테스트에 사용한 코드입니다. import cv2 import ..
특정 문자만 사용한 문자열인지 검사하는 파이선 예제 코드입니다. 2023. 1. 31 최초작성 import re str = 'az09_.-:' ret = re.match('[a-zA-Z0-9_.\-:]+', str) # print(ret) # print(ret.group()) if ret != None and str == ret.group(): print('올바르게 사용했습니다.') else: print('정규식에 있는 문자만 사용하세요 : [a-zA-Z0-9_.\-:]+') str = '안녕' ret = re.match('[a-zA-Z0-9_.\-:]+', str) if ret != None and str == ret.group(): print('올바르게 사용했습니다.') else: print('정규식..
파이썬의 딕셔너리를 문자열로 바꾸는 방법을 다루고 있습니다. 2023. 3.12 최초작성 파이썬의 장점은 거의 모든 것을 print로 출력해서 확인해볼 수 있다는 겁니다. 딕셔너리도 자주 출력해보곤 했었는데 이번엔 터미널이 아닌 이미지 위에다가 출력해볼 필요가 생겨서 해보니 안되네요. 출력시 print문을 사용하는게 아니라면 문자열로 바꿔야 되는 구나 싶더라구요. 찾아보니 아래 링크에서 딕셔너리를 문자열로 바꾸는 3가지 방법을 소개합니다. 처음 2가지 방법은 간단한데 세번째 방법은 for문을 사용하여 딕셔너리 아이템을 하나씩 출력하는 방법입니다. 커스텀 스타일로 딕셔너리를 출력해볼게 아니면 처음 2가지 방법으로 충분하네요. https://favtutor.com/blogs/convert-dict-to-st..
파이썬 딕셔너러의 vaule별 개수를 세는 예제 코드입니다. 2023. 1. 28 최초 작성 from collections import Counter # 딕셔너리 생성. 3가지 종류의 값을 가집니다. dict_a = {1:False, 2:True, 3:False, 4:None, 5:True, 6:False} print(Counter(dict_a.values())) # Counter({False: 3, True: 2, None: 1}) print(Counter(dict_a.values())[True]) # 2 print(Counter(dict_a.values())[False]) # 3 print(Counter(dict_a.values())[None]) # 1 참고 https://stackoverflow.c..
Python에서 Class 내 global 선언 위치를 다룹니다. 2023. 1. 17 최초작성 스레드 내에서 전역변수를 수정할 일이 생겨서 사용하려고 했는데 global을 클래스내 어디에 선언해야 할지 모르겠더군요. 찾아보니 전역변수를 사용할 메소드 내에 선언하면 된다고 하네요. 아래 코드의 경우에는 run 메소드내에 global을 선언했습니다. 아래 예제코드는 전역 변수 i를 스레드에서 수정하는 코드입니다. import threading class Count(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): global i while i > 0: print(i) i = i - 1 print('thr..
Python 3.10에서 추가된 C/C++의 switch case와 유사한 match case 예제입니다. 2022. 11. 4 최초작성 match문에 있는 변수 input의 값이 case 문에 있는 조건을 만족하면 해당 코드가 실행됩니다. case 문에 값이 지정되지 않은 경우는 _를 사용한 case 문에 있는 코드가 실행됩니다. def f(input): match input: case 'apple': print('사과') case 'banana': print('바나나') case _: print('선택된 것이 없습니다.') f('apple') f('orange') 사과 선택된 것이 없습니다. | 를 사용하여 두가지 이상의 조건을 하나의 case 문에 추가할 수 있습니다. 다음 예제에서는 input이 ..
스레드가 종료되거나 죽었다면 다시 스레드를 실행시켜주는 파이썬 예제 코드입니다. 2023. 1. 28 최초작성 참고 https://blog.naver.com/ytlee64/222832101970 import threading def func(): for i in range(5): print(f'##### thread print {i}') print('##### thread exit #####') t = threading.Thread(target=func) t.start() # 스레드 재시작을 2번 반복합니다. try_num = 2 while True: if try_num == 0: break # 스레드가 살아있는지 체크 if t!=None and t.is_alive(): #print('thread ali..
CLAHE (Contrast Limited Adaptive Histogram Equalization) 파이썬 예제 코드입니다. 출처 https://stackoverflow.com/questions/24341114/simple-illumination-correction-in-images-opencv-c 2022. 11. 3 최초작성 import cv2 import numpy as np img = cv2.imread('test.jpeg') h,w,c = img.shape img = cv2.resize(img, ((w//4, h//4))) lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(..