毕业季--学士帽生成器(PaddleHub实现)

P粉084495128
发布: 2025-07-30 10:30:56
原创
1002人浏览过
该教程介绍了使用PaddleHub实现人物佩戴学士帽的流程:导入相关包后,展示人物图片,通过ultra_light_fast_generic_face_detector_1mb_640模型检测人脸,调整学士帽尺寸、角度和偏移量合成图片,还包含HubServing轻量级服务化部署,且可按需修改数据集类型。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

毕业季--学士帽生成器(paddlehub实现) - php中文网

项目简介

此教程展示使用了尽量少的代码实现在人物上佩戴学士帽 paddlehub模型部署服务端Serving部署

并且可以根据自己的需要修改数据集的类型实现不同类型

流程:

1、导入相关的包

2、展示需要人物图片

3、脸部检测

4、合成带学士帽图片

5、HubServing轻量级服务化部署

效果展示

原图:

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

NameGPT名称生成器 0
查看详情 NameGPT名称生成器

毕业季--学士帽生成器(PaddleHub实现) - php中文网        

变换后:

原图+学士帽:

毕业季--学士帽生成器(PaddleHub实现) - php中文网        

(PS:示例图片均来源于互联网,如有侵权,请联系删除)

1、导入相关的包

In [ ]
import numpy as npimport matplotlib.image as mpimgimport matplotlib.pyplot as pltimport osfrom PIL import Imageimport paddlehub as hubimport cv2import shutil
登录后复制
   

2、展示需要人物图片

