- 画像の読み込み: 道路状況が写っている画像を複数枚読み込む。
import cv2
import glob
images = [cv2.imread(file) for file in glob.glob('path_to_images/*.jpg')] - 画像の前処理: 機械学習モデルに適した形式に変換する。
processed_images = [cv2.resize(image, (224, 224)) for image in images]
processed_images = [image / 255.0 for image in processed_images]
- モデルの構築: 危険を予測するための機械学習モデルを構築する。
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']) - モデルの学習: 訓練データを用いてモデルを学習させる。
model.fit(processed_images, labels, epochs=10, batch_size=32, validation_split=0.2)
- 危険部分の検出: 予測とともに危険部分をマークする。
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)