YOLO_NAS_DEEPSORT
SORT
OpenCV : 다양한 이미지/영상 처리를 위한 Python 오픈소스 라이브러리이며 뿐만 아니라 BSD(Berkeley Software Distribution) 라이센서를 따르기 때문에 상업적으로 사용이 가능하다! 참고로 OpenCV는 RGB 순서가 아니라 BGR순서이다.
다음 명령어를 사용하여 OpenCV 라이브러리 설치
pip install opencv-python
OpenCV라이브러리가 설치되었으면 이제 python 파일 하나를 생성 후 확인
import cv2 ## OpenCV 라이브러리
print(cv2.__version__) ## 버전확인
4.5.5
import cv2
image = 'test.jpg' # 출력하고싶은 이미지 경로
image = cv2.imread(image) # imread()함수로 이미지 읽어오기
image.shape #이미지의 세로 가로
image = cv2.imshow('보여지는 이름', image) # imshow()함수를 이용하여 새로운 창에서 이미지를 출력
cv2.waitKey() # 아무키나 입력받을때까지 대기
cv2.destroyAllWindows()# 모든 창 닫기
결과
아무키나 눌러서 종료
뿐만 아니라 다양한 함수로 이미지의 색상등을 변경 가능
image = cv2.imread(image, cv2.IMREAD_COLOR)
##일반 cv2.imread(image)랑같다
Gray = cv2.imread(image, cv2.IMREAD_GRAYSCALE)
## 흑백으로 변경
Unchanged = cv2.imread(image, cv2.IMREAD_UNCHANGED)
## 투명영역 포함
cv2.imshow("Normal", image) ## 일반 출력
cv2.imshow("GRAY", Gray) ## 흑백 출력
cv2.imshow("Unchanged", Unchanged) ## 투명 포함 출력
cv2.waitKet()
cv2.destroyAllWindows()
이번에는 동영상파일 읽어오기
무료_동영상_사이트
해당 사이트에서 마음에드는 동영상 저장 후 다음 실습코드 사용
import cv2
Video = cv2.VideoCapture("test.mp4")## 동영상 경로
## 동영상은 이미지의 연속이므로 반복문을 이용하여 출력
while Video.isOpened():
ret , frame = Video.read()
## ret -> 결과값이 있는지 없는지(성공여부)
## frame -> 영상에서 읽어 온 이미지
if not ret : # 더 읽을 영상이 없다면
print("동영상 종료")
break
cv2.imshow("Video", frame)
if cv2.waitKey(25) == ord('q'): ##만약 q를 입력하면 종료 숫자를 조절해서 재생속도 컨트롤 가능
print("동영상 재생 종료.")
break
Video.release() ## Video 자원 종료
cv2.destroyAllWindows()
import cv2
import numpy as np
### 세로 480 X 가로 640,3채널
img = np.zeros((480,640,3),dtype=np.uint8)
img [:] = (255,255,255)
## 전체 공간을 흰색으로
print(img)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((480,640,3),dtype=np.uint8)
img [100:200, 200:300] = (255,255,255)
## 세로 : 100~200
## 가로 : 200~300
## 정해진 공간을 흰색으로
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((480,640,3),dtype=np.uint8)
COLOR = (0,255,255)
## BGR : Yellow
THICKNESS = 3
## 두께
cv2.line(img. (50,100),(400,50),COLOR, THICKNESS, cv2.LINE_8)
## X1,Y1 -> X2,X2 직선
cv2.line(img. (50,200),(400,150),COLOR, THICKNESS, cv2.LINE_8)
## Line_4
cv2.line(img. (50,300),(400,250),COLOR, THICKNESS, cv2.LINE_8)
## Line_AA
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((480,640,3),dtype=np.uint8)
COLOR = (255,255,0)
## BGR : 옥색
THICKNESS = 10
## 두께
RADIUS = 50
## 원은 반지름이 필요
cv2.circle(img, (200,100), RADIUS, COLOR, THICKNESS, cv2.LINE_AA)
## 속이 빈 원
cv2.circle(img, (200,100), RADIUS, COLOR, cv2.FILLED, cv2.LINE_AA)
## 두께인자를 cv2.FILLED 또는 -1을 입력 -> 속이 꽉 찬 원
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((480,640,3),dtype=np.uint8)
COLOR = (0,255,0)
## BGR : 녹색
THICKNESS = 3
## 두께
cv2.rectangle(img,(100,100),(200,200), COLOR,THICKNESS)
## 속이 빈 사각형
cv2.rectangle(img,(300,100),(400,300), COLOR,-1)
## 속이 꽉 찬 사각형
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((480,640,3),dtype=np.uint8)
COLOR = (0,0,255)
## BGR : RED
THICKNESS = 3
## 두께
point1 = np.array([[100,100], [200,100], [100,200]])
point2 = np.array([[200,100],[300,100],[300,200]])
point3 = np.array( [[[100,300],[200,300],[100,400]], [[200,300],[300,300],[300,400]]] )
cv2.polylines(img, [point1], True, COLOR, THICKNESS, cv2.LINE_AA)
## 닫힘 여부 = True 시작과 끝을 연결
cv2.polylines(img, [point2], False, COLOR, THICKNESS, cv2.LINE_AA)
## 닫힘 여부 = False 시작과 끝을 연결하지 않음
cv2.fillPoly(img,point3,COLOR,cv2.LINE_AA)
## 꽉 찬 다각형
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import cv2
img = np.zeros((480,640,3), dtype =np.uint8)
SCALE = 1
COLOR = (255,255,255)
THICKESS = 2
cv2.putText(img, "Hello Wolrd.", (20,50), cv2.FONT_HERSHEY_SIMPLEX, SCALE, COLOR, THICKESS)
cv2.putText(img, "Hello Wolrd.", (20,150),FONT_HERSHEY_SIMPLEX | cv2.FONT_ITALIC, SCALE, COLOR, THICKESS)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyALLWindow()
OpenCV에서는 한글을 제공하지 않기 때문에 우회하는 방법이 필요 PIL라이브러리 필요
import numpy as np
import cv2
from PIL import ImageFont, ImageDraw, Image
def HangulText(src, text, pos, font_sz, font_color):
img = Image.fromarray(src)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('fonts/gulim.ttc', font_sz)
draw.text(pos, text, font = font, fill=font_color)
return np.array(img)
img = np.zeros((480,640,3), dtype =np.uint8)
font_sz = 30
COLOR = (255,255,255)
img = HangulText(img, "안녕", (20,50),font_sz, COLOR)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
image = cv2.imread(img, cv2.IMREAD_GRAYSCALE) #
save = cv2.imwrite('img_save.jpg', img)
## 원하는 파일명.확장자를 입력
import cv2
Video = cv2.VideoCapture("test.mp4")## 동영상 경로
### 코텍 정의
fourcc = cv2.VideoWriter_fourcc(*'DIVX') ## *를 붙이면 각 글자들이 띄어쓰기가 된다.
width = round(Video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = round(Video.get(cv2.CAP_PROP_FRAME_HEIGHT))
## 불러온 동영상과 같은 크기로 지정
fps = Video.get(cv2.CAP_PROP_FPS)
## 불러온 동영상과 같은 FPS(영상속도)로 지정
out = cv2.VideoWriter('test.avi',fourcc, fps, (width, height))
while Video.isOpened():
ret , frame = Video.read()
if not ret :
print("동영상 종료")
break
cv2.imshow("Video", frame)
cv2.write(frame) ## 영상 데이터만 저장 가능 소리X
if cv2.waitKey(25) == ord('q'):
print("동영상 재생 종료.")
break
out.release()
## 자원해제
Video.release()
cv2.destroyAllWindows()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.resize(img, (400,500))
## 가로 400 X 세로 500 크기로 조정
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.imread(img)
img = cv2.resize(img, None, fx = 0.5, fy= 0.5)
## 가로 0.5 세로 0.5 비율로 조정
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyALLWindow()
이미지를 조정할 때 보다 자연스럽게 처리하기 위해 사용
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.resize(img, None, fx = 3, fy= 3, interpolation = cv2.INTER_CUBIC)
## 가로 3배 세로 3배 비율로 조정
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyALLWindow()
while Video.isOpened(): ret,frame = Video.read() if not ret: break fram = cv2.resize(fram, (400,500)) cv2.imshow(‘Video’, frame) if cv2.waitKey(1) == ord(‘q’): break
Video.release() cv2.destroyAllWindows()
2. 비율로 변환
```python
import cv2
Video = cv2.VideoCapture("test.mp4")## 동영상 경로
while Video.isOpened():
ret,frame = Video.read()
if not ret:
break
fram = cv2.resize(fram, None, fx=1.5, fy=1.5, interpolation = cv2.INTER_CUBIC)
cv2.imshow('Video', frame)
if cv2.waitKey(1) == ord('q'):
break
Video.release()
cv2.destroyAllWindows()
원하는 영역 자르기
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.imread(img)
crop = img[100:200, 200:400]
## 세로 100~200
## 가로 300~400
cv2.imshow("Crop", crop)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.imread(img)
flip_horizontal = cv2.flip(img, 1)
## flipcode > 0 좌우대칭
cv2.imshow("flip_horizontal", flip_horizontal)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.imread(img)
flip_vertical = cv2.flip(img, 0)
## flipcode == 0 상하대칭
cv2.imshow("flip_vertical", flip_vertical)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg' # 출력하고싶은 이미지 경로
img = cv2.imread(img)
flip = cv2.flip(img, -1)
## flipcode < 0 상하좌우대칭
cv2.imshow("flip", flip)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
rotate_90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
### 시계방향으로 90도 회전
cv2.imshow("rotate_90", rotate_90)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
rotate_180 = cv2.rotate(img, cv2.ROTATE_180)
### 180도 회전
cv2.imshow("rotate_180", rotate_180)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
rotate_270 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
### 시계방향으로 270도 회전
cv2.imshow("rotate_270", rotate_270)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
GRAY = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
### 흑백으로 이미지 변경
cv2.imshow("GRAY", GRAY)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
## 커널 사이즈는 보통 양수의 홀수로 지정
## ex) (3,3) or (5,5) or (7,7)
kernel_3 = cv2.GaussianBlue(img, (3,3), 0)
kernel_5 = cv2.GaussianBlue(img, (5,5), 0)
kernel_7 = cv2.GaussianBlue(img, (7,7), 0)
cv2.imshow("kernel_3", kernel_3)
cv2.imshow("kernel_5", kernel_5)
cv2.imshow("kernel_7", kernel_7)
cv2.waitKey(0)
cv2.destroyALLWindow()
import cv2
img = 'test.jpg'
img = cv2.imread(img)
sigma1 = cv2.GaussianBlue(img, (0,0), 1)
sigma2 = cv2.GaussianBlue(img, (0,0), 2)
sigma3 = cv2.GaussianBlue(img, (0,0), 3)
cv2.imshow("sigma1", sigma1)
cv2.imshow("sigma2", sigma2)
cv2.imshow("sigma3", sigma3)
cv2.waitKey(0)
cv2.destroyALLWindow()
문서등을 사진을 찍으면 사다리꼴 -> 원하는 직사각으로 변형
나중에 OCR을 통한 텍스트인식 때 필요함
import cv2
img = 'test.jpg'
img = cv2.imread(img)
height, width = 640, 240
### 결과물 크기 지정
src = np.array([[], [], [], []], dtype = np.float32)
### 4개의 점을 이용하여 펼치는 작업 필요
### 사각형의 왼쪽 꼭지점부터 시계방향으로 점을 지정
out = np.array([[0,0], [width,0], [width,height], [0,height]], dtype = np.float32)
### 출력 포인트 설정
matrix = cv2.getPerspectiveTransfrom(src,out)
## 변환행렬을 얻음
result = cv2.wrapgetPerspective(width, height)
## 변환행렬을 적용
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyALLWindow()
SORT
SORT (People)
목표 : YOLO_NAS를 이용하여 people blur 처리
YOLO-NAS vs YOLOv8
2018 KAKAO BLIND RECRUITMENT
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프론 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프론 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
리액트에서 페이지를 이동할 때 다음과 같은 코드를 사용하는데 페이지 이동이 이뤄지지 않는다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
—# 다음과 같은 에러발생 시
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
1. 프로젝트 생성
0. 인텔리제이 설치
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
React Router Dom 예제를 실행시 원하는 성곡적으로 컴파일 되었다고 떴는데 원하는 라우터로 이동하지 않는 오류가 발생했다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
본 정리는 인프런 John Ahn 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의를 참고하였습니다.
셀레니움으로 작업 시 페이지 로딩이전에 데이터 접근을 하려다가 에러가 발생할 수 있다. 이 때 다음과 같은 코드를 사용하여 로딩시간까지 대기를 할 수 있다.
FaceID
모두의 딥러닝
Flutter
FireBase
AWS
JAVA
YOLO V4 YOLO(You Only Look Once) : 다중 객체 인식
IOT(사물인터넷)
그래프
NVIDIA 딥러닝 기초
c++로 백준 문제 풀 시 다음 코드를 입력
추천 시스템 기술
MacOs기준 Step1. Python가상환경 설정 python venv 가상환경 miniforge3 conda 가상환경 가상환경을 만드는 2가지 방법 중 python venv를 이용 python venv 가상환경 설정 방법.
우선순위 큐 우선순위 큐(priority queue): 우선순위를 가진 항목들을 저장하는 큐 FIFO순서가 아니라 우선 순위가 높은 데이터가 먼저 나가게 된다. 우선순위 큐를 구현하는 방법
프론트엔드 WEB
MAC 사용 brew install tesseract pip install pytesseract
트리(TREE)
Step 1 이미지 변형
OpenCV ?? OpenCV : 다양한 이미지/영상 처리를 위한 Python 오픈소스 라이브러리이며 뿐만 아니라 BSD(Berkeley Software Distribution) 라이센서를 따르기 때문에 상업적으로 사용이 가능하다! 참고로 OpenCV는 RGB 순서가 아니라 BGR...
정렬(Sort) 정렬 알고리즘
Doubly linked list (이중연결리스트)
Socket Programing Two essential types of sockets 소켓은 2종류가 있다. 1번째로는 TCP, 2번째로는 UDT 각각 소켓의 특징은 다음과 같다.
내가 보려고 정리해놓는 부트캠프 정보들
FastAPI를 이용하여 서버에서 이미지를 받아와서 영수증 재료를 처리하는 코드를 만들어보자!!
List
OCR: 광학 문자 인식(Optical character recognition; OCR)은 사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 것
QUEUE 먼저 들어온 데이터가 먼저 나가는 자료구조 선입선출(FIFO: First-In-First-Out) ex) 매표소의 대기열 통신에서의 데이터 패킷들의 모델링에 이용 프린터와 컴퓨터 사이의 버퍼링 스택과 마찬가지로 프로그래머의 도구 많은 알고리즘에서 ...
스택구조 스택은 자료구조의 기본이다 LIFO구조 제일 마지막에 들어온 원소가 제일 먼저 나감 ex) 바닥부터 책을 하나하나 쌓아 올리는 느낌 #배열과 스택은 비슷하지만 다르다 스택을 이용하여 처리하려면 배열의 값을 다시 스택에 담는 행위가...
재귀함수를 이용하여 피보나치 수열 함수 만들기.
용어 Client : 현재 우리가 사용하는 컴퓨터이며 Sever로부터 요청을 하는 쪽 Server : 항시 켜져 있으면서 Clinet의 요청을 대기 Packet : 데이터를 보낼 때 한 묶음 편지봉투의 개념 Protocol : 암묵적인 룰 이야기하는 방식에 대한 서...
하나의 양의 정수 X을 입력 받아 다음 수식의 결과를 출력하는 프로그램을 작성 1 + (1+2) + (1+2+3) + (1+2+3+4) + … + (1+2+…+X) ex) 입력 : 4 출력 : 20
Markdown이란 ?
교재 : C언어로 쉽게 풀어쓴 자료구조 (천인국, 공용해, 하상호 지음)
Git