控制Tello无人机扫描条形码「建议收藏」

控制Tello无人机扫描条形码「建议收藏」一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了Tello,买来过了一把瘾。顺便试了下集成条形码扫描功能。现在有很多仓储管理会用到无人机来扫码做库存盘点。Python3控制Tello无人机DJI的官方GitHub仓库里已经放了示例代码dji-sdk/Tello-Python。不过这份代码只能支持Python2.7,而且也好久无人维护。要在Python3上运行这份代码需要做些修改。首先获取源码:gitclonehttps://github.com/dji-sdk/Tello-Py

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了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的。我准备把得到的图像缩小到640×480。

在回调函数中保存结果,用于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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170561.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java静态内部类和非静态内部类的区别_静态内部类有什么问题

    java静态内部类和非静态内部类的区别_静态内部类有什么问题一、非静态内部类:1、变量和方法不能声明为静态的。(类的编译顺序:外部类–静态方法或属性–内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解)2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.Bb=newA().newB();3、内部类可以引用外部类的静态或者非静态属性或者方法。二、静态内部类:1、属性和方法可以声明为静态的或者非静态的…

    2022年10月11日
  • mac idea 快捷键设置

    mac idea 快捷键设置macidea快捷键设置IntelliJIDEA(简称IDEA)是一款非常优秀的开发工具,有“最好的Java开发工具”之名。IntelliJIDEA–>Preferences–>keymap在右侧面板中的Keymaps下拉选项中选择Eclipse(MacOSX10.5+)apply–>ok——–mac常用快捷键说明——–Mac键盘符号和修饰键说明⌘Command⇧Sh

  • tcp协议的三次握手和四次挥手_tcp为什么是四次挥手

    tcp协议的三次握手和四次挥手_tcp为什么是四次挥手详解TCP协议三次握手四次挥手

  • 查看GCC版本_qt版本

    查看GCC版本_qt版本查看交叉编译器的GCC版本:hedy@ubuntu:~/u-boot$arm-poky-linux-gnueabi-gcc-v查看本地编译器的GCC版本:hedy@ubuntu:~/u-boot$gcc-vhedy@ubuntu:~/u-boot$whicharm-poky-linux-gnueabi-gcc/opt/fsl-imx-fb/4.1.15-2.1.0/s…

  • 防火墙OPNsense安装「建议收藏」

    防火墙OPNsense安装0.前言下载链接:https://opnsense.org/download/下载镜像,安装到虚拟机里。1.安装配置要求,需要两个网络适配器,一个外网,一个内网(也就是一个局域网,一个广域网)启动后,让页面自启,等到有倒计时的页面时,有5秒的倒计时自动检测,这里不要自动检测,直接回车对广域网wan和局域网lan进行命名wan:le0lan:le1OPNsense进入了LiveDemo模式,这时如果你用root登陆,所有的功能都支持,但所有的存储

  • ping不是内部或外部命令也不是可运行win10_电脑关掉防火墙仍然ping不通

    ping不是内部或外部命令也不是可运行win10_电脑关掉防火墙仍然ping不通前段时间配置Java环境将Path配置错误了计算机右键点击属性高级系统设置->环境变量系统变量编辑Path添加语句;C:\Windows\System32重新打开cmdpingwww.baidu.comnetstat-a出现上图表示配置成功…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号