树莓派+摄像头实现对移动物体的检测

在上一篇文章中实现了树莓派下对摄像头的调用,有兴趣的可以看一下:python+opencv实现摄像头调用的方法

接下来,我们将使用python+opencv实现对移动物体的检测

一、环境变量的配置

我们可以参照上一篇文章对我们的树莓派进行环境的配置

当我们将cv2的库安装之后,就可以实现对摄像头的操作

二、摄像头的连接

在此实验中,我使用的为usb摄像头

当我们连接摄像头之后,终端输入

ls /dev/video*

如果终端提示如下:

则表示摄像头连接成功

三、编码实现对移动物体的检测

使用python编写程序,实现对移动物体的检测,代码如下

#encoding=utf-8
import RPi.GPIO as GPIO
import cv2
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)

camera = cv2.VideoCapture(0)
if camera is None:
 print('please connect the camera')
 exit()

fps = 30
pre_frame = None

led = False

while True:
 start = time.time()
 res, cur_frame = camera.read()
 if res != True:
  break
 end = time.time()
 seconds = end - start
 if seconds < 1.0/fps:
  time.sleep(1.0/fps - seconds)

 cv2.namedWindow('img',0);
 #cv2.imshow('img', cur_frame)
 key = cv2.waitKey(30) & 0xff
 if key == 27:
  break

 gray_img = cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)
 gray_img = cv2.resize(gray_img, (500, 500))
 gray_img = cv2.GaussianBlur(gray_img, (21, 21), 0)

 if pre_frame is None:
  pre_frame = gray_img
 else:
  img_delta = cv2.absdiff(pre_frame, gray_img)
  thresh = cv2.threshold(img_delta, 25, 255, cv2.THRESH_BINARY)[1]
  thresh = cv2.dilate(thresh, None, iterations=2)

 contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
 for c in contours:
   if cv2.contourArea(c) < 1000:
    continue
   else:
  (x,y,w,h) = cv2.boundingRect(c)
 cv2.rectangle(cur_frame,(x,y),(x+w,y+h),(0,255,0),2)

 print("something is moving!!!")
 led = True
 if led == True:
 for i in range(30):
 GPIO.output(18,GPIO.HIGH)
 time.sleep(0.03)
 GPIO.output(18,GPIO.LOW)
 time.sleep(0.03)
    break

 cv2.imshow('img', cur_frame)
  pre_frame = gray_img

camera.release()
cv2.destroyAllWindows()

我的树莓派终端不能显示中文,因此会出现乱码

Ubuntu下的运行结果如下

树莓派下执行结果如下:

此外,在检测物体移动的同时,添加了led闪烁以及框选移动部分的功能,led安装方法请移步之前的博客

文章参考链接:OpenCV检测场景内是否有移动物体

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

    1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的人脸: 图 1 动态实时检测效果图 检测到的人脸矩形图像,会依次平铺显示在摄像头的左上方: 当多个人脸时候,也能够依次铺开显示: 左上角窗口的大小会根据捕获到的人脸大小实时变化: 图 2 单个/多个人脸情况下摄像头识别显示结果 2. 代码实现 主要分为三个部分: 摄像头调用,利用 OpenCv 里面

  • Python OpenCV利用笔记本摄像头实现人脸检测

    本文实例为大家分享了Python OpenCV利用笔记本摄像头实现人脸检测的具体代码,供大家参考,具体内容如下 1.安装opencv 首先参考其他文章安装pip. 之后以管理员身份运行命令提示符,输入以下代码安装opencv pip install --user opencv-python 可以使用以下代码测试安装是否成功 #导入opencv模块 import cv2 #捕捉帧,笔记本摄像头设置为0即可 capture = cv2.VideoCapture(0) #循环显示帧 while(Tru

  • python+opencv+caffe+摄像头做目标检测的实例代码

    首先之前已经成功的使用Python做图像的目标检测,这回因为项目最终是需要用摄像头的, 所以实现摄像头获取图像,并且用Python调用CAFFE接口来实现目标识别 首先是摄像头请选择支持Linux万能驱动兼容V4L2的摄像头, 因为之前用学ARM的时候使用的Smart210,我已经确认我的摄像头是支持的, 我把摄像头插上之後自然就在 /dev 目录下看到多了一个video0的文件, 这个就是摄像头的设备文件了,所以我就没有额外处理驱动的部分 一.检测环境 再来在开始前因为之前按着国嵌的指导手册安

  • 树莓派+摄像头实现对移动物体的检测

    在上一篇文章中实现了树莓派下对摄像头的调用,有兴趣的可以看一下:python+opencv实现摄像头调用的方法 接下来,我们将使用python+opencv实现对移动物体的检测 一.环境变量的配置 我们可以参照上一篇文章对我们的树莓派进行环境的配置 当我们将cv2的库安装之后,就可以实现对摄像头的操作 二.摄像头的连接 在此实验中,我使用的为usb摄像头 当我们连接摄像头之后,终端输入 ls /dev/video* 如果终端提示如下: 则表示摄像头连接成功 三.编码实现对移动物体的检测 使用py

  • python开启摄像头以及深度学习实现目标检测方法

    最近想做实时目标检测,需要用到python开启摄像头,我手上只有两个uvc免驱的摄像头,性能一般.利用python开启摄像头费了一番功夫,主要原因是我的摄像头都不能用cv2的VideCapture打开,这让我联想到原来opencv也打不开Android手机上的摄像头(后来采用QML的Camera模块实现的).看来opencv对于摄像头的兼容性仍然不是很完善. 我尝了几种办法:v4l2,v4l2_capture以及simpleCV,都打不开.最后采用pygame实现了摄像头的采集功能,这里直接给大

  • Python实现树莓派摄像头持续录像并传送到主机的步骤

    关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由"Raspberry Pi 基金会"这个慈善组织注册开发.埃•厄普顿就是该项目的头目.在2012年的3月,英国剑桥大学埃本•阿普顿(Eben Epton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是Raspberry Pi电脑板,中文译名"树莓派"! 树莓派作为一个轻便迷你的小终端很受大众的

  • Python使用背景差分器实现运动物体检测

    目录 前言 一.基本背景差分器 二.MOG背景差分器 流程 代码编写 三.KNN背景差分器 前言 目前,许多运动检测技术都是基于简单的背景差分概念的,即假设摄像头(视频)的曝光和场景中的光照条件是稳定的,当摄像头捕捉到新的帧时,我们可以从参考图像中减去该帧,并取这个差的绝对值,以获得帧中每个像素位置的运动测量值.如果帧的任何区域与参考图像有很大的不同,我们就认为给定区域中是一个运动物体. 本文主要简单介绍基本背景差分器,详细介绍MOG背景差分器,KNN背景差分器. 一.基本背景差分器 首先,基本

  • 树莓派安装mjpg-streamer使用摄像头的方法

    1.更新软件: sudo apt-get update #更新软件列表 sudo apt-get upgrade #更新软件 2.安装依赖和相关工具: sudo apt-get install subversion sudo apt-get install libjpeg8-dev #JPEG支持库 sudo apt-get install imagemagick sudo apt-get install libv4l-dev #4l是小写"L" sudo apt-get instal

  • OpenCV实现物体的凸包检测的示例代码

    目录 1. 凸包 2.寻找凸包:convexHull()函数 3.函数解析之theRNG() 4 .circle()函数[回忆] 5.基础示例程序:凸包检测基础 1. 凸包 什么是凸包? 解释:给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸边形,它是包含点集中所有的点. 如下:用人手图来举例说明凸缺陷概念.手周围深色的线描画出凸包,A到H被标出的区域是凸包的各个“缺陷”,这些凸度缺陷提供了手以及手状态的特征表现的方法. 2.寻找凸包:convexHull()函数 说明:convexH

  • 基于OpenCV的摄像头测距的实现示例

    目录 前言 一.测距原理 二.代码 1.引入库 2.读入数据 总结 前言 去年暑假参加了一个比赛,比赛内容中需要确定目标的位置 本来想全用图像完成的,最后发现不是很符合要求.比完赛之后,就忙别的事了.直到现在突然想试试摄像头测距.就来了 一.测距原理 摄像头单目测距原理及实现 空间的深度或距离等数据的摄像头. 人的眼睛长在头部的前方,两只眼的视野范围重叠,两眼同时看某一物体时,产生的视觉称为双眼视觉. 双眼视觉的优点是可以弥补单眼视野中的盲区缺损,扩大视野,并产生立体视觉. f为摄像头的焦距,c

  • 基于openCV实现人脸检测

    openCV的人脸识别主要通过Haar分类器实现,当然,这是在已有训练数据的基础上.openCV安装在 opencv/opencv/sources/data/haarcascades_cuda(或haarcascades)中存在预先训练好的物体检测器(xml格式),包括正脸.侧脸.眼睛.微笑.上半身.下半身.全身等. openCV的的Haar分类器是一个监督分类器,首先对图像进行直方图均衡化并归一化到同样大小,然后标记里面是否包含要监测的物体.它首先由Paul Viola和Michael Jon

  • 10 行Python 代码实现 AI 目标检测技术【推荐】

    只需10行Python代码,我们就能实现计算机视觉中目标检测. from imageai.Detection import ObjectDetection import os execution_path = os.getcwd() detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath( os.path.join(execution_path , "resnet50_coco_b

随机推荐