Skip to content

Commit 50f99ad

Browse files
author
刘宇
committed
update
1 parent ea4c537 commit 50f99ad

6 files changed

+221
-2
lines changed

opencv学习/06检测多个.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33

44
# 检测函数
55
def face_detect_demo(img):
6-
# img = cv.resize(img, dsize=(500, 500))
6+
print(img.shape)
7+
r = 0.5
8+
w, h, _ = img.shape
9+
img = cv.resize(img, dsize=(int(h * r), int(w * r)))
710
# 1 转换为灰度图
811
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
912
# 加载分类器
1013
face_detect = cv.CascadeClassifier(
1114
r"D:\install\opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml"
1215
)
13-
face = face_detect.detectMultiScale(gary, 1.1, 5)
16+
face = face_detect.detectMultiScale(gary)
1417
for x, y, w, h in face:
1518
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
1619
cv.imshow("result", img)

opencv学习/07视频检测.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import cv2 as cv
2+
3+
4+
# 检测函数
5+
def face_detect_demo(img):
6+
# 1 转换为灰度图
7+
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
8+
# 加载分类器
9+
face_detect = cv.CascadeClassifier(
10+
r"D:\install\opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml"
11+
)
12+
face = face_detect.detectMultiScale(gary)
13+
for x, y, w, h in face:
14+
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
15+
cv.imshow("result", img)
16+
17+
18+
# 读取摄像头
19+
cap = cv.VideoCapture(0)
20+
21+
# cap.read()
22+
23+
# face_detect_demo(img)
24+
# 等待
25+
while True:
26+
flag, frame = cap.read()
27+
if not flag:
28+
break
29+
face_detect_demo(frame)
30+
if ord("q") == cv.waitKey(1): # 这里delay = 1 才不会一直第一帧
31+
break
32+
# 释放内存
33+
cv.destroyAllWindows()
34+
35+
# 释放摄像头
36+
cap.release()
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import cv2 as cv
2+
3+
cap = cv.VideoCapture(0)
4+
5+
flag = 1
6+
num = 1
7+
while (cap.isOpened()): # 检测是否在开启状态
8+
ret_flag, Vshow = cap.read()
9+
cv.imshow("Capture", Vshow)
10+
k = cv.waitKey(1) & 0xFF # 按键判断
11+
if k == ord("s"):
12+
cv.imwrite(f"save/{num}.jpg", Vshow)
13+
print("成功 保存 图片", num)
14+
num = num + 1
15+
elif k == ord(" "):
16+
break
17+
cap.release()
18+
cv.destroyAllWindows()

opencv学习/09训练数据.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import cv2 as cv
2+
import os
3+
from PIL import Image
4+
import numpy as np
5+
6+
7+
def getImageAndLables(path):
8+
# 储存人脸数据
9+
facesSamples = []
10+
# 储存姓名数据
11+
ids = []
12+
# 储存图片信息
13+
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
14+
# 加载分类器
15+
face_detector = cv.CascadeClassifier(
16+
r"D:\install\opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml"
17+
)
18+
# 遍历列表中图片
19+
for imagePath in imagePaths:
20+
# 打开图片,灰度化 PIL有九种不同模式 1 L P RGB RGBA CMYK YCbCr I F
21+
PIL_img = Image.open(imagePath).convert("L")
22+
23+
# ----------------
24+
# ----------------
25+
# 将 图像转化为数组 以黑白深浅
26+
img_numpy = np.array(PIL_img, "uint8")
27+
# 获取图片人脸特征
28+
faces = face_detector.detectMultiScale(img_numpy)
29+
# 获取每张图片的id和姓名
30+
id = int(os.path.split(imagePath)[1].split(".")[0])
31+
for x, y, w, h in faces:
32+
ids.append(id)
33+
facesSamples.append(img_numpy[y: y + h, x:x + w])
34+
# 打印脸部特征和id
35+
print("id", id)
36+
print("fs", facesSamples)
37+
return facesSamples, ids
38+
39+
40+
if __name__ == '__main__':
41+
path = "save/"
42+
# 获取图像数组和id标签数值和姓名
43+
faces, ids = getImageAndLables(path)
44+
# 加载识别器
45+
46+
recongnizer = cv.face.LBPHFaceRecognizer_create()
47+
# 训练
48+
recongnizer.train(faces, np.array(ids))
49+
# 保存
50+
recongnizer.write("trainer/trainer.yml")

opencv学习/10人脸识别.py

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import cv2
2+
import numpy as np
3+
import os
4+
# coding=utf-8
5+
import urllib
6+
import urllib.request
7+
import hashlib
8+
9+
#加载训练数据集文件
10+
recogizer=cv2.face.LBPHFaceRecognizer_create()
11+
recogizer.read('trainer/trainer.yml')
12+
names=[]
13+
warningtime = 0
14+
15+
def md5(str):
16+
import hashlib
17+
m = hashlib.md5()
18+
m.update(str.encode("utf8"))
19+
return m.hexdigest()
20+
21+
statusStr = {
22+
'0': '短信发送成功',
23+
'-1': '参数不全',
24+
'-2': '服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
25+
'30': '密码错误',
26+
'40': '账号不存在',
27+
'41': '余额不足',
28+
'42': '账户已过期',
29+
'43': 'IP地址限制',
30+
'50': '内容含有敏感词'
31+
}
32+
33+
34+
def warning():
35+
smsapi = "http://api.smsbao.com/"
36+
# 短信平台账号
37+
user = '13******10'
38+
# 短信平台密码
39+
password = md5('*******')
40+
# 要发送的短信内容
41+
content = '【报警】\n原因:检测到未知人员\n地点:xxx'
42+
# 要发送短信的手机号码
43+
phone = '*******'
44+
45+
data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content})
46+
send_url = smsapi + 'sms?' + data
47+
response = urllib.request.urlopen(send_url)
48+
the_page = response.read().decode('utf-8')
49+
print(statusStr[the_page])
50+
51+
#准备识别的图片
52+
def face_detect_demo(img):
53+
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换为灰度
54+
face_detector=cv2.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
55+
face=face_detector.detectMultiScale(gray,1.1,5,cv2.CASCADE_SCALE_IMAGE,(100,100),(300,300))
56+
#face=face_detector.detectMultiScale(gray)
57+
for x,y,w,h in face:
58+
cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
59+
cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1)
60+
# 人脸识别
61+
ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
62+
#print('标签id:',ids,'置信评分:', confidence)
63+
if confidence > 80:
64+
global warningtime
65+
warningtime += 1
66+
if warningtime > 100:
67+
warning()
68+
warningtime = 0
69+
cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
70+
else:
71+
cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
72+
cv2.imshow('result',img)
73+
#print('bug:',ids)
74+
75+
def name():
76+
path = './data/jm/'
77+
#names = []
78+
imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
79+
for imagePath in imagePaths:
80+
name = str(os.path.split(imagePath)[1].split('.',2)[1])
81+
names.append(name)
82+
83+
84+
cap=cv2.VideoCapture('1.mp4')
85+
name()
86+
while True:
87+
flag,frame=cap.read()
88+
if not flag:
89+
break
90+
face_detect_demo(frame)
91+
if ord(' ') == cv2.waitKey(10):
92+
break
93+
cv2.destroyAllWindows()
94+
cap.release()
95+
#print(names)

opencv学习/11网页视频.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import cv2
2+
3+
4+
class CaptureVideo(object):
5+
def net_video(self):
6+
# 获取网络视频流
7+
# cam = cv2.VideoCapture("rtmp://192.168.0.10/live/test")
8+
cam = cv2.VideoCapture("rtmp://58.200.131.2:1935/livetv/hunantv")
9+
while cam.isOpened():
10+
sucess, frame = cam.read()
11+
cv2.imshow("Network", frame)
12+
cv2.waitKey(1)
13+
14+
15+
if __name__ == "__main__":
16+
capture_video = CaptureVideo()
17+
capture_video.net_video()

0 commit comments

Comments
 (0)