最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

實(shí)現(xiàn)效果

運(yùn)行程序后可以看到一個(gè)菜單界面

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

如圖所示紅色部分是點(diǎn)擊開始按鈕后拖動(dòng)鼠標(biāo)會(huì)顯示的選擇范圍框,選擇好區(qū)域后就開始識(shí)別該區(qū)域前后5秒內(nèi)的變化。
程序還可以切換模式,可以監(jiān)控?cái)z像頭畫面的視頻是否有變化,有變化也會(huì)報(bào)警。
程序運(yùn)行后

準(zhǔn)備工作

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

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

你可以使用pip命令來(lái)安裝這些庫(kù):

pip install tkinter numpy opencv-python pyautogui pygame pillow

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

首先,讓我們創(chuàng)建一個(gè)函數(shù)來(lái)選擇監(jiān)控區(qū)域。我們使用Tkinter庫(kù)創(chuàng)建一個(gè)全屏的圖形窗口,讓用戶通過(guò)鼠標(biāo)點(diǎn)擊和拖拽來(lái)選擇監(jiān)控區(qū)域。我們將保存選定的區(qū)域的坐標(biāo)以供后續(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ù)后,會(huì)彈出一個(gè)全屏的窗口,你可以通過(guò)鼠標(biāo)點(diǎn)擊和拖拽來(lái)選擇監(jiān)控區(qū)域。選定區(qū)域后,關(guān)閉窗口即可。

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

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

import cv2
import numpy as np
import threading
# 初始化pygame庫(kù)
pygame.init()
pygame.mixer.init()
# 全局變量,加載MP3文件
def load_alarm_sound(file_path):
    try:
        pygame.mixer.music.load(file_path)
    except pygame.error:
        print(f"無(wú)法加載音頻文件:{file_path}")
# 封裝一個(gè)播放MP3警報(bào)的函數(shù)
def play_alarm():
    try:
        # 播放MP3文件
        pygame.mixer.music.play()
    except pygame.error:
        print("播放警報(bào)音頻失敗")
# 調(diào)用load_alarm_sound函數(shù),加載警報(bào)音頻
load_alarm_sound("警報(bào)聲.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("檢測(cè)到較大變化,進(jìn)行報(bào)警!")
                is_alarm = True
                play_alarm()
                # 保存變化前后的照片
                prev_frame_image = prev_frame.copy()
                current_frame_image = current_frame.copy()
                # 在5秒后重置is_alarm標(biāo)志
                threading.Timer(5, reset_alarm_flag).start()
            else:
                print("沒(méi)有變化")
        # 更新前一幀圖像
        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("結(jié)束程序")
    sys.exit(1)

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

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)控和變化報(bào)警")
# 添加按鈕
btn_start = tk.Button(root, text="開始監(jiān)控", command=start_recognition)
btn_end = tk.Button(root, text="結(jié)束程序", command=end_program)
# 使用pack布局并設(shè)置side參數(shù)為L(zhǎng)EFT實(shí)現(xiàn)橫向排列
btn_start.pack(side=tk.LEFT, padx=10, pady=10)
btn_end.pack(side=tk.LEFT, padx=10, pady=10)
# 進(jìn)入事件循環(huán)
root.mainloop()

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

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

