TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi
TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi 旨在帮助开发者在资源受限的边缘设备上部署轻量级深度学习模型。通过这个开源教程,用户可以轻松完成自定义物体检测模型的训练、格式转换以及在树莓派或 Android 手机上的实际运行。
传统 TensorFlow 模型往往体积庞大,难以在手机或树莓派等低功耗设备上实时运行。它利用 TensorFlow Lite 框架优化了模型推理速度并降低了算力需求,有效解决了边缘 AI 部署难的问题。特别值得一提的是,集成 Google Colab 云端训练流程后,用户无需本地配置复杂的 GPU 环境,只需上传数据集即可快速生成可部署的 .tflite 模型。
这套教程非常适合嵌入式开发者、创客以及人工智能初学者。无论是想在树莓派 3/4 上实现智能监控,还是在 Android 手机上开发视觉应用,这里都有详细的步骤指南和现成的 Python 代码支持。从图像识别到视频流处理,它让边缘计算变得触手可及,是学习移动端 AI 落地的优秀实践资源。
使用场景
一位智能家居爱好者计划利用树莓派摄像头搭建一套本地化的家庭安防系统,用于自动识别入侵者或宠物。
没有 TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi 时
- 必须依赖云端服务器处理图像数据,导致每月产生高额的 API 调用费和带宽成本。
- 在树莓派等低功耗设备上直接运行标准 TensorFlow 模型会占用过多内存,造成系统卡顿甚至死机。
- 视频流上传互联网存在隐私泄露风险,且网络波动会导致报警延迟,无法实现即时响应。
- 从零构建训练环境极其繁琐,缺乏针对边缘设备的优化指导,调试过程耗时耗力。
使用 TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi 后
- 借助 Google Colab 免费 GPU 资源即可完成模型训练与转换,显著降低了硬件投入成本。
- 模型被优化为轻量级 TFLite 格式,能在树莓派上流畅运行,实现低延迟的实时目标检测。
- 所有图像分析均在设备本地完成,数据不出内网,既保障了用户隐私又节省了网络流量。
- 项目提供了从训练到部署的全套 Python 代码及详细指南,开发者可快速将模型移植到手机或开发板。
该项目让开发者能够以极低的成本在边缘设备上实现高效的本地智能视觉应用。
运行环境要求
- Windows
- Raspberry Pi
推理无需 GPU,训练推荐使用 Google Colab 免费 GPU
未说明

