WinformUI-Python后端
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
namespace Algo
{
public class ServiceAPI
{
public ServiceAPI()
{
try
{
Process p = new Process();
p.StartInfo.FileName = @"E:\software\Anaconda3\python.exe";
p.StartInfo.Arguments = @"D:\workplace\python\AI_Demo\Server.py";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.StandardErrorEncoding = Encoding.UTF8;
p.Start();
p.Close();
}
catch (Exception ex)
{
}
}
public bool RunApplication()
{
try
{
Process p = new Process();
string filePath = @"D:\workplace\python\ExportSegExe\Server.py";
p.StartInfo.FileName = @"E:\software\Anaconda3\python.exe";
p.StartInfo.Arguments = filePath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.StandardErrorEncoding = Encoding.UTF8;
p.Start();
p.WaitForExit();
p.Close();
}
catch (Exception ex)
{
}
return true;
}
public string TestConnection()
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1:5000/");
req.Method = "GET";
string result = string.Empty;
using (WebResponse wr = req.GetResponse())
{
using (StreamReader reader = new StreamReader(wr.GetResponseStream()))
{
result = reader.ReadToEnd();
System.Console.Write(result);
}
}
return result;
}
public void GET(string url, Dictionary<String, String> param)
{
if (param != null)
{
url = url + "?";
foreach (var item in param)
{
url = url + item.Key + "=" + item.Value + "&";
}
url = url.Substring(0, url.Length - 1);
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
HttpWebResponse res;
try
{
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
}
public string GET2(string url, Dictionary<String, String> param)
{
if (param != null)
{
url = url + "?";
foreach (var item in param)
{
url = url + item.Key + "=" + item.Value + "&";
}
url = url.Substring(0, url.Length - 1);
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
HttpWebResponse res;
try
{
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
try
{
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
string content = sr.ReadToEnd();
return content;
}
catch (Exception exp)
{
return "nores";
}
}
public void StartClsTrain(Dictionary<String, String> param)
{
Action action = () =>
{
GET("http://127.0.0.1:5000/start_train_for_cls", param);
};
Task task = new Task(action);
task.Start();
}
public void StartDetTrain(Dictionary<String, String> param)
{
Action action = () =>
{
GET("http://127.0.0.1:5000/start_train_for_det", param);
};
Task task = new Task(action);
task.Start();
}
public void StartSegTrain(Dictionary<String, String> param)
{
Action action = () =>
{
GET("http://127.0.0.1:5000/start_train_for_seg", param);
};
Task task = new Task(action);
task.Start();
}
public string GetClsTrainInfo()
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1:5000/get_train_info_for_cls");
req.Method = "GET";
string result = string.Empty;
using (WebResponse wr = req.GetResponse())
{
using (StreamReader reader = new StreamReader(wr.GetResponseStream()))
{
result = reader.ReadToEnd();
System.Console.Write(result);
}
}
return result;
}
catch (Exception exp)
{
}
return "null";
}
public void StopClsTrain()
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1:5000/stop_train_for_cls");
req.Method = "GET";
string result = string.Empty;
WebResponse wr = req.GetResponse();
}
public string Cls(string img_path)
{
string filePath = img_path;
byte[] fileContentByte = new byte[1024];
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length];
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:5000/predict_for_classification");
request.Method = "POST";
string boundary = "major";
request.ContentType = "multipart/form-data;boundary=" + boundary;
Stream myRequestStream = request.GetRequestStream();
myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
Console.WriteLine(retString);
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
public Bitmap Seg(string img_path)
{
string filePath = img_path;
byte[] fileContentByte = new byte[1024];
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length];
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:5000/predict_for_seg");
request.Method = "POST";
string boundary = "major";
request.ContentType = "multipart/form-data;boundary=" + boundary;
Stream myRequestStream = request.GetRequestStream();
myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
Console.WriteLine(retString);
byte[] bytes = Convert.FromBase64String(retString);
MemoryStream ms = new MemoryStream();
ms.Write(bytes, 0, bytes.Length);
Bitmap bmp = new Bitmap(ms);
myStreamReader.Close();
myResponseStream.Close();
return bmp;
}
public string Det(string img_path)
{
string filePath = img_path;
byte[] fileContentByte = new byte[1024];
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length];
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:5000/predict_for_detection");
request.Method = "POST";
string boundary = "major";
request.ContentType = "multipart/form-data;boundary=" + boundary;
Stream myRequestStream = request.GetRequestStream();
myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
Console.WriteLine(retString);
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
public string TrainCls()
{
FileStream fs1 = new FileStream(@"D:\workplace\python\AI_Demo\LearningDemo\ClsDemo\图像分类任务日志.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr1 = new StreamReader(fs1, System.Text.Encoding.UTF8);
StringBuilder sb1 = new StringBuilder();
while (!sr1.EndOfStream)
{
sb1.AppendLine(sr1.ReadLine() + "<br>");
}
return sb1.ToString();
}
public string TrainSeg()
{
FileStream fs1 = new FileStream(@"D:\workplace\python\AI_Demo\LearningDemo\SegDemo\图像分割任务日志.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr1 = new StreamReader(fs1, System.Text.Encoding.UTF8);
StringBuilder sb1 = new StringBuilder();
while (!sr1.EndOfStream)
{
sb1.AppendLine(sr1.ReadLine() + "<br>");
}
return sb1.ToString();
}
public string TrainDet()
{
FileStream fs1 = new FileStream(@"D:\workplace\python\AI_Demo\LearningDemo\DetDemo\图像检测任务日志.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr1 = new StreamReader(fs1, System.Text.Encoding.UTF8);
StringBuilder sb1 = new StringBuilder();
while (!sr1.EndOfStream)
{
sb1.AppendLine(sr1.ReadLine() + "<br>");
}
return sb1.ToString();
}
}
}
using Algo;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PythonUI
{
public partial class FrmCls : Form
{
ServiceAPI serviceApi = new ServiceAPI();
public FrmCls()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("Height", textBox1.Text);
param.Add("Width", textBox2.Text);
param.Add("TrainData", textBox3.Text);
param.Add("ValData", textBox4.Text);
param.Add("Epoch", textBox5.Text);
param.Add("BatchSize", textBox6.Text);
param.Add("ValInterval", textBox7.Text);
param.Add("DataProcessWay", textBox8.Text);
param.Add("DataProThreadNum", textBox9.Text);
param.Add("Device", textBox10.Text);
param.Add("TrainModel", textBox11.Text);
param.Add("LR", textBox12.Text);
param.Add("CurrentCase", textBox13.Text);
serviceApi.StartClsTrain(param);
Action action = () =>
{
while (true)
{
string res = serviceApi.GetClsTrainInfo();
richTextBox1.Invoke(
new Action<string>(data => { this.richTextBox1.Text = data; }), res);
Thread.Sleep(3000);
}
};
Task task = new Task(action);
task.Start();
}
private void button5_Click(object sender, EventArgs e)
{
}
private void button6_Click(object sender, EventArgs e)
{
serviceApi.StopClsTrain();
}
private void button4_Click(object sender, EventArgs e)
{
}
private void button7_Click(object sender, EventArgs e)
{
}
}
}
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;
namespace PythonUI
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void OpenForm(Form subForm)
{
foreach (Control item in this.panel1.Controls)
{
if (item is Form)
{
((Form)item).Close();
}
}
subForm.TopLevel = false;
subForm.FormBorderStyle = FormBorderStyle.None;
subForm.Parent = this.panel1;
subForm.Dock = DockStyle.Fill;
subForm.Show();
}
private void button1_Click(object sender, EventArgs e)
{
OpenForm(new FrmCls());
}
private void button2_Click(object sender, EventArgs e)
{
OpenForm(new FrmDet());
}
private void button3_Click(object sender, EventArgs e)
{
OpenForm(new FrmSeg());
}
}
}