【OpenCV】使用Python和OpenCV实现火焰检测

embedded/2025/1/5 17:15:05/

1、 项目源码和结构(转) 

https://github.com/mushfiq1998/fire-detection-python-opencv

2、 运行环境

# 安装playsound:用于播放报警声音

pip install playsound

# 安装opencv-python:cv2用于图像和视频处理,特别是用于检测火灾

pip install opencv-python

3、 fireDetection.py

python">import cv2         # Library for openCV
import threading   # Library for threading -- which allows code to run in backend
import playsound   # Library for alarm sound
import smtplib     # Library for email sending# To access xml file which includes positive and negative images of fire. 
# (Trained images) File is also provided with the code.
fire_cascade = cv2.CascadeClassifier('fire_detection_cascade_model.xml')# To start camera this command is used "0" for laptop inbuilt camera 
# and "1" for USB attahed camera
# vid = cv2.VideoCapture(0) vid = cv2.VideoCapture("videos\\fire2.mp4")
runOnce = False # created boolean# defined function to play alarm post fire detection using threading
def play_alarm_sound_function(): # to play alarm # mp3 audio file is also provided with the code.playsound.playsound('fire_alarm.mp3',True) print("Fire alarm end") # to print in consol# Defined function to send mail post fire detection using threading
def send_mail_function(): recipientmail = "add recipients mail" # recipients mailrecipientmail = recipientmail.lower() # To lower case mailtry:server = smtplib.SMTP('smtp.gmail.com', 587)server.ehlo()server.starttls()# Senders mail ID and passwordserver.login("add senders mail", 'add senders password') # recipients mail with mail messageserver.sendmail('add recipients mail', recipientmail, "Warning fire accident has been reported") # to print in consol to whome mail is sentprint("Alert mail sent sucesfully to {}".format(recipientmail))server.close() ## To close serverexcept Exception as e:print(e) # To print error if anywhile(True):Alarm_Status = False# Value in ret is True # To read video frameret, frame = vid.read() # To convert frame into gray colorgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # to provide frame resolutionfire = fire_cascade.detectMultiScale(frame, 1.2, 5) ## to highlight fire with square for (x,y,w,h) in fire:cv2.rectangle(frame,(x-20,y-20),(x+w+20,y+h+20),(255,0,0),2)roi_gray = gray[y:y+h, x:x+w]roi_color = frame[y:y+h, x:x+w]print("Fire alarm initiated")# To call alarm threadthreading.Thread(target=play_alarm_sound_function).start()  if runOnce == False:print("Mail send initiated")# To call alarm threadthreading.Thread(target=send_mail_function).start() runOnce = Trueif runOnce == True:print("Mail is already sent once")runOnce = Truecv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
  • 加载训练模型:代码加载预训练的机器学习模型fire_detection_cascade_model.xml(XML 文件),该模型可以检测图像中的火灾。
  • 设置视频源:设置视频输入源,可以是笔记本电脑内置摄像头,也可以是外接USB 摄像头。该代码当前配置为从名为“fire2.mp4”的文件中读取视频。
  • 播放报警声音:定义播放报警声音的函数play_alarm_sound_function(),该函数在后台运行(线程)并播放名为“fire_alarm.mp3”的警报声音文件。
  • 发送电子邮件:send_mail_function()定义了另一个函数来发送电子邮件。它使用 Gmail 的 SMTP 服务器向指定收件人发送有关火灾检测的警告电子邮件。代码中需要提供发件人的电子邮件和密码。

4、结果 


http://www.ppmy.cn/embedded/151306.html

相关文章

我的 2024 年终总结

2024 年,我离开了待了两年的互联网公司,来到了一家聚焦教育机器人和激光切割机的公司,没错,是一家硬件公司,从未接触过的领域,但这还不是我今年最重要的里程碑事件 5 月份的时候,正式提出了离职…

深入FreeRTOS内核——第三章、任务管理

深入FreeRTOS内核——第三章、任务管理 文章目录 深入FreeRTOS内核——第三章、任务管理前言本章内容 一、任务函数二、任务的顶级状态三、任务创建3.1 xTaskCreate()函数 四、任务优先级4.1 通用调度器4.2 架构优化调度器 五、时间测量和时钟中断六、扩展非运行状态6.1 阻塞状…

细讲前端工程化

何为前端工程化 前端工程化是指将软件工程的原理和方法应用到前端开发中,以提高开发效率、代码质量和可维护性。随着 Web 应用的复杂度不断增加,传统的前端开发方式已经难以满足需求,因此引入了工程化的概念来更好地管理和优化前端开发流程。…

JLINK V9插入电脑没反应

一个V9版本,在公司电脑上使用没有问题,带回来在家里电脑上无法显示jlink _driver,只显示一个cdc 家里还有个jlink,版本可能是V8的,可以正常显示jlink 多方查找没看到什么原因,后面重新装了下jlink驱动就好…

CentOS7安装配置JDK保姆级教程(图文详解)

1. 安装OpenJDK 直接使用yum命令安装,这里安装的版本是openjdk 11 (具体版本根据自己操作系统选择) # 查找安装包 yum search java-11# 安装jdk, 同时安装了依赖 java-11-openjdk-headless yum install java-11-openjdk.x86_64# 安装开发工…

使用apisix+oidc+casdoor配置微服务网关

一、服务架构图 二、安装配置 1. 安装配置apisix (1). 快速启动及验证: curl -sL https://run.api7.ai/apisix/quickstart | sh该命令启动 apisix-quickstart 和 etcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 …

使用 httputils + chronicle-bytes 实现金融级 java rpc

1、认识 chronicle-bytes Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库,但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护,旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性…

LeetCode 141:环形链表

题目: 题解: 代码示例: package com.zy.leetcode.LeetCode_141;/*** Author: zy* Date: 2025-01-03-14:09* Description: 环形链表*/ public class ListNode_141 {private int val;private ListNode_141 next;public ListNode_141(int x…