赞
踩
大家好,这里是小白三岁,三岁做梦都没有想到,能够踏上AI技术路,用上AI还完成了一个理想丰满现实骨感的项目,项目漏洞极多,希望大佬们帮忙改进,谢谢大家~~
三岁通过AI技术对导入的照片进行AI识别,查看是否戴口罩,如果没有就采用人脸关键点检测,在对应的位置上加上“口罩”,里面涉及了百度飞桨的两款AI识别接口(点击查看具体的内容)
因为小编三岁,技术不行对图片处理包括.jpg和.png格式的图处理不好,导致了照片底黑,过大,还希望有大佬帮忙改进提供自己的版本!在这里谢谢大家啦,如果有其他的想法可以自行修改添加自己的版本。
点击查看项目
#运行模块加载
#口罩识别
!hub install pyramidbox_lite_mobile_mask==1.1.0
#关键点检测
!hub install face_landmark_localization==1.0.2
#抠图
!hub isntall deeplabv3p_xception65_humanseg
#关键点识别
!hub install face_landmark_localization==1.0.2
# hub run face_landmark_localization --input_path "/PATH/TO/IMAGE"
#下载第三方包
!pip install matplotlib
import paddlehub as hub
import cv2
import os
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import paddlehub as hub
import numpy as np
import math
from PIL import Image
import importlib
def photo_path_read(path, add):
for root, dirs, files in os.walk(path):
for file in files:
a = os.path.splitext(file)
add.append(f'{root}/{a[0]}{a[1]}')
# print(add)
return add
def Masks_to_identify(photo_path): module = hub.Module(name="pyramidbox_lite_mobile_mask") !hub run pyramidbox_lite_mobile_mask --input_path f"{pothot_path}" test_img_path = f"{photo_path}" # set input dict input_dict = {"data": [cv2.imread(test_img_path)]} results = module.face_detection(data=input_dict) print(results) return results ''' 可以采用以下代码对图片识别情况进行查看 !hub run pyramidbox_lite_mobile_mask --input_path 'photo/Baidu_001.jpg(图片地址)' ''' # test_img_path = f"{photo_path}" # img = mpimg.imread(test_img_path) # # 展示待预测图片 # plt.figure(figsize=(10,10)) # plt.imshow(img) # plt.axis('off') # plt.show() # # 预测结果展示 # test_img_path = f"detection_result/{photo_path}" # img = mpimg.imread(test_img_path) # # 展示预测结果图片 # plt.figure(figsize=(10,10)) # plt.imshow(img) # plt.axis('off') # plt.show()
def Masks_to_add(path): print('开始添加') src_img = cv2.imread(f'{path}') module = hub.Module(name="face_landmark_localization") result = module.keypoint_detection(images=[src_img]) # print(result) # print(type(result)) box_m = [] box_0 = result[0]['data'][0][0] box_1 = result[0]['data'][0][11]#)( box_m.append(int(box_0[0])) box_m.append(int(box_0[1])) box_m.append(int(box_1[0]+30)) box_m.append(int(box_1[1]+30)) print(box_0,box_1,box_m) base_img = Image.open(f'{path}') #加载需要P上去的图片 tmp_img = Image.open('001.jpg') #以下添加标注均为个人尝试(无关紧要) # has_alpha = tmp_ing.mode == 'RGBA' # tmp_ing.putalptha()[-1] # tmp.img = tmp_img.convert('RGBA') #这里可以选择一块区域或者整张图片 tmp_img = tmp_img.resize((100,100)) #或者使用整张图片 region = tmp_img print('正在判定大小') region = region.resize((int(box_m[2] - box_m[0]), int(box_m[3] - box_m[1]))) print(region) base_img.paste(region, box_m) print(base_img) base_img.show() # 查看合成的图片 print(base_img) # print(f'new_{path[6:]}') base_img.save(f'new_{path[6:]}') #保存图片 print('生成成功')
if __name__ =='__main__': add = [] photo_path = 'photo' path_listes = photo_path_read(photo_path, add) # print(add) for path_list in path_listes: # print(path_list) masks_data = Masks_to_identify(path_list) # print(masks_data[0]['data']['label']) try: if masks_data[0]['data']['label'] == 'NO MASK': print(path_list) Masks_to_add(path_list) except: continue
其他的没有什么需要解析的就是一个关键点检测:
以上是关键点检测的结果,需要添加口罩只需要2到12位置上添加就可以了,至于图片处理不是非常完善,这里就不展示成果了,怕倒大家胃口。
这是一个创新赛,第一是有创新思想,第二要技术,小编技术有限,这一点在完成项目时真的深有体会,百度(度娘)都翻遍了,大佬都问了,情况不同帮不了你,还是必须要不断提高自己,不管这次的成绩如何结果如何无所谓了,关键的是这一次的过程,这一次过程中的学习,真的很多,包括百度飞桨小白逆袭大神课程也一样,学到的非常多。
感谢大家支持,这一次的锻炼真的为接下来的学习具有一定的指导作用,希望接下来再接再力,继续努力。谢谢大家~~~~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。