python实战之百度智能云使人像动漫化

编辑: admin 分类: python 发布时间: 2021-12-24 来源:互联网
目录
  • 一、目标
  • 二、准备工作
  • 三、操作流程
    • 3.1 阅读官方文档
    • 3.2 开始实现鉴权
    • 3.3 人像动漫化实现
  • 四、完整代码如下
    • 五、还能这么玩?

      一、目标

      之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩,所以我也想尝试一下。

      利用百度智能云中的人工智能,对图片进行处理达到人像动漫化的效果。

      二、准备工作

      1.百度云智能账号创建

      2.图像特效应用

      3.开发环境python3.7+pycharm

      首先要注册一个百度智能云账号,并创建这个图像特效应用

      在这里插入图片描述

      三、操作流程

      3.1 阅读官方文档

      当我们要使用一个我们不太了解的东西时,阅读官方文档无疑是最重要的,官方文档一般都写的特别详细,对每一个功能描述的很细节,我们先来看一下

      在这里插入图片描述
      在这里插入图片描述

      而且这里有案例,这里我使用的是python

      3.2 开始实现鉴权

      因为调用这么个接口api要进行鉴权,就是官方文档说得到access_token,如何鉴权呢?

      在这里插入图片描述
      在这里插入图片描述

      import requests
      import pprint
      def get_access_token(id,secret):
          get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
          response=requests.get(get_access_token_url)
          pprint.pprint(response.json())
      id='*******************'
      secret='******************'
      get_access_token(id,secret)
      

      这里的id和secret就是创建应用的appkey和secretkey:

      在这里插入图片描述

      上述代码打印结果有很多,阅读官网文档得知,我们这里只需要得到access_token就OK了

      在这里插入图片描述

      修改上述代码以获取access_token

      import requests
      def get_access_token(id,secret):
          get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
          response=requests.get(get_access_token_url)
          content=response.json()
          access_token=content['access_token']
          print(access_token)
      id='*******************'
      secret='******************'
      get_access_token(id,secret)
      

      3.3 人像动漫化实现

      正片开始

      在这里插入图片描述

      在这里插入图片描述

      修改代码

      import requests
      import pprint
      import base64
      def get_access_token(id,secret):
          get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
          response=requests.get(get_access_token_url)
          content=response.json()
          access_token=content['access_token']
          return access_token
      
      def Animation(img_file,access_token):
          request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
          f=open(img_file,'rb')
          image=base64.b64encode(f.read())
          params = {"image":image}
          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)
          pprint.pprint(response.json())
      def main():
          img_file = '1.jpg'#图片地址
          id = '**************************'
          secret = '**************************'
          access_token = get_access_token(id, secret)
          Animation(img_file, access_token)
      if __name__ == '__main__':
          main()
      

      这时可以得到一系列的返回值

      在这里插入图片描述

      我们这里只要image

      获取image值

      修改代码

      import requests
      import pprint
      import base64
      def get_access_token(id,secret):
          get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
          response=requests.get(get_access_token_url)
          content=response.json()
          access_token=content['access_token']
          return access_token
      
      def Animation(img_file,access_token):
          request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
          f=open(img_file,'rb')
          image=base64.b64encode(f.read())
          params = {"image":image}
          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)
          image_content=response.json()
          image=image_content['image']
          print(image)
      def main():
          img_file = '1.jpg'#图片地址
          id = '**************************'
          secret = '**************************'
          access_token = get_access_token(id, secret)
          Animation(img_file, access_token)
      if __name__ == '__main__':
          main()
      

      获取到一串base64编码的图片,这显然快得到我们想要的东西了

       with open('result.jpg','wb') as f:
              f.write(base64.b64decode(image))

      保存到本地

      看一下对比

      在这里插入图片描述
      在这里插入图片描述

      呃呃呃,这。。。。还好吧,哈哈哈

      四、完整代码如下

      import requests
      import pprint
      import base64
      def get_access_token(id,secret):
          get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
          response=requests.get(get_access_token_url)
          content=response.json()
          access_token=content['access_token']
          return access_token
      
      def Animation(img_file,access_token):
          request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
          f=open(img_file,'rb')
          image=base64.b64encode(f.read())
          params = {"image":image}
          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)
          image_content=response.json()
          image=image_content['image']
          with open('result.jpg','wb') as f:
              f.write(base64.b64decode(image))  
      def main():
          img_file = '1.jpg'#图片地址
          id = '**************************'
          secret = '**************************'
          access_token = get_access_token(id, secret)
          Animation(img_file, access_token)
      if __name__ == '__main__':
          main()
      

      五、还能这么玩?

      在这里插入图片描述

      厉害了,还能加口罩,试一下

      修改代码

      params = 
      {
      "image":image,"type":'anime_mask',"mask_id":1
      }
      #mask_id 1-8的整数,就用个1吧

      看一下效果
      在这里插入图片描述

      啧啧啧

      到此这篇关于python实战之百度智能云使人像动漫化的文章就介绍到这了,更多相关python人像动漫化内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!