马 雁,贺 莉
(郑州电力高等专科学校电力工程学院,河南 郑州 450000)
变电站的稳定运行不仅关乎自身利益,还直接影响到电网的安全稳定运行,而事故隐患是造成重大设备事故的直接原因。及时发现并消除设备隐患,是保证变电站电气设备安全稳定运行的关键。变电站设备巡视检查作为发现设备缺陷、消除设备隐患,是运行人员一项重要的必备工作之一。它需要运行人员定期对现场设备进行巡视检查,在巡视过程中,一项非常重要的手段就是利用红外线测温仪对设备状态进行监视。
随着人工智能技术的不断推进、无人值守变电站的不断增加,机器人巡视已在变电站内得到了普遍使用。机器人在巡视过程中能通过摄像仪和红外热像仪等方式采集图片信息并对变电站电气设备的运行状态进行检测。检测到的图片数据再通过遗传算法、神经网络等智能算法对图像进行识别和处理,进而判断设备运行状况。这种非电量检测手段最终可以将大量的图片信息数据反馈到监控主机或手机APP 中,能够做到在继电保护动作前向运行人员发出预警信号,提醒运行人员注意,从而指导设备状态检修,对保障电力系统安全可靠运行具有十分重要的意义。Python 语言具有简单直接、易学易用的特点,在大数据时代已成为一种热门语言。它是一种即面向过程也支持面向对象的解释性编程语言,它是动态类型化的,不需要声明变量类型。本文将使用Python 语言对红外热像仪采集到的图片进行图像识别并分析处理,来指导设备状态检修。
1.1.1 神经网络及模型训练开发环境
操作系统:windows10
Python 版本:python3.7
GPU 型号:GTX1050m 2g (笔记本)
Web 服务器:django3.0
1.1.2 第三方依赖版本
opencv-pyhton (cv2):4.2.0
Torch(pytorch):1.5.0+cu101
Torchvision:0.2.2
CUDA:10.0
1.1.3 运行环境
操作系统:Ubuntu18.04
基于图片特征学习异常发热图像为正例,正常运行图像为反例,比例10:1。进行无监督学习训练。在红外图片下明显可见发热异常未进行二值化处理,进行神经网络学习后得到数据模型net.pkl 文件。再利用摄像头采集数据基于直播网络协议回传至web 服务器,服务器调用cv2 处理图像后交由数据模型判断是否异常。如有异常启动回调,客户端得到响应,响应内容包括位置,时间等信息。变电设备非电量监测程序开发思路如图1 所示。
图1 变电设备非电量检测程序流程图
(1)图像采集。通过巡检机器人自带的红外热像仪对变电站内设备巡视检查进行图像数据采集。
红外热成像技术是一种将被测目标的红外辐射能量转换为红外热像图的技术。进行红外热成像测试的仪器叫做红外热成像仪,胶器由扫描-聚光光学成像物镜、红外探测器、电子系统和显示系统组成。被测物体发射的红外射线通过红外探测器和光学成像物镜,反映到红外探测器的光敏元件上最终在显示器上获得红外热像图这种热像图与物体表面的热分布场相对应。热图像上面的不同颜色代表被测物体的不同温度颜色越亮说明该部位温度越高。通过红外热像图,可以很快找到设备表面的过热点,通过进一步分析、判断产生过热的原因,以便迅速采取有效的措施来消除设备故障。
某些电气设备异常现象无法依靠肉眼直接观察,但可依靠红外热成像技术识别。通过计算机视觉与红外热成像技术的结合,快速、准确、实时分析发现设备异常状态并发出预警提醒运行人员,进而进行应急处理。这样可指导设备状态检修,也是设备异常处理变得安全高效,及时发现问题可减少损失提升电力系统的可靠性。
(2)图像传输。通过通讯接口将图像数据传输到服务端;由服务端进行处理完成后再将结果反馈到监视主机或手机APP中。如有异常则回调异常时间及位置。利用cv2进行逐帧对视频流的处理。30帧会截取一帧交由数据集处理分析。所有视频流进行推流。
(3)图像识别、图像处理。整个项目的关键技术点是针对图像处理的可重构并行处理,由计算机CPU 计算完成并实时返回结果。其中由openCV2 对图像进行预处理,包括图像的滤波、图像的分割、边缘提取等,留出更多的时间由神经网络训练得到的模型实现复杂的融合算法与图象识别,这样既具有制造完成后的可编程性,又能提供较高的计算性能。
利用Python 程序调用openCV 包,pytorch、django 后端服务器对图像进行识别与处理以及识别结果的响应。
(4)检测分析。利用处理后的信息进行数据比对,从而判断设备运行状态,指导设备状态检修。
图2 官容5 缺陷
图3 识别结果
图4 视频流图像
本项目实现主体为目标检测,用rtmp流作为目标检测测试输入。
def loadtraindata():
path=r"./data/hongwai"
trainset=torchvision.datasets.ImageFolder(path,transform=transforms.Compose([transforms.Resize((32,32)),transforms.CenterCrop(32),transforms.ToTensor()]))
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,)
return trainloader
def loadtestdata():
#path=r"/mnt/nas/cv_data/imagequality/waterloo_de20_all/test"
path=r"./data/zhengchang/"test=settorchvision.datasets.ImageFolder(path,transform=transforms.Compose([transforms.Resize((32,32)),transforms.ToTensor()]))
testloader=torch.utils.data.DataLoader(testset,batch_size=25,shuffle=True,)
return testloader
class Net(nn.Module):
def__init__(self):
super(Net,self).__init__()
self.conv1=nn.Conv2d(3,6,5)
self.pool=nn.MaxPool2d(2,2)
self.conv2=nn.Conv2d(6,16,5)
self.fc1=nn.Linear(16*5*5,120)
self.fc2=nn.Linear(120,84)
self.fc3=nn.Linear(84,6)
def forward(self,x):
x=self.pool(F.relu(self.conv1(x)))
x=self.pool(F.relu(self.conv2(x)))
x=x.view(-1,16*5*5)
x=F.relu(self.fc1(x))
x=F.relu(self.fc2(x))
x=self.fc3(x)
return x
def trainandsave():
trainloader=loadtraindata()
net=Net()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)
criterion=nn.CrossEntropyLoss()
#train
for epoch in range(5):
running_loss=0.0
for i,data in enumerate(trainloader,0):
#get the inputs
inputs,labels=data
#wrap them in Variable
inputs,labels=Variable(inputs),Variable(labels)
optimizer.zero_grad()
#forward+backward+optimize
outputs=net(inputs)
loss=criterion(outputs,labels)
loss.backward()
optimizer.step()
running_loss+=loss.item()
print('loss:',running_loss)
if i%200==199:
print('[%d,%5d]loss:%.3f'%
(epoch+1,i+1,running_loss/200))
running_loss=0.0
print('Finished Training')
torch.save(net,'net.pkl')
本文研究了一种用Python 程序设计方法对对红外热像仪采集到的图像进行识别,并实时跟踪设备运行状态,将状态信息反馈到监控主机或手机APP 中,从而指导设备状态检修。这种程序设计较为简单,便于掌握,可推广用于变电站内指导设备状态检修。同时该设计方案也可用于输配电线路巡检、二次设备巡检等电力系统的各个环节,具有较强的推广价值。