本流程將引導您完成將先前訓練好的超解析度模型轉換為 TensorFlow Lite 格式,並在 Raspberry Pi 上部署一個應用程式,該應用程式可以使用 picamera2
套件從 Pi Camera Module 擷取即時影像,進行超解析度處理,然後透過 HTTP 串流將原始影像和處理後影像同時傳輸到網頁瀏覽器。
假設:
.h5
檔案)。TARGET_SHAPE_FOR_DATA
(模型輸入的 Y 通道影像尺寸,例如 (512, 512)
)。SCALE_FACTOR_ASSUMED_FOR_LR_CREATION
(例如 6
)。picamera2
(基於 Bullseye 或更新版本)。流程概覽:
.tflite
格式 (包含 INT8 量化)。picamera2
已安裝,libcamera 已啟用)picamera2
): 包含影像擷取、模型推論、影像處理和 HTTP 串流功能。步驟 1:準備您的 TensorFlow Lite 模型
(此步驟與您提供的 Canvas 文件中的內容相同,請參考該文件。)
import tensorflow as tf
import os
import numpy as np
KERAS_MODEL_PATH = "srcnn_model_384p_lr00001.h5"
TFLITE_MODEL_SAVE_PATH = "srcnn_model_384p.tflite"
MODEL_INPUT_HEIGHT = 512
MODEL_INPUT_WIDTH = 512
MODEL_INPUT_CHANNELS = 1
if not os.path.exists(KERAS_MODEL_PATH):
print(f"錯誤: Keras 模型檔案 '{KERAS_MODEL_PATH}' 不存在。請檢查路徑。")
exit()
print(f"正在從 '{KERAS_MODEL_PATH}' 載入 Keras 模型...")
try:
model = tf.keras.models.load_model(
KERAS_MODEL_PATH,
custom_objects={'mse': 'mse'}
)
model.summary()
print("Keras 模型載入成功。")
except Exception as e:
print(f"載入 Keras 模型時發生錯誤: {e}")
exit()
print(f"開始將模型轉換為 TensorFlow Lite 格式 (使用 concrete function)...")
try:
run_model = tf.function(lambda x: model(x))
concrete_func = run_model.get_concrete_function(
tf.TensorSpec(shape=[1, MODEL_INPUT_HEIGHT, MODEL_INPUT_WIDTH, MODEL_INPUT_CHANNELS],
dtype=tf.float32)
)
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
tflite_model_content = converter.convert()
print("模型轉換成功。")
with open(TFLITE_MODEL_SAVE_PATH, 'wb') as f:
f.write(tflite_model_content)
print(f"TensorFlow Lite 模型已儲存至: {TFLITE_MODEL_SAVE_PATH}")
print(f"模型大小: {os.path.getsize(TFLITE_MODEL_SAVE_PATH) / (1024):.2f} KB")
except Exception as e:
print(f"轉換模型為 TensorFlow Lite 時發生錯誤: {e}")
exit()
print("轉換完成。")
步驟 2:設定 Raspberry Pi 環境
(此步驟與您提供的 Canvas 文件中的內容大致相同,但請確保 python3-picamera2
已安裝,並且 libcamera 已在 raspi-config
中啟用。)
更新 Raspberry Pi OS。
安裝 Python 和 pip。
安裝必要的 Python 套件:
sudo apt update
sudo apt install python3-picamera2 -y
pip3 install numpy --break-system-packages
pip3 install opencv-python-headless --break-system-packages
pip3 install Flask --break-system-packages
pip3 install Pillow --break-system-packages