iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python利用AI接口实现抠图并改图片底色
  • 173
分享到

Python利用AI接口实现抠图并改图片底色

2024-04-02 19:04:59 173人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、注册百度ai账号二、代码实现1.引入库2.获取Access Token3.核心代码4.图片底色填充5.图片压缩6.获取图图片大小7.png格式转jpg8.主函数9.完整代

前言

嗨嗨,大家好呀 ,我是小圆。有时候我们的证件照需要换底色,又来不及去照相馆拍照,用ps也不好抠图,所以今天给你们分享一下如何用python来抠图,并换底色

一、注册百度AI账号

创建人像分割应用

百度人像分割主页:按步骤注册,登录,实名认证即可。

在控制台主页找到人体分析

创建应用

里面的需要填写的内容可以随便写,新用户要去领取免费资源,不然使用不了。

创建完成在应用列表记录 api Key、Secret Key的值 ,稍后要用。

至此,注册账号和创建应用的任务就完成了。

二、代码实现

1.引入库

import os
import requests
import base64
import cv2
import numpy as np
from PIL import Image
from pathlib import Path

​​​​​​​path = os.getcwd()
paths = list(Path(path).glob('*'))

2.获取Access Token

def get_access_token():
    url = 'https://aip.baidubce.com/oauth/2.0/token'
    data = {
        'grant_type': 'client_credentials',  # 固定值
        'client_id': '替换成你的API Key',  # 在开放平台注册后所建应用的API Key
        'client_secret': '替换成你的Secret Key'  # 所建应用的Secret Key
    }
    res = requests.post(url, data=data)
    res = res.JSON()
    access_token = res['access_token']
    return access_token

3.核心代码

def removebg():
    try:
        request_url = "Https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
        # 二进制方式打开图片文件
        f = open(name, 'rb')
        img = base64.b64encode(f.read())
        params = {"image":img}
        access_token = get_access_token()
        request_url = request_url + "?access_token=" + access_token
        headers = {'content-type': 'application/x-www-fORM-urlencoded'}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            res = response.json()["foreground"]
            png_name=name.split('.')[0]+".png"
            with open(png_name,"wb") as f:
                data = base64.b64decode(res)
                f.write(data)
            fullwhite(png_name) #png图片底色填充,视情况舍去
            png_jpg(png_name) #png格式转jpg,视情况舍去
            os.remove(png_name) #删除原png图片,视情况舍去
            print(name+"\t处理成功!")
    except Exception as e:
        pass

4.图片底色填充

def fullwhite(png_name):
    im = Image.open(png_name)
    x,y = im.size
    try:
        p = Image.new('RGBA', im.size, (255,255,255))        # 使用白色来填充背景,视情况更改
        p.paste(im, (0, 0, x, y), im)
        p.save(png_name)
    except:
        pass

5.图片压缩

#compress_rate:数值越小照片越模糊
def resize(compress_rate = 0.5):
    im = Image.open(name)
    w, h = im.size
    im_resize = im.resize((int(w*compress_rate), int(h*compress_rate)))
    resize_w, resieze_h = im_resize.size
    #quality 代表图片质量,值越低越模糊
    im_resize.save(name)
    im.close()

6.获取图图片大小

def get_size():
    size = os.path.getsize(name)
    return size / 1024

7.png格式转jpg

def png_jpg(png_name):
    im = Image.open(png_name)
    bg=Image.new('RGB',im.size,(255,255,255))
    bg.paste(im)
    jpg_name = png_name.split('.')[0]+".jpg"
    #quality 代表图片质量,值越低越模糊
    bg.save(jpg_name,quality=70)
    im.close()

8.主函数

if __name__ == '__main__':
    for i in paths:
        name = os.path.basename(i.name)
        if(name==os.path.basename(__file__)):
            continue
        size = get_size()
        ##照片压缩
        while size >=900:
            size = get_size()
            resize()   
        removebg()
        print(" ")

9.完整代码

#人像分割
import os
import requests
import base64
import cv2
import numpy as np
from PIL import Image
from pathlib import Path

path = os.getcwd()
paths = list(Path(path).glob('*'))

