Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
computer vision tutorial - OpenCV를 이용한 color detecting
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2025-05-06
2025-05-06
91
이 문서는 [Computer vision engineer](https://www.youtube.com/@ComputerVisionEngineer) 의 유튜브에 있는 **Computer vision begineer projects** 채널의 [Detecting color with Python and OpenCV using HSV colorspace | Computer vision tutoria](https://youtu.be/aFNDh5k3SjU?si=wQT_6JT8202RUCP1) 영상을 학습한 내용을 담고 있습니다. # 소개 ML/AI 시대에 컴퓨터 비전은 이미지를 인식하는 것을 넘어, 방대한 시각 데이터를 분석하고 이해하는데 사용한다. 자율 주행, 의료 진단, 스마트 팩토리, 물류 센터, 개인 맞춤형 서비스 등 다양한 분야에서 혁신적인 발전을 이끌어 낼 수 있다. 여기에서는 OpenCV를 이용해서 색상감지(Color Detection)을 하는 방법을 살펴볼 것이다. 여기에서 할 것들은 아래와 같다. 1. 웹캠으로 부터 비디오 프레임을 읽는다. 2. 비디오 프레임으로 부터 "노란색"을 가진 물체를 인식한다. 3. 해당 물체를 처리 할 수 있도록 바운드 박스 처리한다. 4. 물체를 정확히 인식할 수 있도록 최적화를 해본다. # 준비 Python 과 에디터만 준비되면 된다. 테스트에 사용한 내 환경은 아래와 같다. * 우분투 리눅스 24.10: 윈도우즈, 맥 어떤 운영체제라도 상관 없다. 그냥 내 환경이 그렇다는 것이다. * Python 3.12 테스트를 위해서 필요한 python Package는 아래와 같다. ``` numpy==2.2.5 opencv-python==4.11.0.86 pillow==11.2.1 ``` requirements.txt에 위 내용을 복사한다. 그리고 python 가상환경을 만든 다음 의존성을 설치한다. ``` $ virtuenv venv $ source venv/bin/activate $ pip install -r requirements.txt ``` # 참고 #### OpenCV OpenCV(Open Source Computer Vision Library)는 실시간 컴퓨터 비전을 목표로 개발된 오픈소스 라이브러리다. OpenCV를 이용하여 이미지와 비디오를 이해하고 분석하는 다양한 애플리케이션을 개발 할 수 있다. OpenCV의 주요 특징은 아래와 같다. * 크로스플랫폼: 윈도우즈, 리눅스, 맥, 안드로이드, iOS등 다양한 운영체제에서 사용 할 수 있다. * 다양한 프로그래밍 언어 지원: C++, Python, Java 등 다양한 언어를 지원한다. 특히 Python과 연동하여 데이터 과학 및 AI 분야에서 널리 사용한다. * 방대한 기능: 이미지 처리, 객체 감지, 비디오 분석, 피처 검출, 카메라 보장, 3D 재구성, 머신러닝 알고리즘 등 광범위한 기능을 가지고 있다. OpenCV의 주요 모듈은 아래와 같다. * Core: 기본적엔 데이터 구조와 선형 대수 연산, 파일 입출력등의 핵심 기능 * 이미지 프로세싕(Imgproc): 이미지 필터링, 기하학적 변환, 색 공간 변환, 히스토그램 분석등 이미지 처리를 위한 기본 기능 * Video Analysis(video): 비디오 캡처, 객체 추적, 배경제거 등 비디오 분석 기능 * Feature Detection and Description(features2d): 코너 검출, 특징 추출(SIFT, SURF, ORB 등) * Object Detection(objectect): 얼굴 인식(Haar cascade, LBP), 객체 검출(HOG, YOLO, SSD 등) * Calib3D: 카메라 캘리브레이션, 스테레오 비전, 3D 재구성 등 * High-Level GUI(highgui): 이미지 및 비디오 디스플레이, 사용자 인터페이스 생성 등 * Machine Learinig: SVM, K-Means, Decision Tree등 기본적인 머신러닝 알고리즘 * DNN: 딥러닝 모델 추론을 위한 모듈(TensorFlow, PyTorch, Caffe 등 모델 지원) * Photo(photo): 이미지 복원, 노이즈 제거, HDR(High Dynamic Range)이미징 등 #### HSV Colorspace 컴퓨터에서 이미지를 표한하기 위해서 일반적으로 **RGB(Red, Green, Blue)**를 널리 사용한다. RGB는 매우 직관적이기는 하지만 조명의 변화, 색상 유사성, 색상 기반 분할의 어려움을 가지고 있어서, 비전영역에서는 사용하기 곤란한 측면이 있다. HSV 색상공간(Hue, Saturation, Value)은 RGB에 비해서 인간이 색상을 인지하는 방식과 더 유사하기 때문에 특히 비전에서 자주사용하는 색상 모델이다. HSV는 Hue, Saturation, Value의 3가지로 구성된다. * Hue(색상): 빨강, 초록, 파랑과 같은 주된 색상을 나타낸다. 색상환에서 0에서 360도 사이의 각도로 표현한다. * Saturation(채도): 색상의 순도 혹은 강도를 나타낸다. 채도가 높을 수록 순수하고 선명한 색상이며 채도가 낮을 수록 흐릿하거나 회색에 가깝다. 0에서 1 혹은 0%~100%로 표현된다. 소위 말하는 쨍한 느낌, 물빠진 느낌과 관련된 값이다. * Value(명도): 색상의 밝기 또는 어두움을 나타낸다. 명도가 높을수록 밝은 색상이고, 명도가 낮을 수록 어두운 색상이다. 0~1 혹은 0%~100%의 값으로 표현된다. 0은 검은색, 1은 흰색에 해당한다. 아래의 이미지는 HSV 색상환으로 Hue, Saturation, Value를 직관적으로 확인 할 수 있다.  #### RGB와 BGR RGB Color space는 빛의 삼원색인 빨간색(Red), 초록색(Green), 파란색(Blue)를 혼합하여 다양한 색상을 표현하는 **가산 혼합 방식**의 색상 모델이다. 컴퓨터 모니터, TV, 스마트폰 화면등 대부분의 디지털 디스플레이 장치에서 색상을 포혐하는 기본적인 방식이다. BGR은 RGB와 동일한 3개의 색을 사용하지만 데이터 순서에 차이가 있다. 예를 들어 노란색(yello)의 RGB 값은 255,255,0 이지며, BGR 값은 0,255,255 이다. OpenCV는 BGR을 기본 색상 모델로 사용하기 때문에, 이하 모든 내용은 BGR을 기본으로 한다. # 웹캠 데이터 가져오기 아래는 웹캠 데이터로 부터 영상 프레임(frame)를 가져오는 가장 간단한 코드다. ```python import cv2 import time cap = cv2.VideoCapture(0, cv2.CAP_V4L2) cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) cap.set(cv2.CAP_PROP_FPS, 30) while True: ret, frame = cap.read() if not ret: break cv2.imshow('Webcam', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 이 Python 코드는 OpenCV(cv2)라이브러리를 사용해서 웹캠으로 부터 실시간 비디오 스트림을 캡처하고 화면에 표시하는 간단한 프로그램이다. ```python cv2.VideoCapture(0, cv2.CAP_V4L2) ``` 이 함수는 비디오 캡처 객체를 생성한다. 매개변수로는 시스템에 연결된 웹캠의 번호다. 0은 일반적으로 첫번째 웹캠을 나타낸다. 2개 이상의 웹캠을 가지고 있다면, 1, 2 등 다른 인덱스를 사용하면 된다. 두 번째 매개변수는 **비디오 캡처 백앤드(backend)** 를 지정하기 위해서 사용한다. V4L2(Video4Linux)는 리눅스 운영체제에서 비디오 캡처 장치와 상호작용하기 위한 인터페이스다. 윈도우즈 운영체제의 경우 cv2.CAP_DSHOW(DirectShow)를 주로 사용한다. ```python cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) cap.set(cv2.CAP_PROP_FPS, 30) ``` 비디오 캡처 객체를 설정한다. * cv2.VideoWriter_fourcc(\*'MJPG'): 이 속성은 비디오 스트림의 FourCC(Four Character Code)를 설정하는데 사용하는 속성 ID로 비디오 코덱, 압축형식을 식별 혹은 설정하는데 사용한다. \*MJPG는 문자열 'MJPG'의 각 문자를 개별적인 인수로 전달하는 Python의 언패킹 문법이다. 따라서 이 함수는 문자 'M', 'J', 'P', 'G'를 인수로 받아서 MJPG에 해당하는 4바이트 정수값을 생성한다. MJPG(Motion JPG)는 비디오의 각 프레임을 독립적인 JPEG 이미지로 압축하는 방식의 코덱이다. 비교적 낮은 압출률로 인해 화질 손실이 적고, 디코딩 속도가 빠르다는 장점이 있어서 웹캠 스트리밍에 자주 사용한다. * 1280 * 720 해상도로 캡처춰한다. * FPS는 30으로 설정한다. 초당 30개의 프레임을 캡처한다. ```python while True: ret, frame = cap.read() if not ret: break cv2.imshow('Webcam', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break ``` cap.read() 메서드를 이용해서 웹캠으로 부터 하나의 프레임을 읽을 수 있다. 이 메서드는 2개의 값을 반환한다. * ret: 프레임을 성공적으로 읽었는지 여부. 성공적으로 읽었다면 **True** 그렇지 않다면 **False**를 반환한다. * Frame: 프레임 데이터로 **NumPy** 배열 형태로 포현되며, 이미지의 픽셀 정보를 담고 있다. **cv2.imshow()** 함수는 윈도우를 띄우고 이미지를 표시한다. **if cv2.waitKey(1) &0xFF == ord('q')** 키보드 입력을 기다린다. 대기시간으로 1미리초를 설정해서 화면이 부드럽게 재생되도록 했다. 사용자가 'q'를 입력하면 루프를 벗어난다. 실행하면 아래와 같이 웹캠이 작동하는 것을 확인 할 수 있을 것이다. # Color detection 비디오 프레임을 읽을 수 있게 됐으니, 프레임에서 특정 색상을 detection 해보자. 여기에서는 노란색을 detection 할 것이다. 노란색은 RGB로 255,255,0 이다. 하지만 실제 이미지에서는 255, 255, 0으로 딱 맞아 떨어지는 색상은 찾아볼 수 없을 것이다. 대게는 색상의 범위를 가지게 될 것이다. 예를 들어서 노란색의 경우 HSV 색상환 상에서 아래와 같이 범위를 설정 할 수 있다.  #### 180도 HSV 변환 HSV 색상환은 (아래 참고 이미지처럼) 0~360 이지만 OpenCV는 메모리를 아끼기 위해서 0~180으로 공간을 압축해서 사용한다. 예를 들어 노란색(0, 255, 255)는 HSV 색상환에서는 60이지만 OpenCV에서는 30이 된다. ![[HSV-색상환.png]] ##### HSV 범위 추출 유틸리티 함수 색상이 주어졌을 때, 범위를 설정 할 수 있는 간단한 유틸리티 함수를 만들었다. 파일의 이름은 util.py다. ```python import numpy as np import cv2 def get_limits(color): c = np.uint8([[color]]) # BGR values hsvC = cv2.cvtColor(c, cv2.COLOR_BGR2HSV) tolerance = 7 hue = hsvC[0][0][0] # Get the hue value # Handle red hue wrap-around if hue >= 165: # Upper limit for divided red hue lowerLimit = np.array([hue - tolerance, 100, 100], dtype=np.uint8) upperLimit = np.array([180, 255, 255], dtype=np.uint8) elif hue <= 15: # Lower limit for divided red hue lowerLimit = np.array([0, 100, 100], dtype=np.uint8) upperLimit = np.array([hue + tolerance, 255, 255], dtype=np.uint8) else: lowerLimit = np.array([hue - tolerance, 100, 100], dtype=np.uint8) upperLimit = np.array([hue + tolerance, 255, 255], dtype=np.uint8) return lowerLimit, upperLimit ``` 이 Python 코드는 NumPy와 OpenCV 라이브러리를 사용해서 주어진 RGB 색상 값에 대한 HSV 색상 공간에서의 허용 범위를 계산한다. **np.unit8(color)** 입력된 color 값을 3차원의 배열형태로 만들어준다. **cv2.cvtColor(c, cv2.COLOR_BGR2HSV)** cvtColor() 함수를 사용해서 BGR 색상 공간을 HSV 색상 공간으로 변환한다. **tolerancee = 7** Hue 값의 허용 범위를 7로 고정했다. 이는 기본 Hue 값에서 +/-7 범위의 Hue 값을 허용 범위로 설정하겠다는 의미다. 값을 크게하면 더 넓은 Hue 범위를 가지게 되는데, 원래 색에서 좀 더 떨어진 광범위한 색상을 선택하게 된다. 값을 작게 할 수록, 좀 더 Color에 일치하는 좁은 범위의 색상 범위를 선택한다. **hue=hsv\[0\]\[0\]\[0\]** HSV 배열 hsvC에서 Hue 값을 추출한다. **if hue >= 165, elif hue <= 15** OpenCV는 HSV 생상환을 0~180으로 압축한다. 따라서 0과 360 근처에 있는 빨란색은 변환된 값에서는 0부근과 180도 부근에 위치하게 된다. 따라서 OpenCV로 빨간색을 감지하게 되면 0과 180도에 멀리 떨어져 있기 때문에 감지 할 수 없게 된다. 이를 Hue wrap-around 현상이라고 하는데, 이 현상을 바로잡기 위한 코드다. **else** Hue 값이 15보다 크고 165보다 작은 경우 빨간색이 아닌 일반적인 생상범위에 해당한다. 이 경우 Hue 값을 중심으로 +/- tolerance 범위로 설정하여 해당 색상 주변의 유사한 색상을 정의한다. get_limits 함수에 \[0,255,255\]를 입력하면 "\[30, 255, 255\]"가 출력 된다. 각 값은 1. 30: Hue의 값이 30이다. 순수 노란색을 의미한다. 2. 255: Saturation으로 최대 채도를 의미한다. 즉 색상이 강렬하고 뚜렷하게 표현된다. 3. 255: Value로 최대 명도를 의미한다. 즉 가장 맑은 상태이다. # Masking 웹캠 프레임 추출 코드를 아래와 같이 수정해보자. ```python import cv2 from util import get_limits yellow = [0, 255, 255] cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) cap.set(cv2.CAP_PROP_FPS, 30) lowerLimit, upperLimit = get_limits(color=yellow) while True: ret, frame = cap.read() hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsvImage, lowerLimit, upperLimit) cv2.imshow('frame',mask) if cv2.waitKey(1)&0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 코드의 달라진 부분들이다. ```python lowerLimit, upperLimit = get_limits(color=yellow) ``` 노란색(yellow)에 대한 BGR 값을 get_limits 함수에 넘겨서 범위를 계산한다. ```python hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) ``` 웹캠에서 넘오언 BGR 타입이미지를 HSV 타입으로 변환한다. ```python mask = cv2.inRange(hsvImage, lowerLimit, upperLimit) ``` OpenCV의 inRange함수는 이미지의 각 픽셀을 검사하여 loerLimit와 upperLimmit 범위속하는지 검사한다. 범위에 속한다면 흰색으로 그렇지 않다면 검정색을 나타내는 이진 마스크를 리턴한다. 노란색 객체를 이용해서 테스트를 진행해보자. 아래와 같이 노란색이 하얀색으로 마스킹 되는 것을 확인 할 수 있다. <iframe width="560" height="315" src="https://www.youtube.com/embed/qWj_zgyUc68?si=5M45ZKOYPsogOAUJ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> # Bounding Box 이제 마지막 코드다. 아래 코드는 노란색 객체들에 **bounding Box** 처리를 한다. 바운딩 박스(Bounding Box)는 비디오 프레임 내의 **객체의 위치와 대략적인 크기를 나타내는데 사용하는 사격형**이다. 바운딩 박스는 컴퓨터 비전에서 아래의 목적으로 사용한다. **📌 객체감지(Object Detection)** 이미지 내에 어떤 객체가 있는지 식별하고, 그 객체의 위치를 바운딩 박스로 표시한다. 예를 들어 자율 주행 자동차가 주변의 차량, 보행자, 신호등 등을 감지하고 각자의 위치를 바운딩 박스로 나타내는데 사용 할 수 있다. **📌 객체추적(Object Tracking)** 비디오 시퀀스에서 특정 객체의 움직임을 따라서 바운딩 박스의 위치를 업데이트하여 이를 추적 할 수 있다. 예를 들어 영상속에서 특정 사람이나 객체를 계속 추적하는데 사용하는데 사용 할 수 있다. **📌 이미지 어노테이션(Image Annotation)** 머신러닝 코델을 학슴시키기 위한 데이터셋을 구축할 때, 이미지 내의 관심 객체 주위에 **사람이 직접 바인딩 박스를 그려** 객체의 위치를 제공 할 수 있다. 이러한 어노테이션은 모델이 객체의 특징과 위치를 학습하는데 필수적이다 **📌 객체 인식(Object Recognition)** 바운딩 박스로 객체의 영역을 한정하고, 그 영역의 특징을 분석하여 어떤 종류의 객체인지 분류한다. **📌 관심 영역(Region onf Interest, ROI) 설정** 이미지 분석시 특정 객체 또는 영역에 집중하기 위해 바운딩 박스를 사용하여 처리 범위를 체한한다. 이를 통해 불필요한 연산을 줄이고 효율성을 높일 수 있다. 아래는 Bounding 박스를 이용해서 노란색을 가진 객체를 감지(Object Detection)하고 추적(Object Tracking)하는 완전한 코드다. ```python import cv2 from PIL import Image from util import get_limits yellow = [0, 255, 255] # yellow in BGR colorspace cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) cap.set(cv2.CAP_PROP_FPS, 30) lowerLimit, upperLimit = get_limits(color=yellow) print(lowerLimit, upperLimit) while True: ret, frame = cap.read() hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsvImage, lowerLimit, upperLimit) mask_ = Image.fromarray(mask) bbox = mask_.getbbox() if bbox is not None: x1, y1, x2, y2 = bbox frame = cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 5) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 새로 추가된 부분만 분석해보자. ```python mask_ = Image.fromarray(mask) ``` 이 코드는 **PIL(Pillow)** 라이브러리의 Image.fromarray() 함수를 사용하여 NumPy 배열 형태의 마스크 이미지를 PIL Image 객체로 변환하는 일을 한다. 왜 PIL Image 객체로 변환하는 지는 아래 코드를 보면 이해할 수 있다. ```python bbox = mask_.getbbox() ``` getbox()는 PIL.Image 객체에서 제공하는 메서드이다. 이 메서드는 이미지내에서 **값이 0이 아닌(즉 흰색) 픽셀들을 포함하는 가장 작은 사각형(bounding box)** 의 좌표를 반환한다. OpenCV의 NumPy배열은 getbbox()에 해당하는 메서드를 제공하지 않는다. 따라서 NumPy 배열을 PIL.Image 객체로 변환하는 것이다. ```python if bbox is not None: x1, y1, x2, y2 = bbox frame = cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 5) cv2.imshow('frame', frame) ``` 바운드 박스가 검출될 경우, 바운드 박스의 좌표를 이용해서 이미지 프레임에 상자를 그린다. cv2.rectrangle를 이용 두께가 5인 녹색(0,255,0)사격항여로 바운드 박스를 표시했다. 아래는 실제 작동 화면이다. <iframe width="560" height="315" src="https://www.youtube.com/embed/vkQndqyU0do?si=M4HLjm_XK8aKo8kU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> 뒤 배경이 좀 지저분해서 바운드 박스가 잘 못 처리되는 경향이 있기는 하지만, 대체로 잘 잡는 것을 확인 할 수 있다. # Use Case 이러한 애플리케이션은 아래의 목적으로 사용 할 수 있을 것이다. **📌 로봇 자동화** * 물체 식별 및 추적: 공장 자동화 라인에서 특정 색상의 부품을 식별하고, 이를 로봇 팔이 조작하도록 할 수 있다. * 경로 안내 및 이동: 로봇이 특정 색상의 선이나 마커를 따라 이동하도록 프로그래밍 할 수 있다. 예를 들어 창고에서 노란색 선을 따라 자율 이동 로봇이 물건을 운반하거나, 농업용 로봇이 특정 줄을 따라서 이동하면서 작업하도록 할 수 있다. * **📌 스마트 교통 시스템** * 교통 신호등 감지: 자율 주행 자동차나 ADAS에서 교통 신호등의 색상을 실시간으로 감지하여 안전하게 정지하거나 주행을 하는데 사용 할 수 있다. * 긴급차량 식별: 구급차나 소방차와 같이 특정 색상으로 표시된 긴급 차량을 자동으로 감지하여 다른 차량들에게 경고를 보내거나 우선통행권을 부여하는 시스템에 적용 할 수 있다. **📌 환경 모니터링** * 작물 생장 상태 분석: 특정 색상의 변화를 감지하여 작물의 건강 상태가 익은 정도를 모니터링 할 수 있다. * 수질오염 감시: 특정 오염 물질로 인해 발생하는 물의 색 변화를 감지하여 수질 오염을 실시간으로 모니터링 하는데 사용 할 수 있다. **📌 품질관리 및 제조** * 제품 외관 검사: 제조 과정에서 제품의 색상 불량이나 이물질 혼합 여부를 자동으로 검사하는데 활용 할 수 있다. 예를 들어 식품 제조 라인에서 변색된 제품을 감지하거나 의류 제조 과정에서 색상에 차이가 나는 부분을 감지하여 품질을 관리하는데 적용 할 수 있다.
Recent Posts
computer vision tutorial - OpenCV를 이용한 color detecting
vLLM을 이용해서 오픈소스 LLM 서비스 구축하기
Vertex Gemini 기반 AI 에이전트 개발 06. LLM Native Application 개발
최신 경량 LLM Gemma 3 테스트
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Archive Posts
Tags
AI
machine learning
vision
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags