一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了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无人机扫描条形码相关推荐

  1. 通过PC获取Tello无人机视频图像和发送控制命令

    一直想使用电脑控制tello无人机飞行,研究了一天,参考了一下其他博主的方法,系统使用的是Windows 10,需要安装的软件列表如下,运行起来以后发现UDP视频流延时至少半分钟,所以不能通过看视频来 ...

  2. 大疆睿炽Tello EDU无人机python操控之一——使用socket调试工具控制Tello EDU无人机

    使用socket调试工具控制Tello EDU无人机 最近工作一直在搞大疆之前推出的一款用于编程教育的无人机–Tello EDU,就是下图的这个小东西: 我们可能都知道在Tello EDU推出之前还有 ...

  3. 大疆睿炽Tello EDU无人机python操控之三——使用easyGUI模拟操控界面控制Tello EDU

    使用easyGUI模拟操控界面控制Tello EDU 说到easyGUI这个模块,大家应该都不陌生了,模块名中有个"easy",是的,这代表它用起来很简单:这个模块就是一个能够轻易 ...

  4. tello通信_鸿蒙HarmonyOS and 大疆Tello 无人机 BUILD SUCCESS

    鸿蒙HarmonyOS and 大疆Tello 无人机 BUILD SUCCESS 发布于 2020-11-19 18:55 3028浏览 3收藏 利用鸿蒙Hispark WIFI IOT 套件控制大 ...

  5. python条形码识别系统_基于Python与Zbar的无人机盘点条形码识别研究

    2018 年 第 6 期 第 4 0 卷 总 第 2 8 8 期 物流工程与管理 LOGISTICS ENGINEERING AND MANAGEMENT 物流技术 doi :10.3969/ j . ...

  6. js和html5实现扫描条形码

    最近项目有个功能,需要实现扫描条形码,最开始想到的是利用html5,发现html5有个getUserMedia属性,可以调用手机的摄像头,但是有个问题,网页中的摄像无法拉大光圈,焦距不好控制,近距离无 ...

  7. 用 .NET 启动你的 DJI Ryze Tello 无人机

    大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选. 通过 UDP 协议调用 DJI Ryze Tello SDK 可以让 DJ ...

  8. Python 探索 Tello 无人机的奇妙世界

    介绍: 如果您希望使用 Tello 无人机拍摄照片并将其传输到您的 PC,那么您走运了! 只需几行 Python 代码,您就可以轻松控制您的 Tello 拍照,然后将 JPEG 图片传输到您的计算机. ...

  9. 用 .NET 启动你的 大疆 Ryze Tello 无人机

    目录 1..NET UDP 编程 1.什么是 UDP 2.C# 调用 UDP Client 2.用 .NET Polyglot Notebook 连接 DJI Ryze Tello 3.用 .NET ...

  10. Tello无人机飞控(Python)程序设计

    Tello无人机飞控(Python)程序设计总结 1.py飞控库介绍 tello的几个不同的飞控库有什么区别吗,用哪个好些? Tello的几个不同飞控库主要是针对Python开发者提供的控制无人机的工 ...

最新文章

  1. php+php-fom+nginx配置参数调优详解
  2. Java开发怎么达到年薪 50w ?我有一些想法和建议
  3. 关于添加图片到svg中,rails下使用js, 用parseFloat来调整force.on时的位置
  4. 部署egg需要用到pm2吗_使用宝塔面板部署校园综合服务平台项目
  5. python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解
  6. 第一章 数据挖掘基础
  7. 堆积柱形图显示总数_送你一份堆积柱形图小点心,请收下~
  8. 深度学习之卷积和反卷积
  9. 高级Javascript调试——console.table()
  10. 现代软件工程讲义 如何提出靠谱的项目建议
  11. sonic——可替代Elasticsearch的简单搜索引擎
  12. 20181114 Redis
  13. python怎么导入txt文件-python – 如何一次读取和附加到文本文件?
  14. 实现网页页面跳转的几种方法(meta标签、js实现、php实现)
  15. Spotfire 聚合筛选 会污损行数据
  16. python学习-02(数据类型、字符串、列表、元祖、字典)
  17. Codeforces Global Round 12 B. Balls of Steel 曼哈顿距离
  18. Gavin老师Transformer直播课感悟 - BERT多任务Fine-tuning案例实战
  19. R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
  20. 网盘副业项目,睡后躺赚,日入200+

热门文章

  1. FLASH透明背景代码大全
  2. html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
  3. 【学习】从零开始的Android音视频开发(6)——MediaPlayerService中BinderDriver、创建播放器过程、建立StageFright层交互
  4. 量子机器学习(QML)(一):量子计算基础
  5. Predator:比微软Kinect更强的视频追踪算法——来自捷克博士论文
  6. linux压缩zip下载,linux下wget下载文件到指定目录,解压zip文件,解压与压缩总结...
  7. 计算机硬件报警声音,电脑开机报警声音大全详解及处理
  8. 钢板弹簧matlab,Matlab/GUI在钢板弹簧悬架设计中的应用
  9. UOJRoundPLUS+
  10. android按钮半透明