调用百度API实现图像风格转换

news2024/12/22 19:46:19

目录

  • 1、作者介绍
  • 2、基本概念
    • 2.1 人工智能云服务与百度智能云
    • 2.2 图像风格转换
  • 3、调用百度API实现图像风格转换
    • 3.1 配置百度智能云平台
    • 3.2 环境配置
    • 3.3 完整代码实现
    • 3.4 效果展示
    • 3.5 问题与分析

1、作者介绍

张元帮,男,西安工程大学电子信息学院,2022级研究生
研究方向:语音信号处理
电子邮件:2899460070@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2、基本概念

2.1 人工智能云服务与百度智能云

人工智能云服务是一种基于云计算、虚拟化和分布式处理技术的在线服务,提供了各种人工智能相关的功能,包括自然语言处理(NLP)、图像识别、声音识别、机器学习、深度学习等。人工智能云服务通过API的方式对外提供接口,用户可以通过调用这些API来使用相应的人工智能功能,而无需在本地搭建和维护复杂的人工智能系统,可以简化开发流程,缩短研发时间,并且具有良好的可扩展性和兼容性。目前,市面上存在多种人工智能云服务提供商,例如百度、阿里、腾讯、华为等。百度智能云是百度提供的一系列云端API接口,其中就包括人工智能云服务,可以用于实现文本分析、图像识别、语音识别和自然语言处理等各种应用场景。

2.2 图像风格转换

图像风格转换是一种利用深度学习和神经网络模型来实现图片风格转换的技术。该技术可以将一张图片按照指定的艺术风格进行重构,使得原图片的内容保留不变,同时又呈现出了与所选艺术风格相似的视觉效果。
在这里插入图片描述
通俗地说,就是将一张照片做成另一个不同风格的照片。例如:将一张普通的花卉照片以著名画作《向日葵》的风格呈现出来。这种技术常常被应用于数字艺术、电影制作、游戏动画等领域。

其中,百度智能云的API支持将图像转化成卡通画、铅笔画、彩色铅笔画,或者哥特油画、彩色糖块油画、呐喊油画、神奈川冲浪里油画、奇异油画、薰衣草油画等共计9种风格。下面演示如何使用百度智能云的API接口实现图像风格转换。

3、调用百度API实现图像风格转换

3.1 配置百度智能云平台

注册并登录百度智能云账号进入下图界面,选择右上角 **“控制台”模块:
在这里插入图片描述
选择
“产品服务”“人工智能”模块的“图像增强与特效”**项目:在这里插入图片描述
点击领取免费的接口资源(实名认证后可获取):
在这里插入图片描述

选择全部可领接口,然后点击0元领取(这里已经领取,不能再领)在这里插入图片描述
“应用列表” 中点击 “创建应用”,免费创建图像风格转换模块:
在这里插入图片描述
创建成功的应用模块如下,从中可以获取个人应用模块的**API Key和Secret Key**:
在这里插入图片描述

3.2 环境配置

代码使用python3运行,导入的模块有Requests、base64、json、PIL、io、os。在运行代码前,需要检查运行环境是否齐全。以下是对这些导入模块的介绍:

  • Requests是Python编程语言第三方库,用于发送 HTTP 请求和处理响应。它是一个常用的Python HTTP客户端库,可以发送HTTP/1.1请求,包括GET、POST、PUT、DELETE等请求方法。
  • base64库是Python标准库之一,提供了一些用于将二进制数据(比如图片、音频、视频文件等)转换为 ASCII 字符集中可打印字符的编码方法,以便在网络中传输或存储。
  • Json库是Python语言自带的标准库之一,用于将Python对象(如列表、字典等)转换为JSON格式的字符串以及将JSON格式的字符串转换为Python对象。
  • PIL(Python Imaging Library)是Python编程语言中一个常用的图像处理库。这个库通过内置的图片格式扩展模块及自带的工具,可以对常见的图像文件进行读写并进行多种基本的图像处理操作。
  • Python标准库中的io库提供了一个通用的Python I/O体系结构,可以轻松地访问各种类型的文件(文本文件、二进制文件、管道和套接字等),并统一这些不同文件类型的输入输出操作。
  • os库是Python标准库提供的操作系统接口库,它封装了大量实用的函数来和操作系统交互。通过该库,我们可以实现一些常见的文件和目录相关的操作、操作系统平台相关功能的调用、进程相关操作等等。

3.3 完整代码实现

在代码的指定位置填入API_Key、Secret_Key、图片位置、风格,然后运行代码。其中可选风格如下:

  • cartoon:卡通画风格
  • pencil:铅笔风格
  • color_pencil:彩色铅笔画风格
  • warm:彩色糖块油画风格
  • wave:神奈川冲浪里油画风格
  • lavender:薰衣草油画风格
  • mononoke:奇异油画风格
  • scream:呐喊油画风格
  • gothic:哥特油画风格

代码实现:

import requests
import base64
import json
from PIL import Image
import io
import os

###############修改这里,然后运行##################
"""
可选图片风格:
cartoon:卡通画风格
pencil:铅笔风格
color_pencil:彩色铅笔画风格
warm:彩色糖块油画风格
wave:神奈川冲浪里油画风格
lavender:薰衣草油画风格
mononoke:奇异油画风格
scream:呐喊油画风格
gothic:哥特油画风格
"""

API_Key=' 你的API_Key '            #API_Key
Secret_Key=' 你的Secret_Key '      #Secret_Key

img_location='picture.png'                      #图片放置位置
style="warm"                                    #图片风格
###############################################

class BaiduImgStyleConv:
    def __init__(self, API_Key,	Secret_Key,request_url,headers):
        self.req_url = request_url
        self.AK=API_Key
        self.SK=Secret_Key
        self.headers=headers
    def set_para(self,img_location,style):
        '''
        该方法实现图片和风格设置
        '''
        try:
            f = open(img_location, 'rb')    #尝试打开图片
        except:
            print("错误:没有找到图片或者图片格式不支持,请检查图片路径")#无法打开图片
            exit()
        img = base64.b64encode(f.read())# 二进制方式打开图片文件
        if style in {'cartoon','pencil','color_pencil','warm','wave','lavender','mononoke','scream','gothic'}:#检测风格是否在列表中
            self.params = {"image": img, "option": style}
        else:
            print("错误:图像风格不对,请检查拼写")
            exit()
    def get_accessToken(self):
        '''
        该方法实现获得Token
        '''
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + self.AK + '&client_secret=' + self.SK
        response = requests.get(host, headers=self.headers)
        json_result = json.loads(response.text)
        try:
            print('token获取正常=',json_result['access_token'])
            return json_result['access_token']
        except:
            print('token获取出现问题,这是错误原因:',json_result['error'], json_result['error_description']+'\n建议先检查百度智能云的图像风格转换应用是否可用,其次保证上面的API_Key和Secret_Key填写正确')
            exit()
    def get_convImg(self):
        '''
        该方法实现图像风格转换
        '''
        access_token = self.get_accessToken()
        request_url = self.req_url + "?access_token=" + access_token
        response = requests.post(request_url, data=self.params, headers=self.headers)#获取响应
        if response:
            # 解码base64编码图片并保存为jpg格式
            img_data = base64.b64decode(response.json()['image'])
            pil_image = Image.open(io.BytesIO(img_data))
            pil_image.show()
            # 保存为jpg格式,并以log_id命名文件
            output_filename = str(response.json()['log_id']) + ".jpg"
            pil_image.save(output_filename, "JPEG")
            print("转换后的图片已保存在",os.getcwd()+'\\'+output_filename)
        else:
            print('错误:解析返回数据时出现问题')

