百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg

注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比百度强大很多。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Newtonsoft.Json;
using System.Web;
using Newtonsoft.Json.Linq;
using System.ComponentModel; namespace IDPhoto
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainWindow_Loaded);
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); } string strImageBase64 = "";
BackgroundWorker worker;
object lockObj = new object();
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{ btnDoWork.IsEnabled = true;
btnDoWork.Visibility = System.Windows.Visibility.Collapsed;
loading.Visibility = Visibility.Collapsed;
} void worker_DoWork(object sender, DoWorkEventArgs e)
{ if (Common.token == "")
{
Common.token = getAccessToken();
Config.SaveConfig();
} string sPost = "image=" + HttpUtility.UrlEncode(strImageBase64, Encoding.UTF8) + "&type=foreground";
string sResult = HttpHelper.httpPost("https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg?access_token=" + Common.token, sPost);
/*
{"log_id": 3992278826748564717, "foreground": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAIMCAYAAADPWYwVAA
*/
JToken jt = JToken.Parse(sResult);
string sBase64 = "" + jt["foreground"];
Dispatcher.Invoke(new Action(() =>
{
if (sBase64 != "")
{
parseImageFromBase64(sBase64);
}
else
{ MessageBox.Show(sResult);
} })); } void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Config.loadConfig();//主要是加载保存的token,以免多少调用,token能有1个月左右的游戏时间 } //拖放文件支持的方法:TextBox_PreviewDragOver和TextBox_PreviewDrop private void TextBox_PreviewDragOver(object sender, DragEventArgs e)
{ e.Effects = DragDropEffects.Copy;
e.Handled = true;
} private void TextBox_PreviewDrop(object sender, DragEventArgs e)
{ if (worker.IsBusy) return;
string sSelectFile = "";
foreach (string f in (string[])e.Data.GetData(DataFormats.FileDrop))
{ if (f.ToLower().EndsWith(".png") || f.ToLower().EndsWith(".jpg") || f.ToLower().EndsWith(".bmp"))
{
Title = sSelectFile=f;
} }
if (sSelectFile == "")
{
return;
}
else { ProcessImage(sSelectFile); } } private void ProcessImage(string sFile) { loading.Visibility = Visibility.Visible;
byte[] buffer= File.ReadAllBytes(sFile);
strImageBase64 = Convert.ToBase64String(buffer);//Properties.Resources.testImgData;
btnDoWork.IsEnabled = false;
worker.RunWorkerAsync(); } private void btnDoWork_Click(object sender, RoutedEventArgs e)
{ if (worker.IsBusy) return;
System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog ();
dlg.Filter = "图片文件|*.jpg;*.png;*.bmp";
if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return;
} ProcessImage(dlg.FileName); } ///Base64 string 转 BitmapImage
void parseImageFromBase64(string sBase64)
{ char[] c = sBase64.ToCharArray();// Properties.Resources.testImgData .ToCharArray();
byte[] buffer = System.Convert.FromBase64CharArray(c, 0, c.Length);
MemoryStream m = new MemoryStream(buffer);
m.Position = 0;
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = m;
bmp.EndInit();
image1.Source = null;
image1.Source = bmp; } ///获取TOKEN ,参数client_id和client_secret在百度自己的后台APP的key和secret
string getAccessToken()
{ string s = HttpHelper.httpPost("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxx&client_secret=xxxxxxxxxx", ""); BaiduTokenData d = JsonConvert.DeserializeObject<BaiduTokenData>(s);
if (d != null)
{ return d.access_token;
} return ""; }
void testDemo()
{ string s = Uri.UnescapeDataString("data:image/jpeg;base64," + Properties.Resources.testImgData); string s2 = HttpHelper.httpPost("http://ai.baidu.com/aidemo", "image=" + s + "&image_url=&type=body_seg");
Title = s2; } } public class BaiduTokenData
{
/// <summary>
///
/// </summary>
public string refresh_token { get; set; }
/// <summary>
///
/// </summary>
public int expires_in { get; set; }
/// <summary>
///
/// </summary>
public string session_key { get; set; }
/// <summary>
///
/// </summary>
public string access_token { get; set; }
/// <summary>
/// brain_body_seg public brain_all_scope vis-faceverify_faceverify_h5-face-liveness brain_body_analysis brain_body_attr vis-faceverify_FACE_V3 brain_gesture_detect wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test权限 vis-classify_flower lpq_开放 cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi
/// </summary>
public string scope { get; set; }
/// <summary>
///
/// </summary>
public string session_secret { get; set; }
} } ---------------------------------------------------
以下是HttpHelper 类代码:
---------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Windows; namespace IDPhoto
{
public class HttpHelper
{ public static CookieContainer myCookieContainer = new CookieContainer();
private static string myReferer = "http://ai.baidu.com/tech/body/seg";
public static bool checkLogin()
{ string s = "";
bool loginOK = false;
try
{
loginOK = s.Contains("sso_login_status=1");
if (loginOK)
{
Common.cookie = s;
setCookieContainer(s, new Uri("http://love.163.com/home?ydMobilePassport=false&ydMobile=0", UriKind.Absolute));
}
// MessageBox.Show(s);
}
catch (Exception ex)
{
MessageBox.Show("" + ex.Message);
return false;
} return loginOK;
} public static void setCookieContainer (string cookie ,Uri url)
{ string[] arrCookie = cookie.Split(';');
myCookieContainer = new CookieContainer(); //加载Cookie
foreach (string sCookie in arrCookie)
{
myCookieContainer.SetCookies(url, sCookie);
} } public static string httpGet(string sUrl)
{ string s = "";
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("" + sUrl);
req.CookieContainer = myCookieContainer;
req.Referer = myReferer;
// req.TransferEncoding = "UTF8";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
myCookieContainer.Add(resp.Cookies);
StreamReader r = new StreamReader(resp.GetResponseStream());
s = r.ReadToEnd();
r.Close();
resp.Close();
}
catch (Exception ex)
{ s = ex.Message; }
return s; } public static string httpPost(string sUrl,string para)
{ string s = "";
try
{
byte[] data = Encoding.ASCII.GetBytes(para);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("" + sUrl);
req.CookieContainer = myCookieContainer;
// req.Headers.Add("Cookie",Properties.Resources.cookie);
req.Referer = myReferer;
req.ContentType = "application/x-www-form-urlencoded";
// req.TransferEncoding = "UTF8";
req.Method = "POST";
if (para != "")
{
req.ContentLength = data.Length;
req.GetRequestStream().Write(data, 0, data.Length);
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
myCookieContainer.Add(resp.Cookies);
StreamReader r = new StreamReader(resp.GetResponseStream());
s = r.ReadToEnd();
r.Close();
resp.Close();
}
catch (Exception ex)
{ s = ex.Message; }
return s; } } public class Common { public static string cookie { get; set; } public static string token { get; set; }
} }

  

