开启摄像头(给树莓派插入一个摄像头)树莓派安装基于python的opencv_树莓派安装opencv python-CSDN博客
这么插入
然后修改树莓派配置,开启摄像头模块。
sudo raspi-config
再次检查
vcgencmd get_camera
supported = 1 detected = 0
detected = 0 表明没有接入摄像头设备,看下设备是否插反了
supported = 1 detected = 1 # detected=1 表示识别到1个摄像头
测试拍照功能
$ raspistill -o test.jpg
motion
安装 motion
$ sudo apt-get install motion
配置 motion.conf
$ sudo vi /etc/motion/motion.conf
############## 参数说明 ##################
target_dir /var/lib/motion # 图片/视频文件存储的位置
webcontrol_localhost on # 将on改成off,允许非本机访问http控制台
stream_localhost on # 将on改成off,允许通过网页查看摄像头
deamon off # 改成on,允许后台启动
width # 设置分辨率 宽
height # 设置分辨率 高
locate_motion_mode on # 设置探测到图像中有运动时,把运动区域用矩形框起来
ffmpeg_video_codec mkv # 设定视频的编码器
snapshot_interval 1 # 设定自动采集图片的周期,当有运动被检测到时,采集频率会自动变高
运行 motion
$ sudo motion
现在我们的摄像头已经变成了一台网络摄像头。在浏览器下访问 http://ip:8081 即可看到摄像头当前拍摄的画面。
# 树莓派学习:CSI摄像头安装及使用_树莓派调用csi摄像头-CSDN博客
打开Python
将代码复制到python中
import cv2
cap=cv2.VideoCapture(0) #调用摄像头‘0’一般是打开电脑自带摄像头,‘1’是打开外部摄像头(只有一个摄像头的情况)
width=1280
height=960
cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)#设置图像宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)#设置图像高度
#显示图像
while True:
ret,frame=cap.read()#读取图像(frame就是读取的视频帧,对frame处理就是对整个视频的处理)
#print(ret)#
#######例如将图像灰度化处理,
img=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#转灰度图
cv2.imshow("img",img)
########图像不处理的情况
cv2.imshow("frame",frame)
input=cv2.waitKey(20)
if input==ord('q'):#如过输入的是q就break,结束图像显示,鼠标点击视频画面输入字符
break
cap.release()#释放摄像头
cv2.destroyAllWindows()#销毁窗口
测试成功,可以玩耍啦
树莓派摄像头检测运动物体
树莓派摄像头检测运动物体_树莓派 opencv识别物体-CSDN博客
人体检测
参考OpenCV实例(六)行人检测_基于opencv的行人检测-CSDN博客
复制代码
import cv2
image = cv2.imread("back.jpg")
hog = cv2.HOGDescriptor() #初始化方向梯度直方图描述子
#设置SVM为一个预先训练好的行人检测器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
#调用函数detectMultiScale,检测行人对应的边框
(rects, weights) = hog.detectMultiScale(image)
#遍历每一个矩形框,将之绘制在图像上
for (x, y, w, h) in rects:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow("image", image) #显示检测结果
cv2.waitKey(0)
cv2.destroyAllWindows()
确保代码同级文件夹下有一张"back.jpg"的照片才行。
使用视频流检测人体:
import cv2
#filename = "/home/pi/Desktop/python代码/MP4/video.mp4"
#如果是摄像头的话
camera = cv2.VideoCapture(0) #0表示默认摄像头
#image = cv2.imread("123.jpg")
hog = cv2.HOGDescriptor() #初始化方向梯度直方图描述子
#设置SVM为一个预先训练好的行人检测器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 初始化当前帧的前帧
lastFrame = None
# 遍历视频的每一帧
while camera.isOpened():
# 读取下一帧
(ret, image) = camera.read()
# 调整该帧的大小
image = cv2.resize(image, (800, 400), interpolation=cv2.INTER_CUBIC)
cv2.imshow("image1", image) #显示检测结果
#调用函数detectMultiScale,检测行人对应的边框
(rects, weights) = hog.detectMultiScale(image,winStride=(4,4))
#遍历每一个矩形框,将之绘制在图像上
for (x, y, w, h) in rects:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cv2.imshow("image", image) #显示检测结果
cv2.waitKey(0)
camera.release()
cv2.destroyAllWindows()
最后说几句,这里的模型是官方自带的模型,如若想自己用OpenCV训练模型,也是可以的,但是zero2W太拉了,如用电脑训练怕模型太大就没再尝试。文章来源:https://www.toymoban.com/news/detail-833947.html
市面上还有很多物体识别的工具如tensorflow,yolo,也是由于2W太拉,用官方库即可,而且我是A卡,tensorflow训练太慢,如N卡,可电脑训练,树莓派用tensorflow lite运行文章来源地址https://www.toymoban.com/news/detail-833947.html
到了这里,关于树莓派zero2W学习四OpenCV初探索(人体检测,运动物体检测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!