PaddleHub口罩检测示例

防控疫情,众志成城。人工智能技术正被应用到疫情防控中来。

飞桨预训练模型管理与迁移学习工具PadddleHub已提供PyramidBox预训练模型(pyramidbox_lite_mobile_mask/pyramidbox_lite_server_mask)用于一键检测人们是否佩戴口罩。同时PaddleHub还提供了飞桨生态下的高质量预训练模型,涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、视频分类、图像生成、图像分割、文本审核、关键点检测等主流模型。更多模型详情请查看官网:https://www.paddlepaddle.org.cn/hub 和 PaddleHub repo:https://github.com/PaddlePaddle/PaddleHub

本示例利用目标检测轻量化模型pyramidbox_lite_mobile_mask完成佩戴口罩检测,注意,本例只适用于检测一张图片情况。

NOTE: 如果您在本地运行该项目示例,需要首先安装PaddleHub。

'''
在线安装PaddleHub
'''
!pip install --upgrade paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple

一、定义待预测数据

以数据集文件夹下png格式的待预测图片


#!unzip /home/detection.zip #这里为你需要检测检测的图片路径
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

# 待预测图片
test_img_path = ["/home/detection.jpg"]
img = mpimg.imread(test_img_path[0]) 

# 展示待预测图片
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

PaddleHub口罩检测示例_第1张图片
若是待预测图片存放在一个文件中,如test.txt。每一行是待预测图片的存放路径。


!cat /home/test.txt

用户想要利用完成对该文件的口罩检测,只需读入该文件,将文件内容存成list,list中每个元素是待预测图片的存放路径。

with open('./test.txt', 'r') as f:
    test_img_path=[]
    for line in f:
        test_img_path.append(line.strip())
print(test_img_path)

二、加载预训练模型

PaddleHub口罩检测提供了两种预训练模型,pyramidbox_lite_mobile_mask和pyramidbox_lite_server_mask。不同点在于,pyramidbox_lite_mobile_mask是针对于移动端优化过的模型,适合部署于移动端或者边缘检测等算力受限的设备上。


import paddlehub as hub

module = hub.Module(name="pyramidbox_lite_mobile_mask")
# module = hub.Module(name="pyramidbox_lite_server_mask")

三、预测

PaddleHub对于支持一键预测的module,可以调用module的相应预测API,完成预测功能。


input_dict = {"image": test_img_path}

# 口罩检测预测
results = module.face_detection(data=input_dict)
for result in results:
    print(result)

# 预测结果展示
img = mpimg.imread("detection_result/test_mask_detection.jpg")
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

PaddleHub口罩检测示例_第2张图片

上一步骤的输出结果,有三条数据:

{‘data’: {‘label’: ‘MASK’, ‘left’: 457.5789153575897, ‘right’: 654.8277450799942, ‘top’: 182.25817680358887, ‘bottom’: 440.94200134277344, ‘confidence’: 0.8900112}, ‘id’: 1}
{‘data’: {‘label’: ‘MASK’, ‘left’: 945.8848892450333, ‘right’: 1125.7660418748856, ‘top’: 340.7917723059654, ‘bottom’: 578.5958737134933, ‘confidence’: 0.99627507}, ‘id’: 1}
{‘data’: {‘label’: ‘NO MASK’, ‘left’: 1166.5987054109573, ‘right’: 1323.4498780965805, ‘top’: 292.07742512226105, ‘bottom’: 500.40101408958435, ‘confidence’: 0.9576567}, ‘id’: 1}

其中,label有’MASK’和’NO MASK’两种选择:'MASK’表示戴了口罩,'NO MASK表示没有佩戴口罩。‘left’/‘rigth’/‘top’/'bottom’表示口罩在图片当中的位置。'confidence’表示预测为佩戴口罩’MASK’或者不佩戴口罩’NO MASK’的概率大小。

本文档适用于处理一张图片情况,读者可尝试用循环语句处理整个文件夹,遍历每一张图片,批量处理。

你可能感兴趣的:(PaddleHub口罩检测示例)