Python 53

운동자세 판별 딥러닝 프로젝트 (OpenCV, Numpy, Pandas, TensorFlow)

프로젝트 상세 분석 및 설명  1. 데이터 준비 및 전처리코드 블록:root_dir = 'dataset/train'img_path_list = []possible_img_extension = ['.jpg', '.jpeg', '.JPG', '.bmp', '.png']for (root, dirs, files) in os.walk(root_dir): if len(files) > 0: for file_name in files: if os.path.splitext(file_name)[1] in possible_img_extension: img_path = root + '/' + file_name img_path = img_..

Python/openCV 2024.08.31

테서렉트 설치(사전준비)

테서랙트란? 테서랙트는 다양한 운영 체제를 위한 광학 문자 인식 엔진이다. 이 소프트웨어는 Apache License, 버전 2.0, 에 따라 배포되는 무료 소프트웨어이며 2006년부터 Google에서 개발을 후원했다 ✔ 다운로드 주소 테서렉트 다운로드 http://github.com/UB-Mannhein/tesseart/wiki ✔ 설치 버전 2023-03-15일 기준 tesseract-ocr-w64-setup-5.3.0.20221222.exe (64 bit) resp. 다운로드 - 설치중 Additional script data 항목에서 'Hangul Script', 'Hangul vertical Script' 항목 체크 - Additonal language data 항목에서 'Korean' 항목 체..

Python/openCV 2023.03.16

Python OpenCV (영상 필터링, 블러, 가우시안, 미디안, 샤프닝, 케니)

영상 필터링 커널(filter)라고 하는 정방행렬을 정의하고, 이 커널을 이미지 위에서 이동시키면서 커널과 겹쳐진 이미지 영역과(컨벌루션 연산) 연산을 한 후 그 결과값을 연산을 진행한 이미지 픽셀을 대신하여 새로운 이미지를 만드는 연산 # 컨벌루션 곱을 하면 3바이 3행렬에서 1개가 나온다. 새로운 이미지를 만든다는 뜻이다. 필터링 - 영상에서 필요한 정보만 통과시키고 원치 않는 정보를 걸러내는 작업 예) 노이즈를 제거하여 영상을 깔끔하게 만드는 필터. 부드러운 느낌의 성분을 제거하여 날카로운 느낌이 나도록 만들 수 있음 - 영상의 필터링은 마스크라고 부르는 작은 크기의 행렬을 이용 - 마스크는 필터링의 성격을 정의하는 행렬이며 커널 또는 필터라고 부름 - 마스크의 정중앙을 고정점으로 사용 ✔ Open..

Python/openCV 2023.03.12

Python OpenCV (영상의 이진화, 자동 이진화, 지역 이진화, 적응형 이진화, 모폴로지)

영상의 이진화(Binarization)- 픽셀을 검은색 또는 흰색 같이 두 개의 값으로 나누는 작업- 영상에서 의미있는 관심 영역(ROI)과 비관심 영역으로 구분할 때 이진화를 사용- 배경(background)과 객체(object)를 나눌 때- 그레이스케일에서는 영상을 이진화 시킬 때 특정값을 정해놓고 픽셀값이 특정값보다 크면 255, 작으면 0으로 설정- 영상을 연산할 때 255 또는 0으로 나누는 특정값을 임계값이라고 함cv2.treshold(영상, 임계값, 최대값, cv2.THRESH_로 시작하는 플래그)플래그cv2.THRESH_BINARY : 이진화 시키는 상수cv2.THRESH_BINARY_INV : 임계값보다 작으면 배경영상, 크면 검은색을 출력✔ treshold 함수는 영상의 이진화 뿐 아니..

Python/openCV 2023.03.10

Python openCV (어파인, 크기변환, 영상회전, 보간법, 투시변환)

영상의 기하학적 변환 - 영상의 밝기, 명암비 조절, 필터링 등은 픽셀 위치는 고정한 상태에서 픽셀 값만 변경했지만, 기하학적 변환이라는 것은 픽셀 값은 그대로 유지하면서 위치를 변경하는 작업 - 영상을 구성하는 픽셀의 배치 구조를 변경함으로 전체 영상의 모양을 바꾸는 작업 ✔ 어파인 변환(affine transformation) 영상을 평행 이동시키거나 회전, 크기 변환 등을 통해 만들 수 있는 변환을 통칭 영상에서 (x,y) 좌표의 픽셀을 결과 영상의 (x' , y') 좌표로 변환하는 방법 { x' = f1(x, y), y' = f2(x, y) } { x' = f1(x, y) = ax + by + c, , y' = f2(x, y) = dx + ey + f } 위 수식을 행렬을 이용하여 아래와 같이 표..

