您好,登录后才能下订单哦!
在当今的人工智能时代,手写数字识别是一个经典且实用的应用场景。本文将详细介绍如何从零开始构建一个能够识别手写数字的Web应用。我们将使用Python的深度学习框架TensorFlow/Keras来训练模型,并使用Flask框架来构建Web应用。
在开始之前,确保你已经安装了以下工具和库:
你可以使用以下命令来安装这些依赖:
pip install tensorflow flask numpy matplotlib pillow
我们将使用经典的MNIST数据集,它包含了60000张训练图像和10000张测试图像,每张图像都是28x28像素的手写数字。
from tensorflow.keras.datasets import mnist
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 归一化数据
x_train = x_train / 255.0
x_test = x_test / 255.0
接下来,我们使用Keras构建一个简单的卷积神经网络(CNN)模型来识别手写数字。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, MaxPooling2D
# 构建模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(x_train.reshape(-1, 28, 28, 1), y_train, epochs=5, validation_data=(x_test.reshape(-1, 28, 28, 1), y_test))
训练完成后,我们将模型保存为HDF5文件,以便在Web应用中使用。
model.save('mnist_cnn.h5')
我们将使用Flask框架来构建一个简单的Web应用,用户可以通过上传手写数字图片来识别数字。
首先,创建一个新的Python文件app.py
,并设置Flask应用的基本结构。
from flask import Flask, request, render_template
import numpy as np
from tensorflow.keras.models import load_model
from PIL import Image
app = Flask(__name__)
# 加载模型
model = load_model('mnist_cnn.h5')
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# 获取上传的图片
file = request.files['image']
img = Image.open(file.stream).convert('L')
img = img.resize((28, 28))
img_array = np.array(img) / 255.0
img_array = img_array.reshape(1, 28, 28, 1)
# 预测数字
prediction = model.predict(img_array)
predicted_digit = np.argmax(prediction)
return render_template('index.html', prediction=predicted_digit)
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
在templates
文件夹中创建一个index.html
文件,用于显示上传表单和预测结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>手写数字识别</title>
</head>
<body>
<h1>手写数字识别</h1>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*">
<button type="submit">上传并识别</button>
</form>
{% if prediction is not none %}
<h2>预测结果: {{ prediction }}</h2>
{% endif %}
</body>
</html>
在终端中运行以下命令来启动Flask应用:
python app.py
打开浏览器并访问http://127.0.0.1:5000/
,你将看到一个简单的上传表单。上传一张手写数字图片,应用将返回识别结果。
通过本文,我们学习了如何从零开始构建一个手写数字识别的Web应用。我们从数据集的准备、模型的构建与训练,到Web应用的搭建,一步步实现了这个功能。希望这篇文章能帮助你理解如何将深度学习模型应用到实际的Web开发中。
你可以进一步扩展这个应用,例如增加更多的模型、优化用户界面、或者部署到云服务器上。祝你在和Web开发的道路上越走越远!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。