国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

esp32與python-opencv的聯(lián)動(micropython固件)

這篇具有很好參考價值的文章主要介紹了esp32與python-opencv的聯(lián)動(micropython固件)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開發(fā)環(huán)境:Thonny,python

硬件要求:esp32cam

實現(xiàn)思路:

? ? ? ? 將esp32cam拍攝的圖片通過網(wǎng)絡(luò)協(xié)議傳到電腦進(jìn)行處理

下位機(jī)代碼:

import camera
import socket
import network
import camera
import time

SSID='XXX'#輸入wifi名字
password='XXX'#輸入WIFI密碼
IP='192.168.1.34'#換成自己的IPv4地址
port=9090

#連接wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    print('connecting to network...')
    wlan.connect(SSID,password)
    while not wlan.isconnected():
        pass
print('網(wǎng)絡(luò)配置:', wlan.ifconfig())
camera.init(0,format=3)
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
i=0
while 1:
    i=i+1
    buf = camera.capture() # 獲取圖像數(shù)據(jù)
    s.sendto(buf,(IP,port)) # 向服務(wù)器發(fā)送圖像數(shù)據(jù)
    time.sleep(0.15)
    print(i,buf)

原理很簡單,傳輸?shù)耐緩绞荱DP,一開始是有想過用串口或TCP,但是串口就剩UART0,用不了,TCP與UDP相比,UDP更快,因此采用UDP。

上位機(jī)代碼:

import socket
import cv2
import io
from PIL import Image
import numpy as np
import mediapipe as mp
import math

IP="192.168.1.34" #換成自己的IPv4地址
port=9090


def vector_2d_angle(v1,v2):
    '''
        求解二維向量的角度
    '''
    v1_x=v1[0]
    v1_y=v1[1]
    v2_x=v2[0]
    v2_y=v2[1]
    try:
        angle_= math.degrees(math.acos((v1_x*v2_x+v1_y*v2_y)/(((v1_x**2+v1_y**2)**0.5)*((v2_x**2+v2_y**2)**0.5))))
    except:
        angle_ =65535.
    if angle_ > 180.:
        angle_ = 65535.
    return angle_
def hand_angle(hand_):
    '''
        獲取對應(yīng)手相關(guān)向量的二維角度,根據(jù)角度確定手勢
    '''
    angle_list = []
    #---------------------------- thumb 大拇指角度
    angle_ = vector_2d_angle(
        ((int(hand_[0][0])- int(hand_[2][0])),(int(hand_[0][1])-int(hand_[2][1]))),
        ((int(hand_[3][0])- int(hand_[4][0])),(int(hand_[3][1])- int(hand_[4][1])))
        )
    angle_list.append(angle_)
    #---------------------------- index 食指角度
    angle_ = vector_2d_angle(
        ((int(hand_[0][0])-int(hand_[6][0])),(int(hand_[0][1])- int(hand_[6][1]))),
        ((int(hand_[7][0])- int(hand_[8][0])),(int(hand_[7][1])- int(hand_[8][1])))
        )
    angle_list.append(angle_)
    #---------------------------- middle 中指角度
    angle_ = vector_2d_angle(
        ((int(hand_[0][0])- int(hand_[10][0])),(int(hand_[0][1])- int(hand_[10][1]))),
        ((int(hand_[11][0])- int(hand_[12][0])),(int(hand_[11][1])- int(hand_[12][1])))
        )
    angle_list.append(angle_)
    #---------------------------- ring 無名指角度
    angle_ = vector_2d_angle(
        ((int(hand_[0][0])- int(hand_[14][0])),(int(hand_[0][1])- int(hand_[14][1]))),
        ((int(hand_[15][0])- int(hand_[16][0])),(int(hand_[15][1])- int(hand_[16][1])))
        )
    angle_list.append(angle_)
    #---------------------------- pink 小拇指角度
    angle_ = vector_2d_angle(
        ((int(hand_[0][0])- int(hand_[18][0])),(int(hand_[0][1])- int(hand_[18][1]))),
        ((int(hand_[19][0])- int(hand_[20][0])),(int(hand_[19][1])- int(hand_[20][1])))
        )
    angle_list.append(angle_)
    return angle_list

def h_gesture(angle_list):
    thr_angle = 65.
    thr_angle_thumb = 53.
    thr_angle_s = 49.
    gesture_str = None
    if 65535. not in angle_list:
         if (angle_list[0]>thr_angle_thumb)  and (angle_list[1]<thr_angle_s) and (angle_list[2]>thr_angle_s) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle):
              gesture_str = "one"
         elif (angle_list[0]>thr_angle_thumb)  and (angle_list[1]<thr_angle_s) and (angle_list[2]<thr_angle_s) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle):
             gesture_str = "two"
         elif (angle_list[0]>thr_angle_thumb)  and (angle_list[1]<thr_angle_s) and (angle_list[2]<thr_angle_s) and (angle_list[3]<thr_angle) and (angle_list[4]>thr_angle):
             gesture_str = "three"
         elif (angle_list[0]>thr_angle_thumb)  and (angle_list[1]<thr_angle_s) and (angle_list[2]<thr_angle_s) and (angle_list[3]<thr_angle) and (angle_list[4]<thr_angle):
             gesture_str = "four"
         elif (angle_list[0] < thr_angle_s) and (angle_list[1] < thr_angle_s) and (angle_list[2] < thr_angle_s) and (angle_list[3] < thr_angle_s) and (angle_list[4] < thr_angle_s):
             gesture_str = "five"
    return gesture_str
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
        static_image_mode=False,
        max_num_hands=1,
        min_detection_confidence=0.5,
        min_tracking_confidence=0.5)
print("開始")
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
s.bind((IP,port))
a=0
while True:
    data,IP = s.recvfrom(100000)
    a=a+1
    print(a,IP)
    bytes_stream = io.BytesIO(data)
    image = Image.open(bytes_stream)
    img = np.asarray(image)
    img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    # BiCubic_small = cv2.resize(img, (int(img.shape[1] * 0.5), int(img.shape[0] * 0.5)), interpolation=cv2.INTER_CUBIC)
    # img = cv2.resize(BiCubic_small, (600, 400), interpolation=cv2.INTER_CUBIC)
    results = hands.process(img)
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_drawing.draw_landmarks(img, hand_landmarks, mp_hands.HAND_CONNECTIONS)
            hand_local = []
            for i in range(21):
                x = hand_landmarks.landmark[i].x * img.shape[1]
                y = hand_landmarks.landmark[i].y * img.shape[0]
                hand_local.append((x, y))
            if hand_local:
                angle_list = hand_angle(hand_local)
                gesture_str = h_gesture(angle_list)
                cv2.putText(img, gesture_str, (0, 100), 0, 1.3, (0, 0, 255), 3)
    cv2.imshow('MediaPipe Hands', img)
    if cv2.waitKey(1)==ord("q"):
        break

?成品效果如下,圖片發(fā)送速率和丟失率都是能接受的,畢竟30幾塊的模塊,目前做了一個手部關(guān)鍵點的檢測和人體關(guān)節(jié)的檢測,有了這個成功的先例,接下來就搞物品分類。?

micropython opencv,python,opencv,開發(fā)語言

歐!!!!!還有一個重點是接一個天線會好很多

micropython opencv,python,opencv,開發(fā)語言

?文章來源地址http://www.zghlxwxcb.cn/news/detail-614535.html

到了這里,關(guān)于esp32與python-opencv的聯(lián)動(micropython固件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ESP32環(huán)境搭建(Thonny+MicroPython+ESP32)

    ESP32環(huán)境搭建(Thonny+MicroPython+ESP32)

    硬件:ESP32 解釋器:MicroPython(一種針對于硬件做了特殊處理的Python解釋器) IDE:Thonny(類似于pycharm這個也是個IDE,它對ESP32支持更好,所以選擇它) ESP32引腳圖如下: 下載地址:https://thonny.org/ 也可在以下鏈接進(jìn)行下載,包括了Thonny、MicroPython固件和ESP32驅(qū)動安裝包。 ESP3

    2024年02月10日
    瀏覽(14)
  • ESP32-S3 >>> MicroPython 編程初探

    ESP32-S3 >>> MicroPython 編程初探

    ??今天買了一個ESP32-S3,打算試試在這上面進(jìn)行MicroPython的編程(附資料網(wǎng)址)。 ??首先為了在ESP32上進(jìn)行mp的編程,需要對其重新燒錄固件。這就需要我們電腦安裝好CH343驅(qū)動,然后找到適用于ESP32-S3的固件,利用flash下載工具將其下載到板子中??偨Y(jié)一下就是兩個步驟:

    2023年04月20日
    瀏覽(19)
  • MicroPython開發(fā)esp32入門筆記--串口篇

    MicroPython開發(fā)esp32入門筆記--串口篇

    串行接口簡稱串口,也稱串行通信接口或串行通訊接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。串行接口 (Serial Interface)是指數(shù)據(jù)一位一位地順序傳送。其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信(可以直接利用電話線作為傳輸線),從而大

    2024年02月05日
    瀏覽(26)
  • MicroPython開發(fā)ESP32入門筆記 -- 藍(lán)牙篇

    MicroPython開發(fā)ESP32入門筆記 -- 藍(lán)牙篇

    博主之前學(xué)習(xí)了用C語言去開發(fā)了51單片機(jī),雖然沒有將各種外設(shè)和傳感器都玩遍,但博主基本將一些重要的外設(shè)和傳感器通過原理學(xué)習(xí)加小項目實驗的方式比較深入地玩了一下。眾所周知,51單片機(jī)是相對底層的,用來開發(fā)一些大項目的效率會比較低,所以我們很有必要學(xué)習(xí)

    2023年04月19日
    瀏覽(22)
  • ESP32(MicroPython) 編碼器電機(jī)閉環(huán)控制

    本人最近查找資料時,發(fā)現(xiàn)ESP32上的使用MicroPython的編碼器電機(jī)相關(guān)程序較少,閉環(huán)控制程序都是Pyboard上的,與ESP32不完全兼容。本人通過micropython編程 esp32+drv8833+霍爾編碼器_micropython 編碼器_青右的博客-CSDN博客 上的程序讀取編碼器計數(shù),然后另寫了控制程序,有兩個版本。

    2024年02月16日
    瀏覽(36)
  • ESP32(MicroPython) 網(wǎng)頁控制環(huán)形WS2812

    ESP32(MicroPython)網(wǎng)頁控制環(huán)形WS2812 本程序用于提供網(wǎng)頁控制環(huán)形WS2812,為了不影響網(wǎng)頁正常運行,本程序取消了流水燈形式,改為每個燈或每2個燈或每4個燈取隨機(jī)亮度,延時和亮度可調(diào)。主控?fù)Q成ESP32C3,感覺網(wǎng)頁流暢度比ESP32-EROOM32低一些。 程序如下

    2024年02月15日
    瀏覽(21)
  • 1、Thonny+MicroPython+ESP32開發(fā)環(huán)境搭建

    1.1 ESP32 大白話來說:ESP32就是一個開發(fā)板,上面有芯片以及用到的其它硬件 1.2 ESP32運行程序? 只要是硬件電路(數(shù)字電路)那么就可以通過編程的方式對其進(jìn)行控制 那么這個開發(fā)板能認(rèn)識什么樣的程序呢? python ? C ? C++ ? Java ?。。。。 答:只認(rèn)識二進(jìn)制的 0 和 1 ,即

    2024年02月14日
    瀏覽(21)
  • ESP32 Micropython編程(Thonny)01----環(huán)境搭建&點燈

    ESP32 Micropython編程(Thonny)01----環(huán)境搭建&點燈

    本人持續(xù)分享更多關(guān)于嵌入式和單片機(jī)的知識,如果大家喜歡,別忘點個贊加個關(guān)注哦,讓我們一起共同進(jìn)步~ ok,接下來我們就進(jìn)入Micropython的學(xué)習(xí)吧(因為我是一邊學(xué)習(xí)一邊記錄,因此肯定會出現(xiàn)一些錯誤,歡迎大家指正,大家一起學(xué)習(xí)進(jìn)步) 下載地址:Thonny 選擇對應(yīng)版

    2024年02月02日
    瀏覽(22)
  • ESP32(MicroPython) 四足機(jī)器人(五)功能補(bǔ)充

    本次更新增加了前后傾斜(每次動作交換前部和后部高度)、蹲起與抬腳動作,均位于用于連續(xù)執(zhí)行動作的function函數(shù)中,但實測抬腳動作需要先啟動function函數(shù)的另一項功能才能正常開啟,代碼檢查無誤,應(yīng)該是MicroPython固件的bug。另外,對于判斷功能,增加了elif語句的使用

    2024年02月15日
    瀏覽(27)
  • ESP32(MicroPython) 矩陣鍵盤電子琴+RGB燈

    ESP32(MicroPython) 矩陣鍵盤電子琴+RGB燈

    ?本程序相比上一個矩陣鍵盤電子琴程序增加了一個矩陣鍵盤,并把三個矩陣鍵盤的同一行相連,掃描周期縮短到40ms。增加RGB燈帶,每個周期刷新一個燈(隨機(jī)顏色)。 代碼如下 #導(dǎo)入Pin模塊 from machine import Pin import time from machine import PWM from neopixel import NeoPixel import random #揚聲

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包