Python/openCV 2023.03.09

Python openCV 기본

영상(image) 픽셀(pixel) : 바둑판 모양의 격자에 나열괴어 있는 형태, 2차원 행렬 1. 그레이스케일 영상 - 흑백사진처럼 색상 정보가 없는 영상 - 밝기 정보만으로 구성된 영상 - 밝기 정보는 256단계로 표현(0 ~ 255) - numpy.uint8 = 8bit = 1byte - 가로크기 * 세로크기 = 28 * 28 = 784 bytes 2. 트루컬러 영상 - 컬러사진처럼 색상 정보를 가지고 있기 때문에 다양한 색상을 표현할 수 있는 영상 - red, green, blue 색 성분을 사용하고, 각 256단계로 표현 - 픽셀의 표현 -> (255, 255, 255) - 튜플, numpy.ndarray = 3byte - 가로크기 * 세로크기 * 3 = 28 * 28 * 3 = 2352 byt..

Python/openCV 2023.03.08

Python 데이터분석 크롤링(벅스뮤직, 멜론, 지니 차트)

크롤링(Crawling): 인터넷의 데이터를 활용하기 위해 정보들을 분석하고 활용할 수 있게 수집하는 행위 스크레이핑(Scraping): 크롤링 + 데이터를 추출해서 가공하는 최종 목표 4. 멜론 차트 robots.txt : 웹사이트에 웹 크롤러같은 로봇들의 접근을 제어하기 위한 규약. 권고안이라 꼭 지킬 의무는 없음 5. 지니 차트 200

Python 자료구조&알고리즘 - 순차 탐색, 이진 탐색

1. 순차 탐색(Sequential Search) 탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미 데이터가 담겨있는 리스트를 앞에서부터 하나씩 비교해서 원하는 데이터를 찾는 방법 1. 이진 탐색(Binary Search) 탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방 1-1. 이진 탐색과 순차 탐색의 비교 2. 분할 정복 알고리즘과 이진 탐색 분할 정복 알고리즘 divide : 문제를 하나 또는 둘 이상으로 나눔 conquer : 나눠진 문제가 충분히 작고 해결이 가능하면 해결하고, 그렇지 않으면 다시 나눔 이진 탐색 divide : 리스트를 두 개의 서브 리스트로 나눔 conquer : 검색할 숫자 > 증가값 : 뒷 부분의 서브 리스트에서 검색힐 숫자를 찾음 검색할 ..

Python 자료구조&알고리즘 - 분할 정복

1. 분할 정복(Division Conquer) 문제를 나눌 수 없을 떄까지 나누어서 각각을 풀면서 다시 병합하여 문제의 답을 얻는 알고리즘 하향식 접근방법으로 상위의 해당을 구하기 위해 아래로 내려가면서 하위의 해답을 구하는 방식(재귀함구로 구현) 문제를 잘게 쪼갤때 부분 문제는 서로 중복되지 않음 Memorization 기법을 사용하지 않음 2. 대표적인 분할 정복 알고리즘 : 퀵 정렬(quick sort 정렬 알고리즘의 꽃(고급 알고리즘) 기준점(pivot)을 정해서 기준점보다 작은 데이터는 왼쪽, 큰 데이터는 오른쪽으로 모으는 함수를 작성 각 왼쪽, 오른쪽은 재귀용법으로 사용해 다시 동일 함수로 호출하여 위 작업을 반복함 2-1. 퀵 정렬 알고리즘 구현 리스트 개수가 1개면 해당 리스트를 리턴 리..

Python 자료구조&알고리즘 - 동적 계획법, 백준 11726번

1. 동적 계획법(Dynamic Programming) 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분의 값을 활용해서 보다 큰 크기의 부분 문제를 해결함 상향식 접근법(최하위 해답을 구한 후 해당 결과를 이용해서 상위 문제를 풀어가는 방식) 프로그램 실행 시 이전의 계산한 값을 저장하여 다시 계산하지 않도록 전체 실행 속도를 빠르게 하는 기술(메모이제이션 : Memoization)을 사용 문제를 잘게 쪼갤 때, 부분 문제는 중복되기 때문에 재활용 2. 동적 계획법 알고리즘 피보나치 수열 n을 입력받아서 아래와 같이 계산 피보나치 수열 함수흫 '피보나치' fibonacci(0) : 0 fibonacci(1) : 1 fibonacci(2) : 1 fibonacci(3) : 2 fibonacci(4)..

Python 자료구조 & 알고리즘 - 재귀호출

1. 재귀호출(recusive call) 함수 안에서 동일한 함수를 호출하는 형태 여러 알고리즘, 고급 정렬 알고히즘 작성시 자주 사용됨 1-1. 재귀 호출 분석 2! = 1 * 2 3! = 1 * 2 * 3 4! = 1 * 2 * 3 * 4 = 3! * 4 1-2. 규칙 n! = n * (n-1)! 함수로 만들어 보자 함수(n)은 n=1 함수(n)은 n>1 이면 return n*함수(n-1) 1-3. 검증 2! 함수(2)이면 2>1 이므로 2 * 함수(1) 함수(1)은 1이므로 return 2 * 1, 답은 2 3! 함수(3)이면 3>1 이므로 3 * 함수(2) 함수(2)는 위 계산에 의해 2! 이므로 return 2*1 = 2 3 * 함수(2) = 3 * 2 = 3 * 2 * 1, 답은 6 4! 함수..

Python 자료구조 & 알고리즘 - 정렬(버블, 삽입, 선택)

1. 정렬 어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 것 프로그램 개발 시 빈번하게 정렬을 필요로 함 다양한 알고리즘이 고안되었으며 알고리즘 학습의 필수사항 2. 버블 정렬(bubble sort) 두 인접한 데이터를 비교해서 앞에있는 데이터가 뒤에 있는 데이터보다 크면 (작으면) 자리를 바꾸는 정렬 알고리즘 3. 삽입 정렬(insertion sort) 인덱스(key)앞에 있는 데이터(A)부터 비교해서 key가 더 작으면(크면) 데이터(A)값을 뒤 인덱스로 복사 key가 더 큰 데이터를 만날 때까지 반복 큰 데이터를 만난 위치 바로 뒤에 key를 이동 4. 선택 정렬(selection sort) 주어진 데이터 중, 최소값을 찾음 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함 맨 앞의 위..

Python 자료구조 & 알고리즘 - 복잡도

1. 알고리즘 복잡도 표현방법 1-1. 알고리즘 복잡도 계산이 필요한 이유 하나의 문제를 푸는 알고리즘은 다양함 * 정수의 절대값을 구하는 방법 * 방법1 : 값이 음수인지 확인해서 0보다 작은 음수일 때 -1을 곱하기 * 방법2 : 정수값을 재곱한 값에 루트를 씌우기 디양한 알고리즘 중 어떤 알고리즘이 더 좋은지 분석하기 위해 복잡도를 정의하고 계산함 1-2. 알고리즘 복잡도 계산 항목 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈 시간 복잡도 : 알고리즘 실행 속도 1-3. 알고리즘 성능 표기법 오메가 표기법 알고리즘 최상의 실행 시간을 표기 세타 표기법 알고리즘 평균 실행시간을 표기 빅오 표기법 최악의 실행 시간을 표기 아무리 최악의 상황이라도 이 정도의 성능은 보장함을 의미 가장 많이 사용 1..

Python 데이터분석 - 형태소분석

1. 형태소 분석 자연 언어의 문장을 형태소라는 최소 단위로 분할하고 품사를 판별하는 작업 영어 형태소 분석은 형태소마다 띄어쓰기를 해서 문장을 구성하는 것이 기본임(분석이 쉬운편) 아시아 계열 언어분석은 많은 노력이 필요 한국어 형태소 분석 라이브러리: KoNLpy 2. KoNLPy에 다양한 형태소 분석 라이브러리 Hannanum: 한나눔. KAIST Semantic Web Research Center 개발 KKma: 꼬꼬마. 서울대학교 IDS(Intelligent Data Systems) 연구실 개발 Komoran: 코모란. Shineware에서 개발 Mecab: 메카브. 일본어용 형태소 분석기를 한국어로 사용할 수 있도록 수정 개발 OKT(Open Korean Text): 오픈소스 한국어 분석기. ..

Python 데이터분석 -쇼핑몰 고객주문 데이터 프로젝트

1. 고객 주문 데이터 파악하기 1-1. 데이터 셋 가상 온라인 리테일 사이트의 2010/12 ~ 2011/12까지의 주문 기록 데이터 약 500,000건의 데이터 ✔ import, 드라이브 연결 1-2. 컬럼 살펴보기 InvoiceNo: 주문번호 StockCode: 아이템 아이디 Description: 상품 설명 Quantity: 주문 수량 InvoiceDate: 주문 시간 UnitPrice: 상품 가격 CustomerID: 고객 아이디 Country: 고객 거주 지역(국가) 1-3. 날짜 타입 데이터 변환 문자열로 데이터를 로딩하는 것보다 datetime 타입으로 로딩하는 것이 날짜 분석 및 계산에 용이 1-4. 매출 구하기 2. 매출 데이터로부터 Insight 전체 매출의 약 82%가 UK에서 발생..

Python 데이터분석 matplotlib

1. matplotlib 파이썬 기반 시각화 라이브러리 파이썬 표준 시각화 도구라고 불릴만큼 다양한 기능을 제공 한글에 대한 지원이 완벽하지 않음 세부기능이 많아 사용성이 복잡함 pandas와 연동이 용이함 matplotlib 공식 홈페이지 https://matplotlib.org Matplotlib — Visualization with Python seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical dat..

Python 데이터 분석 Data Preprecessing

1. 데이터 전처리(Data Preprecessing) 특정 분석에 적합하게 데이터를 가공하는 작업 업무에서 사용하는 데이터는 분석, 머신러닝(딥러닝)에 적합하지 않은 경우가 많기 때문에 이를 방지하기 위한 작업을 함 2. 공공데이터 * [공공데이터](https://bit.ly/ds-house-price) * [민간 아파튼 가격동향](https://bit.ly/ds-house-price) ✔ strip() : 공백이 있는 데이터의 해당 앞뒤 공백을 삭제하는 기능을 가지고 있다.

Python Pandas 2

2. 데이터 기본 정보 알아보기 df = pd.read_csv('http://bit.ly/ds-korean-idol') df type(df) pandas.core.frame.DataFrame 2-1. column(열) df.columns Index(['이름', '그룹', '소속사', '성별', '생년월일', '키', '혈액형', '브랜드평판지수'], dtype='object') new_column = ['name','group','company','gender','birthday','height','blood','brand'] df.columns = new_column df.columns Index(['name', 'group', 'company', 'gender', 'birthday', 'height'..

Pythone Pandas(판다스) 기본

1. Pandas 데이터 작업을 쉽고 직관적으로 할 수 있도록 설계된 빠르고 유연한 데이터 구조를 제공하는 모듈개요[편집] 팬더스 (pandas)는 파이썬의 데이터 분석 라이브러리이다. 팬더스는 수치형 테이블과 시계열 데이터를 조작하고 운영하기 위한 데이터를 제공하는데, 3조항 BSD 라이선스 조건 하에서 무료로 사용 가능하다 1-1. Series와 DataFrame 1차원, 1개의 column은 Series라고 부름 데이터프레임: 가로축, 세로축이 있는 2차원의 다양한 데이터를 저장하는 자료구조

Python 데이터 분석 Numpy

1. Numpy 수학, 과학 계산용 페키지 성능 : ndarray가 파이썬의 list보다 빠름 메모리 사이즈 : ndarray가 파이썬의 list보다 적은 메모리를 사 1-1. array(배열) 여러값들의 그룹 1-2. array의 data타입 ndarray는 list와 다르게 단일 데이터 타입만 허용 1-3. 인덱싱과 슬라이싱 배열의 부분 선택 1-4. Fancy 인덱싱 범위가 아닌 특정 index의 집합의 값을 선택하여 추출하고 싶을 때 활용 1-5. Boolean 인덱싱 조건 필터링을 동하여 Boolean 값을 이용한 색

Python 크롤링(서점)

# 셀레니움 : 웹 브라우저를 이용하여 웹 사이트에서 자동적으로 제어할 수 있음 # 뷰티풀 숩 이란 HTML과 XML 문서들의 구문을 분석하기 위한 파이썬 패키지이다. # HTML로부터 데이터를 추출하기 위해 사용할 수 있는 파싱된 페이지의 파스 트리를 만드는데, # 이는 웹 스크래핑에 유용하다. ✔ 메인 페이지 -> 파이썬 (검색) -> 어디서 찾을지(HTML) ✔ yes24에서 내용 긁어오기 ✔ 엑셀로 저장 ✔ 결과

Python 자료구조&알고리즘 - 힙(Heap)

1. 힙(Heap) 1-1. 힙 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 1-2. 힙을 사용하는 이유 배열에 데이터를 넣고 최대값, 최소값을 찾으려면 시간이 많이 걸릴 수 있음 힙에 데이터를 넣고 최대값, 최소값을 찾으면 시간이 적게 소모됨 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현등에 활용됨 2. 힙(Heap) 구조 힙은 최대값을 구하기 위한 구조(최대힙, Max Heap)와 최소값을 구하기 위한 구조(최소 힙, Min Heap)로 분류할 수 있음 힙은 아래와 같이 두가지 조건을 가지고 있는 자료구조 각 노드의..

Python 자료구조&알고리즘 - 트리(Tree), 이진 탐색

1. 트리(Tree) Node와 Branch를 이용해서 사이클을 이루지 않도록 구성한 데이터 구조 트리중 이진 트리(Binary Tree)형태의 구조로 탐색(검색)알고리즘을 구현을 위해 많이 사용됨 2. 알아둘 용어 Node: 트리에서 데이터를 저장하는 기본 요소(데이터와 다른 연결된 노드에 대한 Branch 정보를 포함) Root Node: 트리 맨 위에 있는 노드 Level: 최상위 노드를 Level 0으로 했을 때 하위 Branch로 연결된 노드의 깊이를 나타냄 Parent Node: 어떤 노드의 상위 레벨에 연결된 노드 Child Node: 어떤 노드의 하위 레벨에 연결된 노드 Leaf Node: Child Node가 하나도 없는 노드 Sibling Node: 동일한 Parent Node를 가진 ..

Python 자료구조&알고리즘 - 해쉬 테이블(Hash Table)

1. 해쉬 테이블(Hash Table) 키(key)에 데이터(value)를 저장하는 데이터 구조 파이썬에서는 딕셔너리(dick)타입이 해쉬 테이블의 예 key를 통해 데이터를 바로 찾을 수 있으므로 검색 속도가 빠름 보통 배열로 미리 Hash Table 사이즈 만큼 생성 후에 사용 2. 알아둘 용어 해쉬(Hash) : 임의의 값을 고정 길이로 변환하는 것 해쉬 테이블(Hash Table): 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해쉬 함수(Hashing Function) : key에 대해 산술 연산을 이용해 데이터 위치를 찾을 수 있는 함수 해쉬 값(Hash Values) 또는 해쉬 주소(Hash Address) : key를 해싱 하무로 연산해서 해쉬 값을 알아내고 이를 기반으로 해쉬 테이..

Python 알고리즘&자료구조 더블 링크드 리스트(Doubly Linked List)

1. 더블 링크드 리스트(Doubly Linked List) 양뱡향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능 class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self,data): self.head = Node(data) self.tail = self.head def insert(self,data): if self.head == None: self.head = Node(data) self.tail = self.head else: node = self.head while node.next: node..

Python 자료구조&알고리즘 - 링크드리스트(Linked List)

1. 링크드리스트(Linked List) 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 구조 데이터의 삽입과 삭제가 매우 빠름 C언어에서는 중요한 자료구조지만, 파이썬에서는 리스트 타입이 링크드 리스트 역할도 모구 지원 1-1. 링크드 리스트의 용어 노드(node) : 데이터 저장 단위(데이터, 포인터)로 구성 포인터(pointer) : 각 노드 안에서 다음이나 이전의 노드와의 연결정보를 가지고 있는 공간 1-2. 링크드 리스트로 데이터 추가하기 1-3. 링크드 리스트 데이터 출력하기 문제 데이터 30과 40 사이에 35를 삽입하는 코드를 작성해보자 2. 객체지향 프로그래밍으로 링크드 리스트를 구현 추가 삭제

Python 자료구조&알고리즘 - 스택(stack)

1. 스택(stack) 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 구조 LIFO(Last Input First Out) 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 1-1. 스택의 구조 스택은 LIFO 또는 FILO 데이터 관리 방식 스택의 활용 : 컴퓨터 내부의 프로세스 구조의 함수 동작 방식 기능 push() : 데이터를 스택에 쌓기 pop() : 데이터를 스택에서 꺼내기 1-2. 스택의 장점 구조가 단순해서 이해와 구조가 쉬움 데이터 저장/읽기 속도가 빠름 데이터 최대 개수를 미리 정해야 함(파이썬의 쟝우 재귀함수는 1000번까지만 호출이 가능) 저장 공간의 낭비가 발생할 수 있음(미리 최대 개수만큼 저장공간을 미리 확보하기 때문) 스택은 단순하고 빠른 성능을 위해 사용하므로 보통 배열 ..