chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

拳力以赴!基于 RT-Thread 與瑞薩 VisionBoard 的 AIoT 猜拳系統(tǒng)實(shí)戰(zhàn) | 技術(shù)集結(jié)

RT-Thread官方賬號(hào) ? 2025-09-06 10:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本項(xiàng)目的題目為: 石頭剪刀布猜拳識(shí)別。本項(xiàng)目實(shí)現(xiàn)了基本猜拳識(shí)別、根據(jù)識(shí)別 猜拳結(jié)果,與機(jī)器內(nèi)的手勢(shì)對(duì)比,根據(jù)結(jié)果控制舵機(jī)的行為,并且將識(shí)別的結(jié)果同步顯示在上位機(jī)。

目錄


項(xiàng)目概述


硬件清單


舵機(jī)控制引腳


軟件與運(yùn)行環(huán)境


固件編譯


創(chuàng)建數(shù)據(jù)集


模型訓(xùn)練


代碼結(jié)構(gòu)與主要函數(shù)


使用方法


常見(jiàn)問(wèn)題


項(xiàng)目源碼

1 項(xiàng)目概述


目標(biāo): 在3秒以內(nèi)識(shí)別猜拳的結(jié)果,并且根據(jù)猜拳輸贏控制舵機(jī)旋轉(zhuǎn),將識(shí)別結(jié)果顯示在上位機(jī)

平臺(tái): 瑞薩visionboard(攝像頭、GPIO)

核心思路:

通過(guò)瑞薩visionboard采集照片數(shù)據(jù)作為數(shù)據(jù)集進(jìn)行模型訓(xùn)練

將采集的數(shù)據(jù)集通過(guò)edge impulse進(jìn)行訓(xùn)練

使用mqttx接受來(lái)自瑞薩visionboard的識(shí)別數(shù)據(jù)

根據(jù)識(shí)別猜拳結(jié)果控制舵機(jī)行為

使用手冊(cè): RA8D1 Group User’s Manual: Hardware(https://www.renesas.cn/zh/document/mah/ra8d1-group-users-manual-hardware?r=25456556

使用燒寫(xiě)工具: Renesas Flash Programmer V3.12(https://en.freedownloadmanager.org/Windows-PC/Renesas-Flash-Programmer.html

openmv固件: openmv固件(https://github.com/RT-Thread-Studio/sdk-bsp-ra8d1-vision-board

2 硬件清單


瑞薩visionboard開(kāi)發(fā)板(攝像頭)

攝像頭(RGB565,工作分辨率 320×240,ov5640)

360度 SG90舵機(jī)

3 舵機(jī)控制引腳


P008 —> 舵機(jī)

P008地址: 0x4040_0000 + 0x0020 × m(參考RA8D1 Group User’s Manual: Hardware 655頁(yè))

4 軟件與運(yùn)行環(huán)境


openmv固件(https://github.com/RT-Thread-Studio/sdk-bsp-ra8d1-vision-board

主要依賴: sensor、time、tf、network、uctypes

5 固件編譯


從github(https://github.com/RT-Thread-Studio/sdk-bsp-ra8d1-vision-board)倉(cāng)庫(kù)上將代碼拉取到本地

運(yùn)行鏈接腳本后,進(jìn)入到 sdk-bsp-ra8d1-vision-board-master\projects\vision_board_openmv,打開(kāi) RT-Thread Env Tool,輸入 scons —target=mdk5

項(xiàng)目生成后在C++ 預(yù)處理加上MICROPYTHON_USING_UCTYPES 的 define

(可以在sdk-bsp-ra8d1-vision-board-master\projects\vision_board_openmv\packages\micropython-v1.13.0\port\mpconfigport.h查看定義),

編譯后在objects文件夾下得到rtthread.hex的openmv固件

使用Renesas Flash Programmer V3.12 燒寫(xiě)固件,將 Enable address check of program file 選項(xiàng)去除勾選

6 創(chuàng)建數(shù)據(jù)集


使用瑞薩visionboard進(jìn)行訓(xùn)練圖片采集,這樣可以保持輸入輸出 的一致,一定程度上提高了識(shí)別的準(zhǔn)確率。

importsensor, image, time, ossensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA) #320x240sensor.set_windowing((240,240))sensor.skip_frames(time=2000)img_counter=0whileTrue: img= sensor.snapshot() filename="/dataset/scissors/scissors_img_%03d.jpg"% img_counter img.save(filename) print("Saved:", filename) img_counter+=1 time.sleep_ms(500)ifimg_counter >=550: # 停止條件break

運(yùn)行時(shí)需要插入sd卡,并且提前創(chuàng)建對(duì)應(yīng)的文件夾

7 模型訓(xùn)練


使用edge impulse訓(xùn)練模型, 使用Transfer learning,圖片大小為240*240,訓(xùn)練時(shí)將圖片輸入改為灰度,減少干擾

8 代碼結(jié)構(gòu)與主要函數(shù)


mqttx:

def publish(self, topic, msg, retain=False, qos=0): 發(fā)送消息到mqttx

defpublish(self, topic, msg, retain=False, qos=0): pkt= bytearray() # MQTT publish header header=0x30 ifretain: header|=0x01 ifqos ==1: header|=0x02 elifqos ==2: header|=0x04 pkt.append(header) # 計(jì)算剩余長(zhǎng)度 remaining_length=2+ len(topic) + len(msg) ifqos >0: remaining_length+=2 # 包含packet id # 先編碼剩余長(zhǎng)度 defencode_len(length): encoded= bytearray() whileTrue: digit= length %128 length= length //128 iflength >0: digit|=0x80 encoded.append(digit) iflength ==0: break returnencoded pkt+= encode_len(remaining_length) # 主題 pkt+= struct.pack("!H", len(topic)) + topic # qos>0時(shí)需要packet id ifqos >0: pkt+= struct.pack("!H",1) # packet id固定為1,可改 pkt+= msg self.sock.write(pkt)

def connect(self, clean_session=True): 連接到mqttx

defconnect(self, clean_session=True): addr = socket.getaddrinfo(self.server, self.port)[0][-1] self.sock = socket.socket() self.sock.connect(addr) pkt =bytearray(b"\x10") # CONNECT packet type var_header =bytearray(b"\x00\x04MQTT\x04") # Protocol Name + Level flags =0 ifclean_session: flags |=0x02 var_header.append(flags) var_header += struct.pack("!H", self.keepalive) payload = struct.pack("!H",len(self.client_id)) + self.client_id remaining_length =len(var_header) +len(payload) # MQTT剩余長(zhǎng)度編碼(可能大于127字節(jié),需要多字節(jié)編碼) defencode_len(length): encoded =bytearray() whileTrue: digit = length %128 length = length //128 iflength >0: digit |=0x80 encoded.append(digit) iflength ==0: break returnencoded pkt += encode_len(remaining_length) pkt += var_header pkt += payload self.sock.write(pkt) resp = self.sock.read(4) ifnot resporresp[0] !=0x20orresp[1] !=0x02: raiseMQTTException("Invalid CONNACK") ifresp[3] !=0: raiseMQTTException("Connection refused, code: %d"% resp[3])

WIFI

def connect_wifi(SSID, PASSWORD): WIFI連接

def connect_wifi(SSID, PASSWORD): wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(SSID, PASSWORD) connect_times =0 whilenot wlan.isconnected(): print('Trying to connect to "{:s}"...'.format(SSID)) time.sleep_ms(1000) connect_times +=1 if connect_times >5: print(f"Connect to {SSID} failed.") return False print("WiFi Connected ", wlan.ifconfig()) return wlan.ifconfig()

手勢(shì)識(shí)別

初始化

def__init__(self): self.net =None self.lables =None self.WIFIConnectStatus = GestureRecoginze.connect_wifi("IQOO Neo 6","x31415926y") self.MqttxClient =None self.MqttxConnectStatus =False ifself.WIFIConnectStatus: self.MqttxClient = MQTTClient("openmv","broker.hivemq.com", port=1883) self.MqttxConnectStatus =True try: self.MqttxClient.connect() self.MqttxClient.subscribe("openmv/test") except: print("connect to MQTTx failed.") self.MqttxConnectStatus =False self.MqttxClient.set_callback(lambdatopic, msg:print(topic, msg)) self.servo = Servo360(0x40400000,8) """ 初始化攝像頭 """ sensor.reset() # Reset and initialize the sensor. sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240) sensor.set_windowing((240,240)) # Set 240x240 window. sensor.skip_frames(time=2000) # Let the camera adjust. """ 加載模型 """ try: # load the model, alloc the model file on the heap if we have at least 64K free after loading self.net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024))) exceptExceptionase: print(e) raiseException('Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? ('+str(e) +')') try: self.labels = [line.rstrip('\n')forlineinopen("labels.txt")] exceptExceptionase: raiseException('Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? ('+str(e) +')')

識(shí)別主體

defMainAction(self, comparetimes): clock = time.clock() compare_times =0 start_time =None CompareResultShow =None compare_result =None while(compare_times clock.tick() img = sensor.snapshot() results = self.net.classify(img, roi=(0,0, img.width(), img.height()), scale_mul=0, x_overlap=0, y_overlap=0) obj = results[0] scores = obj[4] predictions_list =list(zip(self.labels, scores)) predictions_max =0 predictions_num =None foriinrange(len(predictions_list)): label, score = predictions_list[i] ifscore > predictions_max: predictions_max = score predictions_num = label print("%s = %f"% (label, score)) img.draw_string(0,0,"Predictions: %s"% predictions_num, mono_space=False, scale=2) ifstart_timeisNone: start_time = time.ticks_ms() iftime.ticks_diff(time.ticks_ms(), start_time) >5000: ifpredictions_max >0.90: machines_gesture = random.randint(0,2) ifmachines_gesture ==0:# rock ifpredictions_num =="rock": compare_result ="draw" elifpredictions_num =="paper": compare_result ="win" else: compare_result ="lose" elifmachines_gesture ==1:# paper ifpredictions_num =="rock": compare_result ="lose" elifpredictions_num =="paper": compare_result ="draw" else: compare_result ="win" else:# scissors ifpredictions_num =="rock": compare_result ="win" elifpredictions_num =="paper": compare_result ="lose" else: compare_result ="draw" ifself.WIFIConnectStatus: self.MqttxClient.publish("openmv/test", ujson.dumps({"compare_times": compare_times, "machine_label":self.RPS[machines_gesture], "label": predictions_num, "score": predictions_max, "compare_result": compare_result})) ifcompare_result =="win": self.servo.run(1,1)#正轉(zhuǎn)一秒 else: self.servo.run(-1,1) print(compare_times) start_time = time.ticks_ms() CompareResultShow = time.ticks_ms() compare_times +=1 else: print("get_ready......") ifCompareResultShowisnotNoneandtime.ticks_diff(time.ticks_ms(), CompareResultShow)

9 使用方法


前置條件

在光線充足,設(shè)置一個(gè)白色的識(shí)別背景

確保wifi、mqttx可以連接

使用

將開(kāi)發(fā)板置于手的正上方20-30cm處,經(jīng)過(guò)5s將會(huì)識(shí)別一次,比對(duì)后會(huì)將結(jié)果顯示在 屏幕上2.5s,對(duì)比5次之后識(shí)別結(jié)束

10 常見(jiàn)問(wèn)題


在某些情況下識(shí)別錯(cuò)誤: 確保光線充足,與開(kāi)發(fā)板的距離適當(dāng)

無(wú)法在mqttx上獲取識(shí)別結(jié)果: 確保WIFI是否存在,密碼是否正確

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1496

    瀏覽量

    43465
  • 機(jī)器識(shí)別
    +關(guān)注

    關(guān)注

    1

    文章

    14

    瀏覽量

    2657
  • AIoT
    +關(guān)注

    關(guān)注

    8

    文章

    1555

    瀏覽量

    33365
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    國(guó)產(chǎn)操作系統(tǒng)再“超越”,RT-Thread推動(dòng)AIoT產(chǎn)業(yè)變革

    。也就是說(shuō),未來(lái)RT-Thread Studio將會(huì)增加更多高效和有用的功能。三是融合多系統(tǒng)和異系統(tǒng)。目前AI落地的主要平臺(tái)是異構(gòu)、多核的大算平臺(tái),未來(lái)
    發(fā)表于 01-04 08:00

    超越自我,逐夢(mèng)全球|RT-Thread開(kāi)發(fā)者大會(huì)圓滿落幕!

    怎樣的“全芯”未來(lái)在中國(guó)布局,并分享與RT-Thread的合作計(jì)劃,將積極參與社區(qū)建設(shè)
    發(fā)表于 01-12 08:00

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開(kāi)發(fā)組(2015-03-31)。RT-Thread做為國(guó)內(nèi)有較大影響的開(kāi)源實(shí)時(shí)操作系統(tǒng),本
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread全球技術(shù)大會(huì):的解決方案、產(chǎn)品陣容以及四大核心技術(shù)介紹

    RT-Thread全球技術(shù)大會(huì):的解決方案、產(chǎn)品陣容以及四大核心技術(shù)介紹 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 10:14 ?1574次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>的解決方案、產(chǎn)品陣容以及四大核心<b class='flag-5'>技術(shù)</b>介紹

    RT-Thread全球技術(shù)大會(huì):關(guān)于“e-AI”概念的訓(xùn)練和開(kāi)發(fā)流程

    RT-Thread全球技術(shù)大會(huì):關(guān)于“e-AI”概念的訓(xùn)練和開(kāi)發(fā)流程 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 10:30 ?1465次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):關(guān)于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>“e-AI”概念的訓(xùn)練和開(kāi)發(fā)流程

    RT-Thread全球技術(shù)大會(huì):搭載觸摸按鍵單元的MCU介紹

    RT-Thread全球技術(shù)大會(huì):搭載觸摸按鍵單元的MCU介紹 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 10:33 ?1551次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):搭載觸摸按鍵單元的<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>MCU介紹

    RT-Thread全球技術(shù)大會(huì):螢石研發(fā)團(tuán)隊(duì)使用RT-Thread技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會(huì):研發(fā)團(tuán)隊(duì)使用RT-Thread技術(shù)挑戰(zhàn) ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 11:36 ?1748次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):螢石研發(fā)團(tuán)隊(duì)使用<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>技術(shù)</b>挑戰(zhàn)

    RT-Thread全球技術(shù)大會(huì):關(guān)于RA2L1-CPK低功耗CPU演示

    RT-Thread全球技術(shù)大會(huì):關(guān)于RA2L1-CPK低功耗CPU演示 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 15:23 ?1820次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):關(guān)于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA2L1-CPK低功耗CPU演示

    電子正式成為RT-Thread金牌會(huì)員:進(jìn)一步加速RA生態(tài)發(fā)展

    日前,全球半導(dǎo)體解決方案供應(yīng)商電子(Renesas)與知名物聯(lián)網(wǎng)操作系統(tǒng)廠商睿賽德科技(RT-Thread)簽署會(huì)員合作協(xié)議,
    的頭像 發(fā)表于 11-09 10:38 ?1138次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子正式成為<b class='flag-5'>RT-Thread</b>金牌會(huì)員:進(jìn)一步加速RA生態(tài)發(fā)展

    Cortex-M內(nèi)核RA MCU的RT-Thread BSP制作教程發(fā)布

    Cortex-M內(nèi)核RA MCU的RT-Thread BSP制作教程發(fā)布
    的頭像 發(fā)表于 09-18 10:58 ?1233次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>Cortex-M內(nèi)核RA MCU的<b class='flag-5'>RT-Thread</b> BSP制作教程發(fā)布

    【議程發(fā)布】10月上海線下培訓(xùn):RT-Thread × 工業(yè)監(jiān)視器+HMI解決方案!

    為大家?guī)?lái)行業(yè)主題演講! 同時(shí),我們也邀請(qǐng)到RT-Thread工程師 張丙儒 和 張康 ,他們將為開(kāi)發(fā)者們帶來(lái)期待已久的熱門(mén)技術(shù)主題培訓(xùn),RT-Thread ×?
    的頭像 發(fā)表于 09-28 18:45 ?1000次閱讀
    【議程發(fā)布】10月上海線下培訓(xùn):<b class='flag-5'>RT-Thread</b> × <b class='flag-5'>瑞</b><b class='flag-5'>薩</b> 工業(yè)監(jiān)視器+HMI解決方案!

    使用SystemView工具分析RA6M4芯片上RT-Thread的運(yùn)行情況

    使用SystemView工具分析RA6M4芯片上RT-Thread的運(yùn)行情況
    的頭像 發(fā)表于 12-11 17:23 ?1171次閱讀
    使用SystemView工具分析<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA6M4芯片上<b class='flag-5'>RT-Thread</b>的運(yùn)行情況

    RT-Thread推出基于RT-Thread&amp;OpenMV的RA8人機(jī)交互方案

    與戰(zhàn)略合作伙伴RT-Thread攜手于2024年2月底正式發(fā)布了全新的硬件產(chǎn)品——基于RT-Thread&OpenMV的RA8人機(jī)交互解決方案Vision Board。
    的頭像 發(fā)表于 04-01 14:10 ?1840次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>與<b class='flag-5'>RT-Thread</b>推出基于<b class='flag-5'>RT-Thread</b>&amp;OpenMV的RA8人機(jī)交互方案

    電子加入2024RT-Thread全球技術(shù)大會(huì),成為頂級(jí)共創(chuàng)合作伙伴!

    2024 RT-Thread全球技術(shù)大會(huì)非常榮幸的迎來(lái)電子,成為頂級(jí)共創(chuàng)合作伙伴。
    的頭像 發(fā)表于 05-17 14:11 ?1128次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子加入2024<b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì),成為頂級(jí)共創(chuàng)合作伙伴!

    電子全球VP蒞臨RT-Thread指導(dǎo)交流

    近日,電子高級(jí)副總裁関俊彥(ToshihikoSeki)先生及電子嵌入式處理器事業(yè)部市場(chǎng)總監(jiān)沈清女士一行拜訪了上海睿賽德電子科技有限公司。R
    的頭像 發(fā)表于 08-30 13:11 ?1030次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子全球VP蒞臨<b class='flag-5'>RT-Thread</b>指導(dǎo)交流