栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习day07 map容器和JSON语言标志,及人脸识别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习day07 map容器和JSON语言标志,及人脸识别

map 容器 

* 本质:底层使用二叉树实现
 * 元素:是一个键值对 pair
 * 使用:map 变量名
 *
 * 插入时排序:根据key值排序

内部函数 
    map_value.at();             索引值
    map_value.clear();          清空
    map_value.empty();          判空
    map_value.end();            尾部迭代子
    map_value.begin();          头部迭代子
    map_value.erase();          删除
    map_value.find();           查找
    map_value.insert();         插入
    map_value.operator []();    索引值
    map_value.swap();           交换


JSON 
 * Json::Reader 解析使用
 * Json::Value  数据使用
 * -------- JSON 数据格式 -------
 * {
 *   "姓名" : "文云龙",
 *   "年龄" : 21,
 *   "性别" : "男"
 * }
 * -------- 数据解析 parse ------
 *   parse(json字符串,json值容器);
 * -------- 数据输出 to  --------
 *   toStyledString() 直接转换整个JSON
 * -------- 判断数据用 is -------
 *   isArray()    是否是数组
 *   isBool()     是否是bool类型
 *   isDouble()   是否是浮点类型
 *   isInt()      是否是int类型
 *   isNull()     是否为空
 *   isObject()   是否是一个json
 *   isString()   是否是String字符串
 * -------- 转换数据用 as -------
 *   asBool()     转换成bool类型
 *   asCString()  转换成C语言字符串类型
 *   asString()   转换成C++语言字符串类型
 *   asInt()      转换成int类型
 *   asUInt()     转换成无符号int类型
 * -------- 直接操作 [] ---------
 * 读取[]当右值
 * 写入[]当左值

人脸识别:OpenCV

在虚拟机中打开可移动设备的摄像头功能,我使用的是ubantu16,14摄像头不支持,并进入虚拟机的设置中将USB控制器的USB兼容性选择最大的
下载方式:
1.sudo apt-get install libopencv-dev -y     安装OpenCV
2.dpkg -s libopencv-dev          验证 OpenCV是否安装成功

后面可以不安装那些是链接图片库的(可以自己写一个C或C++文件的存放图片通过c++的去访问也是可以的)
3.sudo apt-get install libcurl-dev            sudo apt-get install libcurl4-openssl-dev    安装 libcurl 库
4.sudo apt-get install openssl        安装 openssl 库 
4.2.sudo apt-get install libssl-dev
5.sudo apt-get install libjsoncpp-dev    安装 jsoncpp 库 

#include "opencv2/opencv.hpp"   //头文件
#include "aip-cpp-sdk-0.8.1/face.h"
#include
using namespace cv;     //人脸识别 命名空间
using namespace std;    //标准命名空间

VideoCapture 拍照类
Mat 类用于图片存储和处理
cap >> map;    拍照
cvtColor        灰度处理
GaussianBlur    高斯模糊 过滤
Canny        边缘检测
namedWindow("图片浏览",1);      //窗口名称
imshow("图片浏览",map);         //预览图片
waitKey(1000/60);             //等待 60 毫秒

#include "opencv2/opencv.hpp"   //头文件
//#include "aip-cpp-sdk-0.8.1/face.h" 对接百度云文件
#include 
using namespace cv;     //人脸识别 命名空间
using namespace std;    //标准命名空间

//Json::Value baidu_get_face(vector &map_uchar);

int main()
{
    //VideoCapture 拍照类
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;
    //Mat 类用于图片存储和处理
    Mat map;  
    while(1)
    {
        //拍照
        cap >> map;
#if 1   //图像高级处理
        //灰度处理
        cvtColor(map, map, CV_BGR2GRAY);
        //高斯模糊 过滤
       // GaussianBlur(map, map, Size(7,7), 1.5, 1.5);
        //边缘检测 
       // Canny(map, map, 0, 30, 3);
#endif

#if 0
        // ***** 检测图片是否有我们想要的模型特征 *****/
        CascadeClassifier face("haarcascade_frontalface_alt2.xml"); //将人脸模型添加到联机操作类中

        //void detectMultiScale(const cv::Mat &image, std::vector &objects)
        vector objects;
        face.detectMultiScale(map,objects); //检测是需要消耗CPU性能   多任务分配性能
        cout << "人脸个数:" << objects.size() << endl;
        for(unsigned int i = 0; i < objects.size() ; i++)
        {
            //rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2,const Scalar& color);
            Point point_1(objects[i].x,objects[i].y);
            Point point_2(objects[i].x + objects[i].width ,objects[i].y + objects[i].height);
            Scalar color_red(255,0,0);

            
            Mat map_face(map,objects[i]);
            vector map_uchar;
            //imencode( const string& 格式, InputArray img,CV_OUT vector& buf)
            imencode(".jpg",map_face,map_uchar);  //将图片变为 .jpg

            
            Json::Value result = baidu_get_face(map_uchar); 
            if(result["error_msg"] == "SUCCESS")
            {
                //cout << result["result"]["user_list"][0] << endl;
                string name = result["result"]["user_list"][0]["user_id"].asString();
                string score = result["result"]["user_list"][0]["score"].asString();
                cout << "姓名:" <<  name
                     << "t相似度:" <<  score
                     << endl;
                Scalar color_red(0,0,255);
                putText(map,name + " score:" + score,point_1,FONT_HERSHEY_DUPLEX,1,color_red);
            }
            //cout << result << endl;

            rectangle(map,point_1,point_2,color_red);
        }
#endif
        namedWindow("图片浏览",1);      //窗口名称
        imshow("图片浏览",map);         //预览图片
        waitKey(1000/60);             //等待 60 毫秒
    }


    return 0;
}


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号