首页 > 其他分享 >face-api基于tensorflow 的人像检测npm 包

face-api基于tensorflow 的人像检测npm 包

时间:2023-11-06 10:33:37浏览次数:42  
标签:npm const face api wasm tensorflow tfjs

face-api基于tensorflow 的人像检测npm 包,原始项目为justadudewhohacks/face-api.js 但是因为缺少维护, 社区有人自己fork 了
一个新的vladmandic/face-api,可以更好的支持tensorflow 新版本,当然很不错还可以支持基于wasm 的backend (@tensorflow/tfjs-backend-wasm)

参考使用

  • demo.js
 
// import nodejs bindings to native tensorflow,
// not required, but will speed up things drastically (python required)
require('@tensorflow/tfjs-node');
 
// implements nodejs wrappers for HTMLCanvasElement, HTMLImageElement, ImageData
const canvas  = require('canvas');
 
const faceapi = require('@vladmandic/face-api/dist/face-api.node.js');
 
// patch nodejs environment, we need to provide an implementation of
// HTMLCanvasElement and HTMLImageElement
const { Canvas, Image, ImageData } = canvas
faceapi.env.monkeyPatch({ Canvas, Image, ImageData })
   
async function init(){
   // 需要自己加载模型,在https://github.com/vladmandic/face-api/tree/master/model 目录中,原始项目缺少模型,需要自己找
    await faceapi.nets.ssdMobilenetv1.loadFromDisk('models')
    const img = await canvas.loadImage('test.png')
    const detection = await faceapi.detectSingleFace(img)
    console.log(detection)
}
 
init()
  • 效果

说明

对于基于nodejs 开发ai的同学,使用@tensorflow/tfjs-node 还是很方便的,目前face-api 已经集成了不少模型,可以直接使用,同时也支持webassembly的玩法,参考wasm 集成

// import nodejs bindings to native tensorflow,
// not required, but will speed up things drastically (python required)
// require('@tensorflow/tfjs-node');
 
// implements nodejs wrappers for HTMLCanvasElement, HTMLImageElement, ImageData
const canvas  = require('canvas');
 
// const faceapi = require('@vladmandic/face-api/dist/face-api.node.js');
 
const tf = require('@tensorflow/tfjs-node');
const wasm = require('@tensorflow/tfjs-backend-wasm');
const faceapi = require('@vladmandic/face-api/dist/face-api.node-wasm.js'); // use this when using face-api in dev mode
// 加载wasm 文件
wasm.setWasmPaths({
    'tfjs-backend-wasm.wasm': './node_modules/@tensorflow/tfjs-backend-wasm/dist/tfjs-backend-wasm.wasm',
    'tfjs-backend-wasm-simd.wasm': './node_modules/@tensorflow/tfjs-backend-wasm/dist/tfjs-backend-wasm-simd.wasm',
    'tfjs-backend-wasm-threaded-simd.wasm': './node_modules/@tensorflow/tfjs-backend-wasm/dist/tfjs-backend-wasm-threaded-simd.wasm'
});
 
// patch nodejs environment, we need to provide an implementation of
// HTMLCanvasElement and HTMLImageElement
const { Canvas, Image, ImageData } = canvas
faceapi.env.monkeyPatch({ Canvas, Image, ImageData })
   
async function init(){
    await tf.setBackend('wasm');
    await tf.ready();
    await faceapi.nets.ssdMobilenetv1.loadFromDisk('models')
    const img = await canvas.loadImage('face.png')
    const detection = await faceapi.detectSingleFace(img)
    console.log(detection)
}
 
init()
   

参考资料

https://github.com/justadudewhohacks/face-api.js
https://github.com/vladmandic/face-api

标签:npm,const,face,api,wasm,tensorflow,tfjs
From: https://www.cnblogs.com/rongfengliang/p/17812001.html

相关文章

  • Java系列:Java8 新特性:强大的 Stream API(创建 Stream、中间操作、终止操作)
    Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI。StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为StreamAPI可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。......
  • npm, yarn设置国内源
    yarnconfigsetregistryhttps://registry.npm.taobao.org-gyarnconfigsetsass_binary_sitehttp://cdn.npm.taobao.org/dist/node-sass-g #查看当前npm的软件源设置npmconfiggetregistry#用淘宝镜像源覆写之前的软件源地址npmconfigsetregistryh......
  • Kubernetes:kube-apiserver 和 etcd 的交互
    kubernetes:kube-apiserver系列文章:Kubernetes:kube-apiserver之scheme(一)Kubernetes:kube-apiserver之scheme(二)Kubernetes:kube-apiserver之启动流程(一)Kubernetes:kube-apiserver之启动流程(二)0.前言上几篇文章介绍了kubernetes的核心数据结构scheme......
  • WSL2 node 与 npm 的安装
    本文 nodejs 的配置适用于 WSL,本人亲测有效(WSLUbuntu),但是可能并不适用于其他系统。 1.安装nodejs执行下列的命令,选择自己需要的版本就好了#Node.jsv13.xcurl-sLhttps://deb.nodesource.com/setup_13.x|sudo-Ebash-sudoapt-getinstall-ynodejs#Node......
  • 使用FastAPI部署Ultralytics YOLOv5模型
    前言 YOLO是YouOnlyLookOnce(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以本文将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。本文转载自DeephubImba作者:auliyafirdaus仅用于学术分享,若侵权请联系删......
  • 在Vue 3中如何在created钩子中进行API调用?
    在Vue3中,您可以使用setup函数来替代Vue2中的created生命周期钩子,并在其中进行API调用。下面是一个示例:import{ref,onMounted}from'vue'importaxiosfrom'axios'exportdefault{setup(){//创建一个响应式变量来存储API的返回数据constdata=ref(null......
  • EFCore 使用FluntApi配置 全局查询筛选器
    我们在类中通常会有一个属性为IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要.where(s=>s.IsDel==false)非常的麻烦。在使用efCore时可以通过配置查询筛选器来很好的解决这个问题。publicclassSysUser{publiclongId{get;set;}......
  • Kubernetes:kube-apiserver 之启动流程(二)
    接着Kubernetes:kube-apiserver之启动流程(一)加以介绍。1.2.2创建APIExtensionsServer创建完通用APIServer后继续创建APIExtensionsServer。func(ccompletedConfig)New(delegationTargetgenericapiserver.DelegationTarget)(*CustomResourceDefinitions,erro......
  • NodeJS系列(13)- Next.js 框架 (六) | Node.js + Next.js + Prisma/Sequelize (ORM) + M
    Next.js是一个用于构建Web应用程序的框架。Next.js是一个用于生产环境的React框架,是一个React服务端渲染应用框架。NextJS:https://nextjs.org/Prisma是一个基于promise的Node.js和TypeScript的ORM,目前支持Mysql,MariaDB,SQLite,PostgreSQL,AWSAuroraServerles......
  • kubelet和api server之间的通信
    在k8s集群中,每个节点上都运行一个kubelet服务进程,来和master节点来保持通信。kubelet服务进程默认监听10250端口,来接收来自master发来的指令kubelet和apiserver保持双向通信:接受并执行master发来的指令(通过监听10250端口,watch机制)每个kubelet进程会在APIServer上注册节点自......