Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_opencv
提交
b172b99b
S
skill_tree_opencv
项目概览
CSDN 技术社区
/
skill_tree_opencv
通知
44
Star
9
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b172b99b
编写于
12月 14, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加人脸识别
上级
3088df8f
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
185 addition
and
0 deletion
+185
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/data_haarcascades_haarcascade_frontalface_alt.xml
.../1.人脸识别/data_haarcascades_haarcascade_frontalface_alt.xml
+0
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.md
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.md
+127
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.py
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.py
+58
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/fake_face.jpeg
data/1.OpenCV初阶/5.图像识别/1.人脸识别/fake_face.jpeg
+0
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_dest.jpeg
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_dest.jpeg
+0
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_detect.jpeg
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_detect.jpeg
+0
-0
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_src.jpeg
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_src.jpeg
+0
-0
未找到文件。
data/1.OpenCV初阶/5.图像识别/1.人脸识别/data_haarcascades_haarcascade_frontalface_alt.xml
0 → 100644
浏览文件 @
b172b99b
此差异已折叠。
点击以展开。
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.md
0 → 100644
浏览文件 @
b172b99b
# 被挤压的地铁人脸检测
![](
./fake_face.jpeg
)
即使是地铁挤压的人脸,也是有尊严的,值得被检测,经过 OpenCV 的努力,成功检测:
![](
./rust_face_detect.jpeg
)
*
左图是正常被识别的人脸
*
中图由于挤地铁人脸已不可识别
*
右图OpenCV单应性变换后,拯救了被miss的人脸
框架代码如下:
```
python
import
cv2
import
numpy
as
np
def
correct_rust_face
():
img_src
=
cv2
.
imread
(
'rust_face_src.jpeg'
)
pts_src
=
np
.
array
([[
0
,
0
],
[
0
,
1078
],
[
570
,
0
],
[
570
,
1078
]])
img_dst
=
cv2
.
imread
(
'rust_face_dest.jpeg'
)
pts_dst
=
np
.
array
([[
63
,
285
],
[
84
,
820
],
[
378
,
224
],
[
427
,
689
]])
dw
,
dh
=
img_src
.
shape
[
1
],
img_src
.
shape
[
0
]
h
,
status
=
cv2
.
findHomography
(
pts_dst
,
pts_src
)
img_out
=
cv2
.
warpPerspective
(
img_dst
,
h
,
(
dw
,
dh
))
return
img_out
def
face_detect
(
input_image
):
[
x
,
y
,
w
,
h
]
=
[
0
,
0
,
0
,
0
]
# TODO(You): 实现人脸识别
if
len
(
face_rects
)
>
0
:
for
face_rect
in
face_rects
:
x
,
y
,
w
,
h
=
face_rect
cv2
.
rectangle
(
input_image
,
(
x
,
y
),
(
x
+
w
,
y
+
h
),
[
255
,
255
,
0
],
2
)
if
__name__
==
'__main__'
:
[
x
,
y
,
w
,
h
]
=
[
0
,
0
,
0
,
0
]
rust_face_src
=
cv2
.
imread
(
'rust_face_src.jpeg'
)
face_detect
(
rust_face_src
)
rust_face_dest
=
cv2
.
imread
(
'rust_face_dest.jpeg'
)
face_detect
(
rust_face_dest
)
rust_face_dest_correct
=
correct_rust_face
()
face_detect
(
rust_face_dest_correct
)
images
=
np
.
concatenate
(
(
rust_face_src
[
0
:
1070
,
0
:
542
,
0
:
3
],
rust_face_dest
,
rust_face_dest_correct
[
0
:
1070
,
0
:
542
,
0
:
3
]),
axis
=
1
)
cv2
.
imshow
(
'rust_face_detect'
,
images
)
cv2
.
waitKey
(
0
)
cv2
.
destroyAllWindows
()
```
已知 OpenCV 官方仓库里有人脸分类器模型文件""data_haarcascades_haarcascade_frontalface_alt.xml""
请找出正确实现的代码。
## 答案
```
python
h
,
w
=
input_image
.
shape
[:
2
]
gray
=
cv2
.
cvtColor
(
input_image
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
cv2
.
equalizeHist
(
gray
)
min_size
=
(
w
//
10
,
h
//
10
)
face_cascade
=
cv2
.
CascadeClassifier
(
"data_haarcascades_haarcascade_frontalface_alt.xml"
)
face_rects
=
face_cascade
.
detectMultiScale
(
gray
,
1.05
,
2
,
cv2
.
CASCADE_SCALE_IMAGE
,
min_size
)
```
## 选项
### 没有使用灰度图
```
python
h
,
w
=
input_image
.
shape
[:
2
]
gray
=
cv2
.
cvtColor
(
input_image
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
cv2
.
equalizeHist
(
gray
)
min_size
=
(
w
//
10
,
h
//
10
)
face_cascade
=
cv2
.
CascadeClassifier
(
"data_haarcascades_haarcascade_frontalface_alt.xml"
)
face_rects
=
face_cascade
.
detectMultiScale
(
input_image
,
1.05
,
2
,
cv2
.
CASCADE_SCALE_IMAGE
,
min_size
)
```
### 没有使用模型
```
python
h
,
w
=
input_image
.
shape
[:
2
]
gray
=
cv2
.
cvtColor
(
input_image
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
cv2
.
equalizeHist
(
gray
)
min_size
=
(
w
//
10
,
h
//
10
)
face_rects
=
cv2
.
detectMultiScale
(
gray
,
1.05
,
2
,
cv2
.
CASCADE_SCALE_IMAGE
,
min_size
)
```
### 参数错误
```
python
h
,
w
=
input_image
.
shape
[:
2
]
gray
=
cv2
.
cvtColor
(
input_image
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
cv2
.
equalizeHist
(
gray
)
face_cascade
=
cv2
.
CascadeClassifier
(
"data_haarcascades_haarcascade_frontalface_alt.xml"
)
face_rects
=
face_cascade
.
detectMultiScale
(
gray
,
1.05
,
2
,
cv2
.
CASCADE_SCALE_IMAGE
,
w
//
10
,
h
//
10
)
```
data/1.OpenCV初阶/5.图像识别/1.人脸识别/face_detect.py
0 → 100644
浏览文件 @
b172b99b
import
cv2
import
numpy
as
np
def
correct_rust_face
():
img_src
=
cv2
.
imread
(
'rust_face_src.jpeg'
)
pts_src
=
np
.
array
([[
0
,
0
],
[
0
,
1078
],
[
570
,
0
],
[
570
,
1078
]])
img_dst
=
cv2
.
imread
(
'rust_face_dest.jpeg'
)
pts_dst
=
np
.
array
([[
63
,
285
],
[
84
,
820
],
[
378
,
224
],
[
427
,
689
]])
dw
,
dh
=
img_src
.
shape
[
1
],
img_src
.
shape
[
0
]
h
,
status
=
cv2
.
findHomography
(
pts_dst
,
pts_src
)
img_out
=
cv2
.
warpPerspective
(
img_dst
,
h
,
(
dw
,
dh
))
return
img_out
def
face_detect
(
input_image
):
[
x
,
y
,
w
,
h
]
=
[
0
,
0
,
0
,
0
]
h
,
w
=
input_image
.
shape
[:
2
]
gray
=
cv2
.
cvtColor
(
input_image
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
cv2
.
equalizeHist
(
gray
)
min_size
=
(
w
//
10
,
h
//
10
)
face_cascade
=
cv2
.
CascadeClassifier
(
"data_haarcascades_haarcascade_frontalface_alt.xml"
)
face_rects
=
face_cascade
.
detectMultiScale
(
gray
,
1.05
,
2
,
cv2
.
CASCADE_SCALE_IMAGE
,
min_size
)
if
len
(
face_rects
)
>
0
:
for
face_rect
in
face_rects
:
x
,
y
,
w
,
h
=
face_rect
cv2
.
rectangle
(
input_image
,
(
x
,
y
),
(
x
+
w
,
y
+
h
),
[
255
,
255
,
0
],
2
)
if
__name__
==
'__main__'
:
[
x
,
y
,
w
,
h
]
=
[
0
,
0
,
0
,
0
]
rust_face_src
=
cv2
.
imread
(
'rust_face_src.jpeg'
)
face_detect
(
rust_face_src
)
rust_face_dest
=
cv2
.
imread
(
'rust_face_dest.jpeg'
)
face_detect
(
rust_face_dest
)
rust_face_dest_correct
=
correct_rust_face
()
face_detect
(
rust_face_dest_correct
)
images
=
np
.
concatenate
(
(
rust_face_src
[
0
:
1070
,
0
:
542
,
0
:
3
],
rust_face_dest
,
rust_face_dest_correct
[
0
:
1070
,
0
:
542
,
0
:
3
]),
axis
=
1
)
# cv2.imwrite('rust_face_detect.jpeg', images)
cv2
.
imshow
(
'rust_face_detect'
,
images
)
cv2
.
waitKey
(
0
)
cv2
.
destroyAllWindows
()
data/1.OpenCV初阶/5.图像识别/1.人脸识别/fake_face.jpeg
0 → 100644
浏览文件 @
b172b99b
73.4 KB
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_dest.jpeg
0 → 100644
浏览文件 @
b172b99b
92.8 KB
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_detect.jpeg
0 → 100644
浏览文件 @
b172b99b
319.3 KB
data/1.OpenCV初阶/5.图像识别/1.人脸识别/rust_face_src.jpeg
0 → 100644
浏览文件 @
b172b99b
93.4 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录