UI 代码:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:IDPhoto" x:Class="IDPhoto.MainWindow"
Title="MainWindow" Height="1301" Width="1126">
<Grid x:Name="gridMain" AllowDrop="True" Background="Gray" IsHitTestVisible="True"
PreviewDragOver="TextBox_PreviewDragOver" PreviewDrop="TextBox_PreviewDrop"> <Button Content="btnStart" Height="41" HorizontalAlignment="Left" Margin="25,27,0,0" x:Name="btnDoWork" VerticalAlignment="Top" Width="250" Click="btnDoWork_Click" />
<Border Background="#FF1133A6" BorderBrush="WhiteSmoke" BorderThickness="5" Width="432" Height="502" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="25,101,0,0" >
<Image x:Name="image1" Stretch="Fill" />
</Border>
<local:Loading x:Name="loading" Visibility="Collapsed" HorizontalAlignment="Left" Height="100" Margin="366,219,0,0" VerticalAlignment="Top" Width="100"/>
</Grid>
</Window>

  

后面的话:本来打算做个APP或Windows应用什么的,可惜后面对比了国外这个 https://www.remove.bg/ 后感觉百度的差距太大了。就无语了。

c# 利用百度图像处理【人像分割】一键抠图的更多相关文章

  1. 利用百度API Store接口进行火车票查询

    火车票查询 项目源码下载链接: Github:https://github.com/VincentWYJ/TrainTicketQuery 博客文件:http://files.cnblogs.com/ ...

  2. 利用百度语音API进行语音识别。

    由于项目需要,这几天都在试图利用百度语音API进行语音识别.但是识别到的都是“啊,哦”什么的,我就哭了. 这里我只是分享一下这个过程,错误感觉出现在Post语音数据那一块,可能是转换问题吧. API请 ...

  3. 利用百度词典API和Volley网络库开发的android词典应用

     关于百度词典API的说明,地址在这里:百度词典API介绍 关于android网络库Volley的介绍说明,地址在这里:Android网络通信库Volley 首先我们看下大体的界面布局!

  4. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...

  5. 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注

    原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?&quo ...

  6. 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解

    前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...

  7. 利用百度接口进行人脸识别并保存人脸jpg文件

    利用百度接口进行人脸识别,根据返回的人脸location用opencv切割保存. # coding : UTF-8 from aip import AipFace import cv2 import ...

  8. SEO如何利用百度知道日引流上千IP

    个人小站长.SEO们经常为网站没有流量而发愁,一个没有流量的网站就像一个不喝水的人,迟早得死.没有流量,就没有PV,也就是说你的网站只是 给你一个人看的,那做站有什么意义呢?网站上所发布的内容都是分享 ...

  9. 利用百度翻译API,获取翻译结果

    利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...

