第五期【百度大脑新品体验】拉伸图像恢复
小雨青青润无声 发布于2019-09 浏览:2836 回复:1
0
收藏

百度拉伸图像恢复,自动识别过度拉伸的图像,将图像内容恢复成正常比例

功能接入:
进入百度AI管理界面:https://console.bce.baidu.com/

进入界面后点击“创建应用”, 输入应用信息及需要的AI功能即可。

 

百度现在提供每天一定量的免费调用额度,足够大家测试使用了。

 

 

获取Access Token
调用拉伸图像恢复功能前需要先调用鉴权API,确保安全。

具体说明请查阅:http://ai.baidu.com/docs#/Auth/top

 

请求URL数据格式

向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

grant_type: 必须参数,固定为client_credentials;

client_id: 必须参数,应用的API Key;

client_secret: 必须参数,应用的Secret Key;

例如:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

 

 

拉伸图像恢复AP调用
拉伸图像恢复的API说明链接为:https://ai.baidu.com/docs#/ImageProcessing-API/824a761a

 

接口描述

将图像转化成卡通画或素描风格,可用于开展趣味活动或集成到美图应用。 注意:在正式使用之前,请在图像效果增强页面提交合作咨询,或者申请加入百度图像识别官方QQ群(群号:659268104),提供公司名称、appid、应用场景,工作人员协助开通权限后方可使用。

 

请求说明

请求URL: https://aip.baidubce.com/rest/2.0/image-process/v1/stretch_restore

 

具体参数:

image       true string        -        base64编码后大小不超过4M,像素乘积不超过2000*2000,最短边至少50px,最长边最大4096px,长宽比3:1以内。注意:图片的base64编码是不包含图片头的,如(data:image/jpg;base64,)

option       true string        cartoon, pencil         cartoon:卡通画风格

pencil:素描风格

painting:油画风格(即将上线)

 

 

返回示例

{

         "log_id": "6876747463538438254",

         "image": "处理后图片的Base64编码"

}

 

 

详细代码(C#):
 

  public static class AccessToken

         {

             // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存

             // 返回token示例

     // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务

                   private static String clientId = "你获得的ID";

                   // 百度云中开通对应服务应用的 Secret Key

                   private static String clientSecret = "你获得的KEY";

 

                   public static String getAccessToken() {

                            String authHost = "https://aip.baidubce.com/oauth/2.0/token";

                            HttpClient client = new HttpClient();

                            List> paraList = new List>();

                            paraList.Add(new KeyValuePair("grant_type", "client_credentials"));

                            paraList.Add(new KeyValuePair("client_id", clientId));

                            paraList.Add(new KeyValuePair("client_secret", clientSecret));

 

                            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;

                            String result = response.Content.ReadAsStringAsync().Result;

                            Console.WriteLine(result);

            JObject jobject = (JObject)JsonConvert.DeserializeObject(result);

            string token = jobject["access_token"].ToString();

            return token;

                            //return result;

                   }

                   public class Program

    {

        // 拉伸图像恢复

 public static string stretchRestore(String imagefilename,String resultfilename)

        {

            string token = AccessToken.getAccessToken();

            Console.WriteLine(token);

            string host = "https://aip.baidubce.com/rest/2.0/image-process/v1/stretch_restore?access_token=" + token;

            Encoding encoding = Encoding.Default;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);

            request.Method = "post";

            request.KeepAlive = true;

            // 图片的base64编码

            string base64 = getFileBase64(imagefilename);

            String str = "image=" + HttpUtility.UrlEncode(base64);

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

            Console.WriteLine("拉伸图像恢复:");

            JObject jo = (JObject)JsonConvert.DeserializeObject(result);

            String imageBase64 = jo["image"].ToString();

 

            //Console.WriteLine(imageBase64);

            saveBase64File(imageBase64, resultfilename);

            Console.WriteLine("成功");

            return result;

        }

        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;

        }

        public static String saveBase64File(string base64Str, string outPath)

        {

            var contents = Convert.FromBase64String(base64Str);

            using (var fs = new FileStream(outPath, FileMode.Create, FileAccess.Write))

            {

                fs.Write(contents, 0, contents.Length);

                fs.Flush();

            }

            return "finished";

        }

    }

   

拉伸后

处理结果

测试结论及建议
测试后发现效果不错,调用速度很快,不过还没有达到能够完全恢复的程度。

建议百度增加一个恢复系数,比如我要是知道这张图是水平拉伸了3倍的,要是能录入这个系数,这样就能获取更好的效果了。

收藏
点赞
0
个赞
共1条回复 最后由用户已被禁言回复于2022-04
#2小雨青青润无声回复于2019-09

百度产品的功能越来越多了,真的很好

0
TOP
切换版块