gx
chenyc
2025-02-10 ae1184884d28b5cdb719efa8523e5d04b75175f9
app.js
@@ -1,4 +1,5 @@
require("@tensorflow/tfjs-node");
const logger = require('./logger'); // 引入上面创建的logger
const fs= require ('fs');
const express = require("express");
const moment = require("moment");
@@ -15,13 +16,24 @@
faceapi.env.monkeyPatch({ Canvas, Image });
const app = express();
function getFileExtension(filename) {
  // 检查是否有点存在,如果没有直接返回空字符串
  if (filename.indexOf('.') === -1) return '';
  // 使用split方法根据最后一个点分割字符串,并取最后一部分作为扩展名
  return filename.split('.').pop();
}
// 设置存放格式
const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, './uploads')
  },
  filename(req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
    const originalname = getFileExtension(file.originalname)
    cb(null, Date.now() + '.'+originalname)
  }
})
// 加载文件存储
@@ -79,8 +91,16 @@
      console.log(`Progress = ${counter}%`);
      // Read each face and save the face descriptions in the descriptions array
      const detections = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor();
      descriptions.push(detections.descriptor);
      imgs.push(images[i])
      if(detections.descriptor){
        descriptions.push(detections.descriptor);
        imgs.push(images[i])
      }
    }
    console.log(descriptions,images)
    if(descriptions==[]){
      console.log('人脸读取有错误')
      return false
    }
    //用给定的标签创建一个新的面文档,并将其保存在数据库中
    const createFace = new FaceModel({
@@ -167,11 +187,12 @@
      imgs.push(req.files[i].path)
    }
    let label = req.body.label
    logger.info(`上传${label}人脸信息`)
    console.log('---------------',label)
    let result = await uploadLabeledImages(imgs, label);
    console.log('---------------',result)
    if(result===true){ 
        logger.info(`上传${label}人脸信息成功`)
        res.json({code:200, message:"录入成功"})
    }else{
        // let result = await getDescriptorsFromDB(File1);
@@ -184,15 +205,15 @@
            }
          })
        })
        logger.info(`删除${label}人脸信息,录入失败`)
        res.json({code:400, message:"人脸模型录入失败,请重新录入"})
        
    }
})
/**验证人脸对比 */
app.post("/check-face",upload.single('file'), async (req, res) => {
  console.log(req.file)
  const File1 = req.file.path;
  logger.info(`验证人脸信息识别:${File1}`)
  try {
    let result = await getDescriptorsFromDB(File1);
    fs.unlink(File1,(err)=>{
@@ -211,14 +232,22 @@
});
// 获取人脸模型
app.post('/get-face',upload.single('file'),async (req, res) => {
  const label = req.body.label
  const result=await FaceModel.findOne({ "label": label })
  res.json({code:200,result})
  try{
    const label = req.body.label
    logger.info(`获取人脸模型:${label}`)
    const result=await FaceModel.findOne({ "label": label })
    logger.info(`返回人脸模型:${label}:${JSON.stringify(result)}`)
    res.json({code:200,result})
  }catch(error){
    res.json({code:200,error})
  }
})
// 清除人脸模型
app.post("/del-face",upload.single('file'),async(req,res)=>{
  const label = req.body.label
  console.log('删除人脸库',label)
  logger.info(`删除人脸库${label}`)
  FaceModel.findOne({ "label": label }).then(re=>{
    console.log('kankan---')
    console.log(re.images)
@@ -236,9 +265,11 @@
  })
  let result= deleteLabelImages(label)
  if(result){
    logger.info(`删除人脸库${label};成功`)
    res.json({message:'success'})
  }else{
    logger.info(`删除人脸库${label};失败`)
    res.json({message:"err"})
  }
})
@@ -261,8 +292,10 @@
    }
  )
  .then(() => {
    app.listen(process.env.PORT || 5000);
    app.listen(process.env.PORT || 80,'0.0.0.0');
    console.log("DB connected and server us running.");
    console.log('http-sse-'+80)
    logger.info('数据库连接成功,服务已启动,端口号80')
  })
  .catch((err) => {
    console.log(err);