題目:
新冠疫情的爆發對人類生命安全及全球經濟發展造成了重大影響,雖然現在 國內疫情基本得到有效遏制,但日常防控仍不可松懈,戴口罩是預防新冠肺炎最 便捷、最有效的措施和方法,人臉佩戴口罩的自動化識別可以有效檢測人群佩戴 口罩情況,是抑制疾病在人流量大的公共場合快速傳播和保護身體健康的重要技 術手段,

思路:沒得啥說的,就是個檢測戴口罩不嘛,我做兩個案例代碼出來,
第一個代碼我用飛漿深度學習框架:(注意:僅供參考,記得你要在我基礎上修改然后多吹點牛逼,才拿去比賽哈),等會我再出一個代碼.
一、定義待預測資料
# 待預測圖片
test_img_path = ["./img.png"]
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread(test_img_path[0])
# 展示待預測圖片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
回傳:

若是待預測圖片存放在一個檔案中,如左側檔案夾所示的test.txt,每一行是待預測圖片的存放路徑,
代碼:
with open('mask.txt', 'r') as f:
try:
test_img_path=[]
for line in f:
test_img_path.append(line.strip())
except:
print('圖片加載失敗')
print(test_img_path)
回傳:

二、加載預訓練模型
PaddleHub口罩檢測提供了兩種預訓練模型,pyramidbox_lite_mobile_mask和pyramidbox_lite_server_mask,二者均是基于2018年百度發表于計算機視覺頂級會議ECCV 2018的論文PyramidBox而研發的輕量級模型,模型基于主干網路FaceBoxes,對于光照、口罩遮擋、表情變化、尺度變化等常見問題具有很強的魯棒性,不同點在于,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,完成預測功能,
# 口罩檢測預測
visualization=True #將預測結果保存圖片可視化
output_dir='detection_result' #預測結果圖片保存在當前運行路徑下detection_result檔案夾下
results = module.face_detection(images=imgs, use_multi_scale=True, shrink=0.6, visualization=True, output_dir='detection_result/test.jpg')
for result in results:
print(result)
# 預測結果展示
import matplotlib.image as im
import matplotlib.pyplot as plt
import os
# 需要讀取的路徑
path_name = r'./detection_result'
for item in os.listdir(path=path_name):
img = im.imread(os.path.join(path_name, item))
plt.imshow(img)
plt.show()
回傳如下:

其中,label有’MASK’和’NO MASK’兩種選擇:'MASK’表示戴了口罩,'NO MASK表示沒有佩戴口罩,‘left’/‘rigth’/‘top’/'bottom’表示口罩在圖片當中的位置,'confidence’表示預測為佩戴口罩’MASK’或者不佩戴口罩’NO MASK’的概率大小,同時,作為一項完善的開源作業,除了本地推斷以外,PaddleHub還支持將該預訓練模型部署到服務器或移動設備中,
四.完整原始碼
需要檔案也可以左側聯系我,當然我也是百度隨便找的,
# coding=gbk
"""
作者:川川
@時間 : 2021/8/30 0:14
群:970353786
"""
# 待預測圖片
# test_img_path = ["./img.png"]
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# img = mpimg.imread(test_img_path[0])
# 展示待預測圖片
# plt.figure(figsize=(10,10))
# plt.imshow(img)
# plt.axis('off')
# plt.show()
with open('mask.txt', 'r') as f:
try:
test_img_path=[]
for line in f:
test_img_path.append(line.strip())
except:
print('圖片加載失敗')
print(test_img_path)
# import os
import cv2
# imgs =[cv2.imread(image_path) for image_path in test_img_path]
imgs=[cv2.imread(test_img_path[0])]
# for i in imgs:
#加載模塊
import paddlehub as hub
module = hub.Module(name="pyramidbox_lite_mobile_mask")
# module = hub.Module(name="pyramidbox_lite_server_mask")
# 口罩檢測預測
visualization=True #將預測結果保存圖片可視化
output_dir='detection_result' #預測結果圖片保存在當前運行路徑下detection_result檔案夾下
results = module.face_detection(images=imgs, use_multi_scale=True, shrink=0.6, visualization=True, output_dir='detection_result')
for result in results:
print(result)
# 預測結果展示
import matplotlib.image as im
import matplotlib.pyplot as plt
import os
# 需要讀取的路徑
path_name = r'./detection_result'
for item in os.listdir(path=path_name):
img = im.imread(os.path.join(path_name, item))
plt.imshow(img)
plt.show()
如果你想放在服務器上:
執行如下命令啟動模型:
hub serving start -m pyramidbox_lite_server_mask -p 8866
代碼為:
# coding: utf8
import requests
import json
import base64
import os
# 指定要檢測的圖片并生成串列[("image", img_1), ("image", img_2), ... ]
file_list = ["test.jpg"]
files = [("image", (open(item, "rb"))) for item in file_list]
# 指定檢測方法為pyramidbox_lite_server_mask并發送post請求
url = "http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask"
r = requests.post(url=url, files=files, data={"visual_result": "True"})
results = eval(r.json()["results"])
# 保存檢測生成的圖片到output檔案夾,列印模型輸出結果
if not os.path.exists("output"):
os.mkdir("output")
for item in results:
with open(os.path.join("output", item["path"]), "wb") as fp:
fp.write(base64.b64decode(item["base64"].split(',')[-1]))
item.pop("base64")
print(json.dumps(results, indent=4, ensure_ascii=False))
更多比賽討論請加:912166339
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340688.html
標籤:其他
