《K230 從熟悉到...》識別機器碼(AprilTag)

《K230 從熟悉到...》識別機器碼(aprirltag)

  • tag id

《廬山派 K230 從熟悉到...》 識別機器碼(AprilTag)

AprilTag是一種基于二維碼的視覺標記系統,最早是由麻省理工學院(MIT)在2008年開發的。AprilTag的設計目標是為機器人視覺系統提供快速、可靠的視覺標記,特別適用于定位和跟蹤應用。相比二維碼和一維碼,AprilTag有著更高的精度和更強的魯棒性。

AprilTag通過在正方形的圖案中使用獨特的黑白圖案來進行信息編碼。與二維碼不同,AprilTag的特點是它通過不同的標記ID來標識不同的標簽,本身還包括誤差修正能力,能夠在一定程度上適應環境噪聲和圖像變形。一個AprilTag一般由一個黑色的邊框和一組內部的二進制編碼區域組成。每個AprilTag的編碼方式是不同的,也就是說每個標記都有唯一的ID。

在這里插入圖片描述

tag id

import time, os, sysfrom media.sensor import *
from media.display import *
from media.media import *
import time, math, os, gc, syspicture_width = 800
picture_height = 480sensor_id = 2
sensor = None# 顯示模式選擇:可以是 "VIRT"、"LCD" 或 "HDMI"
DISPLAY_MODE = "LCD"# 根據模式設置顯示寬高
if DISPLAY_MODE == "VIRT":# 虛擬顯示器模式DISPLAY_WIDTH = ALIGN_UP(1920, 16)DISPLAY_HEIGHT = 1080
elif DISPLAY_MODE == "LCD":# 3.1寸屏幕模式DISPLAY_WIDTH = 800DISPLAY_HEIGHT = 480
elif DISPLAY_MODE == "HDMI":# HDMI擴展板模式DISPLAY_WIDTH = 1920DISPLAY_HEIGHT = 1080
else:raise ValueError("未知的 DISPLAY_MODE,請選擇 'VIRT', 'LCD' 或 'HDMI'")# 注意!與find_qrcodes不同,find_apriltags方法無需對圖像進行鏡像校正。# apriltag代碼支持最多6個標簽族,可以同時處理多個標簽。
# 返回的標簽對象將包含標簽族和標簽族內的標簽ID。tag_families = 0
tag_families |= image.TAG16H5 # comment out to disable this family
#tag_families |= image.TAG25H7 # comment out to disable this family
#tag_families |= image.TAG25H9 # comment out to disable this family
#tag_families |= image.TAG36H10 # comment out to disable this family
#tag_families |= image.TAG36H11 # comment out to disable this family (default family)
#tag_families |= image.ARTOOLKIT # comment out to disable this family# 標簽族之間有什么區別?例如,TAG16H5標簽族是一個4x4的正方形標簽,
# 這意味著它可以在較遠的距離檢測到,而TAG36H11標簽族是6x6的正方形標簽。
# 然而,較低的H值(H5相比H11)意味著4x4標簽的誤識別率要比6x6標簽高得多。
# 所以,除非有特定需要,否則使用默認的TAG36H11標簽族。def family_name(tag):if(tag.family() == image.TAG16H5):return "TAG16H5"if(tag.family() == image.TAG25H7):return "TAG25H7"if(tag.family() == image.TAG25H9):return "TAG25H9"if(tag.family() == image.TAG36H10):return "TAG36H10"if(tag.family() == image.TAG36H11):return "TAG36H11"if(tag.family() == image.ARTOOLKIT):return "ARTOOLKIT"try:# 構造一個具有默認配置的攝像頭對象sensor = Sensor(id=sensor_id)# 重置攝像頭sensorsensor.reset()# 無需進行鏡像翻轉# 設置水平鏡像# sensor.set_hmirror(False)# 設置垂直翻轉# sensor.set_vflip(False)# 設置通道0的輸出尺寸sensor.set_framesize(width=picture_width, height=picture_height, chn=CAM_CHN_ID_0)# 設置通道0的輸出像素格式為GRAYSCALE(灰度)sensor.set_pixformat(Sensor.GRAYSCALE, chn=CAM_CHN_ID_0)#sensor.set_pixformat(Sensor.RGB565, chn=CAM_CHN_ID_0)# 根據模式初始化顯示器if DISPLAY_MODE == "VIRT":Display.init(Display.VIRT, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, fps=60)elif DISPLAY_MODE == "LCD":Display.init(Display.ST7701, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)elif DISPLAY_MODE == "HDMI":Display.init(Display.LT9611, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)# 初始化媒體管理器MediaManager.init()# 啟動傳感器sensor.run()# 創建一個FPS計時器,用于實時計算每秒幀數fps = time.clock()while True:os.exitpoint()# 更新FPS計時fps.tick()# 捕獲通道0的圖像img = sensor.snapshot(chn=CAM_CHN_ID_0)# 查找并處理AprilTag標簽for tag in img.find_apriltags(families=tag_families):# 在圖像中繪制標簽的矩形框img.draw_rectangle([v for v in tag.rect()], color=(255, 0, 0))# 在標簽中心繪制十字img.draw_cross(tag.cx(), tag.cy(), color=(0, 255, 0))# 顯示標簽IDimg.draw_string_advanced(tag.cx(), tag.cy(), 32, str(tag.id()))print_args = (family_name(tag), tag.id(), (180 * tag.rotation()) / math.pi)print("Tag Family %s, Tag ID %d, rotation %f (degrees)" % print_args)if tag.id() == 3:print("啦~啦~la la")# 顯示捕獲的圖像,中心對齊,居中顯示Display.show_image(img, x=int((DISPLAY_WIDTH - picture_width) / 2), y=int((DISPLAY_HEIGHT - picture_height) / 2))gc.collect()print(fps.fps())except KeyboardInterrupt as e:print("用戶停止: ", e)
except BaseException as e:print(f"異常: {e}")
finally:# 停止傳感器運行if isinstance(sensor, Sensor):sensor.stop()# 反初始化顯示模塊Display.deinit()os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)time.sleep_ms(100)# 釋放媒體緩沖區MediaManager.deinit()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76544.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux驅動復習

應用層調用內核層函數稱為系統調用 1.硬件設備管理 1,字符設備驅動(一個一個字節)——芯片內部外設 :WDT,Timer,adc,iic,SPI,R,UART,LCD,CAMERA,USB,Keyboard,Mouse 2,塊設備驅動&a…

【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit(3)

1.問題描述: PC場景,青少年模式系統API不支持嗎? 解決方案: PC場景,青少年模式系統API不支持,另外文檔上的幾個API也不支持。 2.問題描述: 華為一鍵登錄 Beta7本地運行到手機可以拿到匿名手…

【gdutthesis模板】論文標題太長導致換頁問題解決

標題太長導致換頁問題解決方案如下: 調小下方數值即可

SAP學習筆記 - 豆知識18 - (TODO)Msg 番號 ME154 構成品目無法決定

1,現象 構成品目の決定は不可能です Msg 番號 ME154 構成品目無法決定 2,到Deepseek里找一下解決方案 SAP ME21N中錯誤「組件物料的確定不可行(ME154)」的解決步驟 此錯誤在創建分包采購訂單時出現,通常由于系統無…

10.多線程

預備知識 預備知識一 預備知識二 預備知識三 如何理解進程和線程的關系,舉一個生活中的例子 家庭:進程家庭成員:線程 每個家庭成員都會為這個家庭做貢獻,只不過大家都在做不同的事情(比如:我們在上學&…

Python入門(8):文件

1. 文件基本概念 文件:存儲在計算機上的數據集合,Python 通過文件對象來操作文件。 文件類型: 文本文件:由字符組成,如 .txt, .py 二進制文件:由字節組成,如 .jpg, .mp3 2. 文件打開與關閉…

市場交易策略優化與波動管理

市場交易策略優化與波動管理 在市場交易中,策略的優化和波動的管理至關重要。市場價格的變化受多種因素影響,交易者需要根據市場環境動態調整策略,以提高交易的穩定性,并有效規避市場風險。 一、市場交易策略的優化方法 趨勢交易策…

HTTP數據傳輸的幾個關鍵字Header

本文著重針對http在傳輸數據時的幾種封裝方式進行描述。 1. Content-Type(描述body內容類型以及字符編碼) HTTP的Content-Type用于定義數據傳輸的媒體類型(MIME類型),主要分為以下幾類: (一)、?基礎文本類型? text/plain? …

面向教育領域的實時更新RAG系統:核心模塊設計與技術選型實踐指南

目錄 面向教育領域的實時更新RAG系統:核心模塊設計與技術選型實踐指南 一、業務需求分析 二、系統架構設計(核心模塊) 三、核心模塊詳解與技術選型建議 (一)實時更新向量知識庫 (二)教材與…

k8s patch方法更新deployment和replace方法更新deployment的區別是什么

在Kubernetes中,patch 和 replace 方法用于更新資源(如 Deployment),但它們的實現方式和適用場景有顯著差異。以下是兩者的核心區別: 1. 更新范圍 replace 方法 完全替換整個資源配置。需要用戶提供完整的資源定義&…

解決安卓手機WebView無法直接預覽PDF的問題(使用PDF.js方案)

在移動端開發中,通過 webview 組件直接加載PDF文件時,不同平臺的表現差異較大: iOS & 部分安卓瀏覽器:可正常內嵌預覽(依賴系統內置PDF渲染能力) 大多數安卓設備:由于缺乏原生PDF插件&…

基于javaweb的SSM+Maven機房管理系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

7-6 混合類型數據格式化輸入

本題要求編寫程序,順序讀入浮點數1、整數、字符、浮點數2,再按照字符、整數、浮點數1、浮點數2的順序輸出。 輸入格式: 輸入在一行中順序給出浮點數1、整數、字符、浮點數2,其間以1個空格分隔。 輸出格式: 在一行中…

【GPIO8個函數解釋】

函數解釋 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 作用:將指定GPIO端口的所有寄存器恢復為默認值。這會清除之前對該端口的所有配置,使其回到初始狀態。使用方法:傳入要復位的GPIO端口指針,例如GPIOA、GPIOB等。 void GPIO_AF…

將圖表和表格導出為PDF的功能

<template><div><divref"pdfContent"style"position: relative; width: 800px; margin: 0 auto"><!-- ECharts 圖表 --><div id"chart" style"width: 100%; height: 400px" /><!-- Element UI 表格 …

C++中的鏈表操作

在C中&#xff0c;鏈表是一種常見的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點包含數據部分和指向下一個節點的指針。C標準庫&#xff08;STL&#xff09;中提供了std::list和std::forward_list兩種鏈表實現&#xff0c;分別對應雙向鏈表和單向鏈表。此外&am…

蛋白設計 ProteinMPNN

傳統方法的局限性是什么&#xff1f; 傳統蛋白質設計方法的局限性&#xff1a; 基于物理的傳統方法&#xff0c;例如羅塞塔&#xff0c;面臨計算難度&#xff0c;因為需要計算所有可能結構的能量&#xff0c;包括不需要的寡聚態和聚合態。 設計目標與顯式優化之間缺乏一致性通…

有哪些開源的視頻生成模型

1. 阿里巴巴通義萬相2.1&#xff08;WanX 2.1&#xff09; 技術架構&#xff1a;基于Diffusion Transformer&#xff08;DiT&#xff09;架構&#xff0c;結合自研的高效變分自編碼器&#xff08;VAE&#xff09;和Flow Matching訓練方案&#xff0c;支持時空上下文建模。參數…

【動態規劃】最長上升子序列模板

最長上升子序列 題目傳送門 一、題目描述 給定一個長度為 N 的數列&#xff0c;求數值嚴格單調遞增的子序列的長度最長是多少。 輸入格式 第一行包含整數 N。 第二行包含 N 個整數&#xff0c;表示完整序列。 輸出格式 輸出一個整數&#xff0c;表示最大長度。 數據范圍 …

LeetCode 891 -- 貢獻度思想

題目描述 子序列寬度之和 思路 ref 代碼 相似題 子數組范圍和 acwing