In [ ]
test_img_path = ["work/test.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()
登录后复制
       
<Figure size 720x720 with 1 Axes>
登录后复制
               

3、脸部检测

In [ ]
!pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple
登录后复制
   
In [ ]
import paddlehub as hub

module = hub.Module(name="ultra_light_fast_generic_face_detector_1mb_640")

input_dict = {"image": test_img_path}# execute predict and print the resultresults = module.face_detection(data=input_dict, visualization=True)for result in results:    print(result)
登录后复制
       
[2022-06-15 18:29:31,819] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
登录后复制
       
{'data': [{'left': 322.3936462402344, 'right': 423.6573791503906, 'top': 264.9285583496094, 'bottom': 397.74920654296875, 'confidence': 0.9989694356918335}], 'path': 'work/test.png', 'save_path': 'face_detector_640_predict_output/test.png'}
登录后复制
       

4、合成带学士帽图片

可以对学士帽进行调节尺寸大小、角度

In [ ]
if os.path.exists('./HeCheng'):    pass      else:
    os.mkdir('./HeCheng')#创建文件夹test_path='work/test.png'#需要合成人物的图片toushi='work/学士帽.png'#学士帽照片#后处理:调整帽子maozi = Image.open('work/学士帽.png') 
maozi2copy  = maozi.copy() 
maozi2copy = maozi2copy.rotate(-5)#调整角度maozi2copy   = maozi2copy.resize((240,130))#调整大小savepath='HeCheng'#保存合成后图片文件夹x = results[0]if x.get('data'): 
    for result in results:        print(result)    # box 为头像在图片中的位置
    # box(x1, y1, x2, y2)
    # x1,y1 为头像左上角的位置
    # x2,y2 为头像右下角的位置
    x1 = results[0]['data'][0]['left']
    y1 = results[0]['data'][0]['top']
    x2 = results[0]['data'][0]['right']
    y2 = results[0]['data'][0]['bottom']    
    
    # 学士帽图片尺寸,和resize相同
    fruit_size = (240, 130)    
    
    #调整偏移量
    addx = -65 #这个可以根据实际情况调节,越大越往右(注意是负值)
    addy = -50 #这个可以根据实际情况调节,越大越往下(注意是负值)
    box = (int(x1)+addx,int(y1)+addy,int(x1)+fruit_size[0]+addx,int(y1)+ fruit_size[1]+addy)    #print(x1)

    pil_im1 = Image.open(test_path)    # pil_im2 = Image.open(toushi).convert('RGBA')
    region = pil_im1.crop(box)#cut from the picture
    region = region.transpose(Image.ROTATE_270)#rotate the image
    pil_im1.paste(maozi2copy, box, maozi2copy)
    plt.imshow(pil_im1)
    pil_im1.save(savepath+'/'+'合成.png')#合成后的图片else:    print("没有检测到")
登录后复制
       
{'data': [{'left': 322.3936462402344, 'right': 423.6573791503906, 'top': 264.9285583496094, 'bottom': 397.74920654296875, 'confidence': 0.9989694356918335}], 'path': 'work/test.png', 'save_path': 'face_detector_640_predict_output/test.png'}
登录后复制
       
<Figure size 432x288 with 1 Axes>
登录后复制
               

5、HubServing轻量级服务化部署

!hub serving start -m ultra_light_fast_generic_face_detector_1mb_640
登录后复制
       

这一步请在 终端-1 执行 执行成功后会出现以下画面

毕业季--学士帽生成器(PaddleHub实现) - php中文网        

In [13]
# !hub serving start -m ultra_light_fast_generic_face_detector_1mb_640
登录后复制
   

然后通过客服端向服务器发送请求

发送成功后会出现以下画面

毕业季--学士帽生成器(PaddleHub实现) - php中文网        

In [17]
# coding: utf8%matplotlib inlineimport matplotlib.pyplot as plt # plt 用于显示图片import requestsimport jsonimport cv2import base64import numpy as npimport colorsysimport warningsimport matplotlib.image as mpimgimport osfrom PIL import Imageimport paddlehub as hubimport shutil

warnings.filterwarnings("ignore")
plt.figure(figsize=(12,8))def cv2_to_base64(image):
    data = cv2.imencode('.jpg', image)[1]    return base64.b64encode(data.tostring()).decode('utf8')if __name__ == '__main__':    # 获取图片的base64编码格式
    img1 = cv2_to_base64(cv2.imread("/home/aistudio/work/test.png"))    #img2 = cv2_to_base64(cv2.imread("MyDataset/images/hard_hat_workers1457.png"))
    data = {'images': [img1]}    # data = {'images': [img1]}
    # 指定content-type
    headers = {"Content-type": "application/json"}    # 发送HTTP请求
    url = "http://127.0.0.1:8866/predict/ultra_light_fast_generic_face_detector_1mb_640"
    r = requests.post(url=url, headers=headers, data=json.dumps(data))    # 打印预测结果,注意,r.json()["results"]本身就是一个数组,要取到对应图片的人脸关键点预测结果
    print(r.json()["results"])    
    if os.path.exists('./HeCheng'):        pass      
    else:
        os.mkdir('./HeCheng')#创建文件夹


    test_path='/home/aistudio/work/test.png'#需要合成人物的图片
    toushi='/home/aistudio/work/学士帽.png'#学士帽照片

    #后处理:调整帽子
    maozi = Image.open('work/学士帽.png') 
    maozi2copy  = maozi.copy() 
    maozi2copy = maozi2copy.rotate(-5)#调整角度
    maozi2copy   = maozi2copy.resize((240,130))#调整大小


    savepath='HeCheng'#保存合成后图片文件夹
    x = results[0]    if x.get('data'): 
        for result in results:            print(result)        # box 为头像在图片中的位置
        # box(x1, y1, x2, y2)
        # x1,y1 为头像左上角的位置
        # x2,y2 为头像右下角的位置
        x1 = results[0]['data'][0]['left']
        y1 = results[0]['data'][0]['top']
        x2 = results[0]['data'][0]['right']
        y2 = results[0]['data'][0]['bottom']        
        
        # 学士帽图片尺寸,和resize相同
        fruit_size = (240, 130)        
        
        #调整偏移量
        addx = -65 #这个可以根据实际情况调节,越大越往右(注意是负值)
        addy = -50 #这个可以根据实际情况调节,越大越往下(注意是负值)
        box = (int(x1)+addx,int(y1)+addy,int(x1)+fruit_size[0]+addx,int(y1)+ fruit_size[1]+addy)        #print(x1)

        pil_im1 = Image.open(test_path)        # pil_im2 = Image.open(toushi).convert('RGBA')
        region = pil_im1.crop(box)#cut from the picture
        region = region.transpose(Image.ROTATE_270)#rotate the image
        pil_im1.paste(maozi2copy, box, maozi2copy)
        plt.imshow(pil_im1)
        pil_im1.save(savepath+'/'+'合成.png')#合成后的图片
    else:        print("没有检测到")
登录后复制
       
[{'data': [{'bottom': 397.8898620605469, 'confidence': 0.9991759657859802, 'left': 321.9490051269531, 'right': 423.74810791015625, 'top': 265.1085510253906}]}]
{'data': [{'left': 322.3936462402344, 'right': 423.6573791503906, 'top': 264.9285583496094, 'bottom': 397.74920654296875, 'confidence': 0.9989694356918335}], 'path': 'work/test.png', 'save_path': 'face_detector_640_predict_output/test.png'}
登录后复制
       
<Figure size 864x576 with 1 Axes>
登录后复制
               

以上就是毕业季--学士帽生成器(PaddleHub实现)的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号