当前位置:   article > 正文

C# winform项目使用百度图像增强与特效中的人像动漫化api_c# 图像卡通化

c# 图像卡通化

第一步创建图像增强与特效应用

只有创建了应用才能使用这个api
首先百度搜索百度大脑ai studio
注册账号后
打开控制台
在这里插入图片描述
在控制台的产品服务当中 选中图像增强与特效
在这里插入图片描述
点击创建应用
在这里插入图片描述
在这里插入图片描述
应用名称 应用描述 随便写就好 接口选择 默认的就好不用改 应用归属 个人就好
创建成功以后点击管理应用
在这里插入图片描述
将下面这三个appID API Key Secret Ket 记下来 等会打代码的时候要用到 我们需要用这三个来获取使用图像增强与特效api的权限
在这里插入图片描述
点击左侧技术文档
在这里插入图片描述
打开以后选中调用方式(因为我们是使用api所以是api文档下的调用方式 如果是SDK就看下面的)
在这里插入图片描述
由下面这句话可以知道我们要使用这个api就要先获取access token
在这里插入图片描述

第二步api的使用(代码)

打开visual studio 2017
新建一个winform项目
在窗口中添加一个按钮button(用来触发执行这个api)和一个pictureBox(用来显示api执行后返回的已经动漫化图片)名字不用修改 免得等会复制下面的代码出错

下载对应的SDK

因为有些用到的函数需要对应的SDK支持
打开刚刚浏览器的百度控制台页面点击SDK下载
然后下载C# 的SDK
在这里插入图片描述
在这里插入图片描述
下载 解压后 记住解压后文件的位置
打开刚刚vs2017创建的项目 点击添加引用
在这里插入图片描述
预览找到刚刚SDk解压后的位置
在这里插入图片描述
这里选择其中一个版本就好 我这里选中40版本 里面的dll 点击添加 再点击确定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加完成后再次打开引用窗口 添加system.web引用
在这里插入图片描述

添加完成后
选中窗体打开代码区
在这里插入图片描述
然后再顶部添加命名以下几个需要用到的命名空间

using System.IO;
using System.Net.Http;
using System.Net;
using System.Web;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后在窗口类的下面新建一个token类用来获取access token
参考地址
这里面的clientId和clientSecret 的值是上面 第一步我们记下来的App Key和Secret Key 注意复制下面代码后记得将这两个值替换过来

    public static class Token
    {
        // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
        // 返回token示例
        public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
        // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
        private static String clientId = "App Key";
        // 百度云中开通对应服务应用的 Secret Key
        private static String clientSecret = "Secret Key";

        /// <summary>
        /// 获取token 但是获取到的 字符串中 含有"refresh_token"  和"access_token" 等其他信息所以需要将result转换为JObject提取出access_token
        /// </summary>
        /// <returns></returns>
        public static String getAccessToken()
        {
            String authHost = "https://aip.baidubce.com/oauth/2.0/token";
            HttpClient client = new HttpClient();
            List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
            paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
            paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
            paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));

            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
            String result = response.Content.ReadAsStringAsync().Result;
            return result;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

然后再窗口类里面添加下面两个函数
参考地址

        /// <summary>
        /// 输入本地图片(包含路径)将图片转换为Base64编码
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static String getFileBase64(String fileName)
        {
            FileStream filestream = new FileStream(fileName, FileMode.Open);
            byte[] arr = new byte[filestream.Length];
            filestream.Read(arr, 0, (int)filestream.Length);
            string baser64 = Convert.ToBase64String(arr);
            filestream.Close();
            return baser64;
        }

        /// <summary>
        /// 将base64编码转换为图片
        /// </summary>
        /// <param name="base64String"></param>
        /// <returns></returns>
        public Image ConvertBase64ToImage(string base64String)
        {
            byte[] imageBytes = Convert.FromBase64String(base64String);
            using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
            {
                ms.Write(imageBytes, 0, imageBytes.Length);
                return Image.FromStream(ms, true);
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

然后为button1添加一个click事件
然后复制下面代码进去
参考地址
注意复制下面代码后要将需要人像动漫画的图片的本地路径修改过来

  			//获取token
            string token = "[调用鉴权接口获取的token]";
            token = Token.getAccessToken();
            //将获取到的token转换为JObject并提取出access_token对应的字符串
            JObject j = JObject.Parse(token);
            string userid = j["access_token"].ToString();
            token = userid;


            //发起https请求
            string host = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;

            // 获取图片的base64编码
            string base64 = getFileBase64(@"C:\Users\小何程序员\Desktop\截图\chrome_OAAvj9142x.png");
            String str = "image=" + HttpUtility.UrlEncode(base64);

            //调用api执行转换操作
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();


            //将执行后返回的动漫化后的图片的base64码转换为图片 放到picturebox中
            JObject j1 = JObject.Parse(result);
            pictureBox1.Image = ConvertBase64ToImage(j1["image"].ToString());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

然后运行程序 点击按钮 效果如下
在这里插入图片描述
原图是
在这里插入图片描述
大功告成

最后送上所有代码

再次提醒 赋值后 注意替换

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO;
using System.Net.Http;
using System.Net;
using System.Web;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

namespace baidu_api_blog_showHow
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //获取token
            string token = "[调用鉴权接口获取的token]";
            token = Token.getAccessToken();
            //将获取到的token转换为JObject并提取出access_token对应的字符串
            JObject j = JObject.Parse(token);
            string userid = j["access_token"].ToString();
            token = userid;


            //发起https请求
            string host = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;

            // 获取图片的base64编码
            string base64 = getFileBase64(@"C:\Users\小何程序员\Desktop\截图\chrome_OAAvj9142x.png");
            String str = "image=" + HttpUtility.UrlEncode(base64);

            //调用api执行转换操作
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();


            //将执行后返回的处理过的图片的base64码转换为图片
            JObject j1 = JObject.Parse(result);
            pictureBox1.Image = ConvertBase64ToImage(j1["image"].ToString());
        }

        /// <summary>
        /// 输入本地图片(包含路径)将图片转换为Base64编码
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static String getFileBase64(String fileName)
        {
            FileStream filestream = new FileStream(fileName, FileMode.Open);
            byte[] arr = new byte[filestream.Length];
            filestream.Read(arr, 0, (int)filestream.Length);
            string baser64 = Convert.ToBase64String(arr);
            filestream.Close();
            return baser64;
        }

        /// <summary>
        /// 将base64编码转换为图片
        /// </summary>
        /// <param name="base64String"></param>
        /// <returns></returns>
        public Image ConvertBase64ToImage(string base64String)
        {
            byte[] imageBytes = Convert.FromBase64String(base64String);
            using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
            {
                ms.Write(imageBytes, 0, imageBytes.Length);
                return Image.FromStream(ms, true);
            }
        }

    }


    public static class Token
    {
        // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
        // 返回token示例
        public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
        // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
        private static String clientId = "API Key";
        // 百度云中开通对应服务应用的 Secret Key
        private static String clientSecret = "Secret Key";

        /// <summary>
        /// 获取token 但是获取到的 字符串中 含有"refresh_token"  和"access_token" 等其他信息需要转换为JObject提取出access_token
        /// </summary>
        /// <returns></returns>
        public static String getAccessToken()
        {
            String authHost = "https://aip.baidubce.com/oauth/2.0/token";
            HttpClient client = new HttpClient();
            List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
            paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
            paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
            paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));

            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
            String result = response.Content.ReadAsStringAsync().Result;
            return result;
        }
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/961927
推荐阅读
相关标签
  

闽ICP备14008679号