前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于热成像的巡检及AidLux方案实现

基于热成像的巡检及AidLux方案实现

原创
作者头像
用户10559524
发布于 2023-05-10 06:56:10
发布于 2023-05-10 06:56:10
34600
代码可运行
举报
文章被收录于专栏:AidLuxAidLux
运行总次数:0
代码可运行

主要算法:目标检测网络RetinaNet

本方案需要完成前置模型转换工作采取的方案为:pt—onnx—tflite(tflite为了完成部署到移动端)

完成转换后将模型部署至aidlux平台,完成实时视频检测。部分代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def process_img(img, target_size=640, max_size=2000, multiple=32, keep_ratio=True, NCHW=True, ToTensor=True):
img = img128:512, 0:480
img = cv2.resize(img, (640, 512), interpolation=cv2.INTER_LINEAR)
im_shape = img.shape
im_size_min = np.min(im_shape0:2)
im_size_max = np.max(im_shape0:2)

resize with keep_ratio

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if keep_ratio:
im_scale = float(target_size) / float(im_size_min)
if np.round(im_scale * im_size_max) > max_size:
im_scale = float(max_size) / float(im_size_max)
im_scale_x = np.floor(img.shape1 * im_scale / multiple) * multiple / img.shape1
im_scale_y = np.floor(img.shape0 * im_scale / multiple) * multiple / img.shape0
image_resized = cv2.resize(img, None, None, fx=im_scale_x, fy=im_scale_y, interpolation=cv2.INTER_LINEAR)
im_scales = np.array(im_scale_x, im_scale_y, im_scale_x, im_scale_y)
im = image_resized / 255.0 # np.float64
im = im.astype(np.float32)
PIXEL_MEANS =(0.485, 0.456, 0.406) # RGB format mean and variances
PIXEL_STDS = (0.229, 0.224, 0.225)
im -= np.array(PIXEL_MEANS)
im /= np.array(PIXEL_STDS)
im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) # BGR2RGB
if NCHW:
im = np.transpose(im, (2, 0, 1)).astype(np.float32) # SAI-KEY TensorFlow use input with NHWC.
im = imnp.newaxis, ...
if ToTensor:
im = torch.from_numpy(im)
return im, im_scales
else:
return None 

此代码用于对输入的图片进行预处理,使其能够被神经网络处理。具体来说,输入的图片首先被裁剪和缩放到指定大小,然后通过减去 RGB 归一化值的均值和标准差进行归一化,接着将 RGB 通道转为 BGR 通道,最后改变图像的输入格式,将其转为 NCHW 格式的张量(N 代表 Batch size,C 代表通道数,H 代表高度,W 代表宽度)并转为 PyTorch 的 Tensor 类型。如果 keep_ratio=True,则图像的宽高比被保持不变。返回处理后的图像以及缩放比例。如果 keep_ratio=False,则返回 None。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if __name__=="__main__":
tflite\_model = '/home/R-RetinaNet/models/r-retinanet.tflite'
# 定义输入输出shape
in\_shape = [1 \* 640 \* 800 \* 3 \* 4]  # HWC, float32
out\_shape = [1 \* 53325 \* 8 \* 4]  # 8400: total cells, 52 = 48(num\_classes) + 4(xywh), float32
# AidLite初始化
aidlite = aidlite\_gpu.aidlite()
# 加载R-RetinaNet模型
res = aidlite.ANNModel(tflite\_model, in\_shape, out\_shape, 4, -1) # Infer on -1: cpu, 0: gpu, 1: mixed, 2: dsp
# print(res)
'''
读取手机实时摄像头数据
'''
cap = cvs.VideoCapture(0)
frame\_id = 0
while True:
    frame = cap.read()
    if frame is None:
        continue
    im, im\_scales = process\_img(frame, NCHW=False, ToTensor=False)  # im: NHWC
    frame\_id += 1
    if frame\_id % 3 != 0:
        continue
    aidlite.setInput\_Float32(im, 800, 640)
    # 推理
    aidlite.invoke()
    preds = aidlite.getOutput\_Float32(0)
    preds = preds.reshape(1, 8, (int)(preds.shape[0]/8))
    # 后解算
    output = np.transpose(preds, (0, 2, 1))
    # 创建Anchor
    im\_anchor = np.transpose(im, (0, 3, 1, 2)).astype(np.float32)
    anchors\_list = []
    anchor\_generator = Anchors(ratios = np.array([0.2, 0.5, 1, 2, 5]))
    original\_anchors = anchor\_generator(im\_anchor)   # (bs, num\_all\_achors, 5)
    anchors\_list.append(original\_anchors)
    # 解算输出
    decode\_output = decoder(im\_anchor, anchors\_list[-1], output[..., 5:8], output[..., 0:5], thresh=0.2, nms\_thresh=0.2, test\_conf=None)
    # 重构输出
    scores = decode\_output[0].reshape(-1, 1)
    classes = decode\_output[1].reshape(-1, 1)
    boxes = decode\_output[2]
    boxes[:, :4] = boxes[:, :4] / im\_scales
    if boxes.shape[1] > 5:   
        boxes[:, 5:9] = boxes[:, 5:9] / im\_scales
    dets = np.concatenate([classes, scores, boxes], axis=1)
    # 过滤类别
    keep = np.where(classes > 0)[0]
    dets =  dets[keep, :]
    # 转换坐标('xywha'->'xyxyxyxy')
    res = sort\_corners(rbox\_2\_quad(dets[:, 2:]))
    # cv绘图.
    for k in range(dets.shape[0]):
        cv2.line(frame, (int(res[k, 0]), int(res[k, 1])), (int(res[k, 2]), int(res[k, 3])), (0, 255, 0), 3)
        cv2.line(frame, (int(res[k, 2]), int(res[k, 3])), (int(res[k, 4]), int(res[k, 5])), (0, 255, 0), 3)
        cv2.line(frame, (int(res[k, 4]), int(res[k, 5])), (int(res[k, 6]), int(res[k, 7])), (0, 255, 0), 3)
        cv2.line(frame, (int(res[k, 6]), int(res[k, 7])), (int(res[k, 0]), int(res[k, 1])), (0, 255, 0), 3)
    cvs.imshow(frame)

