https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 : 오랜만에 풀었더니.. 알고리즘 사고(?라고 해야 하나.. 머리가 그대로 굳어버렸다... (럴수럴수,,, 해시를 이용하기 위해 딕셔너리를 야심차게 만들었지만 수학적 지식이 부족하여 결국 다른 사람들의 풀이를 보게 되었다.. 새로 알게 된 점 : 경우의 수를 구할 때 A의 종류가 n개, B의 종류가 m개 일 때 모든 경우의 수는 (n+1)(m+1)으로 구할..
주피터 노트북으로 plot을 하는데 x축에 표시 되어야 할 라벨이 한글이라 폰트 지정을 해 주었다. https://iambeginnerdeveloper.tistory.com/40 python matplotlib 한글 깨짐 해결하기 | 주피터 노트북(Jupyter notebook) matplotlib 한글 깨짐 해결하기 아이펠 프로젝트 과제를 하면서 matplotlib를 사용하여 그림을 출력하려고 할 때 plot의 title을 한글로 지정하면 한글 폰트가 깨지는 현상이 있었다. 이전까지는 계속 영어로 출력을 해 왔기에 상관 iambeginnerdeveloper.tistory.com 아주 예전에 주피터 노트북에서 matplotlib를 사용하여 plot을 했을 때 한글이 깨지는 이슈가 있었고 그때 정리 해 둔..
영상에서 글자 인식을 위한 OCR 프로젝트를 하면서 전처리 과정에서 가장 잘 썼던 두 변환에 대해 정리하고자 한다. 1. Affine Transform : 영상의 이동, 전단, 확대, 회전을 조합할 때 직사각형이 평행사변형으로 변환이다. 쉽게 말하면 회전, 평행 이동, 스케일링, 반전까지 모두 포함한 변환이다. affine transform은 선의 평행성이 유지 되면서 변환된다. Affine 변환을 하기 위해 매칭되는 3개의 점(pts1, pts2)이 있어야만 변환 행렬을 구할 수 있다. 이 점 3개의 이동 정보를 통해 마지막 점의 위치를 유추할 수 있게 된다. cv2.getAffineTransform을 통해 변환 행렬을 구한 후 cv2.warpAffine으로 변환 행렬을 img에 적용 시켜주면 된다. ..
python에서 반복문을 사용하면서 for문이 얼마나 진행되었는지 확인할 수 있는 방법 중 하나가 tqdm을 사용하여 progress bar를 나타내는 것이다. tqdm을 사용하면 progress bar로 진행률을 나타내 주는 것만 아니라 남은 시간까지도 확인할 수 있다. from tqdm import tqdm import time for i in tqdm(range(10)): time.sleep(0.1) 기본 사용 방법은 위와 같다. tqdm으로 감싸는 값이 __len__()을 가지도록 하면 래와 같은 결과물이 나오게 된다. enumertae나 zip은 __len__()을 가지기 않기 때문에 조금 다르게 사용 해야 한다. a = [1,2,3,4] b = [5,6,7,8] enumerate(tqdm(a)..
협업을 하면서 내가 만든 코드를 다른 팀에서 모듈처럼 쓸 수 있도록 해야 하는 일이 생겼다. pip install package_name 형태로 사용할 수 있도록 패키지 화 해 달라고 했다. 1. repo 생성 가장 먼저 패키지로 사용할 repo를 새로 만들어야 한다. 기존 코드에서 구조가 달라져야 하기 때문에 새 repo를 만들어서 진행한다. 2. 패키지 구조 package_name package_name __init__.py function.py README.md requirements.txt setup.py 만들어 둔 repo와 연결 할 package 폴더의 구조를 위와 같이 만들어 준다. package 이름과 같은 폴더 안에 또 같은 폴더를 만든 후에 사용이 될 함수들을 만들어 놓아야 한다. 3...
vscode에서 파이썬 코드를 디버깅 하면서 가상환경 내에 설치 된 모듈의 함수까지 디버깅을 하려고 했을 때 종종 디버깅이 스킵되는 문제가 있다. 이때 디버깅 시 사용하는 json 파일을 조금 수정 해 주면 스킵하지 않고 모듈의 함수까지 들어갈 수 있다. 디버깅에서 톱니바퀴를 눌러 launch.json 파일을 열어주고 configurations에 justMyCode를 true에서 false로 변경 해 주면 된다. 이렇게 false로 변경 해 주면 디버깅 시, 모듈의 함수단까지 들여다 볼 수 있게 된다.
파이썬에서 딕셔너리를 생성할 때 마다 a = {} a['key']='value' 이렇게만 해 왔는데 iterable하게 값을 넣어주려니(ex. value에 list를 넣는다는지 등등) for문을 써야하는 게 불편했다. 다른 방법이 있는지 알아보니 setdefault()라는 방법이 있었다. a = {} feature = np.array([1,2,3]) a.setdefault(0, []).append(feature) a >> {0:[array([1,2,3])]} 존재하지 않는 키에 대해서도 값을 넣을 수 있으며 feature2 = np.array([4,5,6]) a.setdefault(0, []).append(feature2) a >> {0:[array([1,2,3]), array([4,5,6])]} 키가 ..
ArUco marker는 검정색 테두리가 있는 이진 정사각형 이미지이다. 내부에 패턴은 마커 종류에 따라 다르다. camera calibration 및 stitching을 위해 ArUco Marker가 거의 필수적으로 사용이 된다. 특히 pose estimation은 비전 분야에서 정말 많이 사용된다. opencv를 사용하면 아래 marker 사전을 통해 쉽게 ArUco marker를 생성하고 detection하는 코드를 작성할 수 있다. # define names of each possible ArUco tag OpenCV supports ARUCO_DICT = { "DICT_4X4_50": cv2.aruco.DICT_4X4_50, "DICT_4X4_100": cv2.aruco.DICT_4X4_100,..
https://iambeginnerdeveloper.tistory.com/228 이전에 JetPack 4.6.2 버전을 JetsonTX2에 설치를 했었고 기본적으로 설치되어 있는 스펙은 다음과 같다. cuda 10.2, cudnn 8.2.1, tensorrt 8.2.1, python3.6 위 링크를 따라 pytorch도 설치했다면 1.8버전의 torch가 설치되었을 것이다. 근데 나는 YoloV8을 JetsonTX2에서 실행을 시키고자 했고, 그러기 위해선 ultralytics라는 모듈을 설치를 해야 했다. 근데 여기서 문제는 python3.7 이상부터만 설치가 가능하다는 것... python을 새로 설치해야 하는 상황이었다. 하지만 기존 python3.6 버전은 그대로 둔 채로 설치를 해야만 이후에 T..
해당 포스팅은 '밑바닥부터 시작하는 딥러닝1'을 공부하고 정리, 요약한 글입니다. 모든 내용은 해당 도서를 기준으로 합니다. ◼️ 8.1 더 깊게 ◾ 8.1.1 더 깊은 신경망 그림 8-1과 같이 구성된 CNN을 만들고자 한다. 여기에서 사용하는 합성곱 계층은 모두 3x3 크기의 작은 필터로 층이 깊어지면서 채널 수가 더 늘어나는 것이 특징이다. 합성곱 계층의 채널 수는 앞 계층에서부터 순서대로 16, 16, 32, 32, 64, 64로 늘어간다. 그림과 같이 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄여가고 마지막 단의 완전 연결 계층에서는 드롭 아웃 계층을 사용한다. 가중치 초깃값으로 He 초깃값을 사용하고 가중치 매개변수 갱신에는 Adam을 이용한다. import sys, os impo..