方法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. 实现云存储检测记录