8898| 14
|
【行空板】手势控风扇 |
本帖最后由 云天 于 2022-5-11 08:31 编辑 【项目设计】Mediapipe识别手势,利用手指间距来控制风扇转速,风扇连接在扩展板上单独供电。软件编程利用Mind+测试版中可以连接行空板进行编程。 【行空板】 行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学。 【测试风扇】 金手指:引脚编号兼容micro:bit, 19路独立I/O(支持1路I2C、1路UART、2路SPI、6路12位ADC、5路12位PWM) micro:bit 电机驱动扩展板
【测试摄像头】 安装Mediapipe库与OpenCV库,参考AI人工智能应用:https://wiki.unihiker.com/ai_project
【手指距离识别】
mind+中测试 行空板中测试 【控制风扇完整程序】 【演示视频】 |
大神,请教下你的作品手势控风扇,我用你的完整程序运行后摄像头可出来,但手一放程序就结束,提示Traceback (most recent call last): File "/root/mindplus/cache/手势控风扇.mp/shoushifengshan.py", line 33, in <module> length1, info = detector.findDistance(lmList1[20][0:2], lmList1[0][0:2],img,False) TypeError: findDistance() takes from 3 to 4 positional arguments but 5 were given请问哪里出错了 |
老曾 发表于 2023-3-2 23:22 length1, info,img = detector.findDistance(lmList1[20][0:2], lmList1[0][0:2],img) # with draw length, info, img = detector.findDistance(lmList1[8][0:2], lmList1[4][0:2],img) # with draw 这样就不会报错了我已经试验成功 |
老曾 发表于 2023-3-2 23:22 亲自试验完整程序供参考,两个星期前还是一无所知,经历n多个不眠之夜,现在终于实现,文中提到的控制, import cv2 from cvzone.HandTrackingModule import HandDetector from pinpong.board import Board,Pin Board().begin() #初始化 pwm2 = Pin(Pin.P2, Pin.PWM) #初始化引脚为PWM模式 模拟输出方法2 cap = cv2.VideoCapture(0) detector = HandDetector(detectionCon=0.8, maxHands=2) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) #设置摄像头图像宽度 cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度 cap.set(cv2.CAP_PROP_BUFFERSIZE, 1) #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。 def numberMap(x, in_min, in_max, out_min, out_max): return int((x - in_min) * (out_max - out_min) / (in_max - in_min)) + out_min while True: # Get image frame success, img = cap.read() # Find the hand and its landmarks hands, img = detector.findHands(img) # with draw # hands = detector.findHands(img, draw=False) # without draw if hands: # Hand 1 hand1 = hands[0] lmList1 = hand1["lmList"] # List of 21 Landmark points bbox1 = hand1["bbox"] # Bounding box info x,y,w,h centerPoint1 = hand1['center'] # center of the hand cx,cy handType1 = hand1["type"] # Handtype Left or Right fingers1 = detector.fingersUp(hand1) length1, info,img = detector.findDistance(lmList1[17][0:2], lmList1[0][0:2],img) # with draw length, info, img = detector.findDistance(lmList1[8][0:2], lmList1[4][0:2],img) # with draw pwm2.write_analog(numberMap(int(length/length1*100),0,200,0,255)) #PWM输出 利用比值排除摄像头距离的干扰 #pwm2.write_analog(numberMap(int(length/100*100),0,250,0,255)) else: pwm2.write_analog(0) #PWM输出 # Display cv2.imshow("Image", img) cv2.waitKey(1) |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed