人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

2023-11-07

人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心、鼻尖、两个嘴角,以下是测试代码:

int test_alignment()
{
	std::vector<std::string> images{ "1.jpg", "2.jpg", "3.jpg", "4.jpeg", "5.jpeg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg",
		"11.jpeg", "12.jpg", "13.jpeg", "14.jpg", "15.jpeg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg" };
	std::vector<int> count_faces{ 1, 2, 6, 0, 1, 1, 1, 2, 1, 1,
		1, 1, 1, 1, 1, 1, 1, 0, 8, 2 };

	const std::string path_images{ "E:/GitCode/Face_Test/testdata/" };

	seeta::FaceDetection detector("E:/GitCode/Face_Test/src/SeetaFaceEngine/FaceDetection/model/seeta_fd_frontal_v1.0.bin");

	detector.SetMinFaceSize(20);
	detector.SetMaxFaceSize(200);
	detector.SetScoreThresh(2.f);
	detector.SetImagePyramidScaleFactor(0.8f);
	detector.SetWindowStep(4, 4);

	seeta::FaceAlignment point_detector("E:/GitCode/Face_Test/src/SeetaFaceEngine/FaceAlignment/model/seeta_fa_v1.1.bin");

	for (auto name : images) {
		fprintf(stderr, "start detect image: %s\n", name.c_str());

		cv::Mat src_ = cv::imread(path_images + name, 1);
		if (src_.empty()) {
			fprintf(stderr, "read image error: %s\n", name.c_str());
			continue;
		}

		cv::Mat src;
		cv::cvtColor(src_, src, CV_BGR2GRAY);

		seeta::ImageData img_data;
		img_data.data = src.data;
		img_data.width = src.cols;
		img_data.height = src.rows;
		img_data.num_channels = 1;

		std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);

		for (auto face : faces) {
			// Detect 5 facial landmarks: two eye centers, nose tip and two mouth corners
			seeta::FacialLandmark points[5];
			point_detector.PointDetectLandmarks(img_data, face, points);

			cv::rectangle(src_, cv::Rect(face.bbox.x, face.bbox.y,
				face.bbox.width, face.bbox.height), cv::Scalar(0, 255, 0), 2);

			for (auto point : points) {
				cv::circle(src_, cv::Point(point.x, point.y), 2, cv::Scalar(0, 0, 255), 2);
			}
		}

		std::string save_result = path_images + "_" + name;
		cv::imwrite(save_result, src_);
	}

	int width = 200;
	int height = 200;
	cv::Mat dst(height * 5, width * 4, CV_8UC3);
	for (int i = 0; i < images.size(); i++) {
		std::string input_image = path_images + "_" + images[i];
		cv::Mat src = cv::imread(input_image, 1);
		if (src.empty()) {
			fprintf(stderr, "read image error: %s\n", images[i].c_str());
			return -1;
		}

		cv::resize(src, src, cv::Size(width, height), 0, 0, 4);
		int x = (i * width) % (width * 4);
		int y = (i / 4) * height;
		cv::Mat part = dst(cv::Rect(x, y, width, height));
		src.copyTo(part);
	}
	std::string output_image = path_images + "result.png";
	cv::imwrite(output_image, dst);

	return 0;
}
从网上找了20张图像,用于测试此模块,测试结果如下:


GitHubhttps://github.com/fengbingchun/Face_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码 的相关文章

随机推荐

  • vue3.2+ts错误:找不到模块“./App.vue”或其相应的类型声明。ts(2307)

    vue3 2 ts错误 找不到模块 App vue 或其相应的类型声明 ts 2307 解决方法 在项目根目录创建 env d ts 文件 如果已有 则在文件中追加 加入以下内容 declare module vue import type
  • C++STL之vector容器

    1 Vector容器的插入 1 1 简单使用vector容器的插入方法 vector的插入不难 一般我们在使用时都是使用push back插入 当使用下标法时在不指定vec大小很容易越界 编译器不会开辟默认容量 我记得以前的好像会默认开辟2
  • 数据仓库与数据湖的区别

    数据湖通常包含用于高级分析应用程序的各种大数据集 而数据仓库则存储用于基本 BI 分析和报告用途的传统事务数据 下面 让我们更仔细地看一下这两个数据存储以及它们之间的差异 1 什么是数据湖 数据湖通常是一个庞大的存储库 以本机格式存储原始数
  • Go语言面试题汇总

    正在准备golang面试的小伙伴 很荣幸 你能看到这篇文章 希望每一个看到这篇分享的小伙伴都能找到自己称心如意的工作 1 说说go语言的main函数 1 main函数不能带参数 2 main函数不能定义返回值 3 main函数所在的包必须为
  • Vue2 + ElementUI 关于$emit用法总结

    数据传递总结 父组件可以使用 props 把数据传给子组件 子组件可以使用 emit 触发父组件的自定义事件 实战 封住客户等级功能的通用表单 支持新增和编辑 定义封住子组件 levelCommon vue
  • 一行命令即可启动 Walrus丨入门教程

    今日 应用管理平台 Walrus 已正式开源 本文将介绍如何上手安装 Walrus 以及如何借助 Walrus 进行应用部署 开源地址 https github com seal io walrus 部署 Walrus 首先 您需要准备 资
  • Sublime Text 3 安装PackageControl

    操作步骤 1 复制安装信息 import urllib request os hashlib h 6f4c264a24d933ce70df5dedcf1dcaee ebe013ee18cced0ef93d5f746d80ef60 pf Pa
  • React16.3中的Refs和Forwarding Refs

    简要介绍 React16 3中修改了Refs的使用方法 并且提供了Forwarding Refs用于在父组件中操作子组件中的dom节点 本文介绍一下新的Refs表示方法以及Forwarding Refs Ref的功能就不具体说了 就是在父组
  • 如何成为更厉害的人

    01 读万卷书 行万里路 阅人无数 名师指路 自己去悟 人生每个阶段都需要找到一位认知高于自己导师 帮你指明前方道路 从而让自己少走弯路 02 融入一个高质量的圈子 一个人走的快 但一群人走的远 一个人容易放弃 但一群人更容易坚持 03 要
  • 3款最强的AI视频生成器,支持文生视频、图生视频

    当我们深入人工智能世界及其对视频创作的变革性影响时 发现人工智能视频生成器的强大功能 人工智能视频生成器正在彻底改变我们创建内容的方式 让我们比以往更轻松地以最少的努力制作高质量的视频 无论您是内容创作者 营销人员 还是只是一名人工智能爱好
  • 2020年全国高校计算机能力挑战赛C++初赛程序设计题2:九键拼音中数字与英文字母成对应关系:2--abc, 3-def, 4-ghi, 5--jkl, 6--mno, 7--pqrs, 8--tuv

    2020年全国高校计算机能力挑战赛C 初赛程序设计题2 九键拼音中数字与英文字母成对应关系 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz 输入 输入一个由英文小写字母组成的字符串 长度
  • 两种方法在VMware中安装VMware Tools

    VMware Tools的主要作用是虚拟硬件的驱动 鼠标的无缝移出移入 剪贴板共享 共享主机上的文件夹等功能 方法一 1 打开 文件夹 Ubuntu 17 10 amd64 根据自己版本来看 2 在VMware Workstation主界面
  • Flume 数据流监控——Ganglia的安装与部署

    1 Ganglia的安装 1 安装 dhttpd 服务与 php yasin hadoop102 flume sudo yum y install httpd php 2 安装其他依赖 atguigu hadoop102 flume sud
  • 用Windbg解决一个Bug

    摘要 可以看到无论对于开发还是测试人员 windbg很多时候可以帮我们快速的定位问题 如果借助符号文件 Windbg完全可以实现比VC IDE更强大的调试供功能 并且有时候我们不需要源代码 不需要重新编译 直接就可以通过windbg调试和解
  • 对称加密和非对称加密

    对称加密 什么是对称加密 对称加密就是指 加密和解密使用同一个密钥的加密方式 对称加密的工作过程 发送方使用密钥将明文数据加密成密文 然后发送出去 接收方收到密文后 使用同一个密钥将密文解密成明文读取 对称加密的优点 加密计算量小 速度块
  • llinux 开发环境环境配置

    1 安装好Ubuntu后 关闭软件中的更新及检测 2 安装vmware tool 不用sudo mount t vmhgfs host mnt hgfs 不用vmhgfs fuse host mnt hgfs命令挂载 只要在安装VMware
  • C++常用函数之sort函数,头文件 algorithm

    1 sort 函数是C 标准库中的排序函数 头文件为algorithm 2 sort 函数时间复杂度 我们最熟悉的冒泡排序和选择排序的时间复杂度过高o nn 不能满足我们写题的需要 sort函数的排序方法类似于快排方法 时间复杂度为nlog
  • 图示电路中的等效电阻rab_可调电阻即电位器,各种敏感电阻的介绍和使用(电阻二)...

    上一篇讲了固定阻值电阻器 这一篇主要讲可变电阻 和敏感电阻器 电位器是一种阻值可以通过调节而变化的电阻器 又称可变电阻器 电位器和图形符号 电位器结构示意图 电位器有A C B三个引出极 在A B极之间连接着一段电阻体 该电阻体的阻值用RA
  • ctfshow-网络迷踪-密集恐惧( 世界上最大的飞机墓地)

    ctf show 网络迷踪模块 密集恐惧关卡 这一关的图片给了一个很荒凉的地方 里面有很多飞机 看样子是荒废很久了 推荐使用百度识图获取具体的地点 在通过百度搜索得到具体的经纬度 将图片下载到本地 像是一个荒凉的农场 里面有很多飞机 很明显
  • 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点 包括5个点 两个眼的中心 鼻尖 两个嘴角 以下是测试代码 int test alignment std vector