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

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序

在这里插入图片描述
在这里插入图片描述

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序

实现流程
  • 访问用户的桌面录屏并且显示视频源(位置居中)。
  • 对视频源进行实时目标检测。
  • 在检测到的目标周围绘制边界框,并用它们的类别和检测置信度进行标记。
  • 在视频源下方显示一个唯一检测到的目标列表,显示目标类别和首次检测到的时间。
  • 确保每个目标类别只列出一次,不管它被检测到多少次。
  • 使用2帧每秒的检测频率来平衡性能和响应性。
  • 包括屏幕录制访问和模型加载的错误处理。
  • 为应用程序设计一个干净、现代的外观,并具有响应式设计。
  • 将所有必要的HTML、CSS和JavaScriptt包含在一个单一的自包含文件中。
  • 为TensorFlow.js和COCO-SSD模型库使用CDN链接。 请提供完整可运行的HTML文件,其中包含内联CSS和JavaScript。
效果图

在这里插入图片描述

代码
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实时目标检测</title><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/coco-ssd"></script><style>body {font-family: Arial, sans-serif;display: flex;flex-direction: column;align-items: center;background-color: #f0f0f0;margin: 0;padding: 20px;}h1 {color: #333;}#videoContainer {position: relative;margin-bottom: 20px;}#output {position: absolute;top: 0;left: 0;}#detectionsList {background-color: white;border-radius: 8px;padding: 20px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);max-width: 600px;width: 100%;}#detectionsList h2 {margin-top: 0;}#detectionsList ul {list-style-type: none;padding: 0;}#detectionsList li {margin-bottom: 10px;padding: 10px;background-color: #f9f9f9;border-radius: 4px;}#error {color: red;margin-top: 20px;}</style>
</head>
<body><h1>实时目标检测</h1><div id="videoContainer"><video id="video" width="640" height="480" autoplay muted></video><canvas id="output" width="640" height="480"></canvas></div><div id="detectionsList"><h2>检测到的目标</h2><ul id="detectedObjects"></ul></div><div id="error"></div><script>const video = document.getElementById('video');const output = document.getElementById('output');const ctx = output.getContext('2d');const detectedObjects = document.getElementById('detectedObjects');const errorDiv = document.getElementById('error');let model;let detections = new Map();async function setupCamera() {try {const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });video.srcObject = stream;return new Promise((resolve) => {video.onloadedmetadata = () => {resolve(video);};});} catch (error) {errorDiv.textContent = '无法访问屏幕录制:' + error.message;throw error;}}async function loadModel() {try {model = await cocoSsd.load();} catch (error) {errorDiv.textContent = '无法加载模型:' + error.message;throw error;}}async function detectObjects() {try {const predictions = await model.detect(video);ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);ctx.drawImage(video, 0, 0, ctx.canvas.width, ctx.canvas.height);predictions.forEach(prediction => {const [x, y, width, height] = prediction.bbox;ctx.strokeStyle = '#00FFFF';ctx.lineWidth = 2;ctx.strokeRect(x, y, width, height);ctx.fillStyle = '#00FFFF';ctx.font = '16px Arial';ctx.fillText(`${prediction.class} (${Math.round(prediction.score * 100)}%)`, x, y > 10 ? y - 5 : 10);if (!detections.has(prediction.class)) {const timestamp = new Date().toLocaleTimeString();detections.set(prediction.class, timestamp);updateDetectionsList();}});} catch (error) {console.error('检测对象时出错:', error);}setTimeout(detectObjects, 500); // 每2秒检测一次 (2 FPS)}function updateDetectionsList() {detectedObjects.innerHTML = '';detections.forEach((timestamp, objectClass) => {const li = document.createElement('li');li.textContent = `${objectClass} - 首次检测时间: ${timestamp}`;detectedObjects.appendChild(li);});}async function run() {try {await setupCamera();await loadModel();detectObjects();} catch (error) {console.error('应用程序初始化失败:', error);}}run();</script>
</body>
</html>

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python从0到100(四十六):实现管理员登录及测试功能
  • Vue--解决error:0308010C:digital envelope routines::unsupported
  • CTF ssti零基础(一) 模块注入的payload
  • 【大数据专题】Flink题库
  • unplugin-vue-components 的作用是什么
  • 数据结构——栈(顺序结构)
  • Visual Studio Code + vue快速安装配置Node.js+Vue+webpack+vscode
  • 【Java25】内部类
  • Ubuntu20.04安装Elasticsearch
  • 【STM32 HAL库】ADC
  • 古籍双层PDF制作教程:保姆级古籍数字化教程
  • 掌握互联网路由选择协议:从基础入门到实战
  • ESP8266用AT指令实现连接MQTT
  • 时间序列预测领域公开数据集数据集下载
  • react 样式管理方案除了 styled-components,还有什么推荐的
  • ES6指北【2】—— 箭头函数
  • 【node学习】协程
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 11111111
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Druid 在有赞的实践
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6核心特性
  • IP路由与转发
  • java概述
  • JSDuck 与 AngularJS 融合技巧
  • React中的“虫洞”——Context
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端设计模式
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 设计模式 开闭原则
  • 小程序开发之路(一)
  • 移动端唤起键盘时取消position:fixed定位
  • 最近的计划
  • #13 yum、编译安装与sed命令的使用
  • #Java第九次作业--输入输出流和文件操作
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)Nginx简介和安装教程
  • (20050108)又读《平凡的世界》
  • (8)STL算法之替换
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (篇九)MySQL常用内置函数
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (数据结构)顺序表的定义
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)u-boot-nand.bin的下载
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模