週 | テーマ | 内容 | 実習教材 |
1 | 導入・AIと農業 | AIの概要、農業との関係 | 農業事例を使ったAIの分類ワーク |
2 | Python基礎① | 変数、データ型、制御構文 | Jupyterノートでの基本練習 |
3 | Python基礎② | 関数、クラス、ライブラリ | 簡単な画像読み込みコード作成 |
4 | NumPy/Pandas入門 | 配列処理とデータフレーム | 作物データの統計処理ノート |
5 | Matplotlib/Seaborn | データの可視化 | 生育データ可視化演習 |
6 | OpenCV入門① | 画像の読み込み・表示・保存 | 畑の写真を処理して保存する演習 |
7 | OpenCV入門② | 画像の変換(リサイズ、ぼかしなど) | 作物画像の前処理ノート |
8 | OpenCV入門③ | 輪郭検出、ヒストグラム | 果実の輪郭抽出演習 |
9 | OpenCV+NumPy | マスク処理・フィルタ | 葉の病斑抽出 |
10 | 機械学習基礎① | 回帰・分類とは | Scikit-learnで作物分類演習 |
11 | 機械学習基礎② | データ前処理、評価指標 | 作物の病気画像分類準備 |
12 | 小プロジェクト | 作物画像分類システム | グループごとに分類モデル作成 |
週 | テーマ | 内容 | 実習教材 |
13 | ニューラルネットワーク基礎 | Perceptron、活性化関数 | 簡単なNNをKerasで構築 |
14 | CNN基礎① | 畳み込み・プーリング | 野菜画像でCNNモデル作成 |
15 | CNN基礎② | 正則化・データ拡張 | Augmentationで精度向上 |
16 | CNN応用① | 作物病害診断モデル | 葉の画像を分類するCNN |
17 | CNN応用② | 精度評価・混同行列 | 複数クラス分類と評価 |
18 | センサーデータ処理 | IoTセンサと画像の連携 | 土壌湿度+画像による推定 |
19 | 衛星データ基礎 | NDVI、衛星画像の読み方 | 衛星画像読み込み・NDVI算出 |
20 | 衛星データ応用① | NDVIによる生育診断 | 複数地点の衛星比較演習 |
21 | 衛星データ応用② | AIで異常検知 | 異常エリア自動検出モデル |
22 | GAN基礎 | 画像生成モデル | 葉画像の拡張用GAN構築 |
23 | 時系列AI基礎 | LSTMによる予測 | センサー+画像の成長予測 |
24 | 中プロジェクト | 画像+衛星データ統合 | スマート畑監視システム設計 |
週 | テーマ | 内容 | 実習教材 |
25 | 実装準備 | チームビルディング・テーマ決定 | オリジナルプロジェクト設計 |
26 | プロジェクト開発① | 実装フェーズ | データ収集・AIモデル統合 |
27 | プロジェクト開発② | 検証フェーズ | テスト・評価・改善 |
28 | 成果発表 | 最終プレゼン・フィードバック | 発表資料とコード提出 |
農業事例 | 該当するAI分類 | コメント |
作物の病害を画像から診断 | 画像分類(教師あり) | 教師データとして「病気画像+ラベル」が必要 |
異常気象を検知してアラートを出す | 異常検知(教師なし) | 正常パターンからの逸脱を検出 |
センサーデータから収量を予測 | 回帰(教師あり) | 気温・湿度などを説明変数にして収量予測 |
1.Jupyter Notebookの起動と操作
2.Python基礎(1)
3.Python基礎(2)
# 面積を求める簡単な演習
length = 5
width = 3
area = length * width
print("面積は", area, "平方メートルです")
import cv2
import matplotlib.pyplot as plt
def load_and_show_image(path):
image = cv2.imread(path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # OpenCVはBGRなのでRGBに変換
plt.imshow(image)
plt.title("Loaded Image")
plt.axis('off')
plt.show()
# 実行
load_and_show_image("sample_image.jpg")
import pandas as pd
# データ読み込み
df = pd.read_csv("crop_data.csv")
# データの基本情報
print(df.head())
print(df.describe())
# 平均収穫量の計算
average_yield = df["収穫量"].mean()
print("平均収穫量:", average_yield, "kg")
# 月ごとの収穫量をグループ化
monthly_yield = df.groupby("月")["収穫量"].sum()
print(monthly_yield)
1.Matplotlib
2.Seaborn
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# データ読み込み
df = pd.read_csv("crop_growth.csv")
# 折れ線グラフ:日数ごとの平均身長推移
plt.figure(figsize=(10, 5))
sns.lineplot(data=df, x="日数", y="草丈", hue="品種")
plt.title("品種ごとの草丈推移")
plt.xlabel("日数")
plt.ylabel("草丈 (cm)")
plt.grid(True)
plt.show()
# ヒートマップ:特徴量の相関
plt.figure(figsize=(8, 6))
sns.heatmap(df.corr(), annot=True, cmap="coolwarm")
plt.title("特徴量間の相関")
plt.show()
1.画像の読み込み・表示
2.画像の保存
3.カラー形式の変換(BGR → RGB)
import cv2
import matplotlib.pyplot as plt
# 画像の読み込み(BGR形式)
image = cv2.imread("field_photo.jpg")
# RGB形式に変換
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 画像の表示
plt.imshow(image_rgb)
plt.title("畑の写真")
plt.axis("off")
plt.show()
# 画像の保存
cv2.imwrite("saved_field_photo.jpg", image)
1.画像のリサイズ
2.ぼかし(ブラー)
3.回転・反転
4.カラースケール変換
編集する
import cv2
import matplotlib.pyplot as plt
# 画像読み込み
img = cv2.imread("crop_leaf.jpg")
# リサイズ
resized = cv2.resize(img, (200, 200))
# ぼかし処理
blurred = cv2.GaussianBlur(resized, (5, 5), 0)
# グレースケール変換
gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY)
# 表示
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.imshow(cv2.cvtColor(resized, cv2.COLOR_BGR2RGB))
plt.title("Resized")
plt.axis("off")
plt.subplot(1, 3, 2)
plt.imshow(cv2.cvtColor(blurred, cv2.COLOR_BGR2RGB))
plt.title("Blurred")
plt.axis("off")
plt.subplot(1, 3, 3)
plt.imshow(gray, cmap='gray')
plt.title("Grayscale")
plt.axis("off")
plt.show()
import cv2
import matplotlib.pyplot as plt
# 画像の読み込みとグレースケール変換
img = cv2.imread("fruit.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# ぼかし & エッジ検出
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# 輪郭の検出
contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 輪郭の描画
contour_img = img.copy()
cv2.drawContours(contour_img, contours, -1, (0, 255, 0), 2)
# 表示
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.imshow(edges, cmap='gray')
plt.title("エッジ検出")
plt.axis("off")
plt.subplot(1, 2, 2)
plt.imshow(cv2.cvtColor(contour_img, cv2.COLOR_BGR2RGB))
plt.title("輪郭検出")
plt.axis("off")
plt.show()
1.マスク処理
2.フィルタ処理
3.色空間の変換
4.NumPy配列による画像操作
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 画像読み込みとHSV変換
img = cv2.imread("leaf.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 病斑(茶色〜暗色)の色範囲を指定
lower_brown = np.array([10, 50, 50])
upper_brown = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_brown, upper_brown)
# マスク適用
result = cv2.bitwise_and(img, img, mask=mask)
# 表示
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("元画像")
plt.axis("off")
plt.subplot(1, 3, 2)
plt.imshow(mask, cmap="gray")
plt.title("病斑マスク")
plt.axis("off")
plt.subplot(1, 3, 3)
plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
plt.title("抽出結果")
plt.axis("off")
plt.show()
1.回帰と分類の違い
2.Scikit-learnの基本フロー
3.代表的な分類アルゴリズム
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
import pandas as pd
# データ読み込み(例:作物の特徴量と種類ラベル)
df = pd.read_csv("crop_features.csv")
X = df.drop("label", axis=1)
y = df["label"]
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデル学習
clf = RandomForestClassifier()
clf.fit(X_train, y_train)
# 予測と評価
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
1.データ前処理の基礎
2.教師データの構成
3.評価指標の理解
import os
import cv2
import numpy as np
from sklearn.model_selection import train_test_split
# データ準備(フォルダ構造に応じてラベル付け)
def load_images_from_folder(folder_path):
images = []
labels = []
for label_folder in os.listdir(folder_path):
label_path = os.path.join(folder_path, label_folder)
for file in os.listdir(label_path):
img = cv2.imread(os.path.join(label_path, file))
if img is not None:
img = cv2.resize(img, (64, 64)) # サイズ統一
images.append(img)
labels.append(label_folder)
return np.array(images), np.array(labels)
X, y = load_images_from_folder("crop_disease_data")
# データの確認と分割
print("データ数:", len(X))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
1.プロジェクト型学習(PBL)
2.システム構築のステップ
3.プロトタイピング
テーマ例:「トマトの病気画像を分類するAI」
構成例:
project/
├── data/
│ ├── healthy/
│ └── diseased/
├── notebooks/
│ ├── preprocessing.ipynb
│ ├── training.ipynb
│ └── evaluation.ipynb
├── model/
│ └── saved_model.pkl
└── presentation/
└── slides.pdf
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# データ準備
data = load_iris()
X = data.data
y = tf.keras.utils.to_categorical(data.target, num_classes=3)
# 前処理
scaler = StandardScaler()
X = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデル構築
model = Sequential([
Dense(10, activation='relu', input_shape=(4,)),
Dense(3, activation='softmax')
])
# コンパイル・学習
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=30, batch_size=8, verbose=1)
# 評価
loss, acc = model.evaluate(X_test, y_test, verbose=0)
print(f"Test Accuracy: {acc:.2f}")
この週はディープラーニング入門の第一歩として、シンプルかつ直感的に理解できる構成になっています。Jupyterノートブック形式や可視化ツール(TensorBoard)の導入も可能です。必要に応じてご提案します!
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# データ前処理
datagen = ImageDataGenerator(rescale=1./255)
train_generator = datagen.flow_from_directory(
'vegetable_data/train',
target_size=(64, 64),
batch_size=16,
class_mode='categorical'
)
# CNNモデル構築
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(64, 64, 3)),
MaxPooling2D(2, 2),
Flatten(),
Dense(64, activation='relu'),
Dense(train_generator.num_classes, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_generator, epochs=10)
この演習をベースに、後の「データ拡張」「病害診断CNN」へとスムーズにステップアップできます。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 拡張付きデータジェネレータ
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
train_generator = train_datagen.flow_from_directory(
'vegetable_data/train',
target_size=(64, 64),
batch_size=16,
class_mode='categorical'
)
# CNNモデル構築(Dropoutあり)
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(64, 64, 3)),
MaxPooling2D(2, 2),
Dropout(0.3),
Flatten(),
Dense(64, activation='relu'),
Dropout(0.3),
Dense(train_generator.num_classes, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_generator, epochs=15)
この週は「高精度なAIモデル構築」の鍵を握る技術習得の回です。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 拡張込みデータ準備
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=15,
zoom_range=0.1,
horizontal_flip=True,
validation_split=0.2
)
train_generator = train_datagen.flow_from_directory(
'leaf_dataset',
target_size=(128, 128),
batch_size=16,
class_mode='categorical',
subset='training'
)
val_generator = train_datagen.flow_from_directory(
'leaf_dataset',
target_size=(128, 128),
batch_size=16,
class_mode='categorical',
subset='validation'
)
# CNNモデル構築
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(128, 128, 3)),
MaxPooling2D(2, 2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2, 2),
Dropout(0.3),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.4),
Dense(train_generator.num_classes, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_generator, validation_data=val_generator, epochs=20)
この週は「農業画像診断AIの中核」をなす実践回です。
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# y_true と y_pred はそれぞれ正解と予測のラベル(整数型)
y_true = [0, 1, 2, 1, 0, 2]
y_pred = [0, 2, 1, 1, 0, 2]
# 混同行列
cm = confusion_matrix(y_true, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.xlabel("予測ラベル")
plt.ylabel("正解ラベル")
plt.title("混同行列")
plt.show()
# 詳細評価
print(classification_report(y_true, y_pred, target_names=["Healthy", "Blight", "Mildew"]))
この週は「AIモデルの良し悪しを見極める」視点を育てる重要な回です。
import pandas as pd
import cv2
import numpy as np
# センサーデータ読み込み(例:CSV)
sensor_df = pd.read_csv("sensor_data.csv") # timestamp, soil_moisture, temperature...
# 対応する画像の読み込みと特徴抽出(簡易例:平均色)
def extract_image_features(img_path):
img = cv2.imread(img_path)
img = cv2.resize(img, (64, 64))
avg_color = img.mean(axis=(0, 1)) # 平均BGR
return avg_color
sensor_df["img_path"] = "images/" + sensor_df["timestamp"].astype(str) + ".jpg"
sensor_df[["B", "G", "R"]] = sensor_df["img_path"].apply(lambda p: pd.Series(extract_image_features(p)))
# センサ+画像特徴の結合 → モデル入力に
features = sensor_df[["soil_moisture", "temperature", "B", "G", "R"]]
labels = sensor_df["label"] # 例:生育状態ラベル
1.衛星データ(例:Sentinel-2、Landsat)の構造理解
2.NDVIの基本式と意義
NDVI = (NIR−RED) / (NIR+RED)
3.衛星画像ファイルの読み込み
import rasterio
import numpy as np
import matplotlib.pyplot as plt
# 衛星画像の読み込み(例:赤バンド=3、近赤外バンド=4)
with rasterio.open("satellite_image.tif") as src:
red = src.read(3).astype(float)
nir = src.read(4).astype(float)
# NDVI計算
ndvi = (nir - red) / (nir + red + 1e-10) # 0除算防止の微小値を加える
# NDVIの可視化
plt.imshow(ndvi, cmap='RdYlGn')
plt.colorbar(label='NDVI')
plt.title('NDVI (Normalized Difference Vegetation Index)')
plt.axis('off')
plt.show()
この週は「衛星データの使いこなし」を始める入り口になります。
1.複数地点・複数画像のNDVI比較
2.マスク処理による特定領域の抽出
3.グラフ化・レポート作成
import rasterio
import numpy as np
import matplotlib.pyplot as plt
def calc_ndvi(path):
with rasterio.open(path) as src:
red = src.read(3).astype(float)
nir = src.read(4).astype(float)
ndvi = (nir - red) / (nir + red + 1e-10)
return ndvi
# 複数地点のNDVI読み込み
ndvi_field_a = calc_ndvi("field_A.tif")
ndvi_field_b = calc_ndvi("field_B.tif")
# 平均NDVIの比較
avg_a = np.nanmean(ndvi_field_a)
avg_b = np.nanmean(ndvi_field_b)
print(f"Field A NDVI平均: {avg_a:.3f}")
print(f"Field B NDVI平均: {avg_b:.3f}")
# NDVIマップの表示
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].imshow(ndvi_field_a, cmap="RdYlGn")
axes[0].set_title("Field A NDVI")
axes[1].imshow(ndvi_field_b, cmap="RdYlGn")
axes[1].set_title("Field B NDVI")
for ax in axes:
ax.axis("off")
plt.show()
この週は、実際の農業現場における圃場管理の可視化につながる重要な応用実習です。
import rasterio
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# NDVI計算(以前の週と同様)
with rasterio.open("ndvi_image.tif") as src:
red = src.read(3).astype(float)
nir = src.read(4).astype(float)
ndvi = (nir - red) / (nir + red + 1e-10)
# クラスタリングによる異常検知(例:2クラス)
ndvi_flat = ndvi.reshape(-1, 1)
kmeans = KMeans(n_clusters=2, random_state=42).fit(ndvi_flat)
labels = kmeans.labels_.reshape(ndvi.shape)
# 可視化
plt.imshow(labels, cmap="coolwarm")
plt.title("異常検知(クラスタリング)")
plt.axis("off")
plt.show()
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LeakyReLU, Reshape, Flatten
import numpy as np
import matplotlib.pyplot as plt
# 生成器
def build_generator():
model = Sequential()
model.add(Dense(128, input_dim=100))
model.add(LeakyReLU(0.2))
model.add(Dense(28*28, activation='tanh'))
model.add(Reshape((28, 28)))
return model
# 識別器
def build_discriminator():
model = Sequential()
model.add(Flatten(input_shape=(28, 28)))
model.add(Dense(128))
model.add(LeakyReLU(0.2))
model.add(Dense(1, activation='sigmoid'))
return model
# GANの組み立てと学習は省略可(希望があれば拡張)
# 画像生成の例
generator = build_generator()
noise = np.random.normal(0, 1, (1, 100))
generated_image = generator.predict(noise)
plt.imshow(generated_image[0], cmap='gray')
plt.title("生成画像(例)")
plt.axis('off')
plt.show()
この週は「AIがAIの学習を助ける」高度で創造的な内容です。
import numpy as np
import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
# データ読み込み
df = pd.read_csv("growth_sensor_data.csv") # 例:日付, 温度, 湿度, 草丈
# 特徴量とターゲットの分離
features = df[["temperature", "humidity"]].values
target = df["height"].values
# スケーリング
scaler = MinMaxScaler()
features_scaled = scaler.fit_transform(features)
# 時系列データの作成(例:過去7日分を1サンプルとする)
def create_sequences(X, y, seq_len=7):
Xs, ys = [], []
for i in range(len(X) - seq_len):
Xs.append(X[i:i+seq_len])
ys.append(y[i+seq_len])
return np.array(Xs), np.array(ys)
X_seq, y_seq = create_sequences(features_scaled, target)
# モデル構築
model = Sequential([
LSTM(50, activation='relu', input_shape=(X_seq.shape[1], X_seq.shape[2])),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_seq, y_seq, epochs=20, batch_size=8)
この週では「未来を読むAI」を農業に応用するステップを体験します。
統合型AIシステムの設計
1.入力:画像、衛星データ、センサーデータ
2.出力:可視化、アラート、ダッシュボードなど
3.プロジェクトマネジメント
🛰️ データ入力:
- ドローン画像(病害分類モデルへ)
- 衛星画像(NDVI異常検知モジュールへ)
- センサーデータ(LSTM成長予測モジュールへ)
🔁 AI処理:
- 画像分類 → 異常抽出 → 成長予測 → 統合分析
📊 出力:
- モニタリング用ダッシュボード(Streamlitなど)
- NDVIマップ+病害リスト+予測グラフ
- 異常発見時の通知(メール or LINE APIなど)
project/
├── data/(画像・NDVI・センサ)
├── modules/
│ ├── classify.py
│ ├── ndvi_detect.py
│ └── growth_predict.py
├── dashboard/
│ └── app.py(Streamlitなど)
└── docs/
└── report.pdf / slides.pptx
この週は中プロジェクトとして、6か月コースの集大成となるハイライト実習です。
1.チームビルディング
2.テーマ決定と要件定義
3.企画書/構想資料の作成
項目 | 内容例 |
プロジェクト名 | AIによるトマト病害早期検出システム |
チーム構成 | 4名(データ・画像処理・学習・UI) |
使用データ | ドローン画像、病害画像、気象データ |
主なAI技術 | CNN分類、NDVI、異常検知、Streamlit |
成果物 | Webベースダッシュボード+レポート |
この週は「自ら考え、形にしていく」工程のスタート地点です。
1.データ収集と整備
2.AIモデル統合
3.システム構築の開始
project/
├── data/
│ ├── drone_images/
│ ├── sensor_logs.csv
│ └── satellite_ndvi/
├── ai_models/
│ ├── classifier.h5
│ ├── lstm_predictor.pkl
├── app/
│ └── dashboard.py(Streamlit)
└── docs/
└── README.md / dev_notes.md
この週はプロジェクトを形にする重要なステップです。
プロジェクト開発②:検証フェーズ(テスト・評価・改善)
チームで構築したスマート農業システムに対して動作検証・性能評価・改善作業を行う。ユーザビリティ・精度・処理時間などを意識しながら、より完成度を高めていく段階。
1.AIモデルの性能評価
2.システム全体の検証
3.改善のサイクル
# モデル評価レポート
- 精度: 89.5%
- 誤分類の多かったカテゴリ: Blight → Mildew
- 改善策:
- Blight画像の拡張(左右反転、明度変化)
- クラスウェイトの調整
# UI改善点
- マップ上でNDVI異常地点にラベル表示追加
- 予測グラフに凡例追加、日付の形式統一
この週は「仕上げに向けた詰めと磨き込み」のフェーズです。
最終プレゼン・フィードバック(成果発表)
6か月間の学びの集大成として、各チームが開発したスマート農業プロジェクトの成果発表を実施。技術内容だけでなく、「社会にどう役立つか」という視点で伝える力を養う。
1.成果プレゼンテーション
2.コードと成果物の提出
セクション | 内容 |
タイトル/メンバー紹介 | プロジェクト名+担当分野 |
課題と背景 | なぜこのテーマか? |
データとAI活用 | 使用データ、前処理、モデル選定理由 |
結果・デモ | 予測精度、UI画面、NDVIマップ等 |
今後の展望 | 改善案・社会実装の可能性など |
/final_submission/
├── presentation.pdf
├── final_report.pdf
├── github_link.txt
├── model/(学習済みモデル)
└── demo.mp4(任意)