Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

YikiDragon/SolarPanelDefectDetect

Repository files navigation

光伏电池片图像缺陷检测器

本缺陷检测器针对倾斜的光伏电池板组件照片,应用直方图自适应二值化和透视变换技术进行图像校正,提取行列特征后通过FFT频谱分析出晶片的行列排布进行图像分割,可分别应用非线性SVM与DenseNet对分割照片进行训练以实现缺陷检测。

获取代码

可以以下通过git指令获取代码:

git clone https://github.com/YikiDragon/SolarPanelDefectDetect.git

环境依赖

该检测器代码采用python编写,务必保证环境依赖:

  • python3.8
  • tensorflow: >=2.0.0 & <=2.3.0
  • python-opencv: ==4.5.1
  • numpy
  • matplotlib
  • alive_progress
  • cmd
  • xlrd
  • xlwt

可以通过输入以下指令以满足最基本配置:

conda install tensorflow==2.3.0 opencv==4.5.1 numpy matplotlib alive_progress cmd xlrd xlwt

或者在获取代码后在代码根目录输入:

conda env create -f require.yaml

快速使用

目录配置

在获取代码后,在根目录下新建文件夹photos

mkdir photos

photos文件夹中存放未校正分割的光伏电池板原图。

光伏电池板原图须为".jpg"或".JPG"

使用交互式命令行检测

  1. 在项目根目录下运行以下指令启动交互式命令行
python main.py
  1. 查看可用文件夹列表
show folder
  1. 选择photos文件夹
set folder photos

set folder <文件夹对应编号>

  1. 查看可用图片文件
show image
  1. 选择***.jpg图片
set image ***.jpg

set image <图片对应编号>

  1. 查看可用缺陷识别模型
show model
  1. 选择非线性SVM模型
set model SVM

set model <模型对应编号>

  1. 开始检测
detect

指令说明

有以下指令可用:
show: 显示可用选项
set: 设置指定选项
detect: 开始检测
help: 帮助
about: 作者信息
exit: 退出交互式命令行

可以使用help <指令>获取指令的相应用法

详细用法

自动化校正分割

  1. 在根目录下新建数据集文件夹dataset及其子文件夹
mkdir dataset 
cd dataset
mkdir all # 存放已分割未打标图片的文件夹
cd ..
  1. photos文件夹中已有原图的情况下运行autosegment.py,所有原图将被自动分割并保存至./dataset/all
python autosegment.py

自动化分配标签

  1. 打开dataset文件夹建立训练集文件夹
cd dataset
mkdir train # 存放训练集的文件夹
cd train
mkdir perfect # 完好集
mkdir damaged # 缺陷集
cd ../..
  1. dataset/all中已有校正分割图的情况下运行automove.py,所有分割图将按照公共标签表FinalLabel.xls移动至perfectdamaged文件夹作为打标
python automove.py

根据自定义标签自动生成标签表

如果您已经手动将校正分割后的图片分配到perfectdamaged,可以运行label_convert.py将您的分配结果编写为Excel表格

python label_convert.py

生成的自定义标签表在LabelList.xls

模型训练

dataset/train/perfectdataset/train/damaged不为空的情况下,可以进行模型训练。

  1. 进入检测模型文件夹例如:
cd DenseNet
  1. 运行train.py开始训练
python train.py

一些详细的配置(例如: 优化器, BatchSize, Iterations, Epochs等)可以在train.py中修改

  1. 生成Precision-Recall曲线并计算AP
python test.py
  1. 随机测试分割图识别效果
python Demo.py

关键函数调用方法

  1. 图像校正
from image_utils.py import correct
image_corrected = correct(img_src, debug=False) # debug用于输出一些中间过程的分析图表

可参考autosegment.py

  1. 图像分割
from image_utils.py import segment
seg = segment(image_corrected, seg_method=4, debug=False) # 务必选择稳定性最强的第4个分割方法——频谱分析法

可参考autosegment.py

  1. 缺陷识别
import tensorflow as tf
model = tf.keras.models.load_model(model_path) # 加载模型
pred = model(x) # 模型预测,x为预处理后的图片或特征向量

可参考模型文件夹下的Demo.py,模型存储位置为模型文件夹下的saved_model

文件目录解释

下图列出本项目的核心结构:
.
│ automove.py可执行,根据FinalLabel.xls将./dataset/all/下的图片分配到perfect或damaged
│ autosegment.py 可执行,自动将photos中的图片分割到./dataset/all/
│ config.json 命令交互系统的配置文件
│ FinalLabel.xls 公共标签表
│ image_utils.py 可执行可调用,包含图像校正和图像分割程序
│ LabelList.xls 自定义标签表
│ label_convert.py 可执行,根据dataset/下perfect和damaged内文件生成标签表
│ main.py 可执行,命令交互系统入口
│ require.yaml conda依赖列表

├─photos 存放未校正未分割原图的图片

├─dataset 数据集文件夹
│ │
│ ├─train 存放训练用的已打标的图片
│ │ │
│ │ ├─perfect 完好集文件夹
│ │ └─damaged 缺陷集文件夹
│ │
│ └─all 存放已校正分割未打标的图片

├─DenseNet 密集连接网络文件夹
│ │ Demo.py 可执行,演示文件
│ │ DenseNet.py 不可执行可调用,网络基本结构文件
│ │ model.py 不可执行可调用,密集连接网络结构文件
│ │ test.py 可执行,测试文件
│ │ train.py 可执行,训练文件
│ │ utils.py 可执行,图片预处理
│ │
│ └─saved_model 保存的模型

└─SVM_Kernel 非线性SVM文件夹
│ │ Demo.py 可执行,演示文件
│ │ KernelSVM_model.py 不可执行可调用,非线性SVM结构文件
│ │ test.py 可执行,测试文件
│ │ train.py 可执行,训练文件
│ │ utils.py 可执行,图片预处理
│ │
│ └─saved_model 保存的模型

About

光伏电池片图像缺陷检测器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /