VS+OPENCV+手机摄像头实现人脸和人眼跟踪

VS+OPENCV+手机摄像头实现人脸和人眼跟踪

IP摄像头

首先用手机下载一个IP摄像头
百度网盘:https://pan.baidu.com/s/1U6wm4O_7W_L41jZ7Vj75Ow
提取码:4d1o
app如下图
在这里插入图片描述
1、实现方式
①手机和电脑同在一个局域网
②手机提供热点给电脑
③不同wifi 改变IP即可
2、打开IP摄像头
注意此时,会提示一个用户名和密码,请记住!!!
在这里插入图片描述
3、这里有个局域网的IP,就是我们要VS连接的地址
4、代码如下

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
CascadeClassifier face_dector,right_dector,left_dector;
string xmlfilepath = "D:/softwire/opencv_files/self_opencv/install/etc/haarcascades/haarcascade_frontalface_alt.xml";
string xmlfilepath_right_eye = "D:/softwire/opencv_files/self_opencv/install/etc/haarcascades/haarcascade_eye.xml";
string xmlfilepath_left_eye = "D:/softwire/opencv_files/self_opencv/install/etc/haarcascades/haarcascade_eye.xml";
int main()
{
    //VideoCapture capture(0);    //flip  可以把window摄像头拍摄左右调度
 /*   String filepath = "D:/VS2019/files/video/faceandeye.mp4";
    if (!capture.open(filepath))
        {
        cout << "cannot open file";
        return -1;
        }*/
    VideoCapture capture;
    capture.open("http://admin:admin@192.168.43.1:8081");   //用户名+密码+IP地址
    if(!(face_dector.load(xmlfilepath)&&right_dector.load(xmlfilepath_right_eye)&& left_dector.load(xmlfilepath_left_eye)))
    {
        cout << "cannot open xml file";
        return -1;
    }

5、HAAR级联分类器实现人脸跟踪和人眼捕捉

    Mat frame,gray;
    char c;
    while (capture.read(frame))
    {
       // imshow("Input Video", frame);
        flip(frame, frame, 1);
        cvtColor(frame, gray, COLOR_BGR2GRAY);
        equalizeHist(gray, gray);
        vector<Rect> rect;
        face_dector.detectMultiScale(gray, rect, 1.1, 3, 0, Size(20, 20));
        for (size_t t = 0; t < rect.size(); t++)
        {
            rectangle(frame, rect[t], Scalar(0, 0, 255));
            Rect right_eye_rect;
            Rect left_eye_rect;
            int offsety = rect[t].height / 4;
            int offsetx = rect[t].width / 8;
            int eyeheight = rect[t].height/2 - offsety;
            int eyewidth = rect[t].width/2 - offsetx;
            left_eye_rect.x = rect[t].x + offsetx;
            left_eye_rect.y = rect[t].y + offsety;
            left_eye_rect.height = eyeheight;
            left_eye_rect.width = eyewidth;
            Mat left_eye = gray(left_eye_rect);
            vector<Rect> left_ROI;
            left_dector.detectMultiScale(left_eye, left_ROI, 1.1, 3, 0, Size(20, 20));  //参考xml 给出的最小尺寸
            for (size_t i = 0; i < left_ROI.size(); i++)
            {
                Rect left_rect;
                left_rect.x = rect[t].x + left_ROI[i].x+offsetx;
                left_rect.y = rect[t].y + left_ROI[i].y+offsety;
                left_rect.width = left_ROI[i].width;
                left_rect.height = left_ROI[i].height;
                rectangle(frame, left_rect, Scalar(0, 255, 255));
            }
            right_eye_rect.x = rect[t].x + rect[t].width / 2;
            right_eye_rect.y = rect[t].y + offsety;
            right_eye_rect.height = eyeheight;
            right_eye_rect.width = eyewidth;
            Mat right_eye = gray(right_eye_rect);
            vector<Rect> right_ROI;
            right_dector.detectMultiScale(right_eye, right_ROI, 1.1, 3, 0, Size(20, 20));  //参考xml 给出的最小尺寸
            for (size_t i = 0; i < right_ROI.size(); i++)
            {
                Rect right_rect;
                right_rect.x = rect[t].x + rect[t].width / 2+right_ROI[i].x;
                right_rect.y = rect[t].y + right_ROI[i].y + offsety;
                right_rect.width = right_ROI[i].width;
                right_rect.height = right_ROI[i].height;
                rectangle(frame, right_rect, Scalar(255, 255, 255));
            }
        }
        imshow("Output Video", frame);
        c = waitKey(50);
        if (c == 27) break;
    }
    capture.release();
    cout << "Hello World!\n";
}

6、效果展示
在这里插入图片描述
说明
①环境 VS2019+OPENCV420+HUAWEI手机
② xml是官方提供的,准确率没那么高
③眼睛捕捉的没那么准,因为SIze()设置的大了,这里只为了说明IP摄像头的使用,不做修改
④人眼捕捉,有点人体生态学的意味,具体不解释。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值