lm
2025-02-19 e2f4293b26e2b1e407b062bbe4d8454b8261e308
Merge branch 'master' of ssh://115.28.86.8:29418/~admin/FaceX_AI_智能守卫
4个文件已添加
202 ■■■■■ 已修改文件
Client/王雨阳/code/UI.html 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Client/王雨阳/document/项目需求书2.0版.docx 补丁 | 查看 | 原始文档 | blame | 历史
Client/王雨阳/log/日志_王雨阳_250218.doc 补丁 | 查看 | 原始文档 | blame | 历史
Client/王雨阳/log/王雨阳_250218.doc 补丁 | 查看 | 原始文档 | blame | 历史
Client/ÍõÓêÑô/code/UI.html
New file
@@ -0,0 +1,202 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>人脸识别考勤 - äººè„¸å½•入模块</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        .container {
            max-width: 600px;
            margin: auto;
            padding: 20px;
            border: 1px solid #ccc;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
        }
        h1 {
            text-align: center;
            color: #333;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="text"], button {
            width: 100%;
            padding: 10px;
            font-size: 16px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }
        button {
            background-color: #007bff;
            color: white;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .camera-preview {
            margin-top: 20px;
            text-align: center;
        }
        .camera-preview video {
            max-width: 100%;
            height: auto;
            border: 1px solid #ccc;
            border-radius: 4px;
        }
        .image-preview {
            margin-top: 20px;
            text-align: center;
        }
        .image-preview img {
            max-width: 100%;
            height: auto;
            border: 1px solid #ccc;
            border-radius: 4px;
        }
        .status-message {
            margin-top: 15px;
            text-align: center;
            font-size: 14px;
            color: #555;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>人脸识别考勤 - äººè„¸å½•入模块</h1>
        <!-- å·¥å·è¾“å…¥ -->
        <div class="form-group">
            <label for="employee-id">输入工号:</label>
            <input type="text" id="employee-id" placeholder="请输入工号">
        </div>
        <!-- æŸ¥è¯¢ä¿¡æ¯æŒ‰é’® -->
        <button onclick="searchUserInfo()">查询信息</button>
        <!-- ç”¨æˆ·ä¿¡æ¯å±•示 -->
        <div class="form-group" id="user-info" style="display: none;">
            <label>用户信息:</label>
            <p id="user-details"></p>
        </div>
        <!-- æ¨¡æ‹Ÿæ‘„像头抓取图片 -->
        <div class="camera-preview" id="camera-preview" style="display: none;">
            <video id="camera-video" autoplay playsinline></video>
            <div>
                <button onclick="captureImage('front')">抓取正脸</button>
                <button onclick="captureImage('left')">抓取左侧脸</button>
                <button onclick="captureImage('right')">抓取右侧脸</button>
            </div>
        </div>
        <!-- å›¾ç‰‡é¢„览 -->
        <div class="image-preview" id="image-preview" style="display: none;">
            <h3>抓取的图片预览</h3>
            <div id="captured-images">
                <img id="front-image" src="" alt="正脸图片" style="display: none;">
                <img id="left-image" src="" alt="左侧脸图片" style="display: none;">
                <img id="right-image" src="" alt="右侧脸图片" style="display: none;">
            </div>
        </div>
        <!-- æäº¤æŒ‰é’® -->
        <button onclick="submitData()" style="display: none;" id="submit-btn">提交</button>
        <!-- çŠ¶æ€æ¶ˆæ¯ -->
        <div class="status-message" id="status-message"></div>
    </div>
    <script>
        let cameraStream = null;
        // æ¨¡æ‹ŸæŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯
        function searchUserInfo() {
            const employeeId = document.getElementById('employee-id').value;
            if (!employeeId) {
                alert('请输入工号');
                return;
            }
            // æ¨¡æ‹ŸæŸ¥è¯¢ç»“æžœ
            const userInfo = {
                id: employeeId,
                name: '张三',
                department: '技术部'
            };
            // æ˜¾ç¤ºç”¨æˆ·ä¿¡æ¯
            document.getElementById('user-details').innerText = `姓名: ${userInfo.name}, éƒ¨é—¨: ${userInfo.department}`;
            document.getElementById('user-info').style.display = 'block';
            // æ˜¾ç¤ºæ‘„像头
            startCamera();
        }
        // æ‰“开摄像头
        async function startCamera() {
            try {
                cameraStream = await navigator.mediaDevices.getUserMedia({ video: true });
                const videoElement = document.getElementById('camera-video');
                videoElement.srcObject = cameraStream;
                document.getElementById('camera-preview').style.display = 'block';
            } catch (error) {
                alert('无法访问摄像头,请检查权限或设备是否可用。');
                console.error('摄像头访问失败:', error);
            }
        }
        // æŠ“取图片
        function captureImage(faceType) {
            const videoElement = document.getElementById('camera-video');
            const canvas = document.createElement('canvas');
            canvas.width = videoElement.videoWidth;
            canvas.height = videoElement.videoHeight;
            const context = canvas.getContext('2d');
            context.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
            // å°†æŠ“取的图片显示在页面中
            const imageUrl = canvas.toDataURL('image/png');
            const imageElement = document.getElementById(`${faceType}-image`);
            imageElement.src = imageUrl;
            imageElement.style.display = 'block';
            // å¦‚果三张图片都已抓取,显示提交按钮
            const frontImage = document.getElementById('front-image').src;
            const leftImage = document.getElementById('left-image').src;
            const rightImage = document.getElementById('right-image').src;
            if (frontImage && leftImage && rightImage) {
                document.getElementById('submit-btn').style.display = 'block';
            }
        }
        // æ¨¡æ‹Ÿæäº¤æ•°æ®
        function submitData() {
            const employeeId = document.getElementById('employee-id').value;
            if (!employeeId) {
                alert('请先输入工号并查询信息');
                return;
            }
            // æ¨¡æ‹Ÿä¸Šä¼ å›¾ç‰‡å’Œæäº¤æ•°æ®
            const statusMessage = document.getElementById('status-message');
            statusMessage.innerText = '正在上传图片并提交数据...';
            setTimeout(() => {
                statusMessage.innerText = '提交成功!';
            }, 2000); // æ¨¡æ‹Ÿä¸Šä¼ å»¶è¿Ÿ
        }
    </script>
</body>
</html>
Client/ÍõÓêÑô/document/ÏîÄ¿ÐèÇóÊé2.0°æ.docx
Binary files differ
Client/ÍõÓêÑô/log/ÈÕÖ¾_ÍõÓêÑô_250218.doc
Binary files differ
Client/ÍõÓêÑô/log/ÍõÓêÑô_250218.doc
Binary files differ