Pythonを用いて、道路状況が写っている画像を読み込み、そこから危険を予測するシステム

  1. 画像の読み込み: 道路状況が写っている画像を複数枚読み込む。
    import cv2
    import glob
    
    images = [cv2.imread(file) for file in glob.glob('path_to_images/*.jpg')]
  2. 画像の前処理: 機械学習モデルに適した形式に変換する。
    processed_images = [cv2.resize(image, (224, 224)) for image in images]
    processed_images = [image / 255.0 for image in processed_images]
  3. モデルの構築: 危険を予測するための機械学習モデルを構築する。
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
    
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(128, activation='relu'),
        Dense(1, activation='sigmoid')
    ])
    
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  4. モデルの学習: 訓練データを用いてモデルを学習させる。
    model.fit(processed_images, labels, epochs=10, batch_size=32, validation_split=0.2)
  5. 危険部分の検出: 予測とともに危険部分をマークする。
    def mark_danger(image, danger_zone):
        marked_image = image.copy()
        cv2.rectangle(marked_image, danger_zone[0], danger_zone[1], (0, 0, 255), 2)
        return marked_image
    
    danger_zones = [(50, 50, 100, 100)]  # Example danger zone coordinates
    
    predictions = model.predict(processed_images)
    marked_images = [mark_danger(image, zone) for image, zone in zip(images, danger_zones) if predictions[idx] > 0.5]
    
    for idx, marked_image in enumerate(marked_images):
        cv2.imwrite(f'output/marked_image_{idx}.jpg', marked_image)