基于Transformers.js的实时视频物体识别

db3ba1b36e58fe7827f78095bbcbd9b1.png

本文由ScriptEcho平台提供技术支持

项目地址:传送门

实时视频物体识别:在浏览器中使用 YOLOv9

应用场景介绍

实时视频物体识别是一种计算机视觉技术,可以实时检测和识别视频流中的物体。该技术广泛应用于各种领域,例如:

  • 安全监控:检测可疑活动或人员。
  • 零售:识别客户并跟踪他们的购物行为。
  • 医疗:辅助诊断和治疗。
  • 自动驾驶:检测障碍物和行人。

代码基本功能介绍

本代码实现了一个实时视频物体识别应用程序,它利用 YOLOv9 模型在浏览器中本地运行。该应用程序具有以下功能:

  • 物体检测:识别视频流中的物体并绘制边界框。
  • 物体分类:识别检测到的物体并显示其类别标签。
  • 实时处理:连续处理视频流并实时显示结果。
  • 可定制:允许用户调整检测阈值和图像大小以优化性能。

功能实现步骤及关键代码分析说明

1. 模型和处理器的加载

const model = await AutoModel.from_pretrained(model_id);
const processor = await AutoProcessor.from_pretrained(model_id);

使用 AutoModelAutoProcessor 从 Hugging Face Hub 加载预训练的 YOLOv9 模型和处理器。

2. 用户界面和控件

<div id="controls">
  <div>
    <label>图片大小</label>
    (<label id="size-value">128</label>)
    <br />
    <input
      id="size"
      type="range"
      min="64"
      max="256"
      step="32"
      value="128"
      disabled
    />
  </div>
  <div>
    <label>阈值</label>
    (<label id="threshold-value">0.25</label>)
    <br />
    <input
      id="threshold"
      type="range"
      min="0.01"
      max="1"
      step="0.01"
      value="0.25"
      disabled
    />
  </div>
</div>

此部分创建用户界面,允许用户调整检测阈值和图像大小。

3. 视频流处理

navigator.mediaDevices.getUserMedia(
    { video: true }, // Ask for video
).then((stream) => {
    // Set up the video and canvas elements.
    video.srcObject = stream;
    video.play();

使用 navigator.mediaDevices.getUserMedia() 启动视频流,并将其分配给视频元素。

4. 渲染边界框和标签

function renderBox([xmin, ymin, xmax, ymax, score, id], [w, h]) {
  if (score < threshold) return; // Skip boxes with low confidence

  // Generate a random color for the box
  const color = COLOURS[id % COLOURS.length];

  // Draw the box
  const boxElement = document.createElement('div');
  boxElement.className = 'bounding-box';
  Object.assign(boxElement.style, {
    borderColor: color,
    left: 100 * xmin / w + '%',
    top: 100 * ymin / h + '%',
    width: 100 * (xmax - xmin) / w + '%',
    height: 100 * (ymax - ymin) / h + '%',
  })

  // Draw label
  const labelElement = document.createElement('span');
  labelElement.textContent = `${model.config.id2label[id]} (${(100 * score).toFixed(2)}%)`;
  labelElement.className = 'bounding-box-label';
  labelElement.style.backgroundColor = color;

  boxElement.appendChild(labelElement);
  overlay.appendChild(boxElement);
}

此函数根据模型输出绘制边界框和标签。它考虑了检测阈值和图像大小。

5. 实时处理循环

window.requestAnimationFrame(updateCanvas);

此代码启动一个实时处理循环,它不断从视频流中读取帧,处理它们并显示结果。

总结与展望

本代码展示了如何在浏览器中使用 YOLOv9 模型实现实时视频物体识别。它提供了可定制的界面,允许用户调整检测参数。

经验与收获:

  • 学习了如何使用 Hugging Face Transformers 库加载和使用预训练模型。
  • 了解了如何在浏览器中处理视频流。
  • 获得了实时物体识别的实际经验。

未来拓展与优化:

  • 探索其他物体识别模型,例如 Faster R-CNN 或 Mask R-CNN。
  • 集成图像增强技术以提高检测精度。
  • 优化代码以提高处理速度。
  • 开发一个移动应用程序版本。

获取更多Echos

本文由ScriptEcho平台提供技术支持

项目地址:传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354