You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Windows平台使用Python检测屏幕特定区域更新以实现摄像头巡检自动化

Hey, great question—automating this 400+ camera inspection task is totally feasible with Python, no need to hook into the camera app at all. Let's break down how to pull this off using screen region detection and Excel logging:

Camera Inspection Automation Workflow

Core Idea

Instead of integrating with the camera management app, we’ll use screen capture + image comparison to detect updates in specific camera feed areas, then log the results directly to an Excel sheet.

Required Python Libraries

  • pyautogui: Captures screen regions and simulates mouse/keyboard actions (to switch between camera feeds if needed)
  • opencv-python (or PIL): Compares screenshots to spot changes in the target area
  • openpyxl: Reads/writes Excel files to log inspection data

Step-by-Step Implementation

1. Locate Your Target Screen Region

First, we need to get the coordinates of the camera feed area you want to monitor. Run this quick script to capture the region:

import pyautogui

print("Move your mouse to the top-left corner of the camera feed, press Enter...")
input()
top_left = pyautogui.position()

print("Move your mouse to the bottom-right corner, press Enter...")
input()
bottom_right = pyautogui.position()

# Calculate region coordinates (x, y, width, height)
target_region = (top_left[0], top_left[1], bottom_right[0]-top_left[0], bottom_right[1]-top_left[1])
print(f"Your target region coordinates: {target_region}")

Save the target_region value—we’ll use it for all future screenshots.

2. Detect Region Updates

We’ll compare consecutive screenshots to check if the camera feed has changed. Here’s a function using OpenCV for reliable difference detection:

import cv2
import numpy as np
import pyautogui

# Store the initial baseline frame
base_frame = None

def check_region_update(target_region, pixel_threshold=5000):
    # Capture current screen region
    current_screenshot = pyautogui.screenshot(region=target_region)
    current_frame = cv2.cvtColor(np.array(current_screenshot), cv2.COLOR_RGB2BGR)
    
    global base_frame
    # Set baseline on first run
    if base_frame is None:
        base_frame = current_frame
        return False
    
    # Calculate pixel difference between baseline and current frame
    frame_diff = cv2.absdiff(base_frame, current_frame)
    gray_diff = cv2.cvtColor(frame_diff, cv2.COLOR_BGR2GRAY)
    _, thresholded_diff = cv2.threshold(gray_diff, 25, 255, cv2.THRESH_BINARY)
    changed_pixels = cv2.countNonZero(thresholded_diff)
    
    # If more pixels than threshold change, mark as updated
    if changed_pixels > pixel_threshold:
        base_frame = current_frame  # Update baseline for next check
        return True
    return False

Adjust pixel_threshold based on your needs: higher values ignore small changes (like timestamp ticks), lower values catch subtle updates.

3. Log Results to Excel

Use openpyxl to create a log file that tracks each camera’s inspection status:

from openpyxl import Workbook, load_workbook
from datetime import datetime

def log_inspection_result(camera_id, is_updated):
    try:
        # Load existing workbook if it exists
        wb = load_workbook('camera_inspection_log.xlsx')
        ws = wb.active
    except FileNotFoundError:
        # Create new workbook with headers if file doesn't exist
        wb = Workbook()
        ws = wb.active
        ws.append(["Camera ID", "Inspection Time", "Update Status"])
    
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    status = "Updated" if is_updated else "No Change"
    ws.append([camera_id, current_time, status])
    wb.save('camera_inspection_log.xlsx')

4. Full Automation Loop

Put it all together to cycle through all 400 cameras, switch feeds, check for updates, and log results:

import time

# Replace with your target region from step 1
TARGET_REGION = (100, 100, 800, 600)

for camera_id in range(1, 401):
    print(f"Inspecting Camera {camera_id}...")
    
    # Simulate camera feed switch (customize this to your app's workflow)
    # Example: Press F5 to switch feeds, or click a button
    # pyautogui.press('f5')
    # pyautogui.click(x=50, y=50)  # Coordinates of your "next camera" button
    
    time.sleep(2)  # Wait for the feed to load fully
    
    # Check if the region updated
    update_detected = check_region_update(TARGET_REGION)
    
    # Log the result
    log_inspection_result(camera_id, update_detected)
    
    # Add a short delay to avoid overwhelming the app
    time.sleep(1)

Pro Tips

  • Keep the screen unobstructed while the script runs—mouse movements or overlapping windows will break screenshot accuracy
  • If your camera feeds have static elements (like a timestamp), either exclude them from your target region or raise the pixel_threshold to ignore those small changes
  • For scheduled daily inspections, use the schedule library to run the script automatically at specific times

内容的提问来源于stack exchange,提问作者CyprusGrunumn

火山引擎 最新活动