분류 전체보기 428

자동차 번호판 인식 프로젝트

이번 포스팅에서는 자동차 번호판의 글씨를 인식하는 프로젝트에 대해서 정리하겠다. 프로젝트 진행 과정은 다음과 같다. 1. yolo를 사용해 이미지 내에서 자동차를 찾는다. 2. 자동차만 나오게 만들어준 사진에서 번호판을 찾는다.(EAST detector 사용) 3. pytesseract 모듈을 사용해 글씨를 인식한다. 먼저 필요한 모듈을 import하고 yolo를 load한다. import cv2 import numpy as np from imutils.object_detection import non_max_suppression import pytesseract min_confidence = 0.5 file_name = "image/image_03.png" east_decorator = 'frozen_..

Object Detection 2021.09.03

17. 그래프 순회 - 섬의 개수

https://leetcode.com/problems/number-of-islands/ Number of Islands - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 입력값이 정확히 그래프는 아니지만 사실상 동서남북이 모두 연결된 그래프로 가정하고 동일한 형태로 처리할 수 있으며, 네 방향 각각 DFS 재귀를 이용해 탐색을 끝마치면 1이 증가하는 형태로 육지의 개수를 파악할 수 있다. class Solution: def numIslands(self, grid..

16. 그래프 순회- BFS, DFS

그래프의 각 정점을 방문하는 그래프 순회에는 크게 깊이 우선 탐색(Depth-Frist-Search(이하 DFS))과 너비 우선 탐색(Breadth-First_search(이하 BFS))의 2가지 알고리즘이 있다. DFS는 주로 스택으로 구현하거나 재귀로 구현하며, 이후에 살펴볼 백트래킹을 통해 뛰어난 효용을 보인다. 반면 BFS는 주로 큐로 구현하며, 그래프의 최단 경로를 구하는 문제 등에 사용된다. 아래 그림과 같은 순회 그래프를 살펴보자. 그래프를 표현하는 방법에는 크게 인접 행렬과 인접 리스트의 2가지 방법이 있는데, 이번 포스팅에서는 위 그래프를 인접 리스트로 표현하겠다. 1. DFS graph={ 1:[2,3,4], 2:[5], 3:[5], 4:[], 5:[6,7], 6:[], 7:[3] } ..

15. 해시 - 상위 K 빈도 요소(우선순위 큐, *,zip)

https://leetcode.com/problems/top-k-frequent-elements/ Top K Frequent Elements - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 1. Counter를 이용한 음수 순 추출 요소의 값을 키로 하는 해시 테이블을 만들고 여기에 빈도 수를 저장한 다음, 우서눈위 큐(Priority Queue)를 이용해 k번만큼 추출하면 k번 이상 등장하는 요소를 손쉽게 추출할 수 있다. 파이썬에서 우선순위 큐는 힙을..

14. 큐

FIFO(first in first out)로 처리되는, 줄을 서는 것에 비유할 수 있는 큐는 상대적으로 스택에 비해서는 쓰임새가 적다. 그러나 스택에 비해서 그렇다는 얘기일 뿐, 이후에 살펴보게 될 데크나 우선순위 큐 같은 변형들은 여러 분야에서 매우 유용하게 쓰인다. 1. 큐를 이용한 스택 구현 - push() 할 때 큐를 이용해 재정렬 class MyStack: def __init__ (self): self.q=collections.deque() def push(self,x): self.q.append(x) # 요소 삽입 후 맨 앞에 두는 상태로 재정렬 for _ in range(len(self.q) - 1): self.q.append(self.q.popleft()) def pop(self): re..

직접 쓴 손 글씨(숫자) 인식하기 - 글씨 추출 및 검출

이번 포스팅에서는 이전 포스팅에 이어서 종이에 쓰인 글씨를 따로 추출하는 방법에 대해서 알아보겠다. 먼저 이미지의 윤곽선을 추출한다. # cv2.findCountours() function changed from OpenCV3 to openCV4: not it have only two parameters instead of 3 # 윤곽선을 찾아낸다 cvMajorVersion=cv2.__version__.split('.')[0] print('OpenCV version:',cvMajorVersion) # check for contours on thresh if int(cvMajorVersion) >=4: contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST..

Object Detection 2021.08.27

13. 스택 - 지금보다 큰 값은 언제 나타날까?

https://leetcode.com/problems/daily-temperatures/ Daily Temperatures - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 매일의 화씨 온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라. 이 문제도 스택을 이용하면 상당히 좋은 성능으로 문제를 해결 할 수 있다. 1. answer=[0]*len(temperature)로 두어서 정답값을 바로바로 참조해서 변경할 수 있도록..

직접 쓴 손 글씨(숫자) 인식하기 - 필터링을 통한 인식률 향상시키는 방법

이번 포스팅에서는 내가 직접 쓴 손 글씨를 인식하는 프로그램을 만들기 위해 먼저 인식할 이미지를 필터링을 통해 더 인식하기 쉽게 만들어 주는 과정에 대해 정리해 보겠다. 위 사진은 인식할 이미지이다. 먼저 필요한 모듈들을 import 하고 사진 정보를 불러오겠다. import cv2 import numpy as np import matplotlib.pyplot as plt frame='digits_357.jpg' img=cv2.imread(frame) plt.imshow(img) print('width:{} pixels'.format(img.shape[1])) print('height:{} pixels'.format(img.shape[0])) print('{} channels'.format(img.sha..

Object Detection 2021.08.26

12. 스택 - 중복문자 제거

https://leetcode.com/problems/remove-duplicate-letters/ Remove Duplicate Letters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 중복된 문자를 지우고 사전식 순서로 나열하라. 상당히 난해한 문제이다. 그러나 스택으로 해결할 수 있다. 먼저 collections.counter 객체를 이용해서 각 알파벳의 출현 수를 구할 수 있다. set() 자료형을 사용해서 중복되지 않게 자료들을 넣을 수 있다. ..

11. 스택 - 유효한 괄호

https://leetcode.com/problems/valid-parentheses/submissions/ Valid Parentheses - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 괄호로 된 입력값이 유효한지 판별하라. 전형적인 스택 문제로 매우 쉬우면서도 기본기를 점검할 수 있는 좋은 문제이다. class Solution: def isValid(self, s: str) -> bool: d={'}':'{',']':'[',')':'('} stack=[]..