시각화를 활용한 컴퓨터 비전 애플리케이션 개선
Ultralytics Python 패키지를 사용해 컴퓨터 비전 애플리케이션의 데이터를 이해하기 쉬운 그래프로 변환하고 더 나은 인사이트를 얻는 방법을 알아보세요.
Nuvola Ladi9 분 읽기
공항 터미널과 기차역부터 쇼핑몰에 이르기까지 매분 엄청난 양의 데이터가 생성됩니다. AI 활용이 확대되면서 이 데이터의 상당 부분을 분석하고 세분화하고 있습니다. 하지만 때로는 AI 모델의 결과만으로 패턴을 파악하거나 추세를 한눈에 이해하기 어려울 수 있습니다. 이때 데이터 시각화를 활용하면 복잡한 결과를 명확하고 쉽게 이해할 수 있는 인사이트로 바꿀 수 있습니다.
컴퓨터 비전 애플리케이션에서는 특히 그렇습니다. 컴퓨터 비전은 기계가 이미지와 동영상처럼 주변 세계의 시각 정보를 해석하고 이해하도록 돕는 인공지능 (AI)의 한 분야입니다. Ultralytics YOLO11과 같은 비전 AI 모델은 이러한 시각 데이터를 분석해 정보를 얻는 데 도움이 되며, 데이터 시각화는 그 정보를 이해하기 쉬운 형식으로 표현합니다.
간단히 말해 데이터 시각화는 의미 있는 분석 그래프를 사용해 원시 데이터와 실제 이해 사이의 간극을 좁힙니다. 기계가 작업을 수행하는 것만으로는 충분하지 않으며, 결과를 이해하기 쉽게 설명해야 하므로 이는 중요합니다.
이야기를 전달해야 할 필요성 때문에 데이터 시각화가 빠르게 성장하고 있으며, 시장 규모는 2030년까지 183억 6천만 달러에 이를 것으로 전망됩니다. 앞서 컴퓨터 비전이 어떻게 가치 있는 비즈니스 인사이트를 제공하는지 살펴보았습니다. 오늘은 Ultralytics 패키지를 사용해 컴퓨터 비전 애플리케이션을 위한 명확하고 통찰력 있는 분석 그래프를 생성하는 방법을 한 단계 더 자세히 알아보겠습니다.

그림 1. YOLO11 출력 결과를 기반으로 데이터를 시각화한 예시입니다.
컴퓨터 비전 애플리케이션의 데이터 시각화 개요#
컴퓨터 비전 애플리케이션에서 데이터 시각화란 객체 탐지 및 추적과 같은 컴퓨터 비전 작업의 결과를 이해하기 쉬운 차트나 대시보드로 변환하는 것을 의미합니다. 이러한 시각 자료는 특히 대량의 동영상 자료를 다룰 때 패턴과 추세를 파악하는 데 도움이 됩니다.
예를 들어, 몇 시간 분량의 감시 영상을 직접 검토하는 대신 시간에 따른 차량 또는 사람 탐지 수를 보여 주는 간단한 선 그래프를 활용하면 가장 붐비는 시간대나 유난히 한산한 시간대를 빠르게 파악할 수 있습니다.
데이터 시각화가 유용한 주요 이유는 다음과 같습니다.
- 복잡한 데이터를 단순화합니다: 수천 건의 객체 탐지 결과는 파악하기 벅찰 수 있지만, 막대 차트나 원형 차트와 같은 시각화를 활용하면 어떤 객체가 가장 자주 등장하는지 등 전체적인 상황을 쉽게 파악할 수 있습니다.
- 추세를 드러냅니다: 선 그래프와 막대 그래프는 보행자 통행량이 언제, 어디서 증가하는지와 같은 시간에 따른 패턴을 파악하는 데 도움이 됩니다.
- 시간을 절약합니다: 동영상의 모든 프레임을 검토하는 대신 차트를 활용하면 차량 활동의 급증이나 제한 구역에서의 이례적인 객체 출현과 같은 중요한 세부 사항을 빠르게 파악할 수 있습니다.
- 의사소통을 개선합니다: 시각 자료를 사용하면 비전문가와 인사이트를 더 쉽게 공유할 수 있어 모두가 결과를 명확하게 이해하도록 돕습니다.
다양한 데이터 시각화 유형#
다양한 분석 그래프를 활용하면 컴퓨터 비전 결과를 명확하고 이해하기 쉬운 시각 자료로 바꿀 수 있습니다. 감시 영상에서 사람과 차량을 탐지하는 컴퓨터 비전 애플리케이션을 개발한다고 가정해 보겠습니다. 이 경우 선 그래프를 사용하면 하루 동안 보행자 통행량이 증가하는 시점을 추적하는 등, 시간에 따라 탐지 수가 어떻게 변하는지 효과적으로 보여 줄 수 있습니다.
마찬가지로 막대 차트는 동영상에 자동차, 자전거, 보행자 중 어떤 유형의 객체가 더 많이 등장하는지 확인하는 등, 서로 다른 객체 유형의 탐지 수를 비교할 때 유용합니다. 반면 원형 차트는 각 객체 유형이 전체 탐지 결과에서 차지하는 비율을 보여 줍니다. 각 그래프는 용도가 다르며, 복잡한 컴퓨터 비전 데이터를 더 쉽게 해석하고 공유하도록 돕습니다.

