OpenCV Python 代码:区域入侵检测和报警 - 超时警报、时间显示和入侵位置
下面是使用OpenCV和Python编写的代码,实现了检测到区域入侵超过半分钟后显示超时并发出声音报警,并在画面上显示时间和入侵位置。\n\npython\nimport\u0020cv2\nimport\u0020numpy\u0020as\u0020np\nimport\u0020time\nimport\u0020winsound\n\n#\u0020设置视频路径或摄像头索引\nvideo_path\u0020=\u0020'path_to_video_file.mp4'\u0020#\u0020或者使用摄像头:0\n\n#\u0020设置区域坐标(矩形左上角和右下角坐标)\nregion_of_interest\u0020=\u0020[(100,\u0020100),\u0020(300,\u0020300)]\n\n#\u0020初始化入侵时间和报警状态\ninvasion_start_time\u0020=\u0020None\nalarm_triggered\u0020=\u0020False\n\n#\u0020加载视频\ncap\u0020=\u0020cv2.VideoCapture(video_path)\n\n#\u0020创建窗口\ncv2.namedWindow('Invasion\u0020Detection')\n\nwhile\u0020True:\n\u0020#\u0020读取视频帧\n\u0020ret,\u0020frame\u0020=\u0020cap.read()\n\n\u0020if\u0020not\u0020ret:\n\u0020\u0020break\n\n\u0020#\u0020从帧中提取区域\n\u0020roi\u0020=\u0020frame[region_of_interest[0][1]:region_of_interest[1][1],\u0020region_of_interest[0][0]:region_of_interest[1][0]]\n\n\u0020#\u0020将区域转换为灰度图像\n\u0020gray_roi\u0020=\u0020cv2.cvtColor(roi,\u0020cv2.COLOR_BGR2GRAY)\n\n\u0020#\u0020对灰度图像进行高斯模糊\n\u0020blurred_roi\u0020=\u0020cv2.GaussianBlur(gray_roi,\u0020(5,\u00205),\u00200)\n\n\u0020#\u0020进行边缘检测\n\u0020edges\u0020=\u0020cv2.Canny(blurred_roi,\u002050,\u0020150)\n\n\u0020#\u0020执行霍夫线变换\n\u0020lines\u0020=\u0020cv2.HoughLinesP(edges,\u00201,\u0020np.pi/180,\u0020threshold=100,\u0020minLineLength=100,\u0020maxLineGap=10)\n\n\u0020if\u0020lines\u0020is\u0020not\u0020None:\n\u0020\u0020#\u0020检测到入侵\n\u0020\u0020if\u0020invasion_start_time\u0020is\u0020None:\n\u0020\u0020\u0020invasion_start_time\u0020=\u0020time.time()\n\u0020\u0020\u0020print("Invasion\u0020started\u0020at:",\u0020time.ctime())\n\n\u0020\u0020#\u0020绘制检测到的线段\n\u0020\u0020for\u0020line\u0020in\u0020lines:\n\u0020\u0020\u0020x1,\u0020y1,\u0020x2,\u0020y2\u0020=\u0020line[0]\n\u0020\u0020\u0020cv2.line(roi,\u0020(x1,\u0020y1),\u0020(x2,\u0020y2),\u0020(0,\u00200,\u0020255),\u00202)\n\n\u0020else:\n\u0020\u0020#\u0020未检测到入侵\n\u0020\u0020if\u0020invasion_start_time\u0020is\u0020not\u0020None:\n\u0020\u0020\u0020#\u0020判断入侵时间是否超过半分钟\n\u0020\u0020\u0020if\u0020time.time()\u0020-\u0020invasion_start_time\u0020>\u002030:\n\u0020\u0020\u0020\u0020print("Invasion\u0020timeout!")\n\u0020\u0020\u0020\u0020alarm_triggered\u0020=\u0020True\n\u0020\u0020\u0020\u0020winsound.Beep(1000,\u00202000)\u0020#\u0020播放声音报警\n\u0020\u0020\u0020\u0020invasion_start_time\u0020=\u0020None\n\n\u0020#\u0020在画面上显示时间\n\u0020cv2.putText(frame,\u0020time.ctime(),\u0020(10,\u002030),\u0020cv2.FONT_HERSHEY_SIMPLEX,\u00200.8,\u0020(0,\u0020255,\u00200),\u00202)\n\n\u0020#\u0020在画面上显示入侵位置\n\u0020cv2.rectangle(frame,\u0020region_of_interest[0],\u0020region_of_interest[1],\u0020(0,\u0020255,\u00200),\u00202)\n\n\u0020#\u0020在画面上显示结果\n\u0020cv2.imshow('Invasion\u0020Detection',\u0020frame)\n\n\u0020if\u0020cv2.waitKey(1)\u0020&\u00200xFF\u0020==\u0020ord('q'):\n\u0020\u0020break\n\n#\u0020释放资源\ncap.release()\ncv2.destroyAllWindows()\n\n\n在使用代码前,请确保已经安装了OpenCV和winsound库。可以通过以下命令安装:\n\n\npip\u0020install\u0020opencv-python\npip\u0020install\u0020opencv-python-headless\npip\u0020install\u0020pywin32\n\n\n请注意,代码中的video_path变量是视频文件的路径,或者可以使用摄像头的索引(例如0表示第一个摄像头)。region_of_interest变量定义了感兴趣的区域,根据需要进行调整。
原文地址: https://www.cveoy.top/t/topic/pJve 著作权归作者所有。请勿转载和采集!