添加头像到百度

This commit is contained in:
2025-07-27 20:00:48 +08:00
parent 63eb85a30f
commit d46c8bddbe
8 changed files with 534 additions and 34 deletions
@@ -0,0 +1,131 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FaceRecognition.aspx.cs" Inherits="FineUIPro.Web.WeldMat.UsingSentMat.FaceRecognition" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>人脸识别</title>
<style id="Style1" runat="server" type="text/css">
.title
{
font-size:14pt;
font-weight:bold;
text-align:center;
}
video, canvas { border: 1px solid #ccc; margin: 10px; }
button { padding: 8px 16px; margin: 5px; }
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" ShowBorder="true"
Layout="VBox" ShowHeader="true" BodyPadding="5px" IconFont="PlusCircle" Title="人脸识别"
TitleToolTip="人脸识别" AutoScroll="true">
<Items>
<f:ContentPanel ShowBorder="false" ShowHeader="false" ID="ContentPanel1" runat ="server" BodyStyle="text-align:center">
<video id="video" width="480" height="640" autoplay></video>
<canvas id="canvas" width="480" height="640" style="display:none" ></canvas>
<div>
<button id="captureBtn" type="button">识别</button>
</div>
</f:ContentPanel>
</Items>
</f:Panel>
</Items>
</f:Panel>
</form>
<script type="text/javascript">
// 返回false,来阻止浏览器右键菜单
const video = document.getElementById('video');
const canvas = document.getElementById('canvas');
const captureBtn = document.getElementById('captureBtn');
const ctx = canvas.getContext('2d');
let stream = null;
setTimeout(async () => {
try {
stream = await navigator.mediaDevices.getUserMedia({
video: {
width: { ideal:480 },
height: { ideal:640 },
facingMode: "environment" // 后置摄像头
},
audio: false
});
video.srcObject = stream;
} catch (err) {
console.error("摄像头访问错误:", err);
alert(`无法访问摄像头: ${err.message}`);
}
}, 1000)
// 截图功能
document.getElementById('captureBtn').addEventListener('click', () => {
if (!stream) return alert('请先开启摄像头');
if (captureBtn.innerHTML == '识别') {
captureBtn.innerHTML = '重新识别'
canvas.style = "";
video.style = "display:none";
// 适配高DPI屏幕
const scale = window.devicePixelRatio || 1;
canvas.width = video.videoWidth * scale;
canvas.height = video.videoHeight * scale;
ctx.scale(scale, scale);
ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
// 生成图片下载链接
const imgUrl = canvas.toDataURL('image/jpeg');
upLoadFile(imgUrl)
//const link = document.createElement('a');
//link.download = 'capture-' + new Date().getTime() + '.jpg';
//link.href = imgUrl;
//link.click();
} else {
captureBtn.innerHTML = '识别'
video.style = "";
canvas.style = "display:none";
}
});
function upLoadFile(data) {
$.ajax({
url: "FaceRecognition.aspx/UploadData",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
data: data,
projectId:'<%=CurrUser.LoginProjectId%>'
}),
success: function (data) {
/*window.parent.backData(data.d)*/
alert(data.d)
if (data.d.indexOf('识别失败') !== -1) {
alert('识别失败请重新识别')
}
else {
window.location.href = 'UsingMat.aspx?welderQRCode=' + data.d + '';
var activeWindow = F.getActiveWindow();
activeWindow.window.backData(data.d);
activeWindow.hide();
}
}
})
}
</script>
</body>
</html>
@@ -0,0 +1,87 @@
using BLL;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web.Services;
namespace FineUIPro.Web.WeldMat.UsingSentMat
{
public partial class FaceRecognition : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string UploadData(string data,string projectId)
{
byte[] imageBytes = Convert.FromBase64String(data.Substring("data:image/jpeg;base64,".Length));
string filePath = "/FileUpLoad/FaceRecognition/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpeg";
if (!Directory.Exists(BLL.Funs.RootPath + "/FileUpLoad/FaceRecognition/"))
{
Directory.CreateDirectory(BLL.Funs.RootPath + "/FileUpLoad/FaceRecognition/");
}
// 使用MemoryStream将字节数组转换为图片
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
System.Drawing.Image mImage = System.Drawing.Image.FromStream(ms);
// 使用Bitmap类从MemoryStream创建图片
using (Bitmap image = new Bitmap(mImage))
{
// 保存图片到文件
image.Save(BLL.Funs.RootPath + filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
try
{
var kqFace = (List<SgManager.AI.faceResult>)SgManager.AI.FaceClass.SearchFileFace(BLL.Funs.RootPath + filePath);
if (kqFace == null || kqFace.Count == 0)
{
return "识别失败";
}
else if (kqFace[0].errMess != "SUCCESS")
{
return "识别失败;" + kqFace[0].errMess;
}
else
{
try
{
string idCard = kqFace[0].user_id;
var welder = Funs.DB.HJGL_BS_Welder.FirstOrDefault(x => x.ProjectId == projectId && x.IdentityCard == idCard);
if (welder != null)
{
return welder.WED_Code;
}
else
{
return "识别失败;身份证号"+ idCard+"未找到焊工";
}
}
catch (Exception e)
{
}
}
}
catch (Exception e)
{
}
return "识别失败";
}
}
}
@@ -0,0 +1,80 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.WeldMat.UsingSentMat
{
public partial class FaceRecognition
{
/// <summary>
/// Head1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlHead Head1;
/// <summary>
/// Style1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl Style1;
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// ContentPanel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ContentPanel ContentPanel1;
}
}