随机推荐

  1. 30分钟彻底弄懂flex布局

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由elson发表于云+社区专栏 目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布 ...

  2. linux vbundle插件配置

    1.新建目录,clone源码 mkdir ~/.vim/bundle/ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vun ...

  3. 自动化测试基础篇--Selenium判断元素是够存在

    摘自https://www.cnblogs.com/sanzangTst/p/8376101.html selenium+python处于学习阶段,功能实现之后开始整理之前写的代码,突然发现一个功能没 ...

  4. SogouCloud.exe进程导致SQL Server服务无法启动

    早上打开笔记本想开启SQL Server服务时报错,于是根据提示查看windows日志: 依次点开报错发现第一条是1433端口被占用,于是找相关的进程: 于是杀掉此进程: taskkill /pid ...

  5. 系统休眠(System Suspend)和设备中断处理

    一.设备IRQ的suspend和resume 本小节主要解决这样一个问题:在系统休眠过程中,如何suspend设备中断(IRQ)?在从休眠中唤醒的过程中,如何resume设备IRQ? 一般而言,在系统 ...

  6. ctf学习(web题二)

    web 下面是做bugku上一些web的总结 内容链接

  7. chmod、acl权限

    R:4W:2X:1 chmod g+r file 给所有者的组内用户加上读的权限chmod o+r file 给其他组用户加上读的权限chmod a+x file 给所有用户加上写执行的权限chmod ...

  8. 聚类——GAKFCM的matlab程序

    聚类——GAKFCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——GAKFCM文章中已介绍了GAKFCM算法的理论知识, ...

  9. 详解javascript立即执行函数表达式(IIFE)

    立即执行函数,就是在定义函数的时候直接执行,这里不是申明函数而是一个函数表达式 1.问题 在javascript中,每一个函数在被调用的时候都会创建一个执行上下文,在函数内部定义的变量和函数只能在该函 ...

  10. 【shell脚本】shell脚本实现的 函数差集查找

    文本地址 点击关注微信公众号 wenyuqinghuai 分享提纲: 1. 问题背景 2. 代码实现 1.问题背景 在做公司的测试的自动化测试时,覆盖了一些开发代码的函数,但是那些还没有做,使用一个函 ...