极客秀
搜索

基于C#的软件大杂烩(4.3)——TCP服务端的图像接收和处理

在这个科技日新月异的时代,图像处理和人脸识别技术已经广泛应用于各个领域。 前面有篇公众号中提出 了 使用Python实现图像的接收

。 本文将介绍如何使用C#结合ESP32_Cam来实现图像接收和人脸识别功能。 本期以及往期的源码都会分享到QQ交流群 :656210280.
…..感兴趣的小伙伴可以加群探讨一下。
因为后面的代码无论是逻辑还是细节都有太多太多需要注意的,所以文章内不具体讲解,只做关键部分说明。感兴趣的朋友可以加群拿源码或者来交流。

1.概述

本项目旨在通过ESP32_Cam模块捕获图像,并使用C#编写的软件进行处理和人脸识别。我们将使用OpenCvSharp库来处理图像,初步实现灰度化、二值化的功能并利用Haar级联分类器进行人脸检测。

2.准备工作

  • 硬件 :ESP32_Cam模块。

  • 软件 :

    • Visual Studio(用于C#开发)。

    • OpenCvSharp库(用于图像处理)。

    • Haar级联分类器(用于人脸识别)。

3. 界面布局

4.核心代码解析

监听端口接收图像


private void StopListening()        {            // 停止TCP监听            isListening = false;            if (cancellationTokenSource != null)            {                cancellationTokenSource.Cancel();                cancellationTokenSource.Dispose();                cancellationTokenSource = null;            }  
            if (tcpListener != null)            {                tcpListener.Stop();            }        }  
        private void ListenForText(CancellationToken cancellationToken)        {            try            {                while (!cancellationToken.IsCancellationRequested)                {                    using (TcpClient tcpClient = tcpListener.AcceptTcpClient())                    {                        using (NetworkStream networkStream = tcpClient.GetStream())                        {                            using (MemoryStream memoryStream = new MemoryStream())                            {                                byte[] buffer = new byte[4096];                                int bytesRead;  
                                while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0)                                {                                    memoryStream.Write(buffer, 0, bytesRead);                                }  
                                // 处理和显示接收到的数据                                string receivedText = Encoding.UTF8.GetString(memoryStream.ToArray());                                ReciveText.AppendText(receivedText);  
                            }                        }  
                        // 关闭TcpClient                        tcpClient.Close();                    }                }            }            catch (Exception ex)            {  
                Console.WriteLine($"错误:{ex.Message}");            }        }        // 在UI线程上显示图像的方法        private void DisplayImage(Bitmap image)        {            if (InvokeRequired)            {                Invoke(new Action(() => DisplayImage(image)));            }            else            {                pictureBox.Image = image;            }        }  
        private void StartListen_Click(object sender, EventArgs e)        {            if (StartListen.Text == "创建监听")            {                DisableAll();                StartListeningText();                PicTurSta.Enabled = false;                StartListen.Text = "关闭监听";            }            else            {                EnableAll();                StopListening();                PicTurSta.Enabled=true;                StartListen.Text = "创建监听";            }        }

** 图像处理 **

以下是图像处理的核心代码段:


Bitmap bitmap = new Bitmap(image);Mat inputMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);Mat OutMat = new Mat();OutMat = inputMat.Clone();// 灰度化if (HuiDuHua.Checked){    Cv2.CvtColor(inputMat, OutMat, ColorConversionCodes.BGR2GRAY);}// 二值化if (Erzhihua.Checked){    int thresholdValue = Throid.Value;    Cv2.Threshold(OutMat, OutMat, thresholdValue, 255, ThresholdTypes.Binary);}  

** 人脸识别 **

人脸识别部分的代码如下:


string classifierPath = @"[文件路径]haarcascade_frontalface_default.xml";CascadeClassifier faceCascade = new CascadeClassifier(classifierPath);Mat grayImage = new Mat();Cv2.CvtColor(OutMat, grayImage, ColorConversionCodes.BGR2GRAY);Rect[] faces = faceCascade.DetectMultiScale(grayImage);foreach (Rect face in faces){    Cv2.Rectangle(OutMat, face, Scalar.Red, 2);}  

注意点

我们使用NuGet管理包来安装我们需要的OpenCV的包,需要注意的是,这四个包都是需要的,并且我们需要在代码开始的时候导入我们的库。

using OpenCvSharp;using OpenCvSharp.Extensions;

5. 效果展示

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容