相關(guān)文章

  • Python中zip()函數(shù)的簡(jiǎn)單用法舉例

    Python中zip()函數(shù)的簡(jiǎn)單用法舉例

    這篇文章主要給大家介紹了關(guān)于Python中zip()函數(shù)的簡(jiǎn)單用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 深入分析Python中Lambda函數(shù)的用法

    深入分析Python中Lambda函數(shù)的用法

    lambda函數(shù)是Python中常用的內(nèi)置函數(shù),又稱為匿名函數(shù)。和普通函數(shù)相比,它只有函數(shù)體,省略了def和return,使得結(jié)構(gòu)看起來(lái)更精簡(jiǎn)。本文將詳細(xì)說(shuō)說(shuō)Lambda函數(shù)的用法,需要的可以參考一下
    2022-12-12
  • python多進(jìn)程登錄遠(yuǎn)端服務(wù)器

    python多進(jìn)程登錄遠(yuǎn)端服務(wù)器

    這篇文章主要介紹了python多進(jìn)程登錄遠(yuǎn)端服務(wù)器,文章應(yīng)用實(shí)例簡(jiǎn)易的方式詳細(xì)講解python多進(jìn)程登錄遠(yuǎn)端服務(wù)器的相關(guān)資料,需要的朋友可以參考以下文章的具體內(nèi)容
    2021-10-10
  • Tensorflow模型實(shí)現(xiàn)預(yù)測(cè)或識(shí)別單張圖片

    Tensorflow模型實(shí)現(xiàn)預(yù)測(cè)或識(shí)別單張圖片

    這篇文章主要為大家詳細(xì)介紹了Tensorflow模型實(shí)現(xiàn)預(yù)測(cè)或識(shí)別單張圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 如何用Python?實(shí)現(xiàn)景區(qū)安防系統(tǒng)

    如何用Python?實(shí)現(xiàn)景區(qū)安防系統(tǒng)

    本設(shè)計(jì)中,利用YOLO目標(biāo)檢測(cè)算法、Openpose姿態(tài)識(shí)別算法、deepsort跟蹤算法、MSCNN人群密度估計(jì)算法實(shí)現(xiàn)了火災(zāi)監(jiān)測(cè)、吸煙監(jiān)測(cè)、行為安全監(jiān)測(cè)、人群密度監(jiān)測(cè)、口罩率監(jiān)測(cè)、人員定位監(jiān)測(cè)六大功能,對(duì)Python?實(shí)現(xiàn)景區(qū)安防系統(tǒng)感興趣的朋友一起看看吧
    2022-07-07
  • Python中requests庫(kù)的用法詳解

    Python中requests庫(kù)的用法詳解

    本文詳細(xì)講解了Python中requests庫(kù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Python線性表種的單鏈表詳解

    Python線性表種的單鏈表詳解

    這篇文章主要介紹了Python線性表種的單鏈表詳解,線性表是一種線性結(jié)構(gòu),它是由零個(gè)或多個(gè)數(shù)據(jù)元素構(gòu)成的有限序列。線性表的特征是在一個(gè)序列中,除了頭尾元素,每個(gè)元素都有且只有一個(gè)直接前驅(qū),有且只有一個(gè)直接后繼
    2022-08-08
  • python實(shí)現(xiàn)手機(jī)通訊錄搜索功能

    python實(shí)現(xiàn)手機(jī)通訊錄搜索功能

    這篇文章主要介紹了python模仿手機(jī)通訊錄搜索功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python腳本實(shí)現(xiàn)抓取指定網(wǎng)站上的所有圖片

    Python腳本實(shí)現(xiàn)抓取指定網(wǎng)站上的所有圖片

    對(duì)于開發(fā)者、數(shù)據(jù)分析師以及研究人員而言,從網(wǎng)頁(yè)中提取有價(jià)值的信息是一項(xiàng)至關(guān)重要的技能,本文將詳細(xì)介紹如何使用Python編寫一個(gè)腳本來(lái)自動(dòng)抓取指定網(wǎng)站上的所有圖片,需要的可以參考下
    2024-10-10
  • Python數(shù)據(jù)容器0基礎(chǔ)入門解析之字符串到字典

    Python數(shù)據(jù)容器0基礎(chǔ)入門解析之字符串到字典

    在Python編程中有時(shí)候我們需要將一個(gè)字符串轉(zhuǎn)換為字典的形式,這篇文章主要介紹了Python數(shù)據(jù)容器0基礎(chǔ)入門解析之字符串到字典的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12

最新評(píng)論

临西县| 海阳市| 长垣县| 会昌县| 石楼县| 砀山县| 兴海县| 新竹市| 日照市| 嘉鱼县| 曲靖市| 吉隆县| 汉中市| 房产| 贵港市| 玛纳斯县| 浠水县| 赤峰市| 宜川县| 时尚| 讷河市| 翁牛特旗| 西宁市| 新蔡县| 丹江口市| 平昌县| 靖宇县| 甘孜县| 中方县| 霍林郭勒市| 桐梓县| 台州市| 钟祥市| 桂平市| 宾阳县| 南昌县| 平和县| 当阳市| 鹿邑县| 桑植县| 张家界市|