欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)指定區(qū)域桌面變化監(jiān)控并報警

 更新時間:2023年07月30日 09:52:26   作者:會寫代碼的青蛙  
在這篇博客中,我們將使用Python編程語言和一些常用的庫來實現(xiàn)一個簡單的區(qū)域監(jiān)控和變化報警系統(tǒng),文中有詳細的代碼示例供大家參考,需要的朋友可以參考下

本文我們將使用Python編程語言和一些常用的庫來實現(xiàn)一個簡單的區(qū)域監(jiān)控和變化報警系統(tǒng)。我們將使用Tkinter庫創(chuàng)建一個圖形界面,允許用戶選擇監(jiān)控區(qū)域,并使用OpenCV庫進行圖像處理和相似性比較,以檢測區(qū)域內(nèi)的變化,并通過播放聲音進行報警。

實現(xiàn)效果

運行程序后可以看到一個菜單界面

點擊開始識別按鈕后可以選擇你想要監(jiān)控的區(qū)域

如圖所示紅色部分是點擊開始按鈕后拖動鼠標會顯示的選擇范圍框,選擇好區(qū)域后就開始識別該區(qū)域前后5秒內(nèi)的變化。
程序還可以切換模式,可以監(jiān)控攝像頭畫面的視頻是否有變化,有變化也會報警。
程序運行后

準備工作

在開始之前,確保你已經(jīng)安裝了Python以及以下所需的庫:

  • tkinter: 用于創(chuàng)建圖形界面
  • numpy: 用于處理圖像數(shù)據(jù)
  • cv2 (OpenCV): 用于圖像處理和相似性比較
  • pyautogui: 用于截取屏幕圖像
  • pygame: 用于播放聲音
  • PIL (Python Imaging Library): 用于圖像處理

你可以使用pip命令來安裝這些庫:

pip install tkinter numpy opencv-python pyautogui pygame pillow

選擇監(jiān)控區(qū)域

首先,讓我們創(chuàng)建一個函數(shù)來選擇監(jiān)控區(qū)域。我們使用Tkinter庫創(chuàng)建一個全屏的圖形窗口,讓用戶通過鼠標點擊和拖拽來選擇監(jiān)控區(qū)域。我們將保存選定的區(qū)域的坐標以供后續(xù)使用。

import tkinter as tk
from PIL import Image, ImageTk
start_x, start_y, end_x, end_y = None, None, None, None
def select_screen_region():
    global start_x, start_y, end_x, end_y
    def on_press(event):
        global start_x, start_y
        start_x, start_y = event.x, event.y
    def on_move(event):
        global end_x, end_y
        end_x, end_y = event.x, event.y
        canvas.coords(rect, start_x, start_y, end_x, end_y)
    def on_release(event):
        global end_x, end_y
        end_x, end_y = event.x, event.y
        canvas.coords(rect, start_x, start_y, end_x, end_y)
    root = tk.Tk()
    root.title("選擇監(jiān)控區(qū)域")
    root.attributes('-fullscreen', True)
    screenshot = pyautogui.screenshot()
    screenshot.save('desktop_screenshot.png', format='png')
    canvas = tk.Canvas(root, bg='white')
    canvas.pack(fill=tk.BOTH, expand=True)
    desktop_image = ImageTk.PhotoImage(file='desktop_screenshot.png')
    canvas.create_image(0, 0, anchor=tk.NW, image=desktop_image)
    rect = canvas.create_rectangle(0, 0, 0, 0, outline='red')
    canvas.bind("<ButtonPress-1>", on_press)
    canvas.bind("<B1-Motion>", on_move)
    canvas.bind("<ButtonRelease-1>", on_release)
    root.mainloop()

調(diào)用select_screen_region()函數(shù)后,會彈出一個全屏的窗口,你可以通過鼠標點擊和拖拽來選擇監(jiān)控區(qū)域。選定區(qū)域后,關閉窗口即可。

監(jiān)控區(qū)域變化

