人脸识别opencv

opencv与dlib介绍

1.1 opencv介绍

opencv是一个基于bsd许可(开源)发行的跨平台计算机视觉库,可以运行在liunx,windows,android和mac os操作系统上。它轻量级而且高效由一系列c函数和少量c++类构成。同时提供python ,ruby ,matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv目前主要用c++语言开发,它主要接口也是c++语言封装,但是保留了大量的c语言接口,该库有大量的python,java and matlab/octave的接口,这些语言的api接口函数可以通过在线文档获得,如今提供对于其他语言的支持。

ros机器人操作系统

beam远程机器人

国内叫做派宝

除了opencv以外,还有哪些图像处理开源软件

openmv,放在单片机。

boofcv,主要用java写

simplecv,视觉框架,为用户提供一个更好的编程接口

SOD,主要应用在嵌入式,代码是开源免费的。

dlib

halcon,商业,比较贵

二dlib介绍

dlib是一个现代代的c++工具箱,其中包含用于C++中创建复杂软件以解决实际问题的机器学习算法和工具。它广泛应用工业界和学术界,包括机器人,嵌入工设备,移动电话和大型高性能计算环境。Dlib的开源许可证允许在任何应用程序中免费使用它,包含很多模块,近几年主要关注在机器学习、深度学习、图像处理等模块的开发。

dlib C++ Library   

Home - OpenCV

引入了resnet 残差神经网络,比cnn精度高多了。

1、文档非常丰富,支持debug模式,提供了大量的实例,不依赖于第三方库,支持windows,mac os ,liunx,提供基于svm分类器和递归算法。

1、计算视觉导论

计算机视觉介绍

计算机视觉解决的基本问题

计算机视觉前沿进展

计算机视觉应用

卷积神经学习路径

课程成果案例演示

人脸识别

关键点检测

目标检测

opencv读取摄像头数据

#codeing=utf-8

import cv2

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap.open(0)

while cap.isOpened():
    flag ,frame = cap.read()
    cv2.imshow("my_windows",frame)
    key_pressed = cv2.waitKey(60)
    print("键盘上被按下的键提示",key_pressed)
    if key_pressed == 27:
        break

cap.release()
cv2.destroyAllWindows()

opencv进行视频流的边缘检测

#codeing=utf-8

import cv2

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap.open(0)

while cap.isOpened():
    flag ,frame = cap.read()
    cv2.imshow("my_windows",frame)
    key_pressed = cv2.waitKey(60)
    print("键盘上被按下的键提示",key_pressed)
    if key_pressed == 27:
        break

cap.release()
cv2.destroyAllWindows()

opencv图像的读取及保存

#codeing=utf-8

import cv2

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap.open(0)

while cap.isOpened():
    flag ,frame = cap.read()
    cv2.imshow("my_windows",frame)
    key_pressed = cv2.waitKey(60)
    print("键盘上被按下的键提示",key_pressed)
    if key_pressed == 27:
        break

cap.release()
cv2.destroyAllWindows()

opencv视频流的人脸检测,眼睛检测及微笑检测

#codeing=utf-8

import cv2
print(cv2.data.haarcascades)
#载入人脸检测器
face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_frontalface_default.xml")
#载入眼睛检测器
eye_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_eye.xml")
#载入笑容检测器
smile_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_smile.xml")

#调用摄像头
cap = cv2.VideoCapture(0)

while (True):
    #获取摄像头拍摄到的图像
    ret ,frame = cap.read()

    faces=face_cascade.detectMultiScale(frame,1.3,2)
    img=frame
    for (x,y,w,h) in faces:
        #画出人脸框,蓝色,画笔宽度微
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        face_area=img[y:y+h,x:x+w]
        # 画出人脸框,在人脸区域而不是全图中进行人眼检测,节省计算资源
        eyes = eye_cascade.detectMultiScale(face_area,1.3,10)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)

        ##微笑检测
        smiles = smile_cascade.detectMultiScale(face_area,scaleFactor=1.16,minNeighbors=65,minSize=(25,25),flags=cv2.CASCADE_SCALE_IMAGE)
        for (ex, ey, ew, eh) in smiles:
            cv2.rectangle(face_area, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 1)
            cv2.putText(img,'Smile',(x,y-7),3,1.2,(0,0,255),2,cv2.LINE_AA)
        cv2.imshow("my_windows", img)

    key_pressed = cv2.waitKey(60)
    print("键盘上被按下的键提示",key_pressed)
    if key_pressed == 27:
        break

cap.release()
cv2.destroyAllWindows()

视频获取并得到灰度图像

#codeing=utf-8

#导入opencv
import cv2

#捕获摄像头,传入摄像头索引号,默认摄像头索引为0

cap  = cv2.VideoCapture(0)

#校验摄像头是否捕获成功,如果未成功则输出提示
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

