From ae1184884d28b5cdb719efa8523e5d04b75175f9 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 10 二月 2025 16:30:24 +0800
Subject: [PATCH] gx
---
app.js | 115 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 88 insertions(+), 27 deletions(-)
diff --git a/app.js b/app.js
index c189057..e577b05 100644
--- a/app.js
+++ b/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)
}
})
// 加载文件存储
@@ -32,7 +44,7 @@
// })
// );
app.use(cors())
-app.use(express.static('./dist'))
+app.use(express.static('./web'))
app.use('/uploads', express.static('./uploads'));
async function LoadModels() {
await faceapi.nets.faceRecognitionNet.loadFromDisk(__dirname + "/models");
@@ -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({
@@ -128,8 +148,6 @@
}
}
-
-
async function getDescriptorsFromDB(image) {
// 从mongodb获取所有的面部数据,并循环遍历每个面部数据以读取数据
let faces = await FaceModel.find();
@@ -169,48 +187,89 @@
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)
+ console.log('---------------',result)
if(result===true){
+ logger.info(`上传${label}人脸信息成功`)
res.json({code:200, message:"录入成功"})
}else{
+ // let result = await getDescriptorsFromDB(File1);
+ imgs.forEach(e=>{
+ fs.unlink(e,(err)=>{
+ if(err){
+ console.log('删除失败')
+ }else{
+ console.log('删除成功')
+ }
+ })
+ })
+ 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;
- let result = await getDescriptorsFromDB(File1);
- fs.unlink(File1,(err)=>{
- if(err){
- console.log('删除失败')
- }else{
- console.log('删除成功')
- }
- })
- res.json({code:200,result });
+ logger.info(`验证人脸信息识别:${File1}`)
+ try {
+ let result = await getDescriptorsFromDB(File1);
+ fs.unlink(File1,(err)=>{
+ if(err){
+ console.log('删除失败')
+ }else{
+ console.log('删除成功')
+ }
+ })
+ res.json({code:200,result });
+ } catch (error) {
+ res.json({code:200,error });
+ }
+
});
// 获取人脸模型
app.post('/get-face',upload.single('file'),async (req, res) => {
- console.log('------------')
- console.log(req.body)
- 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)=>{
- console.log('------------')
- console.log(req.body)
const label = req.body.label
- console.log('删除人脸库',label)
+ logger.info(`删除人脸库${label}`)
+ FaceModel.findOne({ "label": label }).then(re=>{
+ console.log('kankan---')
+ console.log(re.images)
+ if(re.images.length>0){
+ for (let i = 0; i < re.images.length; i++) {
+ fs.unlink(re.images[i],(err)=>{
+ if(err){
+ console.log('删除失败')
+ }else{
+ console.log('删除成功')
+ }
+ })
+ }
+ }
+ })
let result= deleteLabelImages(label)
if(result){
+ logger.info(`删除人脸库${label};成功`)
res.json({message:'success'})
+
}else{
+ logger.info(`删除人脸库${label};失败`)
res.json({message:"err"})
}
})
@@ -222,7 +281,7 @@
-// add your mongo key instead of the ***
+//链接数据库初始化
mongoose
.connect(
`mongodb://localhost/test`,
@@ -233,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);
--
Gitblit v1.8.0