博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈:python语言、django框架、TensorFlow、CNN卷积神经网络模型、Echarts可视化
数据集:自建10类动物图像(已划分训练/验证/测试,提供TFRecord与原始双格式)
检测类别:猫、狗、牛、马、鸟、绵羊等常见动物
支持:上传图片、CNN分类识别、词云、动物百科、后台管理、结果导出

研究背景:智慧农业、野生动物保护对动物自动分类需求迫切;CNN在图像特征提取上成熟,适合边缘部署。
研究意义:将CNN与Django深度整合,实现“上传-识别-词云-可视化”闭环,为智能农业、生态保护、课堂实验提供开箱即用的AI工具,推动相关行业数字化转型。

2、项目界面

(1)首页
在这里插入图片描述

(2)上传图片检测识别
在这里插入图片描述

(3)识别结果
在这里插入图片描述

(4)词云图分析
在这里插入图片描述

(5)个人中心
在这里插入图片描述

(6)动物信息
在这里插入图片描述

(7)动物大全
在这里插入图片描述

(8)后台管理
在这里插入图片描述

(9)注册登录
在这里插入图片描述

3、项目说明

一、卷积神经网络模型

  1. 设置 Django 环境:代码首先设置 Django 项目的环境变量,以便在脚本中使用 Django 的设置。
  2. 数据路径和参数设置:定义训练数据和测试数据的路径,以及批量大小(batch_size)和训练周期(epochs)。
  3. 数据预处理:使用 ImageDataGenerator 类来生成图像数据的增强版本,包括缩放、旋转、平移、剪切、缩放和水平翻转。
  4. 加载数据集:使用 flow_from_directory 方法从指定目录加载训练集和测试集,并将图像大小调整为 224x224 像素,模式设置为分类(categorical)。
  5. 获取批量图像和标签:从训练生成器和测试生成器中获取一批图像和对应的标签。
  6. 模型训练函数 train_model:定义了一个函数 train_model,用于构建、编译、训练和保存模型。
  7. 构建模型:如果模型文件已经存在,则加载已存在的模型;如果模型文件不存在,则创建一个新的顺序模型(Sequential),并添加多个卷积层(Conv2D)和最大池化层(MaxPooling2D)。添加一个展平层(Flatten),将多维输入一维化。添加全连接层(Dense),其中包含一个 128 个单元的隐藏层和一个 10 个单元的输出层(因为类别数量为 10)。
  8. 编译模型:使用 Adam 优化器和分类交叉熵损失函数(categorical_crossentropy)来编译模型,并设置准确率(accuracy)作为性能指标。
  9. 训练模型:使用训练生成器的数据训练模型,指定周期数和批量大小。
  10. 模型预测和评估:使用训练好的模型对测试集进行预测;计算准确率和精确率(precision),精确率使用 precision_score 函数计算,这里使用了加权平均(weighted);打印出准确率和精确率。
  11. 保存模型:将训练好的模型保存到指定的文件路径。
  12. 执行训练函数:如果这是主程序,则调用 train_model 函数开始训练模型。

总结来说,这段代码展示了使用 TensorFlow 和 Keras 构建和训练一个简单的 CNN 模型的完整流程,包括数据预处理、模型构建、编译、训练、评估和保存。系统以CNN为核心,通过Django构建RESTful后端,集成Echarts实现可视化大屏,支持动物分类、词云、动物百科、后台管理、结果导出,为动物识别、生态保护、课堂实验提供一站式解决方案。

4、核心代码

import os
import django
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras import layers, models
from tensorflow.keras.models import Sequential
from sklearn.metrics import precision_score
from tensorflow.keras.models import load_model
from pathlib import Path

# 设置 Django 环境
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "animalProject.settings")
django.setup()

# 数据路径
data_path = '动物十大分类/train'
test_data_path = '动物十大分类/valid'

# 参数
batch_size = 16
epochs = 10

# 数据预处理
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(
    data_path,
    target_size=(224, 224),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=True
)

test_generator = train_datagen.flow_from_directory(
    test_data_path,
    target_size=(224, 224),
    class_mode='categorical',
    shuffle=True
)

# 获取一个批量的图像和标签
images, labels = train_generator.next()
test_images, test_labels = test_generator.next()


# 模型训练
def train_model():
    # 获取当前工作目录
    current_dir = os.getcwd()

    # 定义模型文件的路径,保存在当前目录下
    model_path = Path(current_dir) / "imgPreAnim.h5"

    # 检查模型文件是否存在
    if model_path.exists():
        print("加载已存在的模型...")
        model = load_model(model_path)
    else:
        print("创建新的模型...")
        model = models.Sequential()
        model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
        model.add(layers.MaxPooling2D(pool_size=(2, 2)))
        model.add(layers.Conv2D(64, (3, 3), activation='relu'))
        model.add(layers.MaxPooling2D((2, 2)))
        # 增加其他层可以按照需求解注释
        # model.add(layers.Conv2D(128,(3,3),activation='relu'))
        # model.add(layers.MaxPooling2D((2,2)))
        # model.add(layers.Conv2D(256,(3,3),activation='relu'))
        # model.add(layers.MaxPooling2D((2,2)))
        # model.add(layers.Conv2D(512,(3,3),activation='relu'))
        # model.add(layers.MaxPooling2D((2,2)))

        model.add(layers.Flatten())

        # 增加更多层也可以解注释
        # model.add(layers.Dense(512,activation='relu'))
        # model.add(layers.Dense(256,activation='relu'))

        model.add(layers.Dense(128, activation='relu'))
        model.add(layers.Dense(10, activation='softmax'))  # 10是类别数量

    # 编译模型
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

    # 训练模型
    model.fit(train_generator, epochs=epochs, batch_size=batch_size)

    # 使用模型进行预测
    predictions = model.predict(test_images)
    correct_predictions = np.argmax(predictions, axis=1) == np.argmax(test_labels, axis=1)
    accuracy = np.mean(correct_predictions)
    print(f'准确率:{accuracy}')

    # 计算精确率
    prediction = precision_score(np.argmax(test_labels, axis=1), np.argmax(predictions, axis=1), average='weighted')
    print(f'精确率:{prediction}')

    # 保存模型
    model.save(model_path)


if __name__ == '__main__':
    train_model()

import os
from tensorflow.keras.preprocessing import image
from tensorflow import keras
import numpy as np

def predAni(img_path):
    labelNames = [
        '狗','羊','马','猴','牛','猪','兔','鸡','蛇','虎'
    ]

    # 获取当前脚本所在目录路径,并拼接模型文件路径
    model_path = os.path.join(os.path.dirname(__file__), 'imgPreAnim.h5')

    # 加载模型
    model = keras.models.load_model(model_path)

    # 处理图片
    img = image.load_img(img_path, target_size=(224, 224))
    img_array = image.img_to_array(img)
    img_array = np.expand_dims(img_array, axis=0)
    img_array = img_array / 255  # 归一化

    # 预测
    predictions = model.predict(img_array)
    predicted_class = np.argmax(predictions, axis=1)

    print('预测结果:')
    print(labelNames[predicted_class[0]])
    return labelNames[predicted_class[0]]

if __name__ == '__main__':
    predAni('./00000004.jpg')  # 确保这个路径是正确的



5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

更多推荐