当前位置: 首页 > news >正文

怎样做网站别人能访问火车头采集做网站赚钱

怎样做网站别人能访问,火车头采集做网站赚钱,武威网站建设,实时热搜榜榜单一、环境准备node环境下vladmandic/face-api 默认依赖 tensorflow/tfjs-node,需要提前npm install tensorflow/tfjs-node 安装好国内网络由于访问不到谷歌的资源库 可以找其他镜像库或者使用 tensorflow/tfjs和tensorflow/tfjs-backend-wasm 使用 wasm版本实现跨平台…

一、环境准备

node环境下

@vladmandic/face-api 默认依赖 @tensorflow/tfjs-node,需要提前npm install @tensorflow/tfjs-node 安装好

国内网络由于访问不到谷歌的资源库 可以找其他镜像库或者使用 @tensorflow/tfjs和@tensorflow/tfjs-backend-wasm 使用 wasm版本实现跨平台使用。

二、Express 配置集成

这里使用 @tensorflow/tfjs和@tensorflow/tfjs-backend-wasm 实现跨平台版本

注意node使用@tensorflow/tfjs 需要安装 node-canvas 包 和jsdom 模拟dom环境。

以下是app.ts关于face-api 相关配置

import { Canvas, Image } from 'canvas';
import { JSDOM }  from 'jsdom';
import * as faceapi from '@vladmandic/face-api/dist/face-api.node-wasm.js';
import { loadModels } from './utils/faceUtil.js';
.../ 初始化环境
const dom = new JSDOM();
global.document = dom.window.document;
global.HTMLCanvasElement = Canvas as unknown as { new (): HTMLCanvasElement; prototype: HTMLCanvasElement; };
faceapi.env.monkeyPatch({  Canvas: Canvas as unknown as { new (): HTMLCanvasElement; prototype: HTMLCanvasElement; },Image: Image as unknown as { new (): HTMLImageElement; prototype: HTMLImageElement; }  
});
...//加载人脸模型
loadModels().then(() => {// 创建HTTPS服务器https.createServer(options, app).listen(process.env.API_PORT, () => {...});
})

faceUtil.js

import * as faceapi from '@vladmandic/face-api/dist/face-api.node-wasm.js';
import * as tf from '@tensorflow/tfjs';
import '@tensorflow/tfjs-backend-wasm';// 加载模型(需提前下载至./models目录)
export const loadModels = async (): Promise<void> => {try {await tf.setBackend('wasm');console.log('Backend:', tf.getBackend());await Promise.all([faceapi.nets.ssdMobilenetv1.loadFromDisk('model'),faceapi.nets.faceLandmark68Net.loadFromDisk('model'),faceapi.nets.faceRecognitionNet.loadFromDisk('model')]);} catch (err) {console.error('Model loading failed:', err);throw err;}
}

这里加载model 下的预处理模板。

具体模板可以去项目下的 ./node_modules/@vladmandic/face-api/model 找自己想用的

三、照片转成人脸数据

这里的照片可以通过multer 中间件 接收接口传递过来的文件。

 public saveFaceFeatures = async (req: Request, res: Response): Promise<void> => {try {//获取参数const { studentId } = req.query;const path = req.file?.path;//服务层处理逻辑...} catch(err) {errHandler(err, req, res);}}

这里就可以看到 multer中件件处理过的接口 通过req可以读取文件的信息了

默认它会把文件放到你配置的文件路径下。

import * as faceapi from '@vladmandic/face-api/dist/face-api.node-wasm.js';
import { loadImage } from 'canvas';saveFaceFeatures = async (filePath: string): Promise<...> => {try {if (!filePath) {...}const img = await loadImage(filePath) as unknown as HTMLImageElement;const detection = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor();if (!detection){...}// 提取128维特征向量(只处理单人的人脸数据)const descriptor128 = detection?.descriptor.slice(0, 128);//保存人脸特征数据const desBuffer = Buffer.from(descriptor128.buffer);...} catch(err) {  console.log(err);throw err; }}

业务层通过放置的文件路径 和canvas 模拟一个图片 传给 faceapi 检测和获取人脸的128向量特征。

之后就可以把向量特征数据存入数据库了,记得要用 BLOB 类型接收。

四、人脸校验和数据库余弦相似度算法

下面就是接收人脸信息 和数据库已经有的进行比对了

 const img = await loadImage(Buffer.from(faceBuffer)) as unknown as HTMLImageElement;const detection = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor();const descriptor128 = detection?.descriptor.slice(0, 128) || new Float32Array();   

如果前端发生的是人脸图片使用 faceapi 再次获取 特征数据比对。

const floatArr =  new Float32Array(faceBuffer);
const saveBuffer = floatArr.slice(0, 128).buffer;

如果传的就是 128维ArrayBuffer,可以直接用来比对,当然这里也可以做下转换,保证数据正确性。

 SELECT idcosine_similarity_128d(?, feature_vector) AS similarity FROM table ORDER BY similarity DESCLIMIT 1

使用上面的sql就能获取一条最相似的 数据。

cosine_similarity_128d 数据库方法如下

CREATE DEFINER=`root`@`localhost` FUNCTION `cosine_similarity_128d`(blob1 BLOB,blob2 BLOB
) RETURNS floatDETERMINISTIC
BEGINDECLARE dot_product FLOAT DEFAULT 0;DECLARE norm1 FLOAT DEFAULT 0;DECLARE norm2 FLOAT DEFAULT 0;DECLARE i INT DEFAULT 0;DECLARE offset INT;DECLARE val1, val2 FLOAT;WHILE i < 128 DOSET offset = i * 4;SET val1 = CAST(CONV(HEX(SUBSTRING(blob1, offset+1, 4)), 16, 10) AS FLOAT);SET val2 = CAST(CONV(HEX(SUBSTRING(blob2, offset+1, 4)), 16, 10) AS FLOAT);SET dot_product = dot_product + val1 * val2;SET norm1 = norm1 + POW(val1, 2);SET norm2 = norm2 + POW(val2, 2);SET i = i + 1;END WHILE;-- 完整余弦相似度计算RETURN dot_product / (SQRT(norm1) * SQRT(norm2));
END

以上就是一个简单的node.js环境下的 纯后端 人脸识别服务例子。(人脸数据采集还是需要前端配合) 

http://www.dtcms.com/a/506000.html

相关文章:

  • 建行互联网站艺术字体在线生成器下载
  • 西安网站制作计划公众号开发小程序开发
  • 装修网站设计师那个网站做调查问卷能赚钱
  • 网络存储上做网站怎么做网站服务
  • 教育网站改造方案成都设计公司工作室
  • 深圳推广公司哪家好爱网站推广优化
  • 大连网站建设特色去掉wordpress
  • 邯郸网站建设服务平台滁州seo网站推广
  • 怎么建设一个区块链资讯网站网站设计及建设合同
  • 如何投诉网站制作公司网上商城推广文案
  • 专业做财经直播网站有哪些地板网站建设
  • 开发网站网络公司网站页面字体设置
  • 旅行社服务网点能否做网站专业网站设计是什么
  • “一个”网站wordpress showcase
  • 网站建设 多少钱北京优秀网站建设
  • 网站建设的技术问题考试类wordpress主题
  • 微信网站用什么制作的广州市企业网站制作公司
  • 购物网站建设的需求网络培训注册会计师
  • 济南智能网站建设哪家便宜电子商务他们的代表网站
  • 网站有源码 怎么建设wordpress 无效的文章类型
  • 响应式网站设计实训总结spam free wordpress
  • 做网站用什么ide太原网站开发哪家好
  • 网站怎么做后台怎样自己建设网站
  • 西安有一个电影他要拉投资做网站网站与规划设计思路
  • 官方网站建设公司排名新浪云WordPress 主题
  • 专门做尾单的网站江西个人网站备案
  • 国外单页制作网站模板下载wordpress建站 东莞
  • 做网站具备的条件店面设计师哪里找
  • 灯塔建设网站网站建设教程百度网盘
  • 怎么自己做网站卡扣网站维护升级访问中