그림 2. 분석 그래프 예시입니다.
컴퓨터 비전 인사이트를 얻기 위한 분석 그래프 생성#
데이터 시각화가 무엇인지, 다양한 분석 그래프가 왜 중요한지 살펴봤으니 이제 Ultralytics Analytics 솔루션을 사용해 컴퓨터 비전 모델 예측 결과를 시각화하는 방법을 자세히 알아보겠습니다. 단계별 절차를 살펴보기 전에 Ultralytics 패키지와 YOLO11과 같은 모델을 학습하고 사용하는 데 필요한 도구와 설정 옵션을 확인해 보겠습니다.
Ultralytics Python 패키지를 사용하면 모델 학습, 객체 탐지, 예측 실행, 결과 시각화를 쉽게 수행할 수 있습니다. 사용을 시작하려면 코딩 환경이 필요합니다. 간단한 옵션 세 가지를 소개합니다.
- 명령줄 인터페이스(CLI): 코드를 실행하기 위해 명령을 입력하는 기본적인 텍스트 전용 도구입니다. 시각적 인터페이스가 없으며, 터미널이나 명령 프롬프트에 명령을 입력해 사용합니다.
- Jupyter Notebooks: 코드 조각(“셀”이라고 함)을 한 번에 하나씩 작성하고 실행하며 테스트할 수 있는 대화형 코딩 환경입니다. 각 셀 바로 아래에 결과가 표시되어 단계별로 진행 상황을 쉽게 파악할 수 있습니다. 학습과 실험에 특히 유용합니다.
- Google Colab: 웹 브라우저에서 실행되는 무료 클라우드 기반 Jupyter Notebooks 버전입니다. 컴퓨터에 별도로 설정할 필요가 없으며 더 빠른 처리를 위한 무료 GPU를 사용할 수 있습니다.
이러한 도구를 사용하면 빠르게 시작할 수 있지만, Visual Studio Code (VS Code)와 같은 통합 개발 환경 (IDE)에 Ultralytics를 통합하거나 프로덕션 파이프라인에 포함할 수도 있습니다. 더 많은 옵션은 공식 Ultralytics 문서에서 확인해 보세요.
1단계: 환경 설정#
원하는 환경을 선택한 다음에는 예측을 실행하고 결과를 시각화할 수 있도록 환경을 설정해야 합니다. 앞서 언급한 환경 중 가장 익숙한 것을 사용할 수 있습니다.
Google Colab을 사용하는 경우 기본적으로 CPU가 사용되어 성능이 저하될 수 있다는 점에 유의하세요. 처리 속도를 높이려면 'Runtime' 메뉴에서 'Change runtime type'을 선택한 다음 하드웨어 가속기를 GPU(가능하면 T4)로 설정하세요.
환경을 준비하려면 아래에 표시된 명령을 사용해 Ultralytics Python 패키지를 설치해야 합니다. Colab이나 Jupyter와 같은 노트북 기반 도구에서는 명령 앞에 느낌표(!)를 추가하세요.
pip install ultralytics2단계: 동영상 파일 다운로드#
다음으로 작업에 사용할 동영상이 필요합니다. Pexels와 같은 무료 스톡 사이트에서 쉽게 다운로드할 수 있습니다. Ultralytics YOLO11이 탐지할 수 있는 객체가 포함된 동영상을 선택하세요. 모델은 COCO 데이터셋으로 사전 학습되었으므로 사람, 자동차, 자전거와 같은 일반적인 객체를 인식할 수 있습니다.
이 튜토리얼에서는 붐비는 공항 터미널에서 수하물을 처리하는 동영상을 사용합니다. 같은 동영상을 사용하거나 프로젝트에 적합한 다른 동영상을 선택할 수 있습니다.