接下來,我們將創(chuàng)建一個函數(shù)來監(jiān)控選定區(qū)域內(nèi)的變化。我們將使用OpenCV庫對圖像進行處理,并使用相似性比較來檢測區(qū)域內(nèi)的變化。如果檢測到較大的變化,我們將播放聲音進行報警。

import cv2
import numpy as np
import threading
# 初始化pygame庫
pygame.init()
pygame.mixer.init()
# 全局變量,加載MP3文件
def load_alarm_sound(file_path):
    try:
        pygame.mixer.music.load(file_path)
    except pygame.error:
        print(f"無法加載音頻文件:{file_path}")
# 封裝一個播放MP3警報的函數(shù)
def play_alarm():
    try:
        # 播放MP3文件
        pygame.mixer.music.play()
    except pygame.error:
        print("播放警報音頻失敗")
# 調(diào)用load_alarm_sound函數(shù),加載警報音頻
load_alarm_sound("警報聲.mp3")
should_exit = False
is_alarm = False
prev_frame_image, current_frame_image = None, None
def monitor(data_source):
    global should_exit, is_alarm, prev_frame_image, current_frame_image
    if data_source == "screenshot":
        prev_frame = capture_screen()
    elif data_source == "camera":
        cap = cv2.VideoCapture(0)
        prev_frame = capture_video_frame(cap)
    while not should_exit:
        current_frame = None
        if data_source == "screenshot":
            current_frame = capture_screen()
        elif data_source == "camera":
            current_frame = capture_video_frame(cap)
        if current_frame is not None:
            prev_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
            current_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY)
            similarity = ssim(prev_gray, current_gray)
            threshold = 0.95
            if similarity < threshold and not is_alarm:
                print("檢測到較大變化,進行報警!")
                is_alarm = True
                play_alarm()
                # 保存變化前后的照片
                prev_frame_image = prev_frame.copy()
                current_frame_image = current_frame.copy()
                # 在5秒后重置is_alarm標志
                threading.Timer(5, reset_alarm_flag).start()
            else:
                print("沒有變化")
        # 更新前一幀圖像
        prev_frame = current_frame
        time.sleep(5)  # 等待5秒后再獲取下一幀
    # 釋放資源
    if data_source == "camera":
        cap.release()
    cv2.destroyAllWindows()
def start_recognition():
    global should_exit
    should_exit = False
    print("開始監(jiān)控")
    th_monitor = threading.Thread(target=monitor, args=("screenshot",))
    th_monitor.daemon = True
    th_monitor.start()
def end_program():
    global should_exit
    should_exit = True
    print("結束程序")
    sys.exit(1)

現(xiàn)在,我們已經(jīng)準備好了選擇監(jiān)控區(qū)域和監(jiān)控區(qū)域變化的功能。你可以將它們集成到完整的應用程序中,例如創(chuàng)建一個Tkinter界面,提供開始監(jiān)控和結束程序的按鈕。

import sys
import tkinter as tk
import time
import cv2
import numpy as np
import pyautogui
import pygame
from skimage.metrics import structural_similarity as ssim
from PIL import Image, ImageTk
# ... 在此添加上面的選擇監(jiān)控區(qū)域和監(jiān)控區(qū)域變化的函數(shù) ...
# 創(chuàng)建主窗口
root = tk.Tk()
root.title("區(qū)域監(jiān)控和變化報警")
# 添加按鈕
btn_start = tk.Button(root, text="開始監(jiān)控", command=start_recognition)
btn_end = tk.Button(root, text="結束程序", command=end_program)
# 使用pack布局并設置side參數(shù)為LEFT實現(xiàn)橫向排列
btn_start.pack(side=tk.LEFT, padx=10, pady=10)
btn_end.pack(side=tk.LEFT, padx=10, pady=10)
# 進入事件循環(huán)
root.mainloop()

