【香橙派AiPro】基于VGG16的火灾检测模型预测

在这里插入图片描述

引言

终于收到一款心仪已久的板子了,收到货后来不及吃灰就赶紧测试了,不得不说性价比很高,真不愧是Orange Pi AI Pro,对比其他板子性价比绝对第一!

在这里插入图片描述

开发板介绍

Orange Pi AI Pro开发板是一款香橙派和华为联合精心打造的高性能AI开发板,搭载了昇腾AI处理器,可实现图像、视频等多种数据分析处理

OrangePi AIpro(8-12T)采用昇腾AI技术路线,具体为4核64位处理器+AI处理器,集成图形处理器,支持8-12TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。

Orange Pi AIpro引用了相当丰富的接口,包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB(串口打印调试功能)、两个MIPI摄像头、一个MIPI屏等,预留电池接口,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。 Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求。

接口详情图
在这里插入图片描述

开发板使用

准备工作

工具文档

官方工具:点我下载

用户手册:点我下载

ubuntu镜像:点我下载

本次用到:读卡器、网线

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

拨码开关

开发板支持从TF卡、eMMC和SSD(支持NVMeSSD和 SATASSD)启动。具体从哪个设备启动是由开发板背面的两个拨码(BOOT1和BOOT2)开关来控制的。

在这里插入图片描述

在这里插入图片描述
默认是通过TF卡启动的

体验评价:香橙派 AI Pro开发板通过其丰富的内置 API 和完善的文档支持,确实简化了开发流程并提高了易用性。这些特点使开发者能够更快速地进行应用程序的开发和调试,同时保证了开发过程的高效性和可靠性

镜像烧录

开发板出厂时,Sd卡已经有一个系统了,博主通电后发现SD卡上的小灯已亮了起来,官方原话给的是:

此绿灯由GPIO4_19控制其亮灭,可以作为SATA硬盘的指示灯或者其他需要的用途。目前发布的Linux系统默认在DTS中将其点亮。当看到此灯点亮后,至少可以说明Linux内核已经启动了。

在这里插入图片描述

由于没有读卡器,博主还未烧录过系统,不过很简单,可以参考这里
基于WindowsPC将Linux镜像烧写到TF卡的方法-11页

连接开发板

官方文档写明可通过多种方式连接开发板,这里使用了网线进行连接,连接后如下图所示:

在这里插入图片描述

下载MobaXterm

可以去官方提供的工具包里面下载,也可以 快速下载

在这里插入图片描述

网线-SSH连接开发板

网线连接这种方式,适合还未连接WIFI的板子 以及 没有显示屏的同学,将网线和开发板网口以及电脑连接后,可以通过共享网络使电脑为板子分配IP地址

在这里插入图片描述

查找到ip地址后,打开MobaXterm进行SSH连接
在这里插入图片描述

账号 密码
root Mind@123
HwHiAiUser Mind@123

输入账号和密码登录,注意:Linux密码是不显示的,输入完成回车即可

在这里插入图片描述

 使用USB串口调试注意:
一定要确保USB数据线是否是能传输数据的,一般都是只能充电不能传输数据,可能插入后没有反应

设置WIFI连接

开发板带有WIFI模块,我们可以将开发板连接到家用路由器网络,这样就可以不需要网线连接了

在这里插入图片描述

WIFI-SSH连接开发板

通过nmcli命令连接WIFI
我们用的是网线连接开发板,使用SSH登录到了开发板,在终端界面输入

nmcli dev wifi

在这里插入图片描述

连接WIFI

sudo nmcli dev wifi connect 'Cloud' password '13988266448'


在这里插入图片描述

通过图形化方式连接WIFI

sudo nmtui

在这里插入图片描述

选择Activateaconnect后回车,选中后输入密码即可连接

在这里插入图片描述

确定开发板IP方法

目前可以将IP设置为静态,不让他自动分配,但是我认为,可以通过查看路由器上面的用户确定
在这里插入图片描述

Vnc可视化

Windows

在windows上显示图形化桌面又没有屏幕和连接线,可以通过MobaXterm的vnc连接

在这里插入图片描述

弹出的窗口输入密码即可登录到系统

在这里插入图片描述

iPad

和开发板保持相同局域网内,下载软件RVNC Viewer
在这里插入图片描述

IP 端口
192.168.x.x 5901

开发工具安装

下载pycharm社区版

在这里插入图片描述

在这里插入图片描述

找到文件所在位置解压,输入解压命令

tar -xzvf pycharm-community-2024.1.4-aarch64.tar.gz

在这里插入图片描述

运行pycharm
在这里插入图片描述

创建快捷方式,之后可以在左上角开发菜单栏中找到

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

散热风扇

使用的过程中发现板子很烫手,于是我设置了自定义转速

查询风扇当前模式命令

sudo npu-smi info -t pwm-mode

查询当前风扇转速

sudo npu-smi info -t pwm-duty-ratio

设置为手动模式并调整转速,0手动1自动

sudo npu-smi set -t pwm-mode -d 0

取值范围0-100

sudo npu-smi set -t pwm-duty-ratio -d 30

在这里插入图片描述

推荐设置30

基于VGG16的火灾检测模型预测

前面的基本配置搞定了,我们使用模型加载本地数据集并对其进行预处理,然后使用预训练的 VGG16 模型,并添加自定义的全连接层进行火灾检测。
最后,代码会在本地训练模型,并保存模型到本地文件系统,通过已训练的模型进行测试识别。

数据集准备

yolov5火灾检测数据集,共2000多张图片,标注fire,点我下载

在这里插入图片描述

目录结构

dataset/
 validation/
  fire/
    image1.jpg
    image2.jpg
    ...
 train/
  no_fire/
  
    image1.jpg
    image2.jpg
    ...

代码

创建一个名为main.py的Python脚本,内容如下:

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Model
import os

# 数据预处理
train_dir = 'dataset/train'
validation_dir = 'dataset/validation'

train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary'
)

validation_generator = test_datagen.flow_from_directory(
    validation_dir,
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary'
)

# 使用预训练的VGG16模型
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))

# 添加自定义顶层
x = base_model.output
x = Flatten()(x)
x = Dense(128, activation='relu')(x)
predictions = Dense(1, activation='sigmoid')(x)

model = Model(inputs=base_model.input, outputs=predictions)

# 冻结VGG16的卷积层
for layer in base_model.layers:
    layer.trainable = False

# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // validation_generator.batch_size,
    epochs=10
)

# 保存模型
model.save('fire_detection_model.h5')

# 评估模型
loss, accuracy = model.evaluate(validation_generator)
print(f"Validation Accuracy: {accuracy*100:.2f}%")

操作

SSH连接到开发板进行项目上传

在这里插入图片描述

等待上传完成(有点漫长…)

在这里插入图片描述

安装必要库
在Orange Pi AI Pro上安装所需的库

sudo apt-get update
sudo apt-get install python3-pip
pip3 install numpy pandas tensorflow keras opencv-python

安装模块中

在这里插入图片描述

错误的话,更新下pip

 pip install --upgrade pip

在这里插入图片描述

继续报错:

(venv) (.venv) pip3 install tensorflow
      running build_ext
      Loading library to get build settings and version: libhdf5.so
      error: Unable to load dependency HDF5, make sure HDF5 is installed properly
      Library dirs checked: []
      error: libhdf5.so: cannot open shared object file: No such file or directory
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for h5py
Failed to build h5py
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (h5py)
(venv) (.venv) 

Orange Pi AI Pro默认Python环境3.9.9 更新pip后直接安装tensorflow当到h5py时候报错,尝试先安装h5py再安装tensorflow,版本号如下:
pip install h5py3.8.0
pip install tensorflow
2.11.0

/root/Desktop/project/.venv/bin/python /root/Desktop/project/main.py 
RuntimeError: module compiled against API version 0x10 but this version of numpy is 0xf
RuntimeError: module compiled against API version 0x10 but this version of numpy is 0xf
ImportError: numpy.core._multiarray_umath failed to import
ImportError: numpy.core.umath failed to import
Traceback (most recent call last):
  File "/root/Desktop/project/main.py", line 1, in <module>
    import tensorflow as tf
  File "/usr/local/lib64/python3.9/site-packages/tensorflow/__init__.py", line 37, in <module>
   packages/tensorflow/python/framework/dtypes.py", line 34, in <module>
    _np_bfloat16 = _pywrap_bfloat16.TF_bfloat16_type()
TypeError: Unable to convert function return value to a Python type! The signature was
	() -> handle

这个错误表明 TensorFlow 在导入过程中与 NumPy 版本之间存在不兼容的问题。这通常是由于 TensorFlow 和 NumPy 版本之间的API不匹配引起的。

可以尝试tensorflow==2.4.0

在这里插入图片描述

安装成功后运行即可

Found 100 images belonging to 2 classes.
Found 100 images belonging to 2 classes.
2024-07-16 16:57:17.388409: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
3/3 [==============================] - 42s 20s/step - loss: 1.3637 - accuracy: 0.4265 - val_loss: 0.9231 - val_accuracy: 0.4531
4/4 [==============================] - 30s 7s/step - loss: 0.8841 - accuracy: 0.5000
Validation Accuracy: 70%

在这里插入图片描述

查看模型文件

在这里插入图片描述

使用模型文件进行预测

待检测图片

在这里插入图片描述

import tensorflow as tf
from tensorflow.keras.preprocessing import image
import numpy as np

# 加载已保存的模型
model = tf.keras.models.load_model('fire_detection_model.h5')

# 预处理单张图片的函数
def preprocess_image(img_path, target_size=(150, 150)):
    img = image.load_img(img_path, target_size=target_size)  # 加载图片并调整大小
    img_array = image.img_to_array(img)  # 将图片转换为数组
    img_array = np.expand_dims(img_array, axis=0)  # 增加一个维度
    img_array /= 255.0  # 归一化
    return img_array