그림 3. 공항 터미널에서 수하물을 처리하는 장면이 담긴 입력 동영상의 한 프레임입니다.
3단계: 패키지 가져오기#
다음으로 필요한 라이브러리를 가져오고 입력 동영상을 불러옵니다.
먼저 컴퓨터 비전에서 이미지와 동영상을 다룰 때 널리 사용되는 라이브러리인 OpenCV (cv2)를 가져옵니다. 또한 동영상에서 객체 탐지를 실행하고 분석 결과를 생성하는 데 도움이 되는 Ultralytics 라이브러리도 가져옵니다.
그런 다음 경로를 지정해 동영상 파일을 열어 보겠습니다. "path/to/video.mp4"를 다운로드한 동영상 파일의 실제 위치로 바꾸세요.
또한 아래 코드 스니펫에는 동영상이 제대로 로드되었는지 확인하는 간단한 검사도 포함되어 있습니다. 경로가 잘못되었거나 파일이 손상된 경우 프로그램이 중단되고 "Error reading video file." 오류 메시지가 표시됩니다.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"4단계: 동영상 기록기 준비#
그런 다음 출력을 저장할 동영상 기록기를 설정합니다. 분석을 실행하면 이 코드 부분에서 원본 동영상의 각 프레임을 기반으로 생성된 그래프를 기록하는 새 동영상 파일이 만들어집니다.
아래 코드 스니펫에서는 먼저 입력 동영상의 주요 속성인 너비, 높이, 초당 프레임 수 (fps)를 추출합니다. 이 값은 동영상에서 직접 가져온 다음 출력 기록에 적합한 형식이 되도록 정수로 변환합니다.
다음으로 cv2.VideoWriter 함수를 사용해 "analytics_output.avi"라는 새 동영상 파일을 만듭니다(필요에 따라 이름을 바꿀 수 있습니다). 동영상은 일반적인 압축 방식인 MJPG 형식으로 저장됩니다. 원본 동영상의 크기와 관계없이 출력 해상도는 1280×720픽셀로 설정됩니다.
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
out = cv2.VideoWriter(
"analytics_output.avi",
cv2.VideoWriter_fourcc(*"MJPG"),
fps,
(1280, 720),
)5단계: Ultralytics Analytics 솔루션 설정#
이제 동영상에서 그래프를 생성하도록 Ultralytics Analytics 솔루션을 설정하겠습니다. 선형, 원형, 영역형, 막대형 차트 등 데이터를 표시할 방법과 사용할 YOLO 모델을 선택할 수 있습니다. 이 예제에서는 경량 YOLO11n 모델("yolo11n.pt")을 사용하고 결과를 영역형 그래프로 표시합니다.
analytics = solutions.Analytics(
show=True,
analytics_type="area",
model="yolo11n.pt",
)6단계: 입력 동영상 처리#
코드의 마지막 부분에서는 동영상을 프레임 단위로 처리하는 루프를 실행합니다. 각 프레임은 분석 도구로 전달되고, 분석 도구는 그래프를 실시간으로 업데이트합니다. 업데이트된 그래프는 출력 동영상에 기록됩니다. 프레임을 읽을 수 없으면 루프가 중단됩니다. 모든 프레임을 처리한 후 동영상이 저장되고 열려 있는 창이 모두 닫힙니다.
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if success:
frame_count += 1
results = analytics(im0, frame_count)
out.write(results.plot_im)
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()7단계: 전체 코드 구성#
마지막으로 모든 내용을 하나로 구성해 보겠습니다. 몇 줄의 코드를 추가하면 두 개의 출력 동영상을 생성할 수 있습니다. 하나는 바운딩 박스와 레이블이 표시된 Ultralytics YOLO11 객체 탐지 결과를 보여 주고, 다른 하나는 실시간 분석 그래프를 보여 줍니다.
이를 위해 VideoWriter 인스턴스 두 개를 설정합니다. 하나는 예측 동영상을 저장하고, 다른 하나는 분석 결과를 저장합니다. 이 코드 버전에는 객체 추적과 그래프 생성이 모두 포함되어 있어 시각적 인사이트와 함께 탐지 결과를 확인할 수 있습니다.
다음은 예측 및 분석 결과 예시와 함께 제공되는 전체 코드입니다.
import cv2
from ultralytics import YOLO, solutions
# 모델과 동영상 로드
model = YOLO('yolo11n.pt')
cap = cv2.VideoCapture('path/to/video.mp4')
assert cap.isOpened(), "Error opening video"
# 속성 가져오기
w, h = int(cap.get(3)), int(cap.get(4))
fps = cap.get(5)
analytics_res = (1280, 720)
# 예측 및 분석 동영상용 기록기
out_pred = cv2.VideoWriter('output_predictions.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, (w, h))
out_ana = cv2.VideoWriter('output_analytics.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, analytics_res)
# 분석 설정
analytics = solutions.Analytics(show=True, analytics_type="area", model='yolo11n.pt')
# 프레임 처리
frame_count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame_count += 1
pred_frame = model.track(frame, persist=True)[0].plot()
out_pred.write(pred_frame)
resized = cv2.resize(pred_frame, analytics_res)
out_ana.write(analytics(resized, frame_count).plot_im)
cap.release(), out_pred.release(), out_ana.release(), cv2.destroyAllWindows()위 코드가 정상적으로 실행되면 출력 동영상 두 개가 생성됩니다. “output_predictions.avi” 파일에는 바운딩 박스와 레이블이 표시된 객체 탐지 결과가 나타나고, “output_analytics.avi” 파일에는 탐지 결과를 바탕으로 한 실시간 분석 그래프가 표시됩니다.

그림 4. “output_predictions.avi” 파일의 한 프레임입니다.
다음은 예측 결과를 기반으로 한 분석 출력의 한 프레임입니다. 영역 차트를 활용하면 시간에 따른 여행 가방 수의 변동과 같은 인사이트를 얻을 수 있습니다. 예를 들어 268번 프레임 부근의 급증은 해당 동영상 구간에서 여행 가방의 이동이나 활동이 있었음을 나타냅니다.

그림 5. 영역 그래프로 시각화한 Ultralytics YOLO11 예측 결과입니다.
실제 컴퓨터 비전 애플리케이션에서 그래프 활용하기#
데이터 시각화가 큰 영향을 미치는 실제 컴퓨터 비전 애플리케이션은 다음과 같습니다.
- 의료: 컴퓨터 비전 시스템은 환자 활동, 직원 이동, 장비 사용을 실시간으로 모니터링할 수 있습니다. 이를 통해 방대한 시각 데이터가 생성되며, 시각화하면 환자 점유율이 가장 높은 시간대나 대응 지연과 같은 패턴을 파악할 수 있습니다.
- 소매 및 전자상거래: 비전 AI를 활용해 고객의 이동, 선반 앞 체류 시간, 제품과의 상호작용을 추적할 수 있습니다. 막대 차트나 원형 차트와 같은 시각적 분석을 통해 고객의 관심이 집중되는 매장 구역이나 상품을 파악할 수 있으므로, 소매업체는 상품 배치를 최적화하고 전환율을 높일 수 있습니다.
- 제조: 컴퓨터 비전 모델을 탑재한 카메라는 조립 라인의 결함, 안전 규정 위반, 장비 상태를 모니터링할 수 있습니다. 데이터 시각화를 통해 가장 흔한 결함 유형의 추세를 확인하거나 오류율이 가장 높은 시간대를 파악할 수 있으므로 더 빠른 의사 결정과 예방 정비가 가능합니다.
핵심 요점#
Ultralytics 패키지를 사용하면 동영상 자료를 명확하고 유익한 그래프로 쉽게 변환해 시간에 따라 나타나는 사람이나 객체의 수와 같은 상황을 파악할 수 있습니다. 몇 시간 분량의 동영상을 직접 검토하는 대신 주요 패턴과 추세를 보여 주는 시각적 요약을 생성하면 더 신속하게 조치를 취할 수 있습니다. 병원, 소매점, 제조 시설 등 어디에서든 이러한 그래프는 복잡한 AI 출력을 누구나 이해하고 활용할 수 있는 인사이트로 바꿔 줍니다.
AI에 대해 더 알아보고 싶으신가요? GitHub 저장소를 살펴보고, 커뮤니티에 참여하고, 라이선스 옵션을 확인해 컴퓨터 비전 프로젝트를 시작해 보세요. 솔루션 페이지에서 제조업 분야의 AI와 물류 분야의 컴퓨터 비전 같은 혁신 사례를 확인할 수 있습니다.
작성자
댓글
질문하거나 결과를 공유하거나 다른 사람을 도와주세요.










