一、树莓派摄像头安装和使用
使用usb摄像头进行实时监控步骤:
**1.安装motion程序
$ sudo apt-get install motion
2.配置motion程序
sudo vim /etc/default/motion
把no改成yes,开启motion的daemon一直检测设备。
$ sudo vim /etc/motion/motion.conf
把daemon off改成daemon on
确认视频流的接口是8081
把stream_localhost on改成stream_localhost off,关闭localhost本地的限制。
把sdl_threadnr注释掉。
保存文件,退出。
3.启动motion程序的daemon
$ sudo motion
只要这个motion一直开着,就支持热插拔。
关闭重启motion:
$ sudo killall -TERM motion
$ sudo motion
4.打开浏览器查看树莓派的摄像头影像
地址是:http://树莓派IP地址:8081
二、python人脸定位
A 目标检测步骤:
1)安装软件
pip3 install opencv-python
sudo apt-get install libatlas-base-dev libjasper-dev
sudo apt-get install libgstreamer1.0-0
sudo apt-get install libgstreamer-plugins-base1.0-0
sudo apt-get install libqtgui4 libqt4-test
2)行人检测
行人检测HOG+SVM
1、提取样本hog特征。
2、投入svm分类器训练,得到model。
3、由model生成检测子。
4、利用检测子检测负样本,得到hardexample。
5、提取hardexample的hog特征并结合第一步中的特征一起投入训练,得到最终检测子。
代码:
import cv2
def is_inside(o, i):
ox, oy, ow, oh = o
ix, iy, iw, ih = i
# 如果符合条件,返回True,否则返回False
return ox > ix and oy > iy and ox + ow < ix + iw and oy + oh < iy + ih
#根据坐标画出人物所在的位置
def draw_person(img, person):
x, y, w, h = person
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 2)
#定义HOG特征+SVM分类器
img = cv2.imread("people3.jpg")
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
found, w = hog.detectMultiScale(img, winStride=(8, 8), scale=1.05)
#判断坐标位置是否有重叠
found_filtered = []
for ri, r in enumerate(found):
for qi, q in enumerate(found):
a = is_inside(r, q)
if ri != qi and a:
break
else:
found_filtered.append(r)
#勾画筛选后的坐标位置
for person in found_filtered:
draw_person(img, person)
#显示图像
cv2.imshow("people detection", img)
while 1:
if cv2.waitKey(1) & 0xFF == ord('q'):
break
> B 轮廓检测 把整幅图像分成了非黑即白的二值图像。 函数为cv2.threshold() 这个函数有四个参数, 第一个原图像,
> 第二个进行分类的阈值, 第三个是高于(低于)阈值时赋予的新值, 第四个是一个方法选择参数,常用的有: •
> cv2.THRESH_BINARY(黑白二值) • cv2.THRESH_BINARY_INV(黑白二值反转) •
> cv2.THRESH_TRUNC (得到的图像为多像素值) • cv2.THRESH_TOZERO •
> cv2.THRESH_TOZERO_INV 该函数有两个返回值 第一个retVal(得到的阈值值) 第二个就是阈值化后的图像。
> ret,thresh1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
> 对于BINARY方法,当图像中的灰度值大于127的重置像素值为255.
import numpy as np
import cv2
img = cv2.imread(‘test1.jpg’)
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
*
> 人脸定位
*
安装软件
pip3 install opencv-python
打开python编辑器,运行下面的代码:
import cv2 as cv
如果不报错,就表示安装成功了。
opencv分类器文件
网址 https://github.com/opencv/opencv/tree/master/data/haarcascades
人脸定位脚本
import cv2 as cv
import numpy as np
#检测人脸
def face_detect_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 转为灰度图像。
face_detector = cv.CascadeClassifier("d:/shares/haarcascade_frontalface_alt.xml") # 加载分类器。
faces = face_detector.detectMultiScale(gray, 1.1, 2)
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) # 人脸位置加红框。
cv.imshow("result", image) # 显示已经定位人脸的图片
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("d:/shares/faces002.jpg") # 读取图片 文件。
face_detect_demo(src) # 调用函数
cv.waitKey(0)
cv.destroyAllWindows() # 关闭所有窗口
三、树莓派3b shell简单编程
1.用vnc客户端连接树莓派,打开树莓派图形界面,打开终端
2.先cd+你想要进入的目录下,用mkdir+目录名创建一个你想要存放shell脚本的文件下
3.进入文件夹之后,输入:sudo nano shell脚本文件名(.sh文件),进入文件编程
chmod +x ./文件名.sh #使脚本具有执行权限
./文件名.sh #执行脚本
4.输入以下程序:
#!/bin/bash
#monitor available disk space
#提取本服务器的IP地址信息
SPACE=` df -hP | awk '{print int($5)}'`
usage1=` echo $SPACE | awk '{print int($2)}' `
echo $usage1
if [ $usage1 -ge 30 ]
then
echo " 服务器 磁盘空间 使用率已经超过90%,请及时处理。" > ~/warning.log
fi