# 图片路径
img_path = 'path_to_your_image.jpg'

# 预处理图片
img_array = preprocess_image(img_path)

# 进行预测
prediction = model.predict(img_array)

# 输出预测结果
if prediction[0] > 0.5:
    print(f"The image at {img_path} is predicted to be a fire with a probability of {prediction[0][0]*100:.2f}%.")
else:
    print(f"The image at {img_path} is predicted to be non-fire with a probability of {(1-prediction[0][0])*100:.2f}%.")

在这里插入图片描述

0bb3c0c6-744d-4b31-be3f-d0cdbc844de1.jpg处的图像被预测为非火灾,概率为86.67%。

如果训练数据继续增加会提高识别正确率

体验评价:Orange Pi AI Pro提供的内置工具以及模块,对于机器学习模型的开发和训练提供了便捷的环境。这些工具支持常见的深度学习框架,并且可以利用板载的NPU进行加速,有效提高了模型训练和推理的效率

安装宝塔

Orange Pi AI Pro 还可以搭建服务器,挂载个人网站或者脚本,我们部署宝塔在开发板里面

Ubuntu/Deepin安装脚本

wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

在这里插入图片描述

在这里插入图片描述

上传项目到文件夹

在这里插入图片描述

安装python3.7

在这里插入图片描述

新建项目

在这里插入图片描述

在这里插入图片描述

安装模块

模块名 版本
tensorflow 2.11.0

运行项目

在这里插入图片描述

体验评价:安装宝塔进行测试显示出了Orange Pi AI Pro在部署和管理网络应用时的灵活性和可扩展性。宝塔能够简化服务器的管理和配置,对于需要快速搭建和测试网络应用的场景非常有用。

训练中的开发板表现

负载方面

在测试时,我深刻感受到了开发板在应对复杂计算任务时的表现。首先,从负载管理的角度来看,VGG16作为一个相对深层的卷积神经网络,其对计算资源的需求不言而喻。令人欣慰的是,这款开发板凭借其强大的处理器和多核架构设计,展现出了出色的负载处理能力。即便是在连续进行高清图片流中的火灾特征提取与分类时,CPU的利用率始终保持在合理范围内,没有出现明显的卡顿或延迟现象,确保了火灾检测的实时性与准确性。

散热方面

该开发板定位就是Ai路线,在高速计算中会产生热量很正常,在散热方面,接入风扇后,开发板可自动根据自身温度调整转速,长时间高负载运行下,机身温度虽有上升,但得益于其精良的散热设计与高效的热传导材料,热量得以迅速分散并排出,避免了因过热而导致的性能下降或系统不稳定。
我注意到,即便是在封闭或较为温暖的环境中测试,开发板的温度控制依然保持在安全阈值以下,这一点对于需要持续稳定运行的工业级或安防级应用尤为重要。

最后

经过测试体验,我对这款开发板在火灾检测应用中的表现深感满意。
它不仅在技术上满足了高性能计算的需求,更在用户体验上给了我很多惊喜。特别是在面对高负载和长时间运行考验时,开发板展现出的稳定性与可靠性,让我对其在实际应用场景中的表现充满信心。

此外,其优秀的散热设计也让我感受到了设计者对细节的关注与追求,这种对产品质量的坚持,无疑为用户提供了更加安心和可靠的使用体验。
Orange Pi AI Pro在处理能力、专注AI应用和扩展性方面表现突出,适合于需要更高性能和复杂计算的应用。对比树莓派则以其成本效益、广泛的社区支持和适用于教育等广泛场景的特点而获得广泛认可。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 08:14:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 08:14:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 08:14:04       45 阅读
  4. Python语言-面向对象

    2024-07-20 08:14:04       55 阅读

热门阅读

  1. 解决前端和后端时间不一致问题的实践指南

    2024-07-20 08:14:04       15 阅读
  2. PostgreSQL如何在windows/linux开启归档

    2024-07-20 08:14:04       14 阅读
  3. Build Your Own X: 通过实践深入理解技术的开源项目

    2024-07-20 08:14:04       16 阅读
  4. 八部金刚功1.1.0-冥想1.3.4

    2024-07-20 08:14:04       19 阅读
  5. 阿里云服务器 篇四:404页面模板

    2024-07-20 08:14:04       17 阅读
  6. .NET单元测试使用AutoFixture按需填充的方法总结

    2024-07-20 08:14:04       17 阅读
  7. VBA中如何使用Edge内核Browser?

    2024-07-20 08:14:04       17 阅读
  8. 【Oracle】Oracle中的merge into

    2024-07-20 08:14:04       11 阅读
  9. Milvus核心组件(2)---- etcd 详解

    2024-07-20 08:14:04       17 阅读
  10. 正则表达式在Python中的应用

    2024-07-20 08:14:04       17 阅读
  11. 源码解析Spring AOP的加载与生效

    2024-07-20 08:14:04       17 阅读
  12. 靖江美食元宇宙

    2024-07-20 08:14:04       18 阅读