实现中文手写数字识别,读取data文件夹里的图片并提取标签里的数字,读取chinese_mnist.csv文件里的并提取character。将图片进行预处理,其中包括该图片大小:150*150;添加RGB三通道,数据归一化;再进行划分测试集与训练集,其比例为2:8;再进行CNN神经网络的搭建,再进行模型编译,模型训练。最后随机选取一张图片进行实现图像识别
时间: 2024-03-26 08:40:11 浏览: 214
使用MNIST数据集训练手写数字识别模型——**附完整代码**和**训练好的模型文件**——直接用.
5星 · 资源好评率100%
好的,我理解了你的要求。实现中文手写数字识别需要以下步骤:
1. 读取data文件夹里的图片并提取标签里的数字,读取chinese_mnist.csv文件里的并提取character。
```python
import os
import pandas as pd
from PIL import Image
data_path = '/path/to/data/'
csv_path = '/path/to/chinese_mnist.csv'
# 读取csv文件
csv_data = pd.read_csv(csv_path)
# 读取图片并提取标签里的数字
images = []
labels = []
for filename in os.listdir(data_path):
if filename.endswith('.jpg'):
img_path = os.path.join(data_path, filename)
im = Image.open(img_path)
images.append(im)
label = int(filename.split('_')[0])
labels.append(label)
# 提取character
characters = csv_data['character'].tolist()
```
2. 对图片进行预处理,包括该图片大小:150*150;添加RGB三通道,数据归一化。
```python
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
# 图片大小
IMG_SIZE = 150
# 转换为numpy数组
images = np.array([np.array(im.resize((IMG_SIZE, IMG_SIZE)).convert('RGB')) for im in images])
# 数据归一化
images = images / 255.0
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42)
```
3. 进行CNN神经网络的搭建。
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
# 定义模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(15, activation='softmax')
])
# 输出模型结构
model.summary()
```
4. 进行模型编译,模型训练。
```python
# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 模型训练
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
```
5. 随机选取一张图片进行实现图像识别。
```python
import random
# 随机选取一张图片
index = random.randint(0, len(X_test)-1)
image = X_test[index]
label = y_test[index]
character = characters[label]
# 进行预测
prediction = model.predict(np.array([image]))
predicted_label = np.argmax(prediction)
# 输出结果
print('实际标签:', label)
print('预测标签:', predicted_label)
print('实际字符:', character)
```
以上就是实现中文手写数字识别的完整代码。
阅读全文