使用Django与深度学习模型进行图片分类预测
要将Django与深度学习模型连接起来,可以使用下面的代码实现。在这个例子中,使用了TensorFlow作为深度学习框架,但你也可以根据你选择的框架进行相应的更改。
首先,确保你已经安装了Django和TensorFlow:
pip install django tensorflow
接下来,创建一个Django项目并在项目中创建一个app。在你的app目录下创建一个名为'predict'的文件夹,并在其中创建一个名为'models'的文件夹来保存模型文件。
在'predict/models'文件夹中存储你预训练的深度学习模型文件,例如'model.h5'。
然后,在app目录下创建一个名为'views.py'的文件,用于处理网页预测请求:
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import numpy as np
from PIL import Image
import tensorflow as tf
from tensorflow.keras.models import load_model
# 加载模型
model = load_model('predict/models/model.h5')
model.summary()
# 预测函数
def predict(image):
img = Image.open(image)
img = img.resize((100, 100)) # 调整图像大小,适应模型输入
img = np.array(img) / 255.0 # 归一化
img = np.expand_dims(img, axis=0) # 添加batch维度
pred = model.predict(img)
pred_class = np.argmax(pred, axis=1)
return pred_class[0]
# 网页视图
@csrf_exempt
def predict_view(request):
if request.method == 'POST':
image = request.FILES['image']
pred_class = predict(image)
classes = ['class1', 'class2', 'class3', 'class4', 'class5', 'class6', 'class7', 'class8', 'class9', 'class10']
pred_label = classes[pred_class]
return JsonResponse({'class': pred_label})
return render(request, 'predict.html')
在上述代码中,首先加载模型文件,并定义了一个'predict'函数,该函数接受一个图片并返回预测的类别。然后,定义了一个'predict_view'视图函数来处理POST请求,并从请求中获取上传的图片,并调用'predict'函数进行预测。最后,返回一个JsonResponse对象,其中包含预测的类别。
接下来,在app目录下创建一个名为'predict.html'的模板文件,用于显示上传图片的网页界面:
<!DOCTYPE html>
<html>
<head>
<title>Image Prediction</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="image" accept="image/*">
<input type="submit" value="Predict">
</form>
<div id="result"></div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$("form").submit(function(e) {
e.preventDefault();
var formData = new FormData(this);
$.ajax({
url: "",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function(response) {
$("#result").html("Predicted class: " + response.class);
},
error: function(xhr, status, error) {
console.error(xhr);
}
});
});
</script>
</body>
</html>
在这个模板中,创建了一个表单用于上传图片,并使用jQuery的AJAX方法将图片发送到服务器进行预测。预测结果将显示在id为'result'的<div>标签中。
最后,在你的app的'urls.py'文件中添加以下路由:
from django.urls import path
from . import views
urlpatterns = [
path('', views.predict_view, name='predict'),
]
现在,你可以启动Django服务器并访问'http://localhost:8000'来上传图片并查看预测结果了。
请注意,上述代码仅供参考,并且可能需要根据你的实际情况进行一些调整。
原文地址: https://www.cveoy.top/t/topic/peT8 著作权归作者所有。请勿转载和采集!