树莓派上的tensorflow视频识别+远程视频流传输

本文详细介绍如何在树莓派上配置并运行基于TensorFlow的目标检测模型,包括下载模型、解决权限问题、测试代码及远程视频获取等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载models
第一步:git clone https://github.com/tensorflow/models.git models-master

这篇文章配置一定要注意一定不要把models-master文件夹cp至/usr/local/lib中去,直接在~/路径下的models-master进行之后的步骤,其中的bashrc也需要把路径改为/home/pi/models-master/object-detection/models,因为后续需要将下载的模型导入,并且需要在models-master文件夹中编写调用的py文件,如果在/usr/local/lib路径则会显示各种permission denied的问题,因此切记不用把models-master文件移至/usr/local/中。如果导入了就只好把/usr/路径下的models文件夹移至/home/pi/,然后sudo chown -R pi:pi /home/pi/models-master。了解了以后按照如下教程安装
https://blog.youkuaiyun.com/int93/article/details/79066259就可以了。
官网上说的cocoapi我安装时出了问题,也就没有继续make cocoapi,cocoapi那一步略过直接做models,完成。models下了将近一个小时。

2.下载ssd-mobilenet
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md下载ssd_mobilenet_v1_coco,我下下来的是2018-01-28,然后把它移至models文件下。进行下一步操作。

3.代码测试
https://www.jianshu.com/p/ea5abe01aaf1
借用了这篇文章提供的源码,我是将detect.py和ssd_mobilenet_v1_coco_2018_01_28.tar.gz放至model-master文件夹而不是models文件夹。我放在models会报一个tensorflow.python找不到keras模块的错误,并且在models下执行import tensorflow会报关于keras的错,原因不详。内存占用率一直在80%附近,跟原作者的差不多,跑久了会自己断开远程连接。

可以顺利地识别出摄像头拍到的一些物体啦:

 

远程获取视频:vlc播放器装在windows上。

1.将树莓派做成流视频服务器:https://blog.youkuaiyun.com/chenxing109/article/details/85071881,视频放在/live/mediaServer目录下就可以了,live555是开源的。

2.读取树莓派摄像头视频的服务器:https://forum.synology.com/enu/viewtopic.php?f=82&t=98870
作者说自己是pi2,我pi3的话按照步骤做下来有报错的地方全部忽略继续执行下一步,可以得到视频,会有大概3s的延迟。现在的想法是把视频传给gpu,这样时延太长了,3s传输时延再加上每帧识别的时延,还有物理回传。

h264:图像压缩不知道里面实现了没有。

### 构建基于树莓派的遥控车项目的教程 构建基于树莓派的遥控车是一个非常有趣的项目,它结合了硬件装配、软件开发以及网络通信等多个领域的内容。以下是关于如何构建这样一个系统的详细介绍。 #### 1. **硬件准备** 为了实现一个完整的树莓派遥控车项目,需要以下主要硬件组件: - 树莓派(推荐使用性能较强的型号如树莓派4B) - 大型遥控底盘(建议比例为1:10的大号模型车底座) - L298N直流电机驱动板用于控制车轮电机 - SG90舵机×2(通常用于云台摄像机方向调整) - 树莓派CSI接口摄像头模块(广角镜头更佳) - ME909s-821华为4G模块或者类似的无线通讯设备来支持远程连接[^1] - DC-DC降压转换器以稳定供电环境 - 杜邦线若干以及其他必要的电子工具比如螺丝刀等 #### 2. **基础搭建与测试** 在实际编码前先完成物理层面的基础建设非常重要。按照官方文档指示正确安装所有部件并确认其正常运作至关重要。例如,在开始编写任何代码之前,请确保L298N能够有效驱动两个小型直流电动机旋转,并验证SG90微型伺服是否能按预期角度摆动。 #### 3. **软件配置** ##### a) 系统初始化设置 首先更新操作系统至最新版本,并启用SSH服务以便后续可以通过互联网访问该装置。 ```bash sudo apt update && sudo apt upgrade -y sudo raspi-config # Enable SSH here under Interfacing Options ``` ##### b) 安装必要依赖库 对于视频流传输部分可能需要用到motion或mjpg-streamer这样的开源程序包;而要让网页端可以直接发送指令给底层硬件,则需考虑Flask框架配合JavaScript AJAX请求处理逻辑。 ```bash pip install flask opencv-python-headless numpy git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/ make ./start.sh ``` ##### c) 开发核心应用 创建Python脚本来监听HTTP GET/POST消息从而解析用户的动作命令并将这些信号转化为相应的GPIO电平变化传递给外部执行机构。下面给出一段简单的伪代码作为参考起点: ```python from flask import Flask, render_template_string, request import RPi.GPIO as GPIO import time app = Flask(__name__) @app.route('/') def index(): return ''' <html> <body> <h1>Remote Control Car</h1> <button onclick="sendCommand('forward')">Forward</button><br/> <button onclick="sendCommand('backward')">Backward</button><br/> <!-- More buttons... --> <script type="text/javascript"> function sendCommand(cmd){ fetch('/move?direction=' + cmd); } </script> </body> </html> ''' @app.route('/move', methods=['GET']) def move(): direction = request.args.get('direction') if direction == 'forward': forward() elif direction == 'backward': backward() return '', 204 def setup_gpio(): global IN1,IN2,ENA IN1=6; IN2=13 ; ENA=5 GPIO.setmode(GPIO.BCM) GPIO.setup(IN1,GPIO.OUT); GPIO.output(IN1,False) GPIO.setup(IN2,GPIO.OUT); GPIO.output(IN2,False) GPIO.setup(ENA,GPIO.OUT) def forward(): p.ChangeDutyCycle(70) GPIO.output(IN1,True) GPIO.output(IN2,False) def backward(): p.ChangeDutyCycle(70) GPIO.output(IN1,False) GPIO.output(IN2,True) setup_gpio() p = GPIO.PWM(ENA,1000) p.start(0) try: app.run(host='0.0.0.0', port=8080) finally: cleanup() def cleanup(): p.stop() GPIO.cleanup() ``` 此段代码仅展示了一个基本概念,实际部署时还需要加入更多错误检测机制及优化用户体验的设计思路[^2]。 #### 4. **高级特性扩展** 一旦基本功能得以实现后,还可以进一步增加诸如语音识别、自动避障等功能使整个作品更加智能化。利用TensorFlow Lite或其他轻量化机器学习框架可以在本地运行物体探测算法帮助车辆避开障碍物[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值