#无限循环,直到触发break 跳出
while True:
    #获取摄像头捕获的画面的帧,返回ret和frame
    #ret的True/False反映是否捕获成功,Frame为画面
    ret,frame = cap.read()
    #校验画面帧是否正确捕获,如果未成功则输出提示,跳出循环
    if not ret :
        print("无法获取画面帧")
        break
    #对画面帧进行处理
    #这里是将画面转为灰度图
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    #在窗口中显示处理之后的画面
    cv2.imshow('frame_windows',gray)
    #获取键盘按键动作,如果按下esc键则跳出循环
    if cv2.waitKey(1) == 27:
        break
cap.release()
cv2.destroyAllWindows()

python读取本地视频并转成灰度视频

#获取、处理、展示本地视频

#导入opencv-python
import cv2

#传入本地视频
cap = cv2.VideoCapture('WeChat_20220507092528.mp4')

#校验本地视频是否捕获成功,如果未成功则输出提示

if not cap.isOpened():
    print("无法打开视频")
    exit(1)

#获取视频的高,宽信息,cap.get 传入的参数可以是0-18的整数,也可以设置宽高等信息
print("WIDH",cap.get(3))
print("WIDH",cap.get(4))

"""
python detect.py  --source 0  --weights yolov5x.pt 
"""

#无限循环,直到触发break跳出
while True:
    #获取视频画面,返回ret,frame
    #ret的True/False反映是否捕获成功,frame是画面
    ret,frame = cap.read()
    #校验画面帧是否正确捕获,如果未成功则输出提示,跳出循环
    if not ret:
        print("无法获取画面")
        break

    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame_show',gray)
    #检测时间25毫秒是最好的。
    if cv2.waitKey(25) == 27:
        break

cap.release()
cv2.destroyAllWindows()

opencv读取摄像头数据,并保存

#导入科学计算库
import numpy as np

#导入opencv-python
import cv2

#获取摄像头
cap = cv2.VideoCapture(0)

#指定videoWriter的fourCC视频编码
fourcc = cv2.VideoWriter_fourcc(*'DIVX')

#指定输出文件,fourcc视频编码,FPS帧率、画面大小
#fourcc :视频编码
#FPS:帧率、
#画面大小
out = cv2.VideoWriter('output.avi',fourcc,24.0,(640,480))
while cap.isOpened():
    ret,frame = cap.read()
    #视频
    frame=cv2.flip(frame,0)
    out.write(frame)
    cv2.imshow('frame',frame)
    if not ret:
        print("无法打开摄像头")
    if cv2.waitKey(25) == 27:
        break

'''
苹果提供的测试源(点播):
亲测可用,需等待一段时间,有点卡。

苹果提供的测试链接,等待时间更长,也能用。
  http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
  http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8
  bipbop basic master playlist 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 
  bipbop basic 400x300 @ 232 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/prog_index.m3u8 
  bipbop basic 640x480 @ 650 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8 
  bipbop basic 640x480 @ 1 Mbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear3/prog_index.m3u8 
  bipbop basic 960x720 @ 2 Mbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear4/prog_index.m3u8 
  bipbop basic 22.050Hz stereo @ 40 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear0/prog_index.m3u8

  bipbop advanced master playlist 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8 
  bipbop advanced 416x234 @ 265 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear1/prog_index.m3u8 
  bipbop advanced 640x360 @ 580 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear2/prog_index.m3u8 
  bipbop advanced 960x540 @ 910 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear3/prog_index.m3u8 
  bipbop advanced 1280x720 @ 1 Mbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear4/prog_index.m3u8 
  bipbop advanced 1920x1080 @ 2 Mbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear5/prog_index.m3u8 
  bipbop advanced 22.050Hz stereo @ 40 kbps 
  http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear0/prog_index.m3u8
'''
#
out.close()
cap.release()
cv2.destroyAllWindows()
yolov5环境搭建
第一步,从github下载代码
①Yolov5 Github地址:https://github.com/ultralytics/yolov5
第二步:安装相关包
python -m pip install -r requirements.txt
2、 下载Yolov5预训练模型
下载地址:https://github.com/ultralytics/yolov5/releases
1、Img图片测试
输入以下命令通过detect.py对图像进行目标检测:

python detect.py --source ./data/images/bus.jpg
python detect.py --source ./data/images/zidane.jpg

etect.py默认使用同目录下的 yolov5s.pt 模型,如果想用其他的,可以用–weights进行指定
例如:

python detect.py --source ./data/images/bus.jpg --weights yolov5x.pt
随手拍了一张图片,测试了一下效果也不错,同时Yolov5处理该图片时间只用了0.187s

python detect.py --source people.jpg

python detect.py --source data/images/people.mp4
python detect.py --source 0

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值