Python
아나콘다 설치
* 파이썬을 배우고 싶다면 점프 투 파이썬 참고
Jupyter Notebook
* 자주쓰는 단축키 : ctrl + [ , ] : 들여쓰기, 내어쓰기
shift + enter : cell 실행
ctrl + enter : 선택한 cell 실행
ctrl + Y : redo(다시실행)
(커맨드 모드에서) B : 셀 밑으로 생성
(커맨드 모드에서) DD : 위의 셀 삭제
(커맨드 모드에서) shift + M : 아래 셀이랑 합치기
(에디트 모드에서) ctrl+shift+- : 셀 나누기
=> Help - keyboard shortcuts 참고
* python2는 print a도 됨(좀 다름) 2는 지원 종료했음
기본적으로 다뤄보기
영상 처리
영상 입출력 매체(ex 카메라, 스캐너)를 통해 입력 받은 이미지나 영상에서 물체(Object), 전경(Foreground), 배경(Background) 등 물체와 주변 환경에 대한 데이터를 분석해서 유의미한 정보를 생성하는 기술
한계점 : 카메라와 피사체의 거리, 외부 환경에 대한 밝기 등은 이미지만으로 컴퓨터가 판단 불가
컴퓨터 비전
입력된 영상의 객체나 패턴의 인식 등을 연구하는 분야(ex 중국 cctv의 사람 분석)
아날로그 영상의 디지털 변환
디지털 전환을 위해 샘플링함(특정 시간으로 쪼갬) : 무한소수 형태의 시간에 무한소수 형태의 값을 가질 수 있음 / 디지털 변환 상태 X
-> 양자화(컴퓨터에서 인식할 수 있는 값으로 변환) : 1.111...초 - 1초 등 정해진 방법으로 변환, 다만 데이터 손실 발생할 수 있음 / 디지털 변환 상태 O
이미지 데이터
각 픽셀에 RGB 값이 저장되어 있음
R, G, B는 0~255까지 존재
해상도만큼 픽셀 데이터 존재
OpenCV
실시간 영상처리에 중점을 둔 영상처리 라이브러리
OpenCV 4.5.0 이후 : Apache 2.0 라이선스(출처 표기 의무만 있음)
언어 지원 : C/C++, Python, Java, C#(OpenCvSharp 라이브러리 형태로 사용 가능)
OS 지원 : Window, macOS, 리눅스, 안드로이드, iOS, FreeBSD 등등
계산 효율성과 실시간 처리에 중점을 두고 설계 되었음
500개 이상의 알고리즘, 5000개 이상의 함수 존재
=> 컴퓨터 비전과 관련된 이론 지식을 깊게 알지 못해도 가능하게 해줌
- 설치
pip install opencv-python
디지털 이미지 프로세싱
이미지 데이터에서 유의미한 데이터를 얻기 위해 가공 필요 => 전처리(노이즈&디노이즈, 특징&유사성 검출 등)
용어
이미지 - 너비(width), 높이(height)
이미지를 담기 위한 변수 설정(너비 x 높이)
IDE - 통합 개발 환경 / 코딩, 디버그, 컴파일, 배포 등 프로그램 개발 관련 작업을 처리할 수 있도록 개발된 소프트웨어
색상 표현 정밀도(비트)
= 비트 깊이 = 색상 깊이 = 색상 심도
- 화소 하나의 색을 지시하기 위해 활용 되는 비트 수
- 정밀도가 높으면 처리 결과 정밀도도 높다(정밀도가 정확도에 비례하진 않는다)
채널(색상 채널)
- 일반적으로 Red, Green, Blue, Alpha로 구성
- Hue, Saturation, Value 채널 존재
- 흑백 이미지 => 1채널
OpenCV(python) 채널 표현
(row, column, 채널 수)
color = np.zeros((height, width, 3), np.uint8) // 높이부터
gray = np.zeros((rows, cols, 1), np.uint8) // row는 행 갯수, col은 열 갯수
np 라이브러리를 이용해 그 안에 있는 zeros를 불러오는 것
=> 연산량 증가, 정확도 감소 등의 이유로 그레이스케일, 이진화 이미지 사용
이미지 들어가는 순서는 BGR 순서(blue-green-red)
ROI (Region Of Interest)
OpenCV에서는 N 차원 배열 사용
1920x1280 비율의 3채널 색상 이미지를 사용할 경우 처리해야 할 데이터 공간은
2,347,600 * 3 => 너무 많음
선택과 집중 필요
ROI 처리를 통해 필요한 영역만 잘라낼 수 있다
COI(Channel Of Interest)
관심 채널을 설정해 데이터의 양 1/3으로 감축
그레이스케일과 다름
그레이 스케일은 각 커러 채널별 가중치를 다르게 주어서 계산
히스토그램
도수분포표를 막대그래프로 나타낸 것
비전인식에서 많이 쓰이는 python 자료형
리스트, 튜플, 사전, 집합
리스트List
[값1, 값2, ... 값n]
python에는 배열이 없음 그래서 이걸 위해 필요한 라이브러리가 있음(Numpy)
Container
데이터 종류와 무관하게 값 저장 가능
Mutable
리스트 값의 생성, 추가, 삭제, 변경 가능
Seqence
순서가 중요, index를 통해 값에 접근
OpenCV: Color Space Conversions
enum cv::ColorConversionCodes { cv::COLOR_BGR2BGRA = 0, cv::COLOR_RGB2RGBA = COLOR_BGR2BGRA, cv::COLOR_BGRA2BGR = 1, cv::COLOR_RGBA2RGB = COLOR_BGRA2BGR, cv::COLOR_BGR2RGBA = 2, cv::COLOR_RGB2BGRA = COLOR_BGR2RGBA, cv::COLOR_R
docs.opencv.org
2중 리스트 / 2차원 배열
* 검색어 키워드 : python 데이터 접근 지정
슬라이싱
값 수정
요소 삭제
요소 추출
위치 반환
요소 삽입
요소 추가
튜플 사용법
쌍을 표현할 때 많이 씀 x, y가 있는데 변경하면 안될 경우 (x, y) => 튜플 안에 넣기
생성
인덱싱
슬라이싱
연산
삭제/수정 불가능
수정하지 말아야 할 값들을 순서쌍으로 보관할 필요가 있을 때
=> OpenCV에서 중심점, x, y 좌표 등은 튜플로 반환이 된다
느낀 점
강사님의 빨리 흥미있는 분야를 찾아서 집중하는 게 중요하다는 말에 백번 공감한다.
첫 직장부터 관련분야의 스펙을 쌓아올릴 수 있다면 금상첨화일 것이다.
아직 IT 분야밖에 안배워서 관심 있던 OT 분야를 기다리고 있긴 하지만...
열심히 고민해봐야겠다.
오늘 배운 비전인식도 재밌어보였다. 아마 얼굴 인식하는 프로그램을 만들게 될 것 같다.
비전인식에선 대학때 배웠던 모니터에서 이미지 표시 원리가 나와서 신기했다.
'공부 > [TIL] Digital Twin Bootcamp' 카테고리의 다른 글
TIL_211231_Vision 인식 (0) | 2021.12.31 |
---|---|
TIL_211230_VISION 인식 (0) | 2021.12.30 |
TIL_211227_Frontend (1) | 2021.12.27 |
TIL_211224_Frontend (0) | 2021.12.25 |
TIL_211223_Frontend (0) | 2021.12.23 |