开启摄像头(给树莓派插入一个摄像头)树莓派安装基于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博客

C语言打开

树莓派C++语言通过opencv调用csi摄像头显示图像_树莓派c语言使用opencv-CSDN博客

树莓派配置Opencv(C++)_树莓派 opencv-CSDN博客

将opecv添加到Geany的编译和构件中,与WiringPi在Geany的配置是类似的,只需要在Compile的后面添加( p k g − c o n f i g − − c f l a g s − − l i b s o p e n c v ) 和 B u i l d 的后面添加 (pkg-config --cflags --libs opencv)和Build的后面添加(pkg−config−−cflags−−libsopencv)和Build的后面添加(pkg-config --cflags --libs opencv)

打开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太拉了,如用电脑训练怕模型太大就没再尝试。

市面上还有很多物体识别的工具如tensorflow,yolo,也是由于2W太拉,用官方库即可,而且我是A卡,tensorflow训练太慢,如N卡,可电脑训练,树莓派用tensorflow lite运行

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。