現場写真をAIで分析

現場写真をAIで分析【VLMによる自動解析】

現場写真の整理・分析をAIが自動化します。

この記事では、VLMを使った現場写真の自動分析手法を解説します。

1. 現場写真分析の課題

従来の課題

【時間がかかる】
・大量の写真を手動で確認
・1枚ずつ説明文を記入
・整理・分類に時間

【属人化】
・記述内容がバラバラ
・担当者によって品質が異なる
・ノウハウが共有されない

【見落とし】
・重要な情報を見落とす
・後から確認が必要に

AI活用のメリット

項目 従来 AI活用後
処理時間 写真1枚5分 写真1枚30秒
品質 バラつきあり 一定水準
見落とし 発生する 補助として有効
作業負担 高い 大幅軽減

2. VLMでできること

基本機能

【説明生成】
・写真の内容を自動説明
・状況の要約
・特徴点の抽出

【分類】
・作業種別の判定
・進捗状況の判定
・天候・時間帯の推測

【チェック】
・安全面の確認
・品質面の確認
・異常の検出

分析可能な写真

写真種類 分析内容
全景写真 現場状況、進捗
作業写真 作業内容、人員
設備写真 機材、配置
完成写真 仕上がり、品質
損傷写真 状態、程度

3. 実践的な分析手法

基本的な分析

Python
def analyze_site_photo(image_path):
    prompt = """
    この現場写真を分析してください:

    1. 撮影場所の状況
    2. 確認できる作業内容
    3. 写っている設備・機材
    4. 天候・時間帯
    5. 特記事項
    """
    return analyze_image(image_path, prompt)

進捗確認

Python
def check_progress(image_path, expected_status):
    prompt = f"""
    この現場写真から工事の進捗を確認してください。

    予定状況:{expected_status}

    以下を判定してください:
    1. 実際の進捗状況
    2. 予定との比較(予定通り/遅延/前倒し)
    3. 確認できる完了作業
    4. 残作業の推測
    """
    return analyze_image(image_path, prompt)

安全チェック

Python
def safety_check(image_path):
    prompt = """
    この現場写真を安全管理の観点から分析してください:

    1. 確認できる安全対策
       - 保護具の着用状況
       - 安全設備の設置状況

    2. 潜在的なリスク
       - 危険箇所の有無
       - 改善が必要な点

    3. 総合評価(良好/要注意/要改善)
    """
    return analyze_image(image_path, prompt)

品質確認

Python
def quality_check(image_path, check_items):
    prompt = f"""
    この現場写真から品質を確認してください。

    確認項目:
    {check_items}

    各項目について:
    - 確認結果(OK/NG/確認不可)
    - コメント
    """
    return analyze_image(image_path, prompt)

4. 自動化システムの構築

システム構成

【処理フロー】
1. 写真をフォルダに保存
2. 自動で分析処理
3. 結果をデータベースに保存
4. レポートを自動生成

Pythonクラス

Python
import os
import json
from datetime import datetime
from pathlib import Path

class SitePhotoAnalyzer:
    def __init__(self, model="llava"):
        self.model = model
        self.results = []

    def analyze_photo(self, image_path):
        """1枚の写真を分析"""
        prompt = """
        この現場写真を分析してください:
        1. 状況説明(1-2文)
        2. 作業内容
        3. 確認できる設備
        4. 特記事項

        JSON形式で回答:
        {
            "description": "状況説明",
            "work_type": "作業内容",
            "equipment": ["設備1", "設備2"],
            "notes": "特記事項"
        }
        """
        result = analyze_image(image_path, prompt)
        return self._parse_result(result)

    def _parse_result(self, result_text):
        """結果をパース"""
        try:
            return json.loads(result_text)
        except:
            return {"raw": result_text}

    def process_folder(self, folder_path):
        """フォルダ内の写真を一括処理"""
        folder = Path(folder_path)
        image_extensions = {'.jpg', '.jpeg', '.png'}

        for image_path in folder.iterdir():
            if image_path.suffix.lower() in image_extensions:
                print(f"Processing: {image_path.name}")

                result = {
                    'filename': image_path.name,
                    'path': str(image_path),
                    'analyzed_at': datetime.now().isoformat(),
                    'analysis': self.analyze_photo(image_path)
                }
                self.results.append(result)

        return self.results

    def save_results(self, output_path):
        """結果を保存"""
        with open(output_path, 'w', encoding='utf-8') as f:
            json.dump(self.results, f, ensure_ascii=False, indent=2)

    def generate_summary(self):
        """サマリーを生成"""
        if not self.results:
            return "分析結果がありません"

        summary = f"分析写真数: {len(self.results)}\n\n"

        for result in self.results:
            summary += f"### {result['filename']}\n"
            analysis = result['analysis']
            if 'description' in analysis:
                summary += f"- {analysis['description']}\n"
            summary += "\n"

        return summary

使用例

Python
# 分析器を作成
analyzer = SitePhotoAnalyzer()

# フォルダ内の写真を一括分析
results = analyzer.process_folder("現場写真/2025-01-15/")

# 結果を保存
analyzer.save_results("analysis_results.json")

# サマリーを生成
summary = analyzer.generate_summary()
print(summary)

監視フォルダの設定

Python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class PhotoHandler(FileSystemEventHandler):
    def __init__(self, analyzer):
        self.analyzer = analyzer

    def on_created(self, event):
        if event.is_directory:
            return

        if event.src_path.lower().endswith(('.jpg', '.png', '.jpeg')):
            print(f"New photo detected: {event.src_path}")
            result = self.analyzer.analyze_photo(event.src_path)
            print(f"Analysis: {result}")

def watch_folder(folder_path):
    """フォルダを監視して自動分析"""
    analyzer = SitePhotoAnalyzer()
    handler = PhotoHandler(analyzer)

    observer = Observer()
    observer.schedule(handler, folder_path, recursive=True)
    observer.start()

    print(f"Watching: {folder_path}")

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

# 実行
watch_folder("現場写真/")

5. 報告書への活用

日報への組み込み

Python
def generate_daily_report(folder_path, date):
    """日報を自動生成"""
    analyzer = SitePhotoAnalyzer()
    results = analyzer.process_folder(folder_path)

    report = f"""
# 現場日報

日付:{date}
写真枚数:{len(results)}枚

## 作業状況

"""

    for i, result in enumerate(results, 1):
        analysis = result['analysis']
        report += f"""
### 写真{i}: {result['filename']}
- 状況:{analysis.get('description', '分析中')}
- 作業:{analysis.get('work_type', '-')}
- 備考:{analysis.get('notes', '-')}

"""

    report += """
## 明日の予定

(手動で記入)

---
*自動生成レポート*
"""

    return report

工事写真帳の作成

Python
def create_photo_book(folder_path, output_path):
    """工事写真帳を作成"""
    from reportlab.lib.pagesizes import A4
    from reportlab.pdfgen import canvas

    analyzer = SitePhotoAnalyzer()
    results = analyzer.process_folder(folder_path)

    # PDFを作成
    c = canvas.Canvas(output_path, pagesize=A4)

    for result in results:
        # 写真を配置
        c.drawImage(result['path'], 50, 400, width=500, height=350)

        # 説明文を配置
        analysis = result['analysis']
        c.drawString(50, 380, f"撮影日時: {result['analyzed_at']}")
        c.drawString(50, 360, f"状況: {analysis.get('description', '')}")
        c.drawString(50, 340, f"作業内容: {analysis.get('work_type', '')}")

        c.showPage()

    c.save()

6. 活用事例

事例1: 建設現場の日常管理

【導入前】
・毎日50枚の写真を整理
・1枚あたり5分で説明記入
・合計250分/日

【導入後】
・写真をフォルダに保存するだけ
・自動で分析・整理
・確認作業30分/日

【効果】
・作業時間:85%削減
・品質:一定水準を維持
・見落とし:大幅減少

事例2: 設備点検

課題

設備の状態を写真で記録するが、後から確認が困難

【解決策】
1. 点検写真を撮影
2. VLMで自動分析
3. 異常があれば自動通知

【効果】
・異常の早期発見
・記録の一貫性向上
・報告書作成の効率化

事例3: 安全パトロール

【活用方法】
・パトロール写真を撮影
・AIで安全チェック
・問題点を自動抽出
・是正措置を記録

【プロンプト例】
「この写真から安全上の問題点を
指摘してください:
- 保護具の着用
- 足場の状態
- 整理整頓の状況」

7. 運用のポイント

写真撮影のコツ

推奨
  • 明るく鮮明に撮影
  • 対象物が中央に
  • 全体と詳細を両方撮影
  • 角度を変えて複数枚
避ける
  • 暗い/逆光
  • ぶれている
  • 対象が小さすぎる

結果の確認

【必ず確認すること】
・事実と異なる記述がないか
・重要な見落としがないか
・専門用語が正しいか

【活用のポイント】
・AIは補助ツール
・最終確認は人間が行う
・継続的に精度を確認

継続的な改善

【改善サイクル】
1. 分析結果を確認
2. 問題点を洗い出す
3. プロンプトを改善
4. 再度分析
5. 効果を確認

8. まとめ

VLMによる写真分析

VLMによる写真分析
  • 自動で説明文を生成
  • 分類・整理が効率化
  • 安全・品質チェックに活用
  • 報告書作成を自動化

導入効果

・作業時間:70〜90%削減
・品質:一定水準を維持
・見落とし:削減
・属人化:解消

始め方

始め方
  • VLM環境を準備
  • 少量の写真でテスト
  • プロンプトを調整
  • 本格運用へ

関連記事

お問い合わせ

現場写真のAI分析についてのご相談は、お気軽にお問い合わせください。

お問い合わせはこちら

最終更新: 2025年1月