快速开始
TensorFlow Lite 在 Android 和 Raspberry Pi 上的目标检测
训练您自己的 TensorFlow Lite 目标检测模型,并在 Raspberry Pi、Android 手机和其他边缘设备 (Edge devices) 上运行它们!
点击下方图标即可开始在 Google Colab 上进行训练,或者 点击此处直接进入提供逐步指导的 YouTube 视频。
简介
TensorFlow Lite (一种用于部署轻量级深度学习 (Deep Learning) 模型的优化框架) 是专为在资源受限的边缘设备 (Edge devices) 上部署轻量级深度学习模型而设计的优化框架。与常规 TensorFlow 模型相比,TensorFlow Lite 模型具有更快的推理速度 (Inference time),且所需的算力 (Processing power) 更少,因此可用于在实时应用 (Realtime applications) 中获取更快的性能。
本指南提供了如何训练自定义 TensorFlow 目标检测 (Object Detection) 模型的逐步说明,将其转换为 TensorFlow Lite 可用的优化格式,并在 Raspberry Pi 等边缘设备上运行它。它还提供了用于运行 TensorFlow Lite 模型以在图像、视频、网络流或网络摄像头馈送上执行检测的 Python 代码。
步骤 1. 训练 TensorFlow Lite 模型
使用 Google Colab(推荐)
训练、转换和导出 TensorFlow Lite 模型最简单的方法是使用 Google Colab。Colab 为您提供了一个免费的支持 GPU 的虚拟机 (Virtual Machine),托管在 Google 服务器上,并预装好了训练所需的库和包。
我编写了一个 Google Colab 笔记本,可用于训练自定义 TensorFlow Lite 模型。它涵盖了准备数据、配置模型以进行训练、训练模型、在测试图像上运行模型以及将其导出为可下载的 TFLite 格式的整个过程,以便您可以将其部署到自己的设备上。它使得训练自定义 TFLite 模型变得像上传图像数据集 (Dataset) 并在几块代码块上点击“播放”一样简单!
通过点击上方的图标在浏览器中打开 Colab 笔记本。按照笔记本中的说明开始训练您自己的模型。一旦模型训练完成并导出,请访问 设置 TFLite 运行时环境 部分,了解如何在您的 PC、Raspberry Pi、Android 手机或其他边缘设备上部署它。
使用本地 PC
本指南的旧版本展示了如何在您的 PC 上本地设置 TensorFlow 训练环境。请注意:这很繁琐,而且该指南已过时。这是本地训练指南的链接。
步骤 2. 在您的设备上设置 TFLite 运行时环境
一旦您拥有一个训练好的 .tflite 模型,下一步就是将其部署到计算机、Raspberry Pi 或 Android 手机等设备上。要运行该模型,您需要在设备上安装 TensorFlow 或 TensorFlow Lite 运行时 (Runtime),并设置 Python 环境和目录结构以运行您的应用程序。此仓库中的 deploy_guides 文件夹包含分步指南,展示如何在多种不同设备上设置 TensorFlow 环境。指南链接如下。
Raspberry Pi
遵循 Raspberry Pi 设置指南 在 Raspberry Pi 3 或 4 上安装 TFLite 运行时 (Runtime) 并运行 TensorFlow Lite 模型。本指南还展示了如何使用 Google Coral USB Accelerator 来大幅提高 Raspberry Pi 上量化模型 (Quantized models) 的速度。
Windows
遵循 Windows TFLite 指南 中的说明,使用 Anaconda 在您的 Windows PC 上设置 TFLite 运行时 (Runtime)!
macOS
即将推出!
Linux
即将推出!
Android
即将推出!
嵌入式设备 (Embedded Devices)
即将推出!
步骤 3. 运行 TensorFlow Lite 模型!
有四个 Python 脚本用于在图像、视频、网络流或网络摄像头画面 (webcam feed) 上运行 TensorFlow Lite object detection (目标检测) 模型。这些脚本基于 TensorFlow Lite 示例 GitHub 仓库 中提供的 label_image.py 示例。
- TFLite_detection_image.py
- TFLite_detection_video.py
- TFLite_detection_stream.py
- TFLite_detection_webcam.py
以下说明展示了如何运行这些脚本。以下说明假设您的 .tflite 模型文件和 labelmap.txt 文件位于您 tflite1 目录中的 TFLite_model 文件夹内,具体请参考 设置 TFLite 运行时环境 指南中的说明。
如果您想尝试使用 Google 提供的示例 TensorFlow Lite object detection (目标检测) 模型,只需在此处下载它 here,将其解压到 tflite1 文件夹,并重命名为 TFLite_model。然后,在运行脚本时使用 --modeldir=coco_ssd_mobilenet_v1_1.0_quant_2018_06_29 而不是 --modeldir=TFLite_model。
网络摄像头
请确保已将 USB 网络摄像头插入您的电脑。如果您使用的是带有内置摄像头的笔记本电脑,则无需插入 USB 网络摄像头。从 tflite1 目录,发出指令:
python TFLite_detection_webcam.py --modeldir=TFLite_model
初始化几秒后,会出现一个窗口显示网络摄像头画面。检测到的物体将实时显示 bounding boxes (边界框) 和标签。
视频
要运行视频检测脚本,发出指令:python TFLite_detection_video.py --modeldir=TFLite_model
将出现一个窗口,显示视频中连续的帧,并对每帧中的每个对象进行标记。按 'q' 关闭窗口并结束脚本。默认情况下,视频检测脚本将打开名为 'test.mp4' 的视频。要打开特定视频文件,请使用 --video 选项:
python TFLite_detection_video.py --modeldir=TFLite_model --video='birdy.mp4'
注意:视频检测的运行速度 FPS (帧率) 将慢于实时网络摄像头检测。这主要是因为从视频文件加载帧比从网络摄像头接收帧需要更多的处理器 I/O (输入/输出)。
网络流
要运行检测视频流(例如远程安全摄像头)中图像的脚本,发出指令:python TFLite_detection_stream.py --modeldir=TFLite_model --streamurl="http://ipaddress:port/stream/video.mjpeg"
初始化几秒后,会出现一个窗口显示视频流。检测到的物体将实时显示 bounding boxes (边界框) 和标签。
请确保更新 URL 参数为您安全摄像头正在使用的地址。如果流受到保护,必须包含认证信息。
如果 bounding boxes (边界框) 与检测到的物体不匹配,可能是未检测到流的分辨率。在这种情况下,您可以使用 --resolution 参数显式设置它:
python TFLite_detection_stream.py --modeldir=TFLite_model --streamurl="http://ipaddress:port/stream/video.mjpeg" --resolution=1920x1080
图像
要运行图像检测脚本,发出指令:python TFLite_detection_image.py --modeldir=TFLite_model
图像将显示出来,所有对象均已标记。按 'q' 关闭图像并结束脚本。默认情况下,图像检测脚本将打开名为 'test1.jpg' 的图像。要打开特定图像文件,请使用 --image 选项:
python TFLite_detection_image.py --modeldir=TFLite_model --image=squirrel.jpg
它还可以打开包含整个文件夹的图像,并对每张图像执行检测。文件夹中只能有图像文件,否则会发生错误。要指定哪个文件夹包含要执行检测的图像,请使用 --imagedir 选项:
python TFLite_detection_image.py --modeldir=TFLite_model --imagedir=squirrels
按任意键('q' 除外)前进到下一张图像。运行脚本时不要同时使用 --image 选项和 --imagedir 选项,否则会抛出错误。
要保存标记后的图像以及包含每张图像检测结果的文件,请使用 --save_results 选项。结果将保存到名为 <imagedir>_results 的文件夹中。如果您想检查模型在图像文件夹上的性能,并使用结果配合 calculate_map_catchuro.py 脚本来计算 mAP (平均精度均值),这将非常有用。例如:
python TFLite_detection_image.py --modeldir=TFLite_model --imagedir=squirrels --save_results
--noshow_results 选项将阻止程序显示图像。
查看所有命令选项
有关运行脚本时可用的选项的更多信息,请在调用它们时使用 -h 选项。例如:
python TFLite_detection_image.py -h
如果您遇到错误,请查看本指南的 常见问题解答部分。其中列出了常见错误及其解决方案。如果您能成功运行脚本,但未能检测到物体,最可能的原因是您的模型准确度不够。常见问题解答部分有关于如何解决此问题的进一步讨论。
示例
(敬请期待!)请参阅 examples 文件夹,了解如何在基本视觉应用中使用您的 TFLite 模型的示例。
常见问题
TensorFlow Object Detection API 和 TFLite Model Maker 有什么区别?
Google 提供了一套用于训练 TFLite 模型的 Colab 笔记本,称为 [TFLite Model Maker](https://www.tensorflow.org/lite/models/modify/model_maker)。虽然他们的目标检测笔记本简单明了且易于遵循,但使用 [TensorFlow Object Detection API](https://github.com/tensorflow/models/tree/master/research/object_detection) 来创建模型则提供了诸多优势:
- TFLite Model Maker 仅支持 EfficientDet 模型,其速度不如 SSD-MobileNet 模型快。
- 使用目标检测 API 训练模型通常能获得更好的模型精度。
- 目标检测 API 在模型和训练配置(如训练步数、学习率、模型深度和分辨率等)方面提供了显著更多的灵活性。
- Google 仍然 推荐使用目标检测 API 作为使用大型数据集训练模型的正式方法。
训练、迁移学习 (Transfer learning) 和微调 (Fine-tuning) 之间有什么区别?
在机器学习这样复杂的领域,使用正确的术语很重要。在本笔记本中,我使用“训练 (Training)"一词来描述教导模型识别自定义对象的过程,但我们实际上做的是“微调 (Fine-tuning)"。Keras 文档提供了一个 [很好的示例笔记本](https://keras.io/guides/transfer_learning/) 解释每个术语之间的区别。
以下是我对这些术语的定义尝试:
- 训练 (Training):获取一个具有随机初始化权重 (Weights) 的完整神经网络 (Neural network),传入图像数据,计算其在这些图像上预测产生的损失 (Loss),并使用反向传播 (Backpropagation) 调整网络中每个节点的权重以减少损失的过程。在此过程中,网络学习如何从图像中提取感兴趣特征并将这些特征与类别相关联。从头开始训练模型通常需要数百万次训练步骤和一个包含 100,000+ 张图像的大型数据集(如 ImageNet 或 COCO)。让我们把实际训练留给 Google 和 Microsoft 这样的公司吧!
- 迁移学习 (Transfer learning):采用一个已经训练好的模型,解冻 (Unfreezing) 模型的最后一层(即仅允许修改最后一层的权重),并使用新数据集重新训练最后一层,使其能够学习识别新类别。迁移学习利用了已训练模型深层中已经学到的特征提取能力。它利用提取的特征并对其进行重新分类以预测新类别。
- 微调 (Fine-tuning):微调类似于迁移学习,不同的是解冻并重训的层 (Layers) 更多。不仅仅是解冻最后一层,而是解冻相当数量的层(例如最后 20% 到 50% 的层)。这允许模型修改其部分特征提取层,以便提取与其试图识别的类别更相关的特征。本笔记本(以及 TensorFlow Object Detection API)使用的是微调。
一般来说,我喜欢使用“训练”这个词而不是“微调”,因为它对新手来说更直观、更容易理解。
我应该购买 Google Colab Pro 订阅吗?
如果你计划频繁使用 Colab 进行模型训练,我建议你购买 Colab Pro 订阅。它提供了几项优势:
- 空闲的 Colab 会话在超时断开连接之前保持连接的时间更长
- 允许同时运行多个 Colab 会话
- 优先访问启用 TPU 和 GPU 的虚拟机
- 虚拟机拥有更多的 RAM
Colab 会跟踪你使用的 GPU 时间量,一旦达到一定的使用时间,就会切断你使用启用 GPU 实例的权限。如果你收到消息告知你被切断了 GPU 实例的使用,那么这是一个很好的指标,表明你使用 Colab 的频率足以证明支付 Pro 订阅费用是合理的。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。