if __name__=='__main__':
    #实例化对象
    img_conv=BaiduImgStyleConv(API_Key=API_Key,Secret_Key=Secret_Key,request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/style_trans",headers={'content-type': 'application/x-www-form-urlencoded'})
    #设置图片和风格
    img_conv.set_para(img_location=img_location,style=style)
    #得到转换后的图片
    img_conv.get_convImg()

3.4 效果展示

下图为原图经不同风格(卡通、铅笔、呐喊)转换后的效果图:
在这里插入图片描述

3.5 问题与分析

  • 已对部分常见报错在代码中进行了解释,根据要求检查即可。
  • 弹出“token获取出现问题……”,这一般是因为百度智能云没设置好或者key填错了导致的,如果确定两个key没有填错,务必检查API调用的余量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ODB 2.4.0 使用延迟指针 lazy_shared_ptr 时遇到的问题

最近在学习使用C下的ORM库——ODB,来抽象对数据库的CURD,由于C的ORM实在是太冷门了,ODB除了官方英语文档,几乎找不到其他好用的资料,所以在使用过程中也是遇到很多疑惑,也解决很多问题。近期遇到的一个源码…

欧拉角,四元数与旋转矩阵

目录 一、欧拉角二、四元数三、旋转矩阵四、Python下欧拉角、四元数和旋转矩阵的相互转换总结 一、欧拉角 对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角(x,y,z)来表现。对于夹角的顺序和标记,夹角的两个轴的指定&…

Baklib分享:做好企业内部知识管理的方法?

企业内部知识管理是一个重要的任务,它涵盖了许多领域,包括知识生成、知识共享、知识保护等。在现代企业中,知识管理被认为是一项战略性的任务,可以为企业带来许多好处,例如提高员工生产力、减少错误和失误、加强员工的…

RabbitMQ 小白教程,从安装到使用

主要内容 AMQP简介 RabbitMQ简介 RabbitMQ原理 Erlang安装 安装RabbitMQ RabbitMQ账户管理 交换器 学习目标 知识点要求AMQP简介掌握RabbmitMQ简介掌握RabbitMQ原理掌握Erlang安装掌握安装RabbitMQ掌握RabbitMQ账户管理掌握交换器掌握 一、 AMQP简介 1 AMQP是什么?…

微信小程序 vue+nodejs高校食堂外卖点餐平台系统rf6md

前端vueelementui, (1) vue引入elementui 1.使用npm安装element-ui npm i element-ui -S 2.在main.js中导入使用vue import element-ui/lib/theme-chalk/index.css //别忘了导入样式 import ElementUI from element-ui Vue.use(ElementUI) 后端:java(springbootss…

蓝牙资讯|智能家居标准Matter 1.1 发布,智能家居产品兼容更丰富

据“CSA 连接标准联盟”官方微信号,Matter 1.1 版本已发布,“1.1 版本带来的更新使设备制造商和开发者上手更容易、产品获取认证更方便,也让产品能更快地交付给用户。该版本还为电池供电设备提供了更大支持,而这类设备涉及多种类型…

VIBRO-METER VM600 MPC4 机械保护卡

4个动态通道和2个转速通道每个动态通道2个处理输出,每个双通道1个处理输出(每个MP C4 2个),每个转速器通道1个处理输出高度可配置的卡支持机械保护应用所需的所有测量,如相对和/或绝对振动高度集成的卡对(带IOC4T)包括传感器电源、缓冲输出、…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

四个PCB工程师最头痛的Allegro问题及解答,你一定要看

Allegro是一款功能强大的PCB设计软件,广泛应用在电子设计行业,在使用Allegro过程中,工程师会遇见到多种复杂的技术问题,本文将针对工程师最头痛的Allegro问题进行回答,希望对小伙伴们有所帮助。 1、如何创建新的Allegr…

汽车电子电气架构里的VCU DCU ZCU ECU怎么区分?

文章目录 一、VCU二、DCU三、ECU四、ZCU五、车辆电子电气架构的域架构 一、VCU VCU(Vehicle Control Unit,车辆控制单元):VCU是车辆级别的控制单元,负责管理和协调车辆的各个系统和子系统之间的通信和协同工作。它可以…

javaweb实验:JSP+JDBC综合实训__数据库记录的修改、删除

目录 前言实验目的实验内容编程实现后台的用户管理功能 实验原理或流程图实验原理流程图 实验过程AdduserquerAllUserdoAddUser结果展示 实验结论 前言 本实验的目的是让学生掌握使用JSP和JDBC技术对数据库中的记录进行修改和删除的方法。实验内容包括以下几个部分&#xff1a…

STM32单片机蓝牙APP手势语音温控电风扇落地扇人体感应

实践制作DIY- GC0134-蓝牙APP手势语音温控电风扇 一、功能说明: 基于STM32单片机设计-蓝牙APP手势语音温控电风扇 二、功能介绍: 硬件组成:STM32单片机语音识别模块PAJ7620U2手势识别传感器DS18B20温度传感器5V风扇LCD1602显示器红外接…

机器学习算法的基本概念、分类和评价标准,以及一些常用的机器学习算法的原理和特点

机器学习是一门研究如何让计算机从数据中学习和推理的科学。机器学习算法是实现机器学习的具体方法,它们可以根据不同的目标、数据类型和应用场景进行分类和比较。本文将介绍机器学习算法的基本概念、分类和评价标准,以及一些常用的机器学习算法的原理和…

MacBook杀毒软件CleanMyMac X2023

Mac 上也广泛存在恶意软件,并且能够突破系统自身的防护,通过渠道传播到电脑上,威胁大家的数据安全和窃取个人信息!所以,MacBook杀毒软件还是很有必要安装的。 始于颜值,忠于实力。CleanMyMac X是我用过UI风…

复杂软件版本如何使用git工具进行管理

1.需求说明 一个项目,如果长期开发下去,我们会碰到各种各样的客户,然后就会有各种各样的需求。这时候就会出现一个问题:如果我们的代码都是一个项目,客户的主体流程都是一样,但部分客户又有一些特别的定制…

JDK1.8 与 Language Level 8 关系

什么是Java? 是 SUN(Stanford University Network,斯坦福大学网络公司 ) 1995 年推出的一门高级 编程语言。 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器 中运行。这些 Java 程序被称为 Java 小程序…

六级备考26天|CET-6|仔细阅读|考研英语2023年英语(一)|8:20~10:00

text1 4/5 text2 3/5 text3 2/5 text4 3/5 12/20 目录 text 1 1. 重点词汇 2. 原文 3. 题目 text 1 1. 重点词汇 sympathise / ˈsɪmpəθaɪz / vi.同情;吊唁;共鸣 (等于 sympathize) ener…

OJ练习第109题——根到叶路径上的不足节点

根到叶路径上的不足节点 力扣链接:1080. 根到叶路径上的不足节点 题目描述 给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。 假如通过节点 node 的每种可能的 “根-叶” 路径上值…

KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图

前言:KuiperInfer是一个从零实现一个高性能的深度学习推理库,中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程,欢迎更多的AI推理爱好者一起来玩。这篇写一下计算图相关的知识点,重点说明ONNX有什么缺…

一口气整理三种不同二维码生成的Java 接入代码

引言 二维码已经成为现代社会中广泛应用的一种工具,它们具有快速、可靠和高容量的信息传递能力。通过扫描二维码,用户可以轻松获取网址、产品信息、支付链接等各种信息。 本文将介绍二维码生成器 API 作为一种工具,并探讨其功能和用法&…