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

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

只有创建了应用才能使用这个api
首先百度搜索百度大脑ai studio
注册账号后
打开控制台

在控制台的产品服务当中 选中图像增强与特效
C# winform项目使用百度图像增强与特效中的人像动漫化api_第1张图片
点击创建应用
C# winform项目使用百度图像增强与特效中的人像动漫化api_第2张图片
C# winform项目使用百度图像增强与特效中的人像动漫化api_第3张图片
应用名称 应用描述 随便写就好 接口选择 默认的就好不用改 应用归属 个人就好
创建成功以后点击管理应用
C# winform项目使用百度图像增强与特效中的人像动漫化api_第4张图片
将下面这三个appID API Key Secret Ket 记下来 等会打代码的时候要用到 我们需要用这三个来获取使用图像增强与特效api的权限
C# winform项目使用百度图像增强与特效中的人像动漫化api_第5张图片
点击左侧技术文档
C# winform项目使用百度图像增强与特效中的人像动漫化api_第6张图片
打开以后选中调用方式(因为我们是使用api所以是api文档下的调用方式 如果是SDK就看下面的)
C# winform项目使用百度图像增强与特效中的人像动漫化api_第7张图片
由下面这句话可以知道我们要使用这个api就要先获取access token
C# winform项目使用百度图像增强与特效中的人像动漫化api_第8张图片

第二步api的使用(代码)

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

下载对应的SDK

因为有些用到的函数需要对应的SDK支持
打开刚刚浏览器的百度控制台页面点击SDK下载
然后下载C# 的SDK
C# winform项目使用百度图像增强与特效中的人像动漫化api_第9张图片
C# winform项目使用百度图像增强与特效中的人像动漫化api_第10张图片
下载 解压后 记住解压后文件的位置
打开刚刚vs2017创建的项目 点击添加引用
C# winform项目使用百度图像增强与特效中的人像动漫化api_第11张图片
预览找到刚刚SDk解压后的位置
C# winform项目使用百度图像增强与特效中的人像动漫化api_第12张图片
这里选择其中一个版本就好 我这里选中40版本 里面的dll 点击添加 再点击确定
C# winform项目使用百度图像增强与特效中的人像动漫化api_第13张图片
C# winform项目使用百度图像增强与特效中的人像动漫化api_第14张图片
C# winform项目使用百度图像增强与特效中的人像动漫化api_第15张图片
添加完成后再次打开引用窗口 添加system.web引用
C# winform项目使用百度图像增强与特效中的人像动漫化api_第16张图片

添加完成后
选中窗体打开代码区
C# winform项目使用百度图像增强与特效中的人像动漫化api_第17张图片
然后再顶部添加命名以下几个需要用到的命名空间

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

然后在窗口类的下面新建一个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";

        /// 
        /// 获取token 但是获取到的 字符串中 含有"refresh_token"  和"access_token" 等其他信息所以需要将result转换为JObject提取出access_token
        /// 
        /// 
        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;
        }
    }

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

        /// 
        /// 输入本地图片(包含路径)将图片转换为Base64编码
        /// 
        /// 
        /// 
        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;
        }

        /// 
        /// 将base64编码转换为图片
        /// 
        /// 
        /// 
        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);
            }
        }

然后为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());

然后运行程序 点击按钮 效果如下
C# winform项目使用百度图像增强与特效中的人像动漫化api_第18张图片
原图是
C# winform项目使用百度图像增强与特效中的人像动漫化api_第19张图片
大功告成

最后送上所有代码

再次提醒 赋值后 注意替换

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());
        }

        /// 
        /// 输入本地图片(包含路径)将图片转换为Base64编码
        /// 
        /// 
        /// 
        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;
        }

        /// 
        /// 将base64编码转换为图片
        /// 
        /// 
        /// 
        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";

        /// 
        /// 获取token 但是获取到的 字符串中 含有"refresh_token"  和"access_token" 等其他信息需要转换为JObject提取出access_token
        /// 
        /// 
        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;
        }
    }

}

你可能感兴趣的:(c#,api,winform)