目录

1. 导入所需要的函数库

2. 进行预测

2.1导入模型

2.2 输入图片

 2.3 模型预测

2.4 输出结果

 3. 完整代码地址

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 是一个列表,列表里存了一个字典,字典里存了两个键:

  1. “data”下的列表里存了判断结果,图里面检测到有多少人就会后多少结果,包括标签、置信度等等。
  2. “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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