這樣,我們就實現(xiàn)了一個簡單的區(qū)域監(jiān)控和變化報警系統(tǒng)。當你點擊"開始監(jiān)控"按鈕后,可以選擇監(jiān)控區(qū)域,然后程序會持續(xù)監(jiān)測該區(qū)域的變化,并在檢測到較大變化時進行報警。點擊"結束程序"按鈕后,程序將退出。希望這篇博客對你有所幫助,歡迎探索更多有趣的Python項目!

到此這篇關于Python實現(xiàn)指定區(qū)域桌面變化監(jiān)控并報警的文章就介紹到這了,更多相關Python桌面變化監(jiān)控并報警內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python如何根據(jù)字幕文件自動給視頻添加字幕效果

    Python如何根據(jù)字幕文件自動給視頻添加字幕效果

    視頻中字幕的重要性不用多說了,下面這篇文章主要給大家介紹了關于Python如何根據(jù)字幕文件自動給視頻添加字幕效果的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • python3 設置多進程名稱并在ps命令中可見(Centos7 系統(tǒng))

    python3 設置多進程名稱并在ps命令中可見(Centos7 系統(tǒng))

    setproctitle 是一個 Python 模塊,用于設置進程標題(process title),通過設置進程標題,可以讓進程在系統(tǒng)級的進程管理工具中展示自定義的名稱,方便用戶查看和管理進程,本文介紹python3 設置多進程名稱并在ps命令中可見,感興趣的朋友一起看看吧
    2024-03-03
  • 在Windows中安裝Spire.XLS?for?Python的操作指南

    在Windows中安裝Spire.XLS?for?Python的操作指南

    Spire.XLS?for?Python?是一款專業(yè)的?Python?Excel?庫,可用于在各種?Python?應用程序中讀取、創(chuàng)建、編輯和轉換?Excel?(.xls?&?.xlsx)?文件,本文將介紹如何在?Windows?中安裝?Spire.XLS?for?Python,需要的朋友可以參考下
    2025-02-02
  • Python?Tkinter美化彈窗的示例詳解

    Python?Tkinter美化彈窗的示例詳解

    在Python編程中,Tkinter是標準GUI(圖形用戶界面)庫,它允許開發(fā)者創(chuàng)建桌面應用程序,本文將詳細介紹如何使用Tkinter創(chuàng)建并美化彈窗,需要的可以參考下
    2024-12-12
  • python正則表達式查找和替換內(nèi)容的實例詳解

    python正則表達式查找和替換內(nèi)容的實例詳解

    在本篇文章里小編給大家整理的是一篇關于python正則表達式查找和替換內(nèi)容的實例詳解內(nèi)容,有興趣的朋友們可以跟著學習參考下。
    2021-10-10
  • python入門課程第二講之怎么運行Python

    python入門課程第二講之怎么運行Python

    這篇文章主要介紹了python入門課程第二講之怎么運行Python,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能

    Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能

    這篇文章主要給大家介紹了關于Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能的相關資料,在Python環(huán)境下,利用百度AI開放平臺文字識別技術,對表格類圖片進行識別,需要的朋友可以參考下
    2021-09-09
  • 如何在django里上傳csv文件并進行入庫處理的方法

    如何在django里上傳csv文件并進行入庫處理的方法

    這篇文章主要介紹了如何在django里上傳csv文件并進行入庫處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 使用Python制作新型冠狀病毒實時疫情圖

    使用Python制作新型冠狀病毒實時疫情圖

    最近被新型冠狀病毒搞的人心惶惶,很多城市被病毒感染,今天小編給大家分享使用Python制作新型冠狀病毒實時疫情圖,感興趣的朋友跟隨小編一起看看吧
    2020-01-01
  • Python?encode()方法和decode()方法詳解

    Python?encode()方法和decode()方法詳解

    encode() 方法為字符串類型(str)提供的方法,用于將 str 類型轉換成 bytes 類型,這個過程也稱為“編碼”,這篇文章主要介紹了Python?encode()方法和decode()方法,需要的朋友可以參考下
    2022-12-12

最新評論