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

前端使用TensorFlow.js reactjs调用本地模型 实现图像、文本、音频/声音、视频相关识别

前端能做的

类型可做任务示例模型前端场景
图像分类、检测、分割、姿态识别、手势识别、风格迁移mobilenet, coco-ssd, bodypix, handpose, style-transfer商品识别、健身、AR、艺术滤镜
文本情感分析、分类、相似度、实体识别toxicity, universal-sentence-encoder评论分析、搜索、问答
音频语音识别、音频分类speech-commands语音控制、事件触发
视频实时姿态/手势识别pose-detection, handpose健身动作捕捉、游戏交互
综合自定义迁移学习、生成式 AImobilenet+自训练、pix2pix行业识别、内容生成

TensorFlow.js 是什么?

TensorFlow.js 是 Google 官方推出的前端 + 后端通用的机器学习框架。一句话总结:你可以用 JavaScript 在浏览器或 Node.js 里运行 AI(深度学习模型)。

  • 完全不需要后台服务器,也不需要 Python。
  • 不上传数据,隐私更安全。
  • Web 端性能高,运行在 GPU/WebGL 上。

TensorFlow.js 有什么用?(真实场景)

应用类型描述
人脸表情识别判断是否开心、生气、惊讶
图片识别判断图片里是什么(猫/狗/人/车等)
摄像头识别实时识别人脸、物体
手势识别识别比心、点赞等动作
声音识别判断“上”、“下”、“停”等指令
文本情绪分析判断文字是正面还是负面
物体跟踪行为识别、目标跟踪

TensorFlow.js 能做什么?(官方模型一览)

模型用途
mobilenet图片分类(物体识别)
coco-ssd检测多个物体并框出
face-api / blazeface人脸检测
face-expression表情识别
handpose手势识别
posenet / movenet人体姿态
speech-commands语音命令识别
toxicity文字攻击性检测
qna问答模型
universal-sentence-encoder文本向量

TensorFlow.js 如何使用

安装 npm install @tensorflow/tfjs

示例 1:识别图片内容

import React, { useState } from "react";
import * as tf from "@tensorflow/tfjs";
import * as mobilenet from "@tensorflow-models/mobilenet";export default function App() {const [result, setResult] = useState("");const [model, setModel] = useState<any>(null);// 加载模型React.useEffect(() => {mobilenet.load().then(setModel);}, []);const handleImage = async (e: any) => {const file = e.target.files[0];if (!file || !model) return;const img = document.createElement("img");img.src = URL.createObjectURL(file);await img.decode();const predictions = await model.classify(img);setResult(predictions.map((p: any) => `${p.className} (${(p.probability * 100).toFixed(2)}%)`).join("\n"));};return (<div><h2>图片识别 Demo</h2><input type="file" onChange={handleImage} /><pre>{result}</pre></div>);
}

可识别 猫、狗、香蕉、键盘、车、人、动物等 1000 类物体。

示例 2:摄像头实时识别

import React, { useEffect, useRef } from "react";
import * as mobilenet from "@tensorflow-models/mobilenet";
import Webcam from "react-webcam";export default function App() {const webcamRef = useRef<Webcam>(null);const modelRef = useRef<any>(null);useEffect(() => {mobilenet.load().then(model => (modelRef.current = model));const interval = setInterval(async () => {if (webcamRef.current && modelRef.current) {const video = webcamRef.current.video as HTMLVideoElement;if (video) {const predictions = await modelRef.current.classify(video);console.log("识别结果:", predictions);}}}, 500);return () => clearInterval(interval);}, []);return (<div><h2>摄像头识别 Demo</h2><Webcam ref={webcamRef} /></div>);
}

创建rea

ct 项目

npx create-react-app my-ai-demo --template typescript

示例demo

安装命令

npm install @tensorflow/tfjs@4 @tensorflow-models/mobilenet@2 react-webcam @vladmandic/face-api@tensorflow/tfjs@4
@tensorflow-models/mobilenet@2
@tensorflow-models/speech-commands
react-webcam

示例 3:语音识别(speech-commands)

使用 CDN 才能运行:

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands"></script>
const recognizer = (window as any).speechCommands.create("BROWSER_FFT");await recognizer.ensureModelLoaded();const words = recognizer.wordLabels();recognizer.listen(result => {const scores = Array.from(result.scores);const bestIndex = scores.indexOf(Math.max(...scores));console.log("识别到:", words[bestIndex]);
});

可识别:

"yes""no""up""down""left""right""stop""go"

图片识别、 摄像头识别 音频检测(关键字识别)

import { useEffect, useRef, useState } from "react";
import * as mobilenet from "@tensorflow-models/mobilenet";
import * as speech from "@tensorflow-models/speech-commands";
import Webcam from "react-webcam";function App() {const webcamRef = useRef<Webcam>(null);const imgRef = useRef<HTMLImageElement>(null);const [model, setModel] = useState<mobilenet.MobileNet | null>(null);const [audioModel, setAudioModel] = useState<any>(null);const [imageResult, setImageResult] = useState("");const [cameraResult, setCameraResult] = useState("");const [audioResult, setAudioResult] = useState("");/** -------------------------*  初始化加载模型--------------------------*/useEffect(() => {const loadModels = async () => {const imgModel = await mobilenet.load();setModel(imgModel);const recognizer = await speech.create("BROWSER_FFT");await recognizer.ensureModelLoaded();setAudioModel(recognizer);console.log("All models loaded!");};loadModels();}, []);/** -------------------------*  上传图片识别--------------------------*/const handleUploadImage = async (e: React.ChangeEvent<HTMLInputElement>) => {if (!model) return alert("模型加载中…");const file = e.target.files?.[0];if (!file) return;const reader = new FileReader();reader.onload = async () => {if (imgRef.current) {imgRef.current.src = reader.result as string;const predictions = await model.classify(imgRef.current);if (predictions.length > 0) {setImageResult(`${predictions[0].className}(置信度:${(predictions[0].probability * 100).toFixed(2)}%)`);}}};reader.readAsDataURL(file);};/** -------------------------*  摄像头识别--------------------------*/const handleCameraDetect = async () => {if (!model) return alert("模型加载中…");const video = webcamRef.current?.video;if (!video) return;const predictions = await model.classify(video);if (predictions.length > 0) {setCameraResult(`${predictions[0].className}(置信度:${(predictions[0].probability * 100).toFixed(2)}%)`);}};/** -------------------------*  音频识别--------------------------*/const handleStartAudio = async () => {if (!audioModel) return alert("音频模型加载中…");audioModel.listen((result: any) => {const scores = result.scores;const labels = audioModel.wordLabels();const highest = scores.indexOf(Math.max(...scores));setAudioResult(`检测到: ${labels[highest]}`);},{ probabilityThreshold: 0.75 });};const handleStopAudio = () => {audioModel?.stopListening();};return (<div style={{ padding: 20 }}><h1>TensorFlow.js Demo(上传图片 + 摄像头 + 语音)</h1>{/* -------------- 上传图片识别 ---------------- */}<section style={{ marginTop: 20 }}><h2>上传图片识别</h2><input type="file" accept="image/*" onChange={handleUploadImage} /><br /><imgref={imgRef}alt=""style={{ width: 300, marginTop: 10, borderRadius: 10 }}/><p>识别结果:{imageResult}</p></section><hr />{/* -------------- 摄像头识别 ---------------- */}<section style={{ marginTop: 20 }}><h2>摄像头识别</h2><Webcamref={webcamRef}screenshotFormat="image/jpeg"style={{ width: 300, borderRadius: 10 }}/><div><button onClick={handleCameraDetect} style={{ marginTop: 10 }}>识别镜头画面</button></div><p>识别结果:{cameraResult}</p></section><hr />{/* -------------- 语音识别 ---------------- */}<section style={{ marginTop: 20 }}><h2>音频检测(关键字识别)</h2><button onClick={handleStartAudio}>开始监听</button><button onClick={handleStopAudio} style={{ marginLeft: 10 }}>停止监听</button><p>识别结果:{audioResult}</p></section></div>);
}export default App;

在这里插入图片描述

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

相关文章:

  • 香蕉派 BPI-2K3000 工业计算机开发板采用龙芯2K3000芯片设计
  • C语言-数据结构-单链表程序-增删改查
  • vip广告网站建设摄影网站开题报告
  • 进程概念(上)
  • 网络水果有哪些网站可以做中国国家人事人才培训网
  • 开启智能未来之门:华为HCIA-AI认证培训与考试全方位深度解析
  • 记事本源代码分析ALT+F4调试记录详细分析
  • 【Java基础07】链表
  • DDL数据
  • 北京驾校网站建设方一凡和磊儿做家教的网站
  • 电的帝国与时空的编程:从基础属性到人工场革命的宏伟蓝图
  • C语言入门(十七):指针(3)
  • 共绩算力全面研究报告:破解算力 “不可能三角“ 的创新实践
  • 网络:5.应用层协议HTTP
  • python 要如何快速拥有可用python的编程能力
  • 网站跳出率房地产的未来趋势分析
  • 家庭网络建站广告设计公司服务不到位
  • SAP FICO工单成本分析报表
  • 破解版网站建设营销运营推广服务
  • 告别“在我电脑上能跑”:Docker入门与核心概念解析
  • 2. YOLOv5 搭建一个完整的目标检测系统核心步骤
  • discuz培训网站模板下载wordpress直接显示文章
  • R语言编程基础与应用 | 探索数据分析的无限可能
  • 北京网站设计网站设计公司价格工商做年报网站
  • 商丘网站建设网站推广镇江做网站的
  • Nginx安全策略
  • NumPy 从数值范围创建数组
  • 网站备案贵州电话学产品设计的可以找什么工作
  • 刷网站排名 优帮云企业所得税什么时候申报缴纳
  • P5736 【深基7.例2】质数筛题解(重置版!)