C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录

腾讯云人脸核身技术

Craneoffice.net 采用的识别方式

        1、活体人脸核身(权威库):

        2、活体人脸比对:

        3、照片人脸核身(权威库):

调用成本

百度云身份证识别

调用成本

相关结合点

核心代码

实现调用人脸核身API的示例 

实现调用身份证识别API的示例 

小结


腾讯云人脸核身技术

根据腾讯云的官方介绍,其慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息核实的需求。

Craneoffice.net 采用的识别方式

由于其产品众多,考虑一些综合因素,我们在 Craneoffice.net 架构里主要实现以下三种识别方式:

        1、活体人脸核身(权威库):

         流程为通过录制一段人脸活体静态视频,与大数据权威库身份证信息进行比对,判断是否为 同一人。

        2、活体人脸比对:

         流程为通过上传正确、清晰的身份证正面图片,截取头像图片,再通过录制人脸活体静态视频进行比对,判断是否为同一人。

        3、照片人脸核身(权威库):

         流程为上传正确的身份证正面图片,截取头像图片,传递身份证号与姓名,与大数据权威库身份证信息进行比对,判断是否为同一人。

调用成本

申请开发账号及具体费用情况请访问腾讯云人脸核身产品首页:

https://cloud.tencent.com/act/pro/huiyandiscount

我们的产品调用成本如下表,可参照一下比例,在此仅供参考:

识别方式调用成功的成本
活体人脸核身(权威库)1元 / 每次
活体人脸比对0.15元 / 每次
照片人脸核身(权威库)1元 / 每次

总之,在腾讯云商城购买越大的产品包调用成本越低,如果有优惠活动则更为合适。

百度云身份证识别

其官方宣传可以结构化识别二代居民身份证正反面所有8个字段,识别准确率超过99%;支持识别混贴身份证,适用于同一张图上有多张身份证正反面的场景;支持检测身份证正面头像,并返回头像切片的base64编码及位置信息,其具体详细产品介绍请访问如下地址:

https://ai.baidu.com/tech/ocr_cards/idcard

调用成本

我们使用的是企业申请,一个月应该可以享受2000次免费调用,后期调用应该是0.02元左右每次,具体可参照:

https://ai.baidu.com/ai-doc/OCR/fk3h7xune#%E8%BA%AB%E4%BB%BD%E8%AF%81%E8%AF%86%E5%88%AB

相关结合点

在人脸核身方面,虽然我们可以直接提供身份证号、姓名、自拍抠图的头像BASE64编码等参数传递给腾讯云识别接口,但考虑到实际应用场景中,更加规范、有效的验证有助于提升应用程序数据的质量和精准性,也更加保障了识别结果的准确性。

因此身份证的识别功能和人脸核身功能即可以单独独立运行,又可以利用产品特性相结合,实现数据采集、校验的双保险。

具体流程如下图:

核心代码

实现调用人脸核身API的示例 

该示例代码以上小节的介绍的三种识别方式实现,仅供参考:

//定义人脸识别类public class FaceR{public string ResultJson = "";   //记录返回 json 结果public string apiurl = "faceid.tencentcloudapi.com"; //腾讯人脸识别API地址public string debuginfo = "";  //调试信息public string ErrorMessage = "";  //错误信息string[] signHeaders = null;      //头部签名数组public FaceR(){}//活体人脸核身方法,参数为身份证号;检验类型,这里传固定值 SILENT;姓名;活体的静态视频编码;方法返回相似度值等信息public string LivenessRecognition(string IdCard,string LivenessType,string Name,string VideoBase64){string content = "{  \"IdCard\":\"" + IdCard + "\",\"LivenessType\":\"" + LivenessType + "\", \"Name\":\"" + Name + "\" ,\"VideoBase64\":\"" + VideoBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "LivenessRecognition";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs=GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST",content, signHeaders);return rvs;}//活体人脸比对方法,参数为传递检验类型,这里传固定值 SILEN;身份证头像图片编码;活体的静态视频编码,方法返回相似度值等信息public string LivenessCompare(string LivenessType, string ImageBase64, string VideoBase64){string content = "{ \"LivenessType\":\"" + LivenessType + "\", \"ImageBase64\":\"" + ImageBase64 + "\" ,\"VideoBase64\":\"" + VideoBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "LivenessCompare";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs = GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST", content, signHeaders);return rvs;}//照片人脸核身方法,参数传递身份证号;姓名;截取的身份证头像图片编码;方法返回相似度值等信息public string ImageRecognition(string IdCard,string Name, string ImageBase64){string content = "{ \"IdCard\":\"" + IdCard + "\", \"Name\":\"" + HttpUtility.UrlDecode(Name, Encoding.UTF8) + "\" ,\"ImageBase64\":\"" + ImageBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "ImageRecognition";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs = GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST", content, signHeaders);return rvs;}//SHA256Hex算法public static string SHA256Hex(string s){using (SHA256 algo = SHA256.Create()){byte[] hashbytes = algo.ComputeHash(Encoding.UTF8.GetBytes(s));StringBuilder builder = new StringBuilder();for (int i = 0; i < hashbytes.Length; ++i){builder.Append(hashbytes[i].ToString("x2"));}return builder.ToString();}}//HMAC-SHA256算法public static byte[] HmacSHA256(byte[] key, byte[] msg){using (HMACSHA256 mac = new HMACSHA256(key)){return mac.ComputeHash(msg);}}//构造头部签名public static Dictionary<String, String> BuildHeaders(string secretid,string secretkey, string service, string endpoint, string region,string action, string version, DateTime date, string requestPayload){string datestr = date.ToString("yyyy-MM-dd");DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);long requestTimestamp = (long)Math.Round((date - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero) / 1000;// ************* 步骤 1:拼接规范请求串 *************string algorithm = "TC3-HMAC-SHA256";string httpRequestMethod = "POST";string canonicalUri = "/";string canonicalQueryString = "";string contentType = "application/json";string canonicalHeaders = "content-type:" + contentType + "; charset=utf-8\n"+ "host:" + endpoint + "\n"+ "x-tc-action:" + action.ToLower() + "\n";string signedHeaders = "content-type;host;x-tc-action";string hashedRequestPayload = SHA256Hex(requestPayload);string canonicalRequest = httpRequestMethod + "\n"+ canonicalUri + "\n"+ canonicalQueryString + "\n"+ canonicalHeaders + "\n"+ signedHeaders + "\n"+ hashedRequestPayload;Console.WriteLine(canonicalRequest);// ************* 步骤 2:拼接待签名字符串 *************string credentialScope = datestr + "/" + service + "/" + "tc3_request";string hashedCanonicalRequest = SHA256Hex(canonicalRequest);string stringToSign = algorithm + "\n"+ requestTimestamp.ToString() + "\n"+ credentialScope + "\n"+ hashedCanonicalRequest;Console.WriteLine(stringToSign);// ************* 步骤 3:计算签名 *************byte[] tc3SecretKey = Encoding.UTF8.GetBytes("TC3" + secretkey);byte[] secretDate = HmacSHA256(tc3SecretKey, Encoding.UTF8.GetBytes(datestr));byte[] secretService = HmacSHA256(secretDate, Encoding.UTF8.GetBytes(service));byte[] secretSigning = HmacSHA256(secretService, Encoding.UTF8.GetBytes("tc3_request"));byte[] signatureBytes = HmacSHA256(secretSigning, Encoding.UTF8.GetBytes(stringToSign));string signature = BitConverter.ToString(signatureBytes).Replace("-", "").ToLower();Console.WriteLine(signature);// ************* 步骤 4:拼接 Authorization *************string authorization = algorithm + " "+ "Credential=" + secretid + "/" + credentialScope + ", "+ "SignedHeaders=" + signedHeaders + ", "+ "Signature=" + signature;Console.WriteLine(authorization);Dictionary<string, string> headers = new Dictionary<string, string>();headers.Add("Authorization", authorization);headers.Add("Host", endpoint);headers.Add("Content-Type", contentType + "; charset=utf-8");headers.Add("X-TC-Timestamp", requestTimestamp.ToString());headers.Add("X-TC-Version", version);headers.Add("X-TC-Action", action);headers.Add("X-TC-Region", region);return headers;}//调用API地址,传递参数并获取返回值的通用方法public string GetResponseResult(string url, System.Text.Encoding encoding, string method, string postData, string[] headers, string ContentType = "application/x-www-form-urlencoded"){method = method.ToUpper();System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;if (method == "GET"){try{WebRequest request2 = WebRequest.Create(@url);request2.Method = method;WebResponse response2 = request2.GetResponse();Stream stream = response2.GetResponseStream();StreamReader reader = new StreamReader(stream, encoding);string content = reader.ReadToEnd();return content;}catch (Exception ex){ErrorMessage = ex.Message;return "";}}Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;byte[] data = encoding.GetBytes(postData);// 准备请求...try{// 设置参数request = WebRequest.Create(url) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = method;debuginfo = headers.GetLength(0).ToString()+"\r\n";if (headers != null){for (int i = 0; i < headers.GetLength(0); i++){if (headers[i].Split(':').Length < 2){continue;}debuginfo += i.ToString()+headers[i]+"\r\n";if (headers[i].Split(':').Length > 1){if (headers[i].Split(':')[0] == "Host"){request.Host = headers[i].Split(':')[1].Trim();continue;}else if (headers[i].Split(':')[0] == "Content-Type"){request.ContentType = headers[i].Split(':')[1].Trim();ContentType = headers[i].Split(':')[1].Trim();continue;}}request.Headers.Add(headers[i].Trim());}debuginfo += "sd2" + "\r\n";}request.ContentType = ContentType;request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果网页(html)代码string content = sr.ReadToEnd();return content;}catch (Exception ex){ErrorMessage = ex.Message;return "";}}//get response result}

实现调用身份证识别API的示例 

                public class IdCard{public string name = "";        //姓名public string sex = "";         //性别public string photo_base64 = "";    //截取的身份证头像图像的编码值 public string nation = "";       //民族public string address = "";      //住址public string IDNumber = "";      //身份证号public string birthday = "";      //生日public string org = "";           //发证机关public string startDate = "";      //有效期起public string endDate = "";        //有效期止public string ResultJson = "";     //记录返回的JSON值public string ErrorMessage = "";   //记录错误信息public string direction = "";        //上传时图片的方向public string image_status = "";     //上传图片的识别状态public string risk_type = "";        //上传图片的识别类型public string edit_tool = "";        //上传图片是否P图public string idcard_number_type = "";   //上传图片的识别错误信息public IdCard(){}//得到指定文件的 byte[],参数为文件绝对路径值private  byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open);byte[] imgByte = new byte[files.Length];files.Read(imgByte, 0, imgByte.Length);files.Close();return imgByte;}//识别身份证信息方法,参数为文件绝对路径值;正反面值:正面传 front,反面传 backpublic void valid(string imagePath, string id_card_side){name = "";sex = "";photo_base64 = "";nation = "";address = "";IDNumber = "";birthday = "";org = "";startDate = "";endDate = "";direction="";image_status = "";risk_type = "";edit_tool = "";idcard_number_type = "";byte[] image = getImageByte(imagePath);var APP_ID = 申请的开发ID;var API_KEY = 申请的开发KEY;var SECRET_KEY = 开发密钥;var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);client.Timeout = 60000;  // 修改超时时间Newtonsoft.Json.Linq.JObject result = new JObject();var options = new Dictionary<string, object>{{"detect_risk", "true"},{"detect_direction", "true"},{"detect_photo", "true"}};try{result = client.Idcard(image, id_card_side, options);ResultJson = result.ToString();if (id_card_side == "front"){name = result["words_result"]["姓名"]["words"].ToString();sex = result["words_result"]["性别"]["words"].ToString();nation = result["words_result"]["民族"]["words"].ToString();address = result["words_result"]["住址"]["words"].ToString();IDNumber = result["words_result"]["公民身份号码"]["words"].ToString();photo_base64 = result["photo"].ToString();birthday = result["words_result"]["出生"]["words"].ToString();birthday = birthday.Substring(0, 4) + "-" + birthday.Substring(4, 2) + "-" + birthday.Substring(6, 2);}if (id_card_side == "back"){org = result["words_result"]["签发机关"]["words"].ToString();startDate = result["words_result"]["签发日期"]["words"].ToString();startDate = startDate.Substring(0, 4) + "-" + startDate.Substring(4, 2) + "-" + startDate.Substring(6, 2);endDate = result["words_result"]["失效日期"]["words"].ToString();endDate = endDate.Substring(0, 4) + "-" + endDate.Substring(4, 2) + "-" + endDate.Substring(6, 2);}direction = result["direction"].ToString();switch (direction){case "-1":direction = "未定义";break;case "0":direction = "正向";break;case "1":direction = "逆时针90度";break;case "2":direction = "逆时针180度";break;case "3":direction = "逆时针270度";break;}image_status = result["image_status"].ToString();switch (image_status){case "normal":image_status = "识别正常";break;case "reversed_side":image_status = "身份证正反面颠倒";break;case "non_idcard":image_status = "上传的图片中不包含身份证";break;case "blurred":image_status = "身份证模糊";break;case "other_type_card":image_status = "其他类型证照";break;case "over_exposure":image_status = "身份证关键字段反光或过曝";break;case "over_dark":image_status = "身份证欠曝(亮度过低)";break;case "unknown":image_status = "未知状态";break;}risk_type = result["risk_type"].ToString();switch (risk_type){case "normal":risk_type = "正常身份证";break;case "copy":risk_type = "复印件";break;case "temporary":risk_type = "临时身份证";break;case "screen":risk_type = "翻拍";break;case "unknown":risk_type = "其他未知情况";break;}if (ResultJson.IndexOf("edit_tool") != -1){edit_tool = result["edit_tool"].ToString();}else{edit_tool = "未P图";}if (ResultJson.IndexOf("idcard_number_type") != -1){idcard_number_type = result["idcard_number_type"].ToString();switch (idcard_number_type){case "-1":idcard_number_type = "身份证正面所有字段全为空";break;case "0":idcard_number_type = "身份证证号识别错误";break;case "1":idcard_number_type = "身份证证号和性别、出生信息一致";break;case "2":idcard_number_type = "身份证证号和性别、出生信息都不一致";break;case "3":idcard_number_type = "身份证证号和出生信息不一致";break;case "4":idcard_number_type = "身份证证号和性别信息不一致";break;}}}catch (Exception e){ErrorMessage = e.Message;}}}// idcard

小结

采用哪种识别方式,要根据我们在实际的应用场景中进行选择,而且也需要考虑调用的成本(本文涉及的调用成本仅供参考)。这里讲述的几种方案是我们自研产品中所采用的方式,腾讯云的人脸核身产品分支很多,大家可以根据具体需求进行选择、扩充自己的产品功能。

再次感谢您的阅读,欢迎大家讨论指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拓世大模型 | 立足行业所需,发力终端,缔造智能无限可能

蒸汽机的发明为人类工业革命揭开序幕&#xff0c;引领了近现代产业变革。众所周知&#xff0c;而今AI技术的革命性突破&#xff0c;站在了时代舞台的中心&#xff0c;特别是大模型的崛起&#xff0c;无疑是第四次产业革命的焦点&#xff0c;它的地位可与当年的“蒸汽机”相提并…

JAVA排序

目录 再看各种排序前我们先了解一下什么叫 稳定性 插入排序&#xff1a; 希尔排序:(插入排序的优化) 测试插入排序和希尔排序(插入排序的优化)排序时间对比 选择排序: 选择排序的优化: 正确的 选择排序优化 快速排序(挖坑法:未优化) 快速排序的优化1 快速排序优化2 优化快速排序…

server2012 通过防火墙开启局域网内限定IP进行远程桌面连接

我这里需要被远程桌面的电脑系统版本为windows server2012 1、打开允许远程连接设置 2、开启防火墙 3、设置允许“远程桌面应用”通过防火墙 勾选”远程桌面“ 3、入站规则设置 高级设置→入站规则→远程桌面-用户模式(TCP-In) 进入远程桌面属性的作用域——>远程IP地址—…

实体店做商城小程序如何

互联网电商深入各个行业&#xff0c;传统线下店商家无论产品销售还是服务业&#xff0c;仅靠以往的经营模式&#xff0c;很难拓展到客户&#xff0c;老客流失严重&#xff0c;同时渠道单一&#xff0c;无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…

Spring Web MVC入门

一&#xff1a;了解Spring Web MVC (1)关于Java开发 &#x1f31f;Java开发大多数场景是业务开发 比如说京东的业务就是电商卖货、今日头条的业务就推送新闻&#xff1b;快手的业务就是短视频推荐 (2)Spring Web MVC的简单理解 &#x1f497;Spring Web MVC&#xff1a;如何使…

分布估计算法(Estimation of distribution algorithm,EDA)

概论 分布估计算法&#xff08;Estimation of distribution algorithm&#xff0c;EDA&#xff09;是一种新兴的基于统计学原理的随机优化算法。 为什么要叫这个名字呢&#xff1f; 首先&#xff0c;“分布”指的就是概率分布。 其次&#xff0c;“估计”指的是这个概率分布…

通过requests库使用HTTP编写的爬虫程序

使用Python的requests库可以方便地编写HTTP爬虫程序。以下是一个使用requests库的示例&#xff1a; import requests# 发送HTTP GET请求 response requests.get("http://example.com")# 检查响应状态码 if response.status_code 200:# 获取响应内容html response.…

Docker实战之二

一、前言 前一篇 Docker实战之一 我们介绍了Dokcer 镜像和容器基本概念&#xff0c;这一节我们来具体制作一个镜像文件并进行快速部署&#xff0c;这个镜像文件是我们的测试环境&#xff0c;主要包含JDK1.8、Nginx、Git、Node、Gradle&#xff0c;基础镜像为CentOS&#xff0c…

Java练习题2020-3

统计从1到N的整数中,所有立方值的平方根为整数的数的个数 输入说明&#xff1a;整数 N(N<10000)&#xff1b; 输出说明&#xff1a;符合条件的数的个数&#xff0c;如4^3648^2 输入样例&#xff1a;10 输出样例&#xff1a;3 (说明&#xff1a;样例中符合条件的3个数是1、4、…

用低代码平台代替Excel搭建进销存管理系统

目录 一、用低代码平台搭建系统 1.需求调研 2.基于痛点梳理业务流程 3.低代码实现 &#xff08;1&#xff09;基础资料模块 &#xff08;2&#xff09;采购管理模块 &#xff08;3&#xff09;销售管理模块 &#xff08;4&#xff09;库存管理模块 &#xff08;5&…

【点云】有序/无序点云区别(详细详解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Windows server部署filebeat到kafka

需求&#xff1a;Windows dhcp日志需要实时传输到elk或者其他告警平台。 1、filebeat下载地址&#xff1a;https://www.elastic.co/cn/downloads/beats/filebeat 2、下载后解压后配置filebeat.yml文件&#xff0c; 3、README.md文件中有运行的操作方法&#xff1a;cmd上进入f…

为什么网上的流量卡都有禁发地区呢?流量卡管控地区整理!

在网上购买过流量卡的朋友应该都知道&#xff0c;但凡是运营商推出的大流量优惠套餐&#xff0c;在套餐详情中都是有禁发地区&#xff0c;只不过每张卡的禁发地区不同而已。 设置禁发地区的主要目的还是为了防止一些电信诈骗案件的发生&#xff0c;或者违法违规利用电话卡的情…

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构&#xff08;Logic Structure&#xff09; 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…

python:多波段遥感影像分离成单波段影像

作者:CSDN @ _养乐多_ 在遥感图像处理中,我们经常需要将多波段遥感影像拆分成多个单波段图像,以便进行各种分析和后续处理。本篇博客将介绍一个用Python编写的程序,该程序可以读取多波段遥感影像,将其拆分为单波段图像,并保存为单独的文件。本程序使用GDAL库来处理遥感影…

LMFLOSS:专治解决不平衡医学图像分类的新型混合损失函数 (附代码)

论文地址&#xff1a;https://arxiv.org/pdf/2212.12741.pdf 代码地址&#xff1a;https://github.com/SanaNazari/LMFLoss 1.是什么&#xff1f; LMFLOSS是一种用于不平衡医学图像分类的混合损失函数。它是由Focal Loss和LDAM Loss的线性组合构成的&#xff0c;旨在更好地处…

SpringSecurity 认证实战

一. 项目数据准备 1.1 添加依赖 <dependencies><!--spring security--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!--web起步依赖-…

语雀故障事件——P0级别事故启示录 发生肾么事了? 怎么回事?

前言 最近&#xff0c;阿里系的语雀出了一个大瓜&#xff0c;知名在线文档编辑与协同工具语雀发生故障&#xff0c;崩溃近10小时。。。。最后&#xff0c;官方发布了一则公告&#xff0c;我们一起来看看这篇公告&#xff0c;能不能有所启发。 目录 前言引出一、语雀P0故障回顾…

重复控制器的性能优化

前言 重复控制器在控制系统中是比较优秀的控制器&#xff0c;在整流逆变等周期性输入信号时&#xff0c;会有很好的跟随行&#xff0c;通常可以单独使用&#xff0c;也可以与其他补偿器串联并联使用。 这里我来分析一下重复控制器的重复控制器的应用工况以及其的优缺点。 分析…