C#问题攻克之使用winform调用人脸识别接口

2020-03-20 22:53:06 浏览数 (1)

背景

在前面的文章里,我介绍了如何通过控制台调用人脸识别的接口。在这篇文档,我们来介绍如何使用web form实现人脸识别接口的调用。文章内容主要是两个模块,一个是界面设计,另一个是按钮逻辑的设计,我直接贴上了代码,文章中给出了具体的步骤,希望这个分享能对你有帮助。

WinForm简介

lWinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。C# WinForm 编程需要创建「Windows窗体应用程序」项目。

l.NET 提供了大量 Windows 风格的控件和事件,我们可以直接拿来使用,上手简单,开发快速。

lWindows 窗体应用程序是 C# 语言中的一个重要应用,也是 C# 语言最常见的应用。这套 C# WinForm 教程将教会大家如何使用 WinForm 开发一个简单的应用。

l对于每一个使用过 Windows 操作系统的人来说,Windows 应用程序是不会陌生的。使用 C# 语言编写的 Windows 应用程序与 Windows 操作系统的界面类似,每个界面都是由窗体构成的,并且能通过鼠标单击等操作完成相应的功能。

Windows 窗体应用程序

在 Windows 窗体应用程序中每个窗体都是由若干个控件构成的

所谓控件就是人们常说的能输入文本的位置、能选择的位置、能单击的位置、图片显示的位置等。其中:

l能输入文本的位置对应于 Windows 窗体应用程序中的文本框、多行文本框等。

l能选择的位置对应于 Windows 窗体应用程序中的复选框、单选按钮、下拉列表框。

l能单击的位置对应于 Windows 窗体应用程序中的按钮、超链接标签、菜单栏、工具栏等。

l图片显示的位置对应于 Windows 窗体应用程序中的图片控件。

窗体的属性

l每一个 Windows 窗体应用程序都是由若干个窗体构成的,窗体中的属性主要用于设置窗体的外观。

l在 Windows 窗体应用程序中右击窗体,在弹出的右键菜单中 选择“属性”命令,弹出如下图所示的属性面板。

关于窗体的属性的解释说明,请移步到链接:http://c.biancheng.net/view/2946.html。

文本框简介

文本框 (TextBox) 是在窗体中输入信息时最常用的控件,通过设置文本框属性可以实现多行文本框、密码框等。

我们可以根据下方的属性名查看相应的属性的作用。

文本框的具体教程,请移步至链接:http://c.biancheng.net/view/2955.html。

按钮简介

l按钮主要用于提交页面的内容,或者是确认某种操作等。

l按钮常用的属性包括在按钮中显示的文字 (Text) 以及按钮外观设置的属性,最常用的事件是单击事件

lRichTextBox 控件在使用时与 TextBox 控件是非常类似的,但其对于读取多行文本更有优势,它可以处理特殊格式的文本。

应用:使用winform调用人脸识别接口的具体操作步骤

第一步. 选择C#语言,选择Windows 窗体应用(.NET Framework)。

第一步第一步

第二步. 把项目名称命名为WinFormDemo,然后单击创建

设置项目名称设置项目名称

第三步,新建项目完成,下面是得到初始化的项目,如下所示,界面左边是空白的Form,右边是工程的目录结构。

项目初始状态项目初始状态

界面设计

第四步,要实现需求,我们先完成界面的设计,使用按钮和富文本框设置如下界面,这个设置界面比较简单。如何拖动按钮设计界面,请参考这篇文章:https://cloud.tencent.com/developer/article/1575587。

第五步. 设计好如下界面后

6. 双击右上方按钮

代码设计

第七步. 把如下代码添加入双击按钮3进入到的地方,给按钮设置点击事件

代码语言:txt复制
 private void button1_Click(object sender, EventArgs e)
        {
               //
        }

把下面的代码复制到上面的方法里面

代码语言:txt复制
            String url = richTextBox1.Text;

            try
            {

                Credential cred = new Credential
                {
                    //需要输入你自己的秘钥
                    SecretId = "AK",
                    SecretKey = "EN"
                };

                ClientProfile clientProfile = new ClientProfile();
                HttpProfile httpProfile = new HttpProfile();
                httpProfile.Endpoint = ("iai.tencentcloudapi.com");
                clientProfile.HttpProfile = httpProfile;

                IaiClient client = new IaiClient(cred, "ap-guangzhou", clientProfile);
                DetectFaceRequest req = new DetectFaceRequest();
                //接收图片链接以及默认好的参数
                string strParams = "{"Url":""   url   "","NeedFaceAttributes":1,"NeedQualityDetection":1,"FaceModelVersion":"3.0"}";
                req = DetectFaceRequest.FromJsonString<DetectFaceRequest>(strParams);
                //使用同步接口调用返回结果
                DetectFaceResponse resp = client.DetectFaceSync(req);
                //ConfigureAwait(false).GetAwaiter().GetResult();
                Console.WriteLine(AbstractModel.ToJsonString(resp));
                String s = richTextBox1.Text;
                //设置输出的位置
                richTextBox3.Text = AbstractModel.ToJsonString(resp);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

第八步.然后使用Nuget添加SDK,点击安装。

Nuget的使用,在前面已经介绍过了。

image.pngimage.png

9. SDK安装好后没有报错就可以点击按钮运行,结果如下:

image.pngimage.png

设置输入base64调用接口返回结果

这部分与上面的部分的步骤是一样的,同理,首先双击按钮,进入控制按钮的方法,把代码添加到里面,输入自己的秘钥即可。

10. 双击按钮

image.pngimage.png

11. 进入如下代码

代码语言:txt复制
// 输入代码内容
        private void button4_Click(object sender, EventArgs e)
        {

        }

12. 添加如下代码到方法体里面

代码语言:txt复制
//点击按钮后获取base64值
            String base64 = richTextBox2.Text;

            //开始调用接口
            try
            {

                Credential cred = new Credential
                {
                    //需要输入你自己的秘钥
                    SecretId = "",
                    SecretKey = ""
                };

                ClientProfile clientProfile = new ClientProfile();
                HttpProfile httpProfile = new HttpProfile();
                httpProfile.Endpoint = ("iai.tencentcloudapi.com");
                clientProfile.HttpProfile = httpProfile;

                IaiClient client = new IaiClient(cred, "ap-guangzhou", clientProfile);
                DetectFaceRequest req = new DetectFaceRequest();
                //默认设置好的参数以及base64值
                string strParams = "{"Image":""   base64   "","NeedFaceAttributes":1,"NeedQualityDetection":1,"FaceModelVersion":"3.0"}";
                req = DetectFaceRequest.FromJsonString<DetectFaceRequest>(strParams);
                //使用同步接口调用返回结果
                DetectFaceResponse resp = client.DetectFaceSync(req);
                //ConfigureAwait(false).GetAwaiter().GetResult();
                Console.WriteLine(AbstractModel.ToJsonString(resp));
                String s = richTextBox1.Text;
                richTextBox4.Text = AbstractModel.ToJsonString(resp);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

13. 输入base64,运行测试结果如下:

image.pngimage.png

到这一步,输入URL和base64值返回结果的功能都实现了,经过测试没有问题,下面我贴出控制按钮的完整代码。

完整的代码

下面的代码需要输入你自己的秘钥,如下:

代码语言:txt复制
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;

using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Iai.V20180301;
using TencentCloud.Iai.V20180301.Models;

namespace WinFormDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //点击按钮后获取base64值
            String base64 = richTextBox2.Text;

            //开始调用接口
            try
            {

                Credential cred = new Credential
                {
                    //需要输入
                    SecretId = " ",
                    SecretKey = " "
                };

                ClientProfile clientProfile = new ClientProfile();
                HttpProfile httpProfile = new HttpProfile();
                httpProfile.Endpoint = ("iai.tencentcloudapi.com");
                clientProfile.HttpProfile = httpProfile;

                IaiClient client = new IaiClient(cred, "ap-guangzhou", clientProfile);
                DetectFaceRequest req = new DetectFaceRequest();
                //默认设置好的参数以及base64值
                string strParams = "{"Image":""   base64   "","NeedFaceAttributes":1,"NeedQualityDetection":1,"FaceModelVersion":"3.0"}";
                req = DetectFaceRequest.FromJsonString<DetectFaceRequest>(strParams);
                //使用同步接口调用返回结果
                DetectFaceResponse resp = client.DetectFaceSync(req);
                //ConfigureAwait(false).GetAwaiter().GetResult();
                Console.WriteLine(AbstractModel.ToJsonString(resp));
                String s = richTextBox1.Text;
                richTextBox4.Text = AbstractModel.ToJsonString(resp);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            String url = richTextBox1.Text;

            try
            {

                Credential cred = new Credential
                {
                    SecretId = " ",
                    SecretKey = " "
                };

                ClientProfile clientProfile = new ClientProfile();
                HttpProfile httpProfile = new HttpProfile();
                httpProfile.Endpoint = ("iai.tencentcloudapi.com");
                clientProfile.HttpProfile = httpProfile;

                IaiClient client = new IaiClient(cred, "ap-guangzhou", clientProfile);
                DetectFaceRequest req = new DetectFaceRequest();
                //接收图片链接以及默认好的参数
                string strParams = "{"Url":""   url   "","NeedFaceAttributes":1,"NeedQualityDetection":1,"FaceModelVersion":"3.0"}";
                req = DetectFaceRequest.FromJsonString<DetectFaceRequest>(strParams);
                //使用同步接口调用返回结果
                DetectFaceResponse resp = client.DetectFaceSync(req);
                //ConfigureAwait(false).GetAwaiter().GetResult();
                Console.WriteLine(AbstractModel.ToJsonString(resp));
                String s = richTextBox1.Text;
                //设置输出的位置
                richTextBox3.Text = AbstractModel.ToJsonString(resp);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        private void richTextBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox4_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

功能测试

这下输入图片链接和输入图片base64值都能运行成功了,掌声鼓励一下,谢谢。

image.pngimage.png

总结

经过前面的步骤,相信各位也能搭建自己的人脸识别人脸检测的winform应用程序了。主要分为两大块,一块是界面的设计,另一块按钮调用接口,最后将接口返回输出到界面上。最后功能测试已经可以直接输入URL和base64值调用接口返回到界面了,这可以作为一个工具使用,挺方便的,以后可以不必每次登陆界面输入参数即可调用,希望能给你使用winform调用接口赋能,掌声鼓励一下。如果读到文章有错漏,不妨悄悄的告诉我,感激不尽。

0 人点赞