1、項目介紹
技術棧:
python語言、django框架、神經網絡、CNN卷積神經網絡算法、後台管理
2、項目界面
(1)首頁
(2)上傳圖片檢測識別
(3)上傳圖片檢測識別
(4)後台管理
(5)登錄
3、項目説明
1、關鍵詞:
Python語言、TensorFlow、卷積神經網絡CNN算法、PyQt5界面、Django框架、深度學習
包含:訓練預測代碼、數據集、PyQt5界面+Django框架網頁界面
2、訓練預測文件夾中有訓練代碼以及數據集
3、carnum_check是Django網頁版 qt_check是QT版
4、版本説明:
TensorFlow用最新版2.11.0 、 django使用最新版4.1.7、pyqt5使用最新版
5、模型: 25輪迭代1萬多張圖片
水果識別系統,通過機器學習庫tensorflow作為模型構建框架,使用CNN卷積神經網絡構建模型,並通過對數據集的處理劃分測試集和訓練集,通過多輪迭代得到訓練好的模型,再將模型進行封裝,並開發一個WEB界面系統用於用户的操作,最後實現用户在WEB頁面中輸入一張水果圖片,系統以彈窗的形式顯示該水果的信息(地區漢字、字母、數字)。同時用户輸入的圖片、預測的結果、操作的時間都會保存在數據庫中,並實現管理員在後台管理系統中可以動態查看這些信息。
下面將主要説明本系統各設計功能模塊的實現。其中包括系統環境配置,系統運行界面、功能模塊關係以及系統運行流程圖等,詳細介紹本系統實現過程。
4、核心代碼
from tensorflow.keras import layers, models, Input
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout,BatchNormalization,Activation
# 加載預訓練模型
base_model = keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(img_width,img_height,3))
for layer in base_model.layers:
layer.trainable = True
# Add layers at the end
X = base_model.output
X = Flatten()(X)
X = Dense(512, kernel_initializer='he_uniform')(X)
#X = Dropout(0.5)(X)
X = BatchNormalization()(X)
X = Activation('relu')(X)
X = Dense(16, kernel_initializer='he_uniform')(X)
#X = Dropout(0.5)(X)
X = BatchNormalization()(X)
X = Activation('relu')(X)
output = Dense(len(class_names), activation='softmax')(X)
model = Model(inputs=base_model.input, outputs=output)
import tensorflow as tf
model = tf.keras.models.load_model('model.h5')
import numpy as np
class_names = ['聖女果', '梨', '芒果', '蘋果', '香蕉']
def load_and_preprocess_image(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image, channels=3)
image = tf.image.resize(image, [224, 224])
image = tf.cast(image, tf.float32)
image = image/255.0 # normalize to [0,1] range
return image
test_img = './dataset/梨/tim9.jpeg'
test_tensor = load_and_preprocess_image(test_img)
test_tensor = tf.expand_dims(test_tensor, axis=0)
pred = model.predict(test_tensor)
pred_id = int(np.argmax(pred))
pred_name = class_names[pred_id]
print("預測結果:{}".format(pred_name))
print("預測ID:{}".format(pred_id))