Python调用手机摄像头检测火焰烟雾的三种方法

方法1:使用IP摄像头应用 + OpenCV

  1. 在手机上安装IP摄像头应用(如IP Webcam for Android)

  2. 配置应用并启动服务器

  3. 在Python中使用OpenCV连接

import cv2

import numpy as np

手机IP摄像头URL(替换为你的手机IP和端口)

url = "http://192.168.x.x:8080/video"

连接摄像头

cap = cv2.VideoCapture(url)

while True:

ret, frame = cap.read()

if not ret:

print("无法获取视频流")

break

转换为HSV颜色空间(火焰和烟雾检测常用)

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

火焰颜色范围(HSV)

lower_flame = np.array([0, 100, 100])

upper_flame = np.array([30, 255, 255])

烟雾颜色范围(可能需要调整)

lower_smoke = np.array([0, 0, 100])

upper_smoke = np.array([180, 50, 200])

创建火焰和烟雾的掩膜

flame_mask = cv2.inRange(hsv, lower_flame, upper_flame)

smoke_mask = cv2.inRange(hsv, lower_smoke, upper_smoke)

检测火焰

flame_pixels = cv2.countNonZero(flame_mask)

if flame_pixels > 1000: # 阈值可根据实际情况调整

cv2.putText(frame, "FLAME DETECTED!", (10, 30),

cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

检测烟雾

smoke_pixels = cv2.countNonZero(smoke_mask)

if smoke_pixels > 1000: # 阈值可根据实际情况调整

cv2.putText(frame, "SMOKE DETECTED!", (10, 70),

cv2.FONT_HERSHEY_SIMPLEX, 1, (150, 150, 150), 2)

显示结果

cv2.imshow('Fire and Smoke Detection', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

方法2:使用DroidCam + Python

  1. 在手机和电脑上安装DroidCam

  2. 连接后使用类似上面的OpenCV代码处理视频流

方法3:使用更高级的深度学习模型

对于更准确的检测,可以使用预训练的深度学习模型:

import cv2

import numpy as np

from tensorflow.keras.models import load_model

加载预训练模型(需要先训练或下载合适的模型)

model = load_model('fire_smoke_detection_model.h5')

连接摄像头(同上)

cap = cv2.VideoCapture("http://192.168.x.x:8080/video")

while True:

ret, frame = cap.read()

if not ret:

break

预处理图像

resized = cv2.resize(frame, (224, 224))

normalized = resized / 255.0

input_img = np.expand_dims(normalized, axis=0)

预测

predictions = model.predict(input_img)

fire_prob, smoke_prob = predictions[0]

显示结果

if fire_prob > 0.7:

cv2.putText(frame, f"FIRE: {fire_prob:.2f}", (10, 30),

cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

if smoke_prob > 0.7:

cv2.putText(frame, f"SMOKE: {smoke_prob:.2f}", (10, 70),

cv2.FONT_HERSHEY_SIMPLEX, 1, (150, 150, 150), 2)

cv2.imshow('Detection', frame)

if cv2.waitKey(1) == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

注意事项:

  1. 颜色阈值:火焰和烟雾的颜色范围可能需要根据实际环境调整

  2. 性能优化:在手机上实时处理可能需要降低分辨率或帧率

  3. 网络延迟:Wi-Fi连接质量会影响实时性

  4. 准确率:简单颜色检测误报率高,深度学习模型更准确但需要更多资源

  5. 光线条件:检测效果受环境光线影响较大

进阶改进方向:

  1. 使用背景减除技术提高烟雾检测准确率

  2. 结合运动检测减少误报

  3. 使用YOLO或MobileNet等轻量级目标检测模型

  4. 添加报警功能(声音、通知等)

  5. 实现云存储检测记录

相关推荐
无垠的广袤9 分钟前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
艾莉丝努力练剑1 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
gCode Teacher 格码致知1 小时前
Python基础教学:如何拼接字符串?-由Deepseek产生
python
还债大湿兄1 小时前
阿里通义千问调用图像大模型生成轮动漫风格 python调用
开发语言·前端·python
blank@l1 小时前
python测开小工具--日志查询分析工具
python·python接口自动化测试基础·python测试开发·日志查询分析·日志分析统计查询·软件测试工具·argparse模块
hu_nil2 小时前
LLMOps-第十三周
python·vllm
空影星2 小时前
轻量日记神器RedNotebook,高效记录每一天
python·数据挖掘·数据分析·音视频
搬砖ing换来金砖2 小时前
Python入门-Task02
开发语言·python
databook2 小时前
告别盲人摸象,数据分析的抽样方法总结
后端·python·数据分析
全栈陈序员2 小时前
【Python】基础语法入门(九)—— 代码规范、调试技巧与性能初探
开发语言·python·代码规范