当前位置: 首页 > news >正文

手势开关灯

太久没水,那可不行。今日又来写一段专业程序员看了也皱眉的垃圾全屋智能雏形代码。应该是笑掉大牙级别吧。下面进入正题。首先思路就是通过cvzone那个手势识别,判断开关灯指令。接下来是通过mqtt局域网里发布一下(注意打开防火墙)。最后是另一台机器订阅获得这个消息,解析出开关灯指令,然后执行动作。

手势识别与消息发布端:

import time
import cv2
import numpy as np
from cvzone.HandTrackingModule import HandDetector
from paho.mqtt import client as mqtt_clientbroker = '192.168.0.107'
port = 1883
topic = "/mqtt/lamp"def connect_mqtt():def on_connect(client, userdata, flags, rc):if rc == 0:print("Connected to MQTT Broker!")else:print("Failed to connect, return code %d\n", rc)client = mqtt_client.Client()client.on_connect = on_connectclient.connect(broker, port)return clientdef publish(client,msg_cmd):msg = f"messages: {msg_cmd}"result = client.publish(topic, msg)status = result[0]if status == 0:print(f"Send `{msg}` to topic `{topic}`")else:print(f"Failed to send message to topic {topic}")cap = cv2.VideoCapture(1)
hand_detector = HandDetector(maxHands=1,detectionCon=0.75)
client = connect_mqtt()
client.loop_start()while True:length_open = 0length_close = 0flag,img = cap.read()img = cv2.flip(img,1)if flag:hands,img = hand_detector.findHands(img,flipType=False)if hands:lmlist=hands[0]['lmList']# 食指与无名指碰撞开灯,# 大拇指和小指碰撞关灯# https://blog.csdn.net/vivo01/article/details/135071340lmlist[8] = lmlist[8][:2] #index_fingerlmlist[16] = lmlist[16][:2] #ring_fingerlmlist[4] = lmlist[4][:2] #thumblmlist[20] = lmlist[20][:2] #small fingerlength_open, _,img = hand_detector.findDistance(lmlist[8],lmlist[16],img)length_close,_,img = hand_detector.findDistance(lmlist[4],lmlist[20],img)if length_open * length_close == 0: #如果手部没有看完全等问题那么会重新循环读取。continueif length_open < 40 and length_close > 50:print("turn on")publish(client,"1")time.sleep(0.4)if length_close < 40 and length_open > 50:print("turn off")publish(client,"0")time.sleep(0.4)           cv2.imshow('img',img)key = cv2.waitKey(1)if key == ord('q'):breakelse:print('Camera failed')break
cap.release()
cv2.destroyAllWindows()

消息获得与硬件灯泡打开执行端:

import RPi.GPIO as GPIO
import paho.mqtt.client as mqtt
import timebroker = "192.168.0.107"
port = 1883
topic = "/mqtt/lamp"GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)LED=21
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED,GPIO.LOW)def on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc))client.subscribe(topic)def on_message(client, userdata, msg,ledpin=LED):mypay = msg.payload.decode("utf-8")#print ("message received:",msg.topic,mypay)print(mypay)if mypay[-1]=="1":GPIO.output(ledpin,GPIO.HIGH)if mypay[-1]=="0":GPIO.output(ledpin,GPIO.LOW)client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_messageclient.connect(broker,port)
#client.loop_forever()
try:client.loop_forever()
except:GPIO.output(LED,GPIO.LOW)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例
  • Router安装以及导入
  • SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World
  • 【Unity学习心得】如何制作俯视角射击游戏
  • 多线程下的共享变量访问数据竞争的问题
  • 告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
  • 骑砍2霸主MOD开发(26)-使用TrfExporterBlender制作TRF文件
  • Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象
  • Java 原生API实现TCP客户端:发送和接收GBK编码消息
  • 【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类
  • 窗口框架frame(HTML前端)
  • 【Vue】- ref获取DOM元素和购物车案例分析
  • 情感识别系统源码分享
  • 源码编译llama.cpp 、ggml 后端启用自定义BLAS加速
  • python实现冒泡排序的算法
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Asm.js的简单介绍
  • IDEA 插件开发入门教程
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js学习笔记
  • Linux Process Manage
  • ReactNativeweexDeviceOne对比
  • 翻译:Hystrix - How To Use
  • 分布式任务队列Celery
  • 理清楚Vue的结构
  • 利用DataURL技术在网页上显示图片
  • 前端性能优化——回流与重绘
  • 使用docker-compose进行多节点部署
  • 推荐一个React的管理后台框架
  • 移动端解决方案学习记录
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 再谈express与koa的对比
  • 正则学习笔记
  • 《码出高效》学习笔记与书中错误记录
  • 【云吞铺子】性能抖动剖析(二)
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 函数计算新功能-----支持C#函数
  • 数据库巡检项
  • "无招胜有招"nbsp;史上最全的互…
  • # 计算机视觉入门
  • #define用法
  • #include
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (C#)一个最简单的链表类
  • (k8s中)docker netty OOM问题记录
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (十) 初识 Docker file
  • (四)软件性能测试
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)SvelteKit教程:hello world
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost