计算机视觉库 OpenCV 的安装和体验OpenCV的人脸识别opencv_contrib_python

一、计算机视觉库 OpenCV 的应用体验

    OpenCV是一个用C++语言编写的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。轻量高效而且还提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

    在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有丰富的常用图像处理函数库,安装和使用OpenCV可以直接使用pip安装,我这里是Python3.11版本。

    OpenCV依赖一些库,比如Numpy,在执行OpenCV安装的时候会自动安装上的。

pip install opencv-python
Collecting opencv-python ..49d2/opencv_python-4.7.0.72-cp37-abi3-win_amd64.whl (38.2 MB)
Collecting numpy>=1.21.2 (from opencv-python) ..85d47a2/numpy-1.24.3-cp311-cp311-win_amd64.whl (14.8 MB)
Successfully installed numpy-1.24.3 opencv-python-4.7.0.72

    截止:2023-05 其官网 https://opencv.org/releases/  的最新版本也是: opencv-4.7.0 于2022-12-29发布的。

上面的安装成功之后,就可以使用如下代码导入图片、对图片进行处理。

#安装的是opencv_python,但在导入的时候是import cv2。
import cv2 as cv
import os
# 显示同目录下的图片test.png,
print(os.getcwd())
img = cv.imread("test.png")
cv.imshow("show img", img)

# 给图片绘制上线条、圆形、矩形
cv.line(img,(0,0),(300,300),(255,0,0), 5)
cv.rectangle(img,(100,100),(200,200),(0,255,0),3)
cv.circle(img,(150,150), 50, (0,0,255), -1)

cv.waitKey(0)
cv.destroyAllWindows()

二、 体验OpenCV的人脸识别opencv_contrib_python

    只安装opencv-python是没有包含人脸识别所需要的功能方法的,opencv人脸识别还没有放在常规发行版中。要安装opencv-contrib-python扩展,此模块可直接使用pip安装即可。

python3 -m pip install opencv-contrib-python
 Collecting opencv-contrib-python
 Downloading https://pypi.tuna.tsing
 Successfully installed opencv-contrib-python-4.7.0.72.../opencv_contrib_python-4.7.0.72-cp37-abi3-win_amd64.whl (44.9 MB)

    下方是检测人脸的程序代码如下。其中haarcascade_frontalface_default.xml为检测人脸的算法文件,可到opencv官方github地址中 https://github.com/opencv/opencv/tree/master/data/haarcascades 下载。上面有非常多的人脸算法。

import cv2
import os

def generate_img(dirname):
	# 显示当前目录,好排查相关文件加载、图片保存的路径问题
	print(os.getcwd())
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    if (not os.path.isdir(dirname)):
        os.makedirs(dirname)
    cap = cv2.VideoCapture(0)
    count = 0
    while True:
        ret,frame = cap.read()
        x,y = frame.shape[0:2]
        small_frame = cv2.resize(frame, (int(y/2), int(x/2)))
        result = small_frame.copy()
        gray = cv2.cvtColor(small_frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray,1.3,5)
        for (x, y, w, h) in faces:
            result = cv2.rectangle(result, (x, y), (x + w, y + h), (255, 0, 0), 2)
            f = cv2.resize(gray[y: y + h, x: x + w], (200, 200))
            if count <= 10:
                cv2.imwrite(dirname + '%s.png' % str(count), f)
                count += 1
        cv2.imshow('face', result)
        if cv2.waitKey(40) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
    
if __name__ == '__main__':
    generate_img("./saveimg/")

    在使用opencv haarcascade_frontalface_default.xml识别人脸的时候,发现其性能比较高,可以直接在我基于CPU的电脑上流畅运行,并尝试了使用一些照片,发现只有照片离摄像头足够近时才可以检测到人脸。另外体验中发现它对于旋转人脸、非正面人脸识别效果不太好,特别是当使用手挡住眼睛后会直接导致人脸检测失败,应该是采用的传统机器学习算法。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值