컴공지식
-
JVM은 일종의 인터프리터컴공지식/프로그래밍언어론 2024. 11. 3. 14:57
자바 가상 머신(Java Virtual Machine, JVM)은 일종의 인터프리터라고 볼 수 있다.왜냐면 바이트코드라는 중간 언어를 받아서 그걸 실행하기 때문이다.자바 소스 코드를 컴파일하면 기계어로 바로 바뀌는 게 아니라, 바이트코드라는 형태로 변환된다.그리고 이 바이트코드를 JVM이 하나씩 읽으면서 실행하는 거다.이런 방식이 인터프리터랑 비슷하다. 다만, 요즘 JVM은 JIT(Just-In-Time) 컴파일러도 사용해서 일부 코드를 실행 중에 기계어로 변환해서 성능을 높이기도 한다.그래도 기본적으로 JVM이 바이트코드를 읽고 실행하는 부분은 인터프리터적인 역할을 한다고 볼 수 있으니까,일종의 인터프리터라는 말은 맞는 표현이다.
-
Box 데이터 구조컴공지식/프로그래밍언어론 2024. 11. 2. 17:18
1. Box 데이터 구조란?Box는 하나의 값을 저장할 수 있는 뮤터블 데이터 구조로, 저장된 값을 수정할 수 있어 함수형 언어에서 상태 변화를 관리할 수 있는 기초 구조가 된다. Box는 특정 값을 초기화한 후 필요할 때 값을 수정할 수 있으며, 이를 통해 뮤터블 데이터 구조의 역할을 할 수 있다.2. BFAE 문법: Box 기능 추가Box 기능을 기존 FAE(Functional Arithmetic Expressions) 언어에 추가한 BFAE(Basic FAE + Box) 문법은 다음과 같다:{newbox }: 새 Box를 생성하고 초기화할 수 있다.{setbox }: Box에 저장된 값을 변경할 수 있다.{openbox }: Box에 저장된 값을 추출하여 반환할 수 있다.{seqn }: 두 표현..
-
Optical Flow (광류 추적) 코드컴공지식/컴퓨터비전 2024. 10. 28. 22:28
KLT 알고리즘 기반 광류 추적 코드 #include #include using namespace std; using namespace cv; void DrawTrackingPoints(vector &points, Mat &image) { for (int i = 0; i circle(image, points[i], 3, Scalar(255, 0, 0), 2); } } int main() { VideoCapture cap(0); if (!cap.isOpened()) { cout return 0; } Mat currImage, prevImage, frame; vector prevPoints, currPoints;..
-
추적 (Tracking) 코드컴공지식/컴퓨터비전 2024. 10. 28. 22:27
마우스로 드래그하여 추적 영역을 설정한다.MeanShift / CamShift 적용된거다. #include #include using namespace std; using namespace cv; struct CallbackParam { Mat frame; Point pt1, pt2; Rect roi; bool drag = false; bool updated = false; }; void onMouse(int event, int x, int y, int flags, void* param) { CallbackParam *p = (CallbackParam *)param; if (event == EVENT_LBUTTONDOWN) { p->pt..
-
얼굴 인식 코드컴공지식/컴퓨터비전 2024. 10. 28. 22:20
OpenCV를 이용한 얼굴 인식 코드웹캠을 사용해서 실시간으로 얼굴을 인식해 준다. #include #include using namespace std; using namespace cv; int main() { CascadeClassifier face_classifier; Mat frame, grayframe; vector faces; VideoCapture cap(0); if (!cap.isOpened()) { cout return -1; } face_classifier.load("haarcascade_frontalface_alt.xml"); while (true) { cap >> fram..
-
Tracking(추적)이란?컴공지식/컴퓨터비전 2024. 10. 28. 20:43
추적은 특정 물체를 여러 프레임에 걸쳐 계속 추적하는 거다.예를 들어, 영상에서 한 번 선택한 얼굴이나 물체가 계속 어디로 움직이는지 찾아내는 거다.추적을 할 땐 ROI가 정해져 있다고 먼저 가정하고 시작한다. Mean Shift(평균 이동)에 대해 알아보자Mean Shift는 밀도 함수의 최대값(peak)을 찾는 방법이다.간단히 말해, 데이터가 가장 많이 몰려 있는 중심을 찾는 과정이다.이 알고리즘은 반복적(iterative) 방식으로 조금씩 이동하면서 밀도가 높은 곳을 향해 점점 더 가까이 가는 거다. Mean Shift가 어떻게 작동하나?초기 위치 설정먼저, 관심 영역(ROI)을 하나 선택한다. 그림에서 파란색 원이 그 역할을 하고 있다.원 안에는 여러 데이터 포인트(Features)가 있다...
-
Face Detection컴공지식/컴퓨터비전 2024. 10. 28. 20:21
Haar-like Feature가 얼굴 탐지를 위해 쓰인다.Haar-like Feature란 검은색 사각형과 흰색 사각형 안에 있는 픽셀 값들의 합의 차이를 계산하는 거다. 왜 이걸 쓰냐면 얼굴의 특징적인 부분을 탐지하기에 좋다. 예를 들어서눈은 밝은 이마 아래에 어둡게 보이는 경향이 있거, 코는 양옆보다 밝은 영역으로 탐지될 수 있다.그래서 검은색 사각형은 어두운 부분(눈 등), 흰색 사각형은 밝은 부분(이마 등)과 대응된다. Haar-like Feature의 특징은 검은 사각형 내부의 픽셀 합 - 흰 사각형 내부의 픽셀 합을 계산한다.이렇게 계산된 값이 얼굴 탐지에 중요한 특징 값이 되는 거다.그리고 아무 위치나 스케일에서 쓸 수 있다.이미지 안의 어디든, 크기가 커지든 작아지든 유연하게 탐지할 수 ..
-
객체 탐지 방법컴공지식/컴퓨터비전 2024. 10. 28. 19:59
크게 두 단계로 나뉜다.훈련(Training) 단계랑 테스트(Test) 단계 1. Training Stage (훈련 단계)데이터 수집: 먼저 객체 이미지랑 객체가 아닌 이미지(배경 이미지)를 아주 많이 모아야 한다. 예를 들어, 고양이 탐지 프로그램이라면 고양이 사진이랑 고양이 아닌 사진들을 모으는 거다.특징(feature) 추출: 이제 그 이미지들에서 객체를 대표할 수 있는 중요한 특징들을 뽑아야 한다. 예를 들어, 고양이 사진이라면 고양이의 귀 모양이나 털 패턴분류기(Classifier) 설계: 마지막으로 이 특징들을 바탕으로 객체를 구분할 수 있는 분류기를 설계한다. 혹은 특정 기준(Threshold)을 정해서, "이건 고양이다 vs 아니다"라고 판단할 수 있도록 훈련시킨다. 2. Test Stag..