此代码实现了通过手机摄像头实时检测图像中的文本行,首先初始化 AidLite,并加载 R-RetinaNet 模型。然后进入摄像头读取和处理的循环中,先调用 process\_img 对图像进行预处理,然后将预处理后的图像输入给模型进行推理,再根据模型输出进行解析、过滤和转换坐标,最后在原图上绘制文本行框并显示出来。其中使用了 opencv 绘制框和显示图片。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​零基础入门深度学习(九):目标检测之常用数据预处理与增广方法
本课程是百度官方开设的零基础入门深度学习课程,主要面向没有深度学习技术基础或者基础薄弱的同学,帮助大家在深度学习领域实现从0到1+的跨越。从本课程中,你将学习到:
用户1386409
2020/02/19
1.8K0
目标检测 - Faster R-CNN 中 RPN 原理
RPN 的用途在于, 判断需要处理的图片区域(where), 以降低推断时的计算量.
AIHGF
2018/05/17
1.9K0
Caffe2 - (二十三) Detectron 之 utils 函数(1)
Caffe2 - (二十三) Detectron 之 utils 函数(1) 1. blob.py # Based on: Fast R-CNN # Written by Ross Girshick # -------------------------------------------------------- """Caffe2 blob helper functions.""" from __future__ import absolute_import from __future__ impo
AIHGF
2018/05/17
1.3K0
Caffe2 - (三十三) Detectron 之 roi_data - data loader
Caffe2 - (三十三) Detectron 之 roi_data - data loader 1. loader.py Detectron data loader.py 是通用设计,与 minibatch 的实现细节无关. 多线程的数据加载. minibatch 是字典形式,存储了 blob name keys 和对应的 numpy (float32 或 int32) ndarray values. 设计结构: loader thread\ loader thread \
AIHGF
2018/05/17
1.1K0
《Aidlux智慧安防AI实战训练营》作业心得
其它相关内容关注AidLux公众号回复lesson1、lesson2...、lesson5即可下载,下边的是lesson5的内容
用户10149871
2022/10/30
3530
里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码
【导读】2019年以来,除各AI 大厂私有网络范围外,MaskRCNN,CascadeRCNN 成为了支撑很多业务得以开展的基础,而以 Faster RCNN 为基础去复现其他的检测网络既省时又省力,也算得上是里程碑性成果了。因此本文主要以简洁易懂的文字复现了 Resnet - Faster R-CNN 。
AI科技大本营
2019/08/23
2.2K0
里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码
开发 | Keras版faster-rcnn算法详解(RPN计算)
AI科技评论按:本文首发于知乎专栏Learning Machine,作者张潇捷, AI科技评论获其授权转载。 前段时间学完Udacity的机器学习和深度学习的课程,感觉只能算刚刚摸到深度学习的门槛,于是开始看斯坦福的cs231n(http://cs231n.stanford.edu/syllabus.html),一不小心便入了计算机视觉的坑。原来除了识别物体,还可以进行定位(localization),检测(object detection),语义分割(semantic segmentation),实例分割
AI科技评论
2018/03/14
1.7K0
开发 | Keras版faster-rcnn算法详解(RPN计算)
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
来源丨https://zhuanlan.zhihu.com/p/145842317
3D视觉工坊
2020/11/11
1.9K0
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
原文:Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪 - AIUAI
AIHGF
2019/02/27
5.7K0
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
Caffe2 - (三十二) Detectron 之 roi_data - 模型 minibatch blobs
Caffe2 - (三十二) Detectron 之 roi_data - 模型 minibatch blobs 根据对应的 roi_data 模块可以处理 对应模型的 minibatch blobs. fast_rcnn.py mask_rcnn.py keypoint_rcnn.py rpn.py retinanet.py 1. fast_rcnn.py 构建用于 Fast R-CNN 训练的 minibatches. """ 处理 Fast R-CNN 所涉及的 minibatch blobs. ""
AIHGF
2018/05/17
1.3K0
基于Aidlux平台的工业视觉缺陷检测
工业视觉缺陷检测是一种利用计算机视觉技术,对工业制品进行自动化检测,以识别和分类可能存在的缺陷的方法。它是现代工业生产中的重要环节,可以大大提高生产效率,降低产品缺陷率,提高产品质量。
用户10686717
2023/09/08
3820
基于Aidlux平台的人脸关键点检测以及换脸算法
运行Aidlux中examples的自带Demo:人脸、人体、手关键点检测、头发语义分割、人像语义分割、人脸检测、图像风格迁移、句子分类等,
用户10686717
2023/08/01
3350
cv2.getTextSize()
项目:chainer-faster-rcnn 作者:mitmul | 项目源码 | 文件源码
狼啸风云
2021/03/03
1.9K0
《Aidlux智慧安防AI实战训练营》总结
讲解AI⾏业智慧城市⾏业的⽬前状况,并从边缘设备应用、越界识别应⽤等为案例进⾏讲解,通过实战化培训全面提升算法实战应用。
用户7260148
2022/10/29
3250
DL开源框架Caffe | 目标检测Faster-rcnn问题全解析
本文介绍了如何使用深度学习检测物体,并提供了相关代码和教程。主要包括以下内容:1.基于Faster R-CNN的物体检测;2.使用PyTorch实现Faster R-CNN;3.训练自己的数据集进行物体检测;4.如何优化物体检测的精度;5.使用多GPU进行训练。
码科智能
2018/01/02
1.3K0
DL开源框架Caffe | 目标检测Faster-rcnn问题全解析
《Aidlux11月AI实战训练营》作业心得
实战训练营的课程:https://mp.weixin.qq.com/s/3WrTMItNAGt8l2kjjf042w。
用户10149871
2022/12/06
2260
Caffe2 - (三十一) Detectron 之 modeling - FPN 与 optimizer
Caffe2 - (三十一) Detectron 之 modeling - FPN 与 optimizer 1. FPN.py FPN 模块. """ Feature Pyramid Network (FPN) 使用的相关函数. """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unic
AIHGF
2018/05/17
1.7K0
《Aidlux智慧社区AI实战训练营》大作业总结及心得
https://mp.weixin.qq.com/s/ASnaFA7D4jfHWoO_IqQ6aQ
用户10149871
2023/02/26
5980
利用AidLux实现电离目标检测与实时锁定演示
本效果由yolov8实现目标检测得到边框信息,sort通过对边框的检测,关联,新息,赋予id,锁定(跟踪)目标。
用户10559524
2023/05/10
4100
基于Aidlux的图片相似度对比
利用深度神经网络,提取印章深度特征,同时学习印章之间的相似度,自己与自己相似,自己与其它不相似。
用户10686717
2023/10/24
3860
推荐阅读
相关推荐
​零基础入门深度学习(九):目标检测之常用数据预处理与增广方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验