控制Tello无人机扫描条形码
一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了Tello,买来过了一把瘾。顺便试了下集成条形码扫描功能。现在有很多仓储管理会用到无人机来扫码做库存盘点。
Python 3控制Tello无人机
DJI的官方GitHub仓库里已经放了示例代码dji-sdk/Tello-Python
。不过这份代码只能支持Python 2.7,而且也好久无人维护。要在Python 3上运行这份代码需要做些修改。
首先获取源码:
git clone https://github.com/dji-sdk/Tello-Python.git
在vscode中打开工程,通过全局查找替换以下部分:
# 2.7
import Tkinter
# 3.7
import tkinter# 2.7
print ""
# 3.7
print()# 2.7
packet_data = ""
# 3.7
packet_data = bytes()
另外,h264解码库需要重新编译成Python 3的版本。我的环境是Windows,首先下载编译vcpkg
:
git clone https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
然后通过vcpkg安装ffmpeg
:
vcpkg.exe install ffmpeg:x64-windows
接下来编译h264解码库的Python模块:
git clone https://github.com/DaWelter/h264decoder.git
cd h264decoder
python setup.py build_ext --cmake-args="-DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake"
现在可以用Python 3正常运行Tello的示例代码了:
python3 main.py
集成Python条形码识别SDK
条形码识别会占用CPU,如果运行在Python的线程中,由于Python的GIL会导致视频流卡顿。用Dynamsoft Python条形码识别SDK可以避免这种情况。因为提供的视频流解码接口是运行在C/C++线程上的:
- start_video_mode()
- append_video_frame()
- stop_video_mode()
安装Python barcode SDK:
pip install dbr
在tello.py
文件中创建BarcodeReader
对象:
from dbr import *
self.reader = BarcodeReader()
self.reader.init_license('LICENSE-KEY') # 获取license: https://www.dynamsoft.com/customer/license/trialLicense
设置参数以及回调函数:
parameters = self.reader.init_frame_decoding_parameters()
self.frameWidth = 640 # max: 960
self.frameHeight = 480 # max: 720
self.results = None
parameters.image_pixel_format = EnumImagePixelFormat.IPF_RGB_888
parameters.max_queue_length = 2
parameters.max_result_queue_length = 2
parameters.width = self.frameWidth
parameters.height = self.frameHeight
parameters.stride = self.frameWidth * 3
parameters.auto_filter = 1
self.reader.start_video_mode(parameters, self.on_barcode_result)
已知Tello的摄像头是720P的。我准备把得到的图像缩小到640x480。
在回调函数中保存结果,用于UI绘制:
def on_barcode_result(self, data):self.results = data
找到视频流接收函数_receive_video_thread()
。把获得的帧缩小并放到解码队列里:
for frame in self._h264_decode(packet_data):self.frame = cv2.resize(frame, (self.frameWidth, self.frameHeight))try:ret = self.reader.append_video_frame(self.frame)except:pass
最后在析构函数中调用stop_video_mode()
:
def __del__(self):self.reader.stop_video_mode()
测试
我在办公室里做了测试。从显示效果来看,不是很理想,在光线较差的环境中,图像没有对焦:
此外,悬停也会出现问题。Tello无人机在办公室里悬停会漂移。
源码
https://github.com/yushulx/tello-drone
控制Tello无人机扫描条形码相关推荐
- 通过PC获取Tello无人机视频图像和发送控制命令
一直想使用电脑控制tello无人机飞行,研究了一天,参考了一下其他博主的方法,系统使用的是Windows 10,需要安装的软件列表如下,运行起来以后发现UDP视频流延时至少半分钟,所以不能通过看视频来 ...
- 大疆睿炽Tello EDU无人机python操控之一——使用socket调试工具控制Tello EDU无人机
使用socket调试工具控制Tello EDU无人机 最近工作一直在搞大疆之前推出的一款用于编程教育的无人机–Tello EDU,就是下图的这个小东西: 我们可能都知道在Tello EDU推出之前还有 ...
- 大疆睿炽Tello EDU无人机python操控之三——使用easyGUI模拟操控界面控制Tello EDU
使用easyGUI模拟操控界面控制Tello EDU 说到easyGUI这个模块,大家应该都不陌生了,模块名中有个"easy",是的,这代表它用起来很简单:这个模块就是一个能够轻易 ...
- tello通信_鸿蒙HarmonyOS and 大疆Tello 无人机 BUILD SUCCESS
鸿蒙HarmonyOS and 大疆Tello 无人机 BUILD SUCCESS 发布于 2020-11-19 18:55 3028浏览 3收藏 利用鸿蒙Hispark WIFI IOT 套件控制大 ...
- python条形码识别系统_基于Python与Zbar的无人机盘点条形码识别研究
2018 年 第 6 期 第 4 0 卷 总 第 2 8 8 期 物流工程与管理 LOGISTICS ENGINEERING AND MANAGEMENT 物流技术 doi :10.3969/ j . ...
- js和html5实现扫描条形码
最近项目有个功能,需要实现扫描条形码,最开始想到的是利用html5,发现html5有个getUserMedia属性,可以调用手机的摄像头,但是有个问题,网页中的摄像无法拉大光圈,焦距不好控制,近距离无 ...
- 用 .NET 启动你的 DJI Ryze Tello 无人机
大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选. 通过 UDP 协议调用 DJI Ryze Tello SDK 可以让 DJ ...
- Python 探索 Tello 无人机的奇妙世界
介绍: 如果您希望使用 Tello 无人机拍摄照片并将其传输到您的 PC,那么您走运了! 只需几行 Python 代码,您就可以轻松控制您的 Tello 拍照,然后将 JPEG 图片传输到您的计算机. ...
- 用 .NET 启动你的 大疆 Ryze Tello 无人机
目录 1..NET UDP 编程 1.什么是 UDP 2.C# 调用 UDP Client 2.用 .NET Polyglot Notebook 连接 DJI Ryze Tello 3.用 .NET ...
- Tello无人机飞控(Python)程序设计
Tello无人机飞控(Python)程序设计总结 1.py飞控库介绍 tello的几个不同的飞控库有什么区别吗,用哪个好些? Tello的几个不同飞控库主要是针对Python开发者提供的控制无人机的工 ...
最新文章
- php+php-fom+nginx配置参数调优详解
- Java开发怎么达到年薪 50w ?我有一些想法和建议
- 关于添加图片到svg中,rails下使用js, 用parseFloat来调整force.on时的位置
- 部署egg需要用到pm2吗_使用宝塔面板部署校园综合服务平台项目
- python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解
- 第一章 数据挖掘基础
- 堆积柱形图显示总数_送你一份堆积柱形图小点心,请收下~
- 深度学习之卷积和反卷积
- 高级Javascript调试——console.table()
- 现代软件工程讲义 如何提出靠谱的项目建议
- sonic——可替代Elasticsearch的简单搜索引擎
- 20181114 Redis
- python怎么导入txt文件-python – 如何一次读取和附加到文本文件?
- 实现网页页面跳转的几种方法(meta标签、js实现、php实现)
- Spotfire 聚合筛选 会污损行数据
- python学习-02(数据类型、字符串、列表、元祖、字典)
- Codeforces Global Round 12 B. Balls of Steel 曼哈顿距离
- Gavin老师Transformer直播课感悟 - BERT多任务Fine-tuning案例实战
- R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
- 网盘副业项目,睡后躺赚,日入200+
热门文章
- FLASH透明背景代码大全
- html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
- 【学习】从零开始的Android音视频开发(6)——MediaPlayerService中BinderDriver、创建播放器过程、建立StageFright层交互
- 量子机器学习(QML)(一):量子计算基础
- Predator:比微软Kinect更强的视频追踪算法——来自捷克博士论文
- linux压缩zip下载,linux下wget下载文件到指定目录,解压zip文件,解压与压缩总结...
- 计算机硬件报警声音,电脑开机报警声音大全详解及处理
- 钢板弹簧matlab,Matlab/GUI在钢板弹簧悬架设计中的应用
- UOJRoundPLUS+
- android按钮半透明