OPENCV,rects.push_back(mr);这句话是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPENCV,rects.push_back(mr);这句话是啥意思?相关的知识,希望对你有一定的参考价值。

vector<vector<Point> >::iterator itc= contours.begin();
vector<RotatedRect> rects;

//Remove patch that are no inside limits of aspect ratio and area.
while (itc!=contours.end())
//Create bounding rect of object
RotatedRect mr= minAreaRect(Mat(*itc));
if( !verifySizes(mr))
itc= contours.erase(itc);
else
++itc;
rects.push_back(mr);



rects.push_back(mr);这句话是什么意思?

  vector<RotatedRect> rects;
它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。
  OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
  OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。
  所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。
参考技术A vector<RotatedRect> rects;
它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。
参考技术B vector<RotatedRect> rects;

它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。本回答被提问者采纳

Python OpenCV开发MR智能人脸识别打卡系统(五程序入口设计与测试)

需要源码请点赞关注收藏后评论区留言私信~~~

整体系统讲解如下

Python OpenCV开发MR智能人脸识别打卡系统(一、需求分析与系统设计)

Python OpenCV开发MR智能人脸识别打卡系统(二、文件系统、数据实体模块设计)

Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)

Python OpenCV开发MR智能人脸识别打卡系统(四、服务模块设计)

main.py是整个程序的入口文件,负责在控制台中打印菜单界面,用户通过指令可以使用系统中的全部功能,包括打卡、员工管理等等,所以会有大量指令判断逻辑

下面详细介绍里面的代码

1:用户权限管理

系统中处理打卡和退出两项功能可以随意使用,其他菜单都需要管理员权限才能使用,用户选中查看记录,员工管理和考勤报表菜单,系统会验证用户身份,如果不是管理员身份就会弹出管理员登录提示,用户输入正确的账号和密码才可以继续使用这些功能

login为管理员登录方法,该方法弹出输入管理员账号和密码的提示,如果用户输入账号为字符串0,则认为用户取消了登录操作

def login():
    while True:
        username = input("请输入管理员账号(输入0取消操作):")
        if username == "0":  # 如果只输入0
            return  # 结束方法
        passowrd = input("请输入管理员密码:")
        if hr.valid_user(username.strip(), passowrd.strip()):  # 校验账号密码
            global ADMIN_LOGIN  # 读取全局变量
            ADMIN_LOGIN = True  # 设置为管理员已登录状态
            print(username + "登录成功!请选择重新选择功能菜单")
            break
        else:
            print("账号或密码错误,请重新输入!")
            print("---------------------------")

2:主菜单设计

 start方法是程序的启动方法,在初始化方法执行完毕后执行,该方法在控制台中打印程序的主功能菜单,效果如下图所示

此时用户需要先输入菜单对应的数字,再按Enter键进入具体功能菜单中,如果用户输入的数字不再功能菜单中,则提示指令有误,请用户重新输入

用户需登录管理员账号才能使用员工管理功能

 

start方法具体代码如下

# 启动方法
def start():
    finish = False  # 程序结束标志
    menu = """
+--------------------------------------------------+
|                   主功能菜单                     |
+--------------------------------------------------+
 ①打卡  ②查看记录  ③员工管理  ④考勤报表  ⑤退出
---------------------------------------------------"""
    while not finish:
        print(menu)  # 打印菜单
        option = input("请输入菜单序号:")
        if option == "1":  # 如果选择“打卡”
            face_clock()  # 启动人脸打卡
        elif option == "2":  # 如果选择“查看记录”
            if ADMIN_LOGIN:  # 如果管理员已登录
                check_record()  # 进入查看记录方法
            else:
                login()  # 先让管理员登录
        elif option == "3":  # 如果选择“员工管理”
            if ADMIN_LOGIN:
                employee_management()  # 进入员工管理方法
            else:
                login()
        elif option == "4":  # 如果选择“考勤报表”
            if ADMIN_LOGIN:
                check_report()  # 进入考勤报表方法
            else:
                login()
        elif option == "5":  # 如果选择“退出”
            finish = True  # 确认结束,循环停止
        else:
            print("输入的指令有误,请重新输入!")
    print("Bye Bye !")


hr.load_emp_data()  # 数据初始化
tital = """
***************************************************
*                MR智能视频打卡系统               *
***************************************************"""
print(tital)  # 打印标题
start()  # 启动程序

 3:人脸打卡功能

face_clock是人脸打卡的功能执行方法,该方法调用摄像头工具模块提供的打卡方法,此时只要用户面向摄像头,摄像头即可自动扫描人脸并识别特征,如果镜头中的人脸符合某个员工的特征,则会返回该员工姓名,然后调用人事服务模块为此员工添加打卡记录

打卡者需正向面对镜头

def face_clock():
    print("请正面对准摄像头进行打卡")
    name = camera.clock_in()  # 开启摄像头,返回打卡员工名称
    if name is not None:  # 如果员工名称有效
        hr.add_lock_record(name)  # 保存打卡记录
        print(name + " 打卡成功!")

 4:为新员工登记人脸照片样本

employee_management方法是员工管理功能的执行方法,该方法在控制台打印员工管理功能菜单,输入菜单对应的数字,再按Enter键进入具体功能菜单中

录入新员工的过程

 5:删除员工全部数据

如果用户输入的验证码正确,那么该员工的全部信息都会被删除,验证码错误则不会删除,数据不会丢失

删除员工操作的过程

def employee_management():
    menu = """+-------------------------------------------------+
|                员工管理功能菜单                 |
+-------------------------------------------------+
  ①录入新员工  ②删除员工  ③返回上级菜单
---------------------------------------------------"""
    while True:
        print(menu)  # 打印菜单
        option = input("请输入菜单序号:")
        if option == "1":  # 如果选择“录入新员工”
            name = str(input("请输入新员工姓名(输入0取消操作):")).strip()
            if name != "0":  # 只要输入的不是0
                code = hr.add_new_employee(name)  # 人事服务添加新员工,并获得该员工的特征码
                print("请面对摄像头,敲击三次回车键完成拍照!")
                camera.register(code)  # 打开摄像头为员工照相
                print("录入成功!")
                # return  # 退出员工管理功能菜单
        elif option == "2":  # 如果选择“删除员工”
            # show_employee_all()  # 展示员工列表
            print(hr.get_employee_report())  # 打印员工信息报表
            id = int(input("请输入要删除的员工编号(输入0取消操作):"))
            if id > 0:  # 只要输入的不是0
                if hr.check_id(id):  # 若此编号有对应员工
                    verification = tool.randomNumber(4)  # 生成随机4位验证码
                    inputVer = input("[" + str(verification) + "] 请输入验证码:")  # 让用户输入验证码
                    if str(verification) == str(inputVer).strip():  # 如果验证码正确
                        hr.remove_employee(id)  # 人事服务删除该员工
                        print(str(id) + "号员工已删除!")
                    else:  # 无效编号
                        print("验证码有误,操作取消")
                else:
                    print("无此员工,操作取消")
        elif option == "3":  # 如果选择“返回上级菜单”
            return  # 退出员工管理功能菜单
        else:
            print("输入的指令有误,请重新输入!")

6:查询员工打卡记录

该方法在控制台打印查询记录功能菜单

查看员工列表

 查看打卡记录

def check_record():
    menu = """+-------------------------------------------------+
|                 查看记录功能菜单                |
+-------------------------------------------------+
  ①查看员工列表  ②查看打卡记录  ③返回上级菜单
---------------------------------------------------"""
    while True:
        print(menu)  # 打印菜单
        option = input("请输入菜单序号:")
        if option == "1":  # 如果选择“查看员工列表”
            print(hr.get_employee_report())  # 打印员工信息报表
        elif option == "2":  # 如果选择“查看打卡记录”
            report = hr.get_record_all()
            print(report)
        elif option == "3":  # 如果选择“返回上级菜单”
            return  # 退出查看记录功能菜单
        else:
            print("输入的指令有误,请重新输入!")

7:生成考勤报表 

 该方法是考勤报表功能的执行方法,该方法在控制台打印考勤报表功能菜单,效果如下图所示

可以生成考勤日报或者月报 

 

# 考勤报表
def check_report():
    menu = """+-------------------------------------------------+
|                考勤报表功能菜单                 |
+-------------------------------------------------+
   ①日报  ②月报  ③报表设置  ④返回上级菜单
---------------------------------------------------"""
    while True:
        print(menu)  # 打印菜单
        option = input("请输入菜单序号:")
        if option == "1":  # 如果选择“日报”
            while True:
                date = input("输入查询日期,格式为(2008-08-08),输入0则查询今天:")
                if date == "0":  # 如果只输入0
                    hr.get_today_report()  # 打印今天的日报
                    break  # 打印完之后结束循环
                elif tool.valid_date(date):  # 如果输入的日期格式有效
                    hr.get_day_report(date)  # 打印指定日期的日报
                    break  # 打印完之后结束循环
                else:  # 如果输入的日期格式无效
                    print("日期格式有误,请重新输入!")
        elif option == "2":  # 如果选择“月报”
            while True:
                date = input("输入查询月份,格式为(2008-08),输入0则查询上个月:")
                if date == "0":  # 如果只输入0
                    hr.get_pre_month_report()  # 生成上个月的月报
                    break  # 生成完毕之后结束循环
                elif tool.valid_year_month(date):  # 如果输入的月份格式有效
                    hr.get_month_report(date)  # 生成指定月份的月报
                    break  # 生成完毕之后结束循环
                else:
                    print("日期格式有误,请重新输入!")
        elif option == "3":  # 如果选择“报表设置”
            report_config()  # 进入“报表设置”菜单
        elif option == "4":  # 如果选择“返回上级菜单”
            return  # 退出查看记录功能菜单
        else:
            print("输入的指令有误,请重新输入!")

8:自定义上下班时间

用户在报表设置功能中输入数字1并按Enter键,则分别提示用户输入上班时间和下班时间

# 报表设置
def report_config():
    menu = """+-------------------------------------------------+
|                报表设置功能菜单                 |
+-------------------------------------------------+
①作息时间设置  ②返回上级菜单
---------------------------------------------------"""
    while True:
        print(menu)  # 打印菜单
        option = input("请输入菜单序号:")
        if option == "1":  # 如果选择“作息时间设置”
            while True:
                work_time = input("请设置上班时间,格式为(08:00:00):")
                if tool.valid_time(work_time):  # 如果时间格式正确
                    break  # 结束循环
                else:  # 如果时间格式不对
                    print("上班时间格式错误,请重新输入")
            while True:
                close_time = input("请设置下班时间,格式为(23:59:59):")
                if tool.valid_time(close_time):  # 如果时间格式正确
                    break
                else:  # 如果时间格式不对
                    print("下班时间格式错误,请重新输入")
            hr.save_work_time(work_time, close_time)  # 保存用户设置的上班时间和下班时间
            print("设置完成,上班时间:" + work_time + ",下班时间为:" + close_time)
        elif option == "2":  # 如果选择“返回上级菜单”
            return  # 退出查看记录功能菜单
        else:
            print("输入的指令有误,请重新输入!")

 9:启动程序

main.py定义完所有全局变量和方法之后,代码的最下方就是整个系统的启动脚本,首先执行系统初始化操作,然后启动系统

创作不易 觉得有帮助请点赞关注收藏~~~

以上是关于OPENCV,rects.push_back(mr);这句话是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Python OpenCV开发MR智能人脸识别打卡系统(四服务模块设计)

Python OpenCV开发MR智能人脸识别打卡系统(五程序入口设计与测试)

关于 MagicalRecord,MR_saveNestedContexts 和 MR_save 方法有啥区别

为啥 MR_save 不起作用但 MR_saveNestedContexts 起作用?

Hbase 用mr-hdfs hdfs-mr

VR/MR ✙ 深入浅出⚡️ | 影创VR/MR 介绍