上海杨浦网站建设,做动画 的 网站有哪些软件下载,设计风格好看的网站,国内有wix做的好的网站一. 搭建flask环境
概念 flask:一个轻量级 Web 应用框架#xff0c;被设计为简单、灵活#xff0c;能够快速启动一个 Web 项目。CNN:深度学习模型#xff0c;用于处理具有网格状拓扑结构的数据#xff0c;如图像#xff08;2D网格#xff09;和视频#xff08;3D网格被设计为简单、灵活能够快速启动一个 Web 项目。CNN:深度学习模型用于处理具有网格状拓扑结构的数据如图像2D网格和视频3D网格。PyTorch:开源的机器学习库应用于如计算机视觉和自然语言处理等领域的深度学习。 flask环境搭建操作步骤 pycharm终端创建新的虚拟环境python -m venv virtualName 。激活虚拟环境。在虚拟环境中安装flask。运行第一个前端网页。 流程图例 1. 2. 3. 4.
步骤4代码
from flask import Flask
app Flask(__name__)app.route(/)
def hello_world():return h1hello world!/h1if __name__ __main__:app.run(debugTrue) 二. 训练水果模型
水果识别CNN训练操作步骤 准备数据集(kaggle官网可下载)。安装pyrorch。使用pytorch的nn模型定义参数。训练模型。得到训练好的pth模型。 流程图例 1. 2. 5.
步骤3代码
import torch
from torch import nn# 水果分类模型参数配置class NumberNet(nn.Module):def __init__(self, device, classes10):super().__init__()if device is None:device torch.device(cpu)if torch.cuda.is_available():device torch.device(cuda:0)self.cnn nn.Sequential(nn.Conv2d(3, 16, 3), # 100x100 - 98x98nn.ReLU(),nn.MaxPool2d(2, 2), # 98x98 - 49x49nn.Conv2d(16, 32, 3, padding1), # 49x49 - 49x49nn.ReLU(),nn.MaxPool2d(2, 2), # 49x49 - 24x24nn.Conv2d(32, 64, 3, padding1), # 24x24 - 24x24nn.ReLU(),nn.MaxPool2d(2, 2), # 24x24 - 12x12nn.Flatten(),nn.Dropout(),nn.Linear(64 * 12 * 12, 1024), # 调整线性层的输入特征数量nn.ReLU(),nn.Dropout(),nn.Linear(1024, classes),nn.LogSoftmax(dim-1))def forward(self, X):return self.cnn(X)步骤4代码
import torch
from torch import nn
from NumberNet import NumberNet
from torchvision import transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import random_split# 水果分类训练
# 数据集配置
# 假设 NumberNet 模型期望的输入是 3 通道彩色图像
transform transforms.Compose([transforms.ToTensor(), # 这将把 PIL 图像或 NumPy 数组转换为张量并且范围从 [0, 255] 标准化到 [0.0, 1.0]# transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # 可选标准化
])# 加载项目目录下的水果文件夹
img_dataset ImageFolder(../fruits, transformtransform)
len_dataset len(img_dataset)
train_size int(len_dataset * 0.8)
valid_size len_dataset - train_size
train_dataset, valid_dataset random_split(img_dataset, [train_size, valid_size])# 数据加载器
train_dataloader torch.utils.data.DataLoader(train_dataset, batch_size1000, shuffleTrue)
valid_dataloader torch.utils.data.DataLoader(valid_dataset, batch_size1000)
# batch_total 应该是 dataloader 的总批次数量这里计算方式不正确
batch_total len(train_dataloader) # 应该直接使用 len(dataloader)# 使用conda或者cpu开始训练
device torch.device(cuda:0 if torch.cuda.is_available() else cpu)
epochs 10
model NumberNet(device)
criterion nn.CrossEntropyLoss()
adam torch.optim.Adam(model.parameters(), lr0.01)for epoch in range(epochs):losses []for batch_num, (images, labels) in enumerate(train_dataloader, start1): # 使用 enumerate 来获取批次编号adam.zero_grad()predict model(images.to(device))loss criterion(predict, labels.to(device))print(fbatch size: {batch_num} / {batch_total} -- loss: {loss.item():.4f} )losses.append(loss.item())loss.backward()adam.step()acc_list []with torch.no_grad():for images, labels in valid_dataloader:predict model(images.to(device))result torch.argmax(predict, dim-1)acc (result labels.to(device)).float().mean() # 使用 torch 的函数来计算准确率acc_list.append(acc.item())total_acc sum(acc_list) / len(acc_list)total_loss sum(losses) / batch_totalprint(fepoch: {epoch 1} / {epochs} -- loss: {total_loss:.4f} -- acc: {total_acc:.4f} )# 保存模型参数而不是整个模型
torch.save(model, ../readyModel/model.pth)三. 将训练好的模型嵌入flask后端
实现水果识别web操作步骤 在虚拟化环境下创建.py后端启动文件并且创建模型实例同时将训练好的.pth文件放入代码对应的文件路径。创建index.html文件作为后续前端文件。在前端代码和后端代码使用Jason进行路由。启动项目实现功能。 步骤1代码
from flask import Flask, render_template, request, jsonify
import time
import torch
import cv2
import numpy as np
from FruitNet import FruitNet # 确保FruitNet定义是正确的app Flask(__name__)# 定义设备
device torch.device(cuda if torch.cuda.is_available() else cpu)# 创建模型实例
model FruitNet(devicedevice, classes5) # 确保类别数与训练时一致
model.to(device)# 加载训练好的权重
model.load_state_dict(torch.load(static/fruit_model.pth)) # 确保权重文件名为fruit_model.pth
model.eval() # 设置模型为评估模式def predict_image(image_data):# 通过cv2加载图片数据img cv2.imdecode(np.frombuffer(image_data, np.uint8), cv2.IMREAD_COLOR)# 将图像从BGR转换为RGB格式因为OpenCV默认加载的是BGR格式img cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 调整图片大小到100x100与训练时的输入大小一致img cv2.resize(img, (100, 100))# 在第一个位置增加一个维度形成batch大小为1img np.expand_dims(img, 0)# 将numpy对象转化为pytorch的tensor对象img torch.from_numpy(img)# 调整图像通道顺序img torch.permute(img, [0, 3, 1, 2]) # 转换为 (batch_size, channels, height, width)# 测试最终的结果with torch.no_grad(): # 关闭梯度计算img img.to(device).float() # 确保输入是float类型并发送到指定设备predict model(img)predicted_class torch.argmax(predict, dim-1).item()# 定义水果类别标签fruit_classes [Apple Golden 1, Banana, Pear Red, Tomato Heart, Watermelon] # 根据你的数据集定义类别标签# 输出预测的水果种类predicted_fruit fruit_classes[predicted_class]return predicted_fruit 步骤2代码
!DOCTYPE html
html langen
headmeta charsetUTF-8title水果识别/titlelink relstylesheet href./static/css/index.cssscript src./static/js/jquery-3.7.1.min.js/script
/head
body
div classmaindiv!-- 显示上传的图片 --div classupload-imgimg idupload-img src alt请上传图片//div!-- 表单用于上传图片 --form idupload-btn action/upload methodpost enctypemultipart/form-datainput stylemargin-left: 120px typefile namethe_file idselectImg br/input typesubmit value识别该水果/form/div!-- 显示识别结果 --div classresulth2 idresult-show/h2/div
/divscript// 将文件转为 Base64 用于图片预览function convertToBase64(file, callback) {const reader new FileReader();reader.onload function(e) {callback(e.target.result);};reader.readAsDataURL(file);}$(function(){// 处理图片选择后的显示$(#selectImg).change(function(ev){const file $(this)[0].files[0];if (file) {convertToBase64(file, function(base64Img){$(#upload-img).attr(src, base64Img); // 更新图片预览});}});// 处理表单提交$(#upload-btn).submit(function(ev){ev.preventDefault(); // 阻止默认表单提交var formData new FormData(this); // 获取表单数据$.ajax({url: /upload, // 请求的后端地址type: POST,data: formData,contentType: false,processData: false,success: function(response){console.log(文件上传成功);console.log(response);// 更新识别结果$(#result-show).text(识别结果 response.result); // 显示识别结果},error: function(error){console.error(文件上传失败);console.error(error);}});});});
/script
/body
/html步骤3代码
script// 将文件转为 Base64 用于图片预览function convertToBase64(file, callback) {const reader new FileReader();reader.onload function(e) {callback(e.target.result);};reader.readAsDataURL(file);}$(function(){// 处理图片选择后的显示$(#selectImg).change(function(ev){const file $(this)[0].files[0];if (file) {convertToBase64(file, function(base64Img){$(#upload-img).attr(src, base64Img); // 更新图片预览});}});// 处理表单提交$(#upload-btn).submit(function(ev){ev.preventDefault(); // 阻止默认表单提交var formData new FormData(this); // 获取表单数据$.ajax({url: /upload, // 请求的后端地址type: POST,data: formData,contentType: false,processData: false,success: function(response){console.log(文件上传成功);console.log(response);// 更新识别结果$(#result-show).text(识别结果 response.result); // 显示识别结果},error: function(error){console.error(文件上传失败);console.error(error);}});});});
/script
app.route(/)
def home():return render_template(index.html)app.route(/upload, methods[POST])
def upload_file():if request.method POST:f request.files[the_file]# 保存图片到静态目录timestamp time.strftime(%Y%m%d%H%M%S)file_path f./static/uploads/{timestamp}.pngf.save(file_path)# 读取保存后的图片数据并预测with open(file_path, rb) as image_file:image_data image_file.read()predicted_fruit predict_image(image_data)# 返回JSON数据return jsonify({file_id: timestamp,result: predicted_fruit,img_path: f/static/uploads/{timestamp}.png}) 步骤4实现效果
文章转载自: http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.zbjfq.cn.gov.cn.zbjfq.cn http://www.morning.hxwhyjh.com.gov.cn.hxwhyjh.com http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.kksjr.cn.gov.cn.kksjr.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.ghcfx.cn.gov.cn.ghcfx.cn http://www.morning.dwncg.cn.gov.cn.dwncg.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.ykrg.cn.gov.cn.ykrg.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.youyouling.cn.gov.cn.youyouling.cn http://www.morning.phcqk.cn.gov.cn.phcqk.cn http://www.morning.tldhq.cn.gov.cn.tldhq.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.hjwkq.cn.gov.cn.hjwkq.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.mkfr.cn.gov.cn.mkfr.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com http://www.morning.qlkzl.cn.gov.cn.qlkzl.cn http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.rjmg.cn.gov.cn.rjmg.cn http://www.morning.qwlml.cn.gov.cn.qwlml.cn http://www.morning.czcbl.cn.gov.cn.czcbl.cn http://www.morning.cwqrj.cn.gov.cn.cwqrj.cn http://www.morning.xzsqb.cn.gov.cn.xzsqb.cn http://www.morning.lhhdy.cn.gov.cn.lhhdy.cn http://www.morning.thnpj.cn.gov.cn.thnpj.cn http://www.morning.pcrzf.cn.gov.cn.pcrzf.cn http://www.morning.jcxyq.cn.gov.cn.jcxyq.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.dkqyg.cn.gov.cn.dkqyg.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.fpzpb.cn.gov.cn.fpzpb.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.rui931.cn.gov.cn.rui931.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.prjns.cn.gov.cn.prjns.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.pwzzk.cn.gov.cn.pwzzk.cn http://www.morning.muzishu.com.gov.cn.muzishu.com http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.sfwcx.cn.gov.cn.sfwcx.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.wrdlf.cn.gov.cn.wrdlf.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.qgjp.cn.gov.cn.qgjp.cn http://www.morning.fjmfq.cn.gov.cn.fjmfq.cn http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn http://www.morning.wxqmc.cn.gov.cn.wxqmc.cn http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.nyqb.cn.gov.cn.nyqb.cn http://www.morning.btypn.cn.gov.cn.btypn.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn http://www.morning.xirfr.cn.gov.cn.xirfr.cn