def get_access_token():
    url = 'https://aip.baidubce.com/oauth/2.0/token'
    data = {
        'grant_type': 'client_credentials',  # 固定值
        'client_id': '替换成你的API Key',  # 在开放平台注册后所建应用的API Key
        'client_secret': '替换成你的Secret Key'  # 所建应用的Secret Key
    }
    res = requests.post(url, data=data)
    res = res.json()
    access_token = res['access_token']
    return access_token
def png_jpg(png_name):
    im = Image.open(png_name)
    bg=Image.new('RGB',im.size,(255,255,255))
    bg.paste(im)
    jpg_name = png_name.split('.')[0]+".jpg"
    #quality 代表图片质量,值越低越模糊
    bg.save(jpg_name,quality=70)
    im.close()

#compress_rate:数值越小照片越模糊
def resize(compress_rate = 0.5):
    im = Image.open(name)
    w, h = im.size
    im_resize = im.resize((int(w*compress_rate), int(h*compress_rate)))
    resize_w, resieze_h = im_resize.size
    #quality 代表图片质量,值越低越模糊
    im_resize.save(name)
    im.close()
    
def get_size():
    size = os.path.getsize(name)
    return size / 1024
    
def fullwhite(png_name):
    im = Image.open(png_name)
    x,y = im.size
    try:
        # 使用白色来填充背景
        # (alpha band as paste mask).
        p = Image.new('RGBA', im.size, (255,255,255))
        p.paste(im, (0, 0, x, y), im)
        p.save(png_name)
    except:
        pass

def removebg():
    try:
        request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
        # 二进制方式打开图片文件
        f = open(name, 'rb')
        img = base64.b64encode(f.read())
        params = {"image":img}
        access_token = get_access_token()
        request_url = request_url + "?access_token=" + access_token
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            res = response.json()["foreground"]
            png_name=name.split('.')[0]+".png"
            with open(png_name,"wb") as f:
                data = base64.b64decode(res)
                f.write(data)
            fullwhite(png_name)
            png_jpg(png_name)
            os.remove(png_name)
            print(name+"\t处理成功!")
    except Exception as e:
        pass

if __name__ == '__main__':
    for i in paths:
        name = os.path.basename(i.name)
        if(name==os.path.basename(__file__)):
            continue
        size = get_size()
        ##照片压缩
        while size >=900:
            size = get_size()
            resize()   
        removebg()
        print(" ")

[重要]使用前注意事项

1. 该程序会覆盖原文件,使用前请备份文件,以免造成数据丢失

2. 将程序复制到和待处理的照片同目录下,双击程序即可运行

到此这篇关于Python利用AI接口实现抠图并改图片底色的文章就介绍到这了,更多相关Python 抠图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python利用AI接口实现抠图并改图片底色

本文链接: https://www.lsjlt.com/news/120510.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python利用AI接口实现抠图并改图片底色
    目录前言一、注册百度AI账号二、代码实现1.引入库2.获取Access Token3.核心代码4.图片底色填充5.图片压缩6.获取图图片大小7.png格式转jpg8.主函数9.完整代...
    99+
    2024-04-02
  • 如何通过Python调用接口实现抠图并改底色
    这篇文章主要介绍了如何通过Python调用接口实现抠图并改底色的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何通过Python调用接口实现抠图并改底色文章都会有所收获,下面我们一起来看看吧。一、注册百度AI账...
    99+
    2023-07-04
  • python图像处理-利用一行代码实现灰度图抠图
    目录一行代码实现灰度图抠图Python抠图程序源码准备程序构思完整代码截图如下,每条语句均有功能注释一行代码实现灰度图抠图 抠图是ps的最基本技能,利用python可以实现用一行代码...
    99+
    2024-04-02
  • html5如何利用canvas实现颜色容差抠图功能
    这篇文章主要介绍了html5如何利用canvas实现颜色容差抠图功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。利用canvas的getImageData,我们可以获取到一...
    99+
    2023-06-09
  • 如何利用一行python代码实现灰度图抠图
    这篇“如何利用一行python代码实现灰度图抠图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何利用一行python代码实...
    99+
    2023-06-30
  • Android利用Palette实现提取图片颜色
    目录前言创建Palette提取颜色文字颜色自动适配更多功能总结前言 Palette即调色板这个功能其实很早就发布了,Jetpack同样将这个功能也纳入其中,想要使用这个功能,需要先依...
    99+
    2024-04-02
  • 前端使用svg图片改色实现示例
    目录引言svg填充色用的fillcss改色利用过滤器filter最后顺便介绍下filter: drop-shadow()引言 周六来公司写点东西,刚好有个icon颜色不对,ui又不在...
    99+
    2024-04-02
  • Python实现提取图片中颜色并绘制成可视化图表
    目录导入模块并加载图片提取颜色并整合成表格绘制图表实战环节今天小编来为大家分享一个有趣的可视化技巧,如何从图片中提取颜色然后绘制成可视化图表,如下图所示 在示例照片当中有着各种各样...
    99+
    2024-04-02
  • 利用Python 实现图片转字符画
    目录前言字符画的原理灰度值和RGB代码实战总结前言 相信大家在网上经常看到有人秀出各种各样的字符画,对于这个五彩斑斓的世界来说,我们日常看到的都是一些高清的彩色的图片,偶尔来个粗糙的...
    99+
    2024-04-02
  • 利用Python实现图片风格迁移
    本篇内容主要讲解“利用Python实现图片风格迁移”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“利用Python实现图片风格迁移”吧!1. 什么是图片的风格迁移?所谓图片风格迁移,是指利用程序算...
    99+
    2023-06-02
  • 如何利用python实现图片批处理
    前言 在训练神经网络之前,我们往往需要对数据集进行批量处理。本文以图片为例,介绍如何使用python实现图片的批量处理,包括批量命名,批量更改图像像素,批量对图片进行Harris、C...
    99+
    2024-04-02
  • SpringBoot 利用MultipartFile上传本地图片生成图片链接的实现方法
    方法一 实现类: public String fileUpload(MultipartFile file) { if(file == null){ retu...
    99+
    2024-04-02
  • 利用Python的PIL工具包实现图片比
     PythonWare公司提供了免费的图像处理工具包PIL(Python Image Library),该软件包提供了基本的图像处理功能,本文介绍了使用PIL工具包中的Image模块进行比对的过程。                    ...
    99+
    2023-01-31
    工具包 图片 Python
  • Python如何使用face_recognition实现AI识别图片中的人物
    这篇文章给大家分享的是有关Python如何使用face_recognition实现AI识别图片中的人物的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境安装首先我们看看官方给出的人脸识别效果图我们看一下READM...
    99+
    2023-06-26
  • 利用Python多线程实现图片下载器
    目录导语开发工具环境搭建原理简介效果展示导语 之前有很多小伙伴说想学习一下多线程图片下载器,虽然好像已经过去很久了,不过还是上来安排一波吧。至于题目为什么说是构建一个小型数据集,因为...
    99+
    2024-04-02
  • 怎么利用Python实现图片转字符画
    本文小编为大家详细介绍“怎么利用Python实现图片转字符画”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用Python实现图片转字符画”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。字符画的原理这种字符画...
    99+
    2023-07-02
  • Python调用百度AI实现图片上表格识别功能
    目录简介步骤安装百度AI库注册百度AI开放平台调用AipOcr库识别表格文字可能遇到的问题批量操作总结简介 Python免费调用百度AI实现图片上面的表格识别 步骤 安装百度AI库 ...
    99+
    2024-04-02
  • 利用java怎么实现一个将图片去色的功能
    本篇文章为大家展示了利用java怎么实现一个将图片去色的功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。现在我们要将这样的一张图片变成为代码package com.epoint.wdg.test;...
    99+
    2023-05-31
    java ava
  • laravel怎么实现上传图片的接口并建立软链接访问
    这篇文章主要介绍“laravel怎么实现上传图片的接口并建立软链接访问”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“laravel怎么实现上传图片的接口并建立软链接访问”文章能帮助大家解决问题。我们...
    99+
    2023-07-04
  • 利用Java如何实现爬取网络图片并保存
    这篇文章给大家介绍利用Java如何实现爬取网络图片并保存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下package getUrlPic;import java.io.ByteArrayOutputStre...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作