调用百度飞桨paddlehub模型进行口罩识别 详解
目录
1. 导入所需要的函数库
import paddlehub as hub
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
关于paddlehub的下载可以去官网复制下载命令:
开始使用_飞桨-源于产业实践的开源深度学习平台 (paddlepaddle.org.cn)

安装完paddlehub后还需要安装paddle库,不然会缺少依赖库
conda install -c paddle paddlepaddle
或:
pip install paddle
不会打开conda命令行安装的可参考网上博客
2. 进行预测
2.1导入模型
module = hub.Module(name="pyramidbox_lite_server_mask")
模型有两种:pyramidbox_lite_server_mask和pyramidbox_lite_mobile_mask
据说一种适合于PC一种适合于移动端,我自己在电脑上试了一下区别不是特别大,可以都试试。
2.2 输入图片
先将需要判别的图片路径输入一个列表,这样能方便在一张图片和多张图片的情况下进行切换
img_paths = ["test.jpg", 'test2.jpg']
2.3 模型预测
for img_path in img_paths:
result_list = module.face_detection(images=[cv2.imread(img_path)],
use_multi_scale=True,
shrink=0.6,
visualization=True,
output_dir= 'result')
使用一个for结构遍历每一张图片,使用model对每一张图片进行预测,具体参数如下:
images:输入的图片矩阵,需要把矩阵放在一个列表里面。
use_multi_scale:是否开启多尺度的人脸检测,默认为关闭。开启多尺度人脸检测能够更好的检测到输入图像中不同尺寸的人脸,但是会增加模型计算量,降低预测速度,建议在对人脸漏检要求比较低的场景下开启该设置。
shrink:图片的缩放比例,输入值应位于区间 (0 ~ 1],默认为 0.5。shrink 值越大,则对于输入图片中的小尺寸人脸有更好的检测效果,反之则对于大尺寸人脸有更好的检测。同时, shrink 值越大,则模型计算成本越高。
visualization: 是否数据可视化。也就是否是在图片上标注并保存
output_dir:可视化图片时保存在哪个文件夹,“result”是python文件同目录下的文件夹名
2.4 输出结果
接着上面的for继续输入下面的代码
# 列表里就一个字典,先取出来放到result
result = result_list[0]
for i in result['data']:
print(i)
# 除去path最后的".0"
path_charlist = list(result["path"])
path_charlist = path_charlist[:-2]
path_str = ''.join(path_charlist)
path = out_path + '/' + path_str + '.jpg'
# print(path)
img = mpimg.imread(path)
plt.figure(figsize=(10, 10))
plt.imshow(img)
plt.show()
在2.3中调用函数输出的结果 result_list 是一个列表,列表里存了一个字典,字典里存了两个键:
- “data”下的列表里存了判断结果,图里面检测到有多少人就会后多少结果,包括标签、置信度等等。
- “path”代表了对原始图片标注后保存在“result”文件夹下的图片文件 。但是有个巨坑的点是这里字符串 'ndarray_time=1631435493820565.0' 最后有个 “.0”, 但是实际保存的件名没有这个“.0”, 所有我们先把这个字符串转为字符列表, 删去这两个字符重新组成一个字符串,最后拼接成一个完整路径。
[{'data':[{'label': 'MASK', 'confidence': 0.9759233593940735, 'top': 58.0, 'bottom': 104.0,'left': 400.69516362063877, 'right': 438.3390585363993}
{'label': 'MASK', 'confidence': 0.9172435998916626, 'top': 53.64396893298924, 'bottom':99.64396893298924, 'left': 26.35603106701076, 'right': 64.32198446649463}
{'label': 'NO MASK', 'confidence': 0.9999872446060181, 'top': 54.30020750795207, 'bottom':104.60041501590413, 'left': 137.0, 'right': 176.65010375397603}
{'label': 'MASK', 'confidence': 0.6583895087242126, 'top': 35.00001546493642, 'bottom':85.0, 'left': 317.33342512243536, 'right': 358.00003651553754}
{'label': 'MASK', 'confidence': 0.9855310916900635, 'top': 39.27854682887172, 'bottom':82.00069122449543, 'left': 524.8830477865314, 'right': 545.8844302355222}
{'label': 'NO MASK', 'confidence': 0.9892868995666504, 'top': 74.50029313180652, 'bottom':105.99941373638697, 'left': 371.0, 'right': 397.50029313180653}],
'path': 'ndarray_time=1631435493820565.0'
}]
最后是程序可视化的结果:


3. 完整代码地址:
代码和图片都传到了github:
Squirtle339/MaskTest-paddlehub (github.com)
https://github.com/Squirtle339/MaskTest-paddlehub
更多推荐
所有评论(0)