ViT图像分类-中文-日常物品代码实例:添加摄像头实时流识别功能扩展教程
ViT图像分类-中文-日常物品代码实例添加摄像头实时流识别功能扩展教程重要提示本文基于阿里开源的ViT图像识别模型专注于中文日常物品分类。在原有静态图片识别的基础上我们将扩展摄像头实时识别功能让模型真正活起来。1. 项目概述与准备工作ViTVision Transformer是近年来计算机视觉领域的突破性技术它使用Transformer架构处理图像在图像分类任务上表现出色。阿里开源的这款中文日常物品分类模型专门针对中文场景下的常见物品进行了优化训练。原项目功能只能对静态图片进行分类识别本教程新增功能实现摄像头实时视频流识别让模型能够实时分析摄像头画面中的物品1.1 环境准备与快速检查在开始扩展功能前我们先确认基础环境正常运行# 检查Python环境 python --version # 检查OpenCV是否安装我们将用它处理摄像头 python -c import cv2; print(fOpenCV版本: {cv2.__version__}) # 检查PyTorch python -c import torch; print(fPyTorch版本: {torch.__version__})如果OpenCV没有安装可以通过以下命令安装pip install opencv-python1.2 理解原有代码结构先来看看原有的推理代码大致结构# 原推理.py的核心逻辑 import torch from transformers import ViTImageProcessor, ViTForImageClassification from PIL import Image import requests # 加载模型和处理器 processor ViTImageProcessor.from_pretrained(模型路径) model ViTForImageClassification.from_pretrained(模型路径) # 处理图片并进行推理 image Image.open(brid.jpg) inputs processor(imagesimage, return_tensorspt) outputs model(**inputs) logits outputs.logits predicted_class_idx logits.argmax(-1).item() print(预测结果:, model.config.id2label[predicted_class_idx])2. 摄像头实时识别功能实现现在我们来扩展摄像头实时识别功能让模型能够实时分析摄像头画面。2.1 创建实时识别脚本新建一个文件camera_inference.py添加以下代码import cv2 import torch from transformers import ViTImageProcessor, ViTForImageClassification from PIL import Image import numpy as np import time class ViTCameraClassifier: def __init__(self, model_path): 初始化模型和处理器 print(正在加载模型请稍候...) self.processor ViTImageProcessor.from_pretrained(model_path) self.model ViTForImageClassification.from_pretrained(model_path) self.model.eval() # 设置为评估模式 print(模型加载完成) def predict_image(self, image): 对单张图片进行预测 try: # 转换图像格式 if isinstance(image, np.ndarray): image Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # 预处理和推理 inputs self.processor(imagesimage, return_tensorspt) with torch.no_grad(): # 不计算梯度加快推理速度 outputs self.model(**inputs) # 获取预测结果 logits outputs.logits predicted_class_idx logits.argmax(-1).item() confidence torch.nn.functional.softmax(logits, dim1)[0][predicted_class_idx].item() return self.model.config.id2label[predicted_class_idx], confidence except Exception as e: print(f预测出错: {e}) return 识别失败, 0.0 def run_camera(self, camera_index0): 启动摄像头实时识别 cap cv2.VideoCapture(camera_index) if not cap.isOpened(): print(无法打开摄像头请检查连接) return print(摄像头已启动按 q 键退出) print(按 s 键保存当前帧图片) while True: # 读取摄像头帧 ret, frame cap.read() if not ret: print(无法获取视频帧) break # 创建显示副本 display_frame frame.copy() # 进行预测为了性能可以每N帧预测一次 label, confidence self.predict_image(frame) # 在画面上显示结果 result_text f{label} ({confidence:.2%}) cv2.putText(display_frame, result_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) # 显示帧率 cv2.putText(display_frame, 按 q 退出, (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2) # 显示画面 cv2.imshow(ViT实时物品识别, display_frame) # 键盘操作 key cv2.waitKey(1) 0xFF if key ord(q): # 按q退出 break elif key ord(s): # 按s保存图片 timestamp int(time.time()) cv2.imwrite(fcaptured_{timestamp}.jpg, frame) print(f图片已保存: captured_{timestamp}.jpg) # 释放资源 cap.release() cv2.destroyAllWindows() # 主程序 if __name__ __main__: # 初始化分类器 classifier ViTCameraClassifier(/root/模型路径) # 请替换为实际模型路径 # 启动摄像头识别 classifier.run_camera()2.2 优化版本添加帧 skipping 提高性能为了在普通硬件上获得更流畅的体验我们可以添加帧 skipping 机制# 在run_camera方法中添加帧 skipping def run_camera_optimized(self, camera_index0, skip_frames5): 优化版的摄像头识别通过跳帧提高性能 cap cv2.VideoCapture(camera_index) frame_count 0 while True: ret, frame cap.read() if not ret: break frame_count 1 # 每skip_frames帧进行一次预测 if frame_count % skip_frames 0: label, confidence self.predict_image(frame) # 显示逻辑保持不变 display_frame frame.copy() result_text f{label} ({confidence:.2%}) if frame_count % skip_frames 0 else 处理中... cv2.putText(display_frame, result_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow(ViT实时物品识别, display_frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()3. 完整使用教程3.1 快速开始摄像头识别确保环境准备就绪cd /root pip install opencv-python创建摄像头识别脚本nano /root/camera_inference.py将前面的代码粘贴进去保存退出修改模型路径 在代码中找到ViTCameraClassifier(/root/模型路径)将其中的路径替换为你的实际模型路径运行摄像头识别python /root/camera_inference.py3.2 使用技巧和注意事项摄像头选择默认使用摄像头0通常为内置摄像头如果有多个摄像头可以尝试不同的索引值0, 1, 2...性能优化建议# 如果识别速度慢可以增加跳帧数 classifier.run_camera(camera_index0) # 默认每帧都识别 classifier.run_camera_optimized(camera_index0, skip_frames10) # 每10帧识别一次常见问题解决摄像头无法打开# 尝试不同的摄像头索引 classifier.run_camera(0) # 第一个摄像头 classifier.run_camera(1) # 第二个摄像头识别速度慢增加skip_frames参数值降低摄像头分辨率在代码中添加cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)内存不足确保有足够的GPU内存如果使用GPU可以考虑降低处理频率或图像尺寸3.3 扩展功能批量处理和保存结果如果你想进一步扩展功能可以添加结果记录和批量处理def run_camera_with_logging(self, camera_index0, log_fileresults.log): 带日志记录的摄像头识别 cap cv2.VideoCapture(camera_index) frame_interval 30 # 每30帧记录一次结果 frame_count 0 with open(log_file, w, encodingutf-8) as f: f.write(时间戳,物品类别,置信度\n) while True: ret, frame cap.read() if not ret: break frame_count 1 if frame_count % frame_interval 0: label, confidence self.predict_image(frame) timestamp time.strftime(%Y-%m-%d %H:%M:%S) # 记录到文件 f.write(f{timestamp},{label},{confidence:.4f}\n) f.flush() # 立即写入文件 # 显示在画面上 display_frame frame.copy() result_text f{label} ({confidence:.2%}) cv2.putText(display_frame, result_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow(ViT实时物品识别, display_frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()4. 实际应用场景4.1 智能家居物品识别将摄像头部署在智能家居环境中可以实时识别家中物品# 家居物品监控示例 home_classifier ViTCameraClassifier(/root/模型路径) home_classifier.run_camera() # 监控客厅物品变化4.2 教育学习助手帮助学生识别日常物品特别是语言学习场景# 中英文物品识别教学 def teach_mode(self, camera_index0): 教学模式显示中文和英文标签 # 这里可以扩展显示中英文对照 # 需要有一个中英文标签映射表 pass4.3 零售商品识别用于小型零售店的商品识别和管理# 商品识别和库存管理 def retail_mode(self, camera_index0): 零售模式识别商品并更新库存 # 可以集成数据库操作 # 识别到商品后自动减少库存数量 pass5. 总结通过本教程我们成功将原本只能处理静态图片的ViT图像分类模型扩展为支持摄像头实时识别的强大工具。这个扩展不仅提升了模型的实用性还开辟了更多的应用场景。关键改进点实现了摄像头实时视频流处理添加了帧 skipping 机制优化性能提供了图形界面显示识别结果支持结果记录和保存功能使用建议对于性能较低的设备适当增加跳帧数根据实际应用场景调整识别频率可以考虑添加声音提示功能实现无障碍使用现在你可以让ViT模型睁开眼睛实时观察和理解周围的世界了。尝试对着摄像头展示不同的日常物品看看模型的识别效果如何获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

FireRedASR Pro实战:AI编程助手语音交互功能实现

FireRedASR Pro实战:AI编程助手语音交互功能实现

FireRedASR Pro实战:AI编程助手语音交互功能实现 1. 引言 你有没有过这样的经历?深夜赶项目,脑子里已经有了清晰的代码逻辑,但双手却因为长时间敲击键盘而酸痛,或者你正一边查阅文档一边构思,频繁地在不同…

2026/5/17 9:50:16 阅读更多 →
解决B站视频下载难题的Android工具:让普通用户实现高清无水印视频保存与管理

解决B站视频下载难题的Android工具:让普通用户实现高清无水印视频保存与管理

解决B站视频下载难题的Android工具:让普通用户实现高清无水印视频保存与管理 【免费下载链接】BiliDownload Android Bilibili视频下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownload 在移动互联网时代,B站作为优质视频内容平台&a…

2026/7/3 11:33:54 阅读更多 →
RexUniNLU在C++项目中的集成:高性能文本处理方案

RexUniNLU在C++项目中的集成:高性能文本处理方案

RexUniNLU在C项目中的集成:高性能文本处理方案 1. 为什么要在C项目中集成NLP能力? 在实际的C项目中,我们经常需要处理文本理解的需求。比如一个电商系统要自动提取商品描述中的关键信息,一个客服系统要理解用户的问题意图&#…

2026/7/4 20:28:00 阅读更多 →

最新新闻

129、轻量化 Head 设计:用 Depthwise Conv 加 1×1 Conv 替代标准检测头卷积

129、轻量化 Head 设计:用 Depthwise Conv 加 1×1 Conv 替代标准检测头卷积

129、轻量化 Head 设计:用 Depthwise Conv 加 1乘1 Conv 替代标准检测头卷积 从一次显存爆炸说起 去年秋天调一个YOLOv11n的工业检测模型,输入分辨率压到640640,batch size设到32,结果RTX 3090直接OOM。排查半天,发现检测头三个分支的卷积层占了将近40%的参数量。当时项目…

2026/7/6 5:32:38 阅读更多 →
5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南

5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南

5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为游戏中…

2026/7/6 5:30:38 阅读更多 →
AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划 一、Agent 不能直接替用户签名 AI Agent 能帮用户分析资产、构造交易、调用合约、提交治理提案。但链上操作一旦签名,就具备真实资产和权限后果。让 Agent 直接决定并发起签名,是非常危险的设计。…

2026/7/6 5:28:37 阅读更多 →
League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器

League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器

League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款基…

2026/7/6 5:28:37 阅读更多 →
3个关键设计如何让一个API征服六大音乐平台?

3个关键设计如何让一个API征服六大音乐平台?

3个关键设计如何让一个API征服六大音乐平台? 【免费下载链接】listen1-api One API for all free music in China 项目地址: https://gitcode.com/gh_mirrors/li/listen1-api 还在为音乐应用开发中对接多个平台API而头疼吗?面对网易云音乐、QQ音乐…

2026/7/6 5:26:37 阅读更多 →
AI 内容风格控制:风格一致不能牺牲事实边界

AI 内容风格控制:风格一致不能牺牲事实边界

AI 内容风格控制:风格一致不能牺牲事实边界 一、风格不是唯一目标 AI 内容生成常要求风格一致:更活泼、更专业、更像品牌语气。但如果为了风格牺牲事实边界,内容会变得危险。产品介绍、技术文档、行业报告、新闻摘要,都不能只追求…

2026/7/6 5:26:37 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