WinformUI-Python后端

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;//不使用shell
                p.StartInfo.RedirectStandardOutput = true;//捕获输出的消息
                p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
                p.StartInfo.CreateNoWindow = true;//为true,则启动该进程而不新建窗口
                p.StartInfo.StandardErrorEncoding = Encoding.UTF8;//将编码设置成utf-8,保证中文不会乱码。
                p.Start();//开始进程
               // p.WaitForExit();
                p.Close();
                //  MessageBox.Show("服务已启用!");
            }
            catch (Exception ex)
            {
                //  MessageBox.Show("报错信息:" + ex.Message);
            }


        }
        //调用Python程序

        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;//不使用shell
                p.StartInfo.RedirectStandardOutput = true;//捕获输出的消息
                p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
                p.StartInfo.CreateNoWindow = true;//为true,则启动该进程而不新建窗口
                p.StartInfo.StandardErrorEncoding = Encoding.UTF8;//将编码设置成utf-8,保证中文不会乱码。
                p.Start();//开始进程
                p.WaitForExit();
                p.Close();
                
              //  MessageBox.Show("服务已启用!");

            }
            catch (Exception ex)
            {
              //  MessageBox.Show("报错信息:" + ex.Message);
            }


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

        /// <summary>
        /// Get请求--带字典参数
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public void GET(string url, Dictionary<String, String> param)
        {
            if (param != null) //有参数的情况下,拼接url
            {
                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"; //请求方法为GET
            HttpWebResponse res; //定义返回的response
            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 = 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"; //请求方法为GET
            HttpWebResponse res; //定义返回的response
            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(); //响应转化为String字符串
                return content;
            }
            catch (Exception exp)
            {
                return "nores";
            }

        }

        /// <summary>
        /// 开始分类训练
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        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();
        }


        /// <summary>
        /// 开始检测训练
        /// </summary>
        /// <param name="param"></param>
        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();
        }


        /// <summary>
        /// 开始分割训练
        /// </summary>
        /// <param name="param"></param>
        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();
        }
        /// <summary>
        /// 获取图像分类的训练信息
        /// </summary>
        /// <returns></returns>
        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();

        }



        /// <summary>
        /// 图像分类
        /// </summary>
        /// <param name="img_path"></param>
        /// <returns></returns>
        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;
        }

        /// <summary>
        /// 图像分割
        /// </summary>
        /// <param name="img_path"></param>
        /// <returns></returns>
        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;

        }

        /// <summary>
        /// 图像检测
        /// </summary>
        /// <param name="img_path"></param>
        /// <returns></returns>
        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;
        }

        /// <summary>
        /// 训练图像分类任务
        /// </summary>
        /// <returns></returns>
        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();
        }

        /// <summary>
        /// 训练图像分割任务
        /// </summary>
        /// <returns></returns>
        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();

        }

        /// <summary>
        /// 训练图像检测任务
        /// </summary>
        /// <returns></returns>
        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();
        }

        /// <summary>
        /// 分类评估
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 导出TensorRT引擎
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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();
        }

        /// <summary>
        /// 窗体嵌入通用方法
        /// </summary>
        /// <param name="subForm"></param>
        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());

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值