シリーズ記事一覧
タイトル リンク | |
---|---|
第1回 | 環境構築 |
第2回 | Python 概要 |
第3回 | Python 基礎 |
第4回 | Pythonで学ぶWebの基本と実践 |
第5回 | Streamlitを使ってみよう |
第6回 | Streamlitでリアルタイム画像処理 |
第7回 | リアルタイムで顔検出を行ってみよう |
リアルタイムで顔検出を行うアプリを作成してみよう
概要
YOLOを用いて物体検出を行い、StreamlitでWebアプリケーションとして実装してみよう。
YOLOとは
YOLO(You Only Look Once)は、ディープラーニングに基づいた物体検出アルゴリズムであり、高速かつ効率的な検出を実現する。
メリット
- 高速: リアルタイム処理が可能
- 検出精度が高い: 最新のモデルでは高精度な検出が可能
- 導入が簡単: 事前学習済みモデルを利用可能
デメリット
- 小さな物体や遠くの物体の検出精度が低い
- 重なり合った物体の検出精度が低い
- 複数の物体が検出された場合、精度が低下することがある
Webアプリケーション作成
ライブラリをインストール
pip install ultralytics streamlit opencv-python numpy
-
ultralytics
: YOLOを提供するライブラリ -
streamlit
: Web UIを作成するライブラリ -
opencv-python
: カメラ映像の取得・処理に必要なライブラリ -
numpy
: 画像データ処理に必要なライブラリ
プログラムファイル作成
以下内容をst-yolo.py
として作成し、保存する
import streamlit as st
import cv2
import numpy as np
from ultralytics import YOLO
# Load YOLO model
model = YOLO("yolov8n.pt")
# Streamlit app setup
st.title("Real-time Object Detection (YOLOv8 + Web Camera)")
start_button = st.button("Start Camera")
stop_button = st.button("Stop Camera")
FRAME_WINDOW = st.image([])
# Camera setup
camera = cv2.VideoCapture(0)
# App state
if 'running' not in st.session_state:
st.session_state['running'] = False
# Button actions
if start_button:
st.session_state['running'] = True
if stop_button:
st.session_state['running'] = False
# Real-time object detection
if st.session_state['running']:
while True:
_, frame = camera.read()
if frame is None:
st.write("Camera disconnected or unavailable.")
st.session_state['running'] = False
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = model(frame)
annotated_frame = results[0].plot()
FRAME_WINDOW.image(annotated_frame, channels="RGB")
if not st.session_state['running']:
break
else:
st.write("Camera stopped.")
camera.release()
プログラムを起動
streamlit run st-yolo.py