用Python 卷积神经网络来实现是否佩戴安全帽图片检测 并显示出图片结果和准确度
时间: 2024-11-22 07:43:12 浏览: 6
卷积神经网络实现垃圾图片分类.rar
在Python中使用卷积神经网络(Convolutional Neural Network, CNN)进行安全帽佩戴识别是一种常见的计算机视觉任务,常用于图像分类问题。我们可以采用深度学习框架如TensorFlow或PyTorch来构建模型。
首先,你需要准备一个包含佩戴和未佩戴安全帽图片的数据集。数据预处理包括图像归一化、大小调整等步骤。然后,可以按照以下步骤操作:
1. **数据加载与预处理**:
- 导入必要的库,如`tensorflow.keras`,并加载数据集。
- 使用`ImageDataGenerator`对数据进行增强,如旋转、缩放等。
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=20, shear_range=0.2)
train_generator = train_datagen.flow_from_directory(directory='train_dir', target_size=(150, 150), class_mode='binary')
```
2. **创建CNN模型**:
- 使用`tf.keras.Sequential`创建一个简单的CNN结构,通常包含卷积层(Conv2D)、池化层(MaxPooling2D)、Dropout(防止过拟合)以及全连接层(Dense)。
```python
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(1, activation='sigmoid')
])
```
3. **编译模型**:
- 设置损失函数(如binary_crossentropy)、优化器(如Adam)和评价指标(如accuracy)。
```python
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
```
4. **训练模型**:
- 使用训练数据和生成器训练模型。
```python
history = model.fit(train_generator, epochs=10, validation_data=val_generator)
```
5. **预测与展示结果**:
- 对新图片应用模型进行预测,并可视化结果(例如,将概率大于0.5视为佩戴安全帽)。
```python
prediction = model.predict(new_image)
if prediction > 0.5:
print("戴有安全帽")
else:
print("未戴安全帽")
```
对于准确度,你可以从`history.history`中获取训练集和验证集的精度值。
阅读全文