翻譯|使用教程|編輯:楊鵬連|2021-02-04 10:52:45.760|閱讀 360 次
概述:在本文中,我將分享如何使用Dynamsoft Barcode Reader實時檢測和解碼Tello無人機視頻流中的條形碼。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Dynamsoft Barcode Reader SDK一款多功能的條碼讀取控件,只需要幾行代碼就可以將條碼讀取功能嵌入到Web或桌面應用程序。這可以節省數月的開發時間和成本。能支持多種圖像文件格式以及從攝像機或掃描儀獲取的DIB格式。使用Dynamsoft Barcode Reader SDK,你可以創建強大且實用的條形碼掃描儀軟件,以滿足你的業務需求。
點擊下載Dynamsoft Barcode Reader最新版
在倉庫管理系統中,可以使用Drone自動掃描條形碼以進行庫存盤點。為了學習無人機駕駛并嘗試在空中進行條形碼掃描,我購買了Ryze Tello,這是由DJI提供動力的微型無人機。在本文中,我將分享如何使用Dynamsoft Barcode Reader實時檢測和解碼Tello無人機視頻流中的條形碼。
將Tello Video Sample從Python 2.7移植到Python 3.7
示例代碼dji-sdk / Tello-Python是Tello無人機控制的良好速成課程。但是,該存儲庫的維護似乎已停止,并且該代碼僅適用于Python 2.7。
由于不再支持Python 2,并且我正在使用Python 3.7,因此我必須更改Python代碼并重建相關的h264解碼庫,以便與Python 3兼容。
在Windows上運行Tello Video Sample的步驟
從DJI的GitHub存儲庫中獲取源代碼。
git clone //github.com/dji-sdk/Tello-Python.git
將項目導入到您的編碼工具。全局搜索并用以下代碼段替代Python 3.7:
# 2.7 import Tkinter # 3.7 import tkinter # 2.7 print "" # 3.7 print() # 2.7 packet_data = "" # 3.7 packet_data = bytes()要構建h264解碼庫,首先,通過vcpkg安裝ffmpeg :
git clone [//github.com/DaWelter/h264decoder.git](//github.com/DaWelter/h264decoder.git) cd h264decoder python setup.py build_ext --cmake-args="-DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake"
為什么要使用Dynamsoft Python條形碼SDK
條形碼掃描是一項占用大量CPU的操作,因此,在Python線程中運行它會遭受GIL的性能瓶頸的困擾。為了避免性能問題,Dynamsoft Python Barcode SDK提供了一組基于C / C ++本機線程實現的視頻解碼API:帶條形碼掃描的Tello無人機
安裝Dynamsoft Python的條碼SDK,這對于Python 3.6,3.7和3.8:pip install dbr
申請免費試用許可證以解鎖所有功能。
在tello.py中創建條形碼閱讀器對象:from dbr import * self.reader = BarcodeReader() self.reader.init_license('LICENSE-KEY')初始化參數并啟動視頻模式:
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。我們可以通過回調函數保存解碼結果,以便稍后進行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()通過幾行Python代碼,我實現了Tello無人機的條形碼掃描。讓我們嘗試一下Tello無人機GUI應用程序:
python main.py
環境如何影響無人機的視覺系統
當我在辦公室測試無人機的視頻流時,我發現圖像不清晰。
在Tello SDK用戶指南中沒有提到用于調整焦點的命令。
此外,即使我已經校準了IMU(慣性測量單元),泰洛( Tello)無人機在微光環境中徘徊時也很難保持靜止。
源代碼
//github.com/yushulx/tello-drone
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: