人脸3D关键点的python版本和C++版本区别

1.onnxruntime推理

        推理部分C++版本麻烦很多,使用的onnxruntime1.9.0-gpu版本

1.1 python版本

image = cv2_imread(image_dir + file)
image = image[:, :, ::-1] #BGR2RGB
bbox = [35.75518  , 220.21573  , 227.99582  , 463.20563  ,   0.8576229]
#bbox = [111.28296, 98.003784, 288.46533, 342.31738, 0.8576229]
crop_img, crop_M = _crop_image(image, bbox, 1.5)
providers = ['CUDAExecutionProvider']
# providers = ['CPUExecutionProvider']
img_size = (height, width)modelname = r"1001.onnx"
ort_session = onnxruntime.InferenceSession(modelname, providers=providers)  #
crop_img = crop_img.transpose((2, 0, 1))[np.newaxis, ...]
image = np.asarray(crop_img, dtype=np.float32)
ort_inputs = {ort_session.get_inputs()[0].name: image}
output = ort_session.run(None, ort_inputs)
print(output)

1.2 C++版本

#include <iostream>
#include <opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>
#include <vector>
#include <cmath>
#include <filesystem>
 

      string modelpath = "./models/1001.onnx";
    std::wstring widestr = std::wstring(modelpath.begin(), modelpath.end());
    Ort::Env env_regress = Env(ORT_LOGGING_LEVEL_ERROR, "face_3dkps");
    Ort::Session* ort_session_regress = nullptr;
    SessionOptions sessionOptions_regress = SessionOptions();
    vector<char*> input_names;
    vector<char*> output_names;
    vector<vector<int64_t>> input_node_dims; // >=1 outputs
    vector<vector<int64_t>> output_node_dims; // >=1 outputs
    
    Mat image = cv2_imread("1.jpg");
    cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
    vector<float> bbox;
    //1.jpg
    bbox.push_back(35.75518);
    bbox.push_back(220.21573);
    bbox.push_back(227.99582);
    bbox.push_back(463.20563);
    //111111.jpg
    //111.28296, 98.003784, 288.46533, 342.31738, 0.8576229
   /* bbox.push_back(111.28296);
    bbox.push_back(98.003784);
    bbox.push_back(288.46533);
    bbox.push_back(342.31738);*/
   
    // Example bbox, adjust as needed
    cv::Mat M;
    Mat crop_img = crop_image(image, bbox, 1.5f, M);
   
    sessionOptions_regress.SetGraphOptimizationLevel(ORT_ENABLE_BASIC);
    ort_session_regress = new Session(env_regress, widestr.c_str(), sessionOptions_regress);
    size_t numInputNodes = ort_session_regress->GetInputCount();
    size_t numOutputNodes = ort_session_regress->GetOutputCount();
    AllocatorWithDefaultOptions allocator;
    for (int i = 0; i < numInputNodes; i++)
    {
        input_names.push_back(ort_session_regress->GetInputName(i, allocator));
        //input_names.push_back(ort_session->GetInputName(i, allocator));
        Ort::TypeInfo input_type_info = ort_session_regress->GetInputTypeInfo(i);
        auto input_tensor_info = input_type_info.GetTensorTypeAndShapeInfo();
        auto input_dims = input_tensor_info.GetShape();
        input_node_dims.push_back(input_dims);
    }
    for (int i = 0; i < numOutputNodes; i++)
    {
        output_names.push_back(ort_session_regress->GetOutputName(i, allocator));

        //output_names.push_back(ort_session->GetOutputName(i, allocator));
        Ort::TypeInfo output_type_info = ort_session_regress->GetOutputTypeInfo(i);
        auto output_tensor_info = output_type_info.GetTensorTypeAndShapeInfo();
        auto output_dims = output_tensor_info.GetShape();
        output_node_dims.push_back(output_dims);
    }
    int inpHeight = input_node_dims[0][2];
    int inpWidth = input_node_dims[0][3];
    int nout = output_node_dims[0][2];
    array<int64_t, 4> input_shape_{ 1, 3,inpHeight, inpWidth };
    std::vector<float> input_image_;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宠物商城系统7000字文档20页ppt java项目javaweb项目ssm项目jsp项目java课程设计java毕业设计

文章目录 宠物商城系统一、项目演示二、项目介绍三、7000字项目文档四、20页ppt五、部分功能截图六、部分代码展示七、底部获取项目源码带7000字文档和20页ppt&#xff08;9.9&#xffe5;带走&#xff09; 宠物商城系统 一、项目演示 宠物商店 二、项目介绍 语言: Java 数据…

Echarts折线图

实现效果&#xff1a; 代码&#xff1a; <template><div class"echarts"><div class"select-box"><div v-for"(item,index) in trendList":key"index":class"[period item.id?active:,item]"click&…

PyMuPDF 操作手册 - 08 API - Document属性方法和简短说明

文章目录 https://pymupdf.readthedocs.io/en/latest/document.html#Document 方法/属性简短描述Document.add_layer()仅限 PDF:进行新的可选内容配置Document.add_ocg()仅限 PDF:添加新的可选内容组Document.authenticate()访问加密文档Document.bake()仅限 PDF:将…

Spring Boot集成geode快速入门Demo

1.什么是geode&#xff1f; Apache Geode 是一个数据管理平台&#xff0c;可在广泛分布的云架构中提供对数据密集型应用程序的实时、一致的访问。Geode 跨多个进程汇集内存、CPU、网络资源和可选的本地磁盘&#xff0c;以管理应用程序对象和行为。它使用动态复制和数据分区技术…

【C++】类和对象(中)--上篇

个人主页~ 类和对象上 类和对象 一、类的六个默认成员函数二、构造函数1、构造函数基本概念2、构造函数的特性 三、析构函数1、析构函数的概念2、特性 四、拷贝构造函数1、拷贝构造函数的概念2、特征 一、类的六个默认成员函数 如果有个类中什么成员都没有&#xff0c;那么被称…

Perl语言简介

Perl语言&#xff0c;全称为Practical Extraction and Report Language&#xff08;实用提取与报告语言&#xff09;&#xff0c;是一种高级、通用、解释型的编程语言。它由Larry Wall于1987年首次发布&#xff0c;并迅速因其强大的文本处理能力和高度的灵活性而受到广泛应用。…

数据库安装

1.选择最下面自定义安装 2.选择x64 3.next 4.完成后next 5.next 6.选择如图&#xff0c;next 7.如图 8.输入密码 9.如图 10.如图 11.安装 12.完成 13.控制面板选择系统和安全 14.选择系统 15.高级系统设置 16.环境变量 17.双击打开path 18.新建 19.输入MySQLbin文件夹路径 20.管…

firewalld(4) Rich Rule

简介 前文介绍了firewall基本原理&#xff0c;基础的命令使用、保存、以及zone的配置&#xff0c;前面文章我们在配置zone的时候有些复杂的条件&#xff0c;比如限速、日志记录等并不能直接在zone中进行配置。本篇文章主要介绍richlanguage&#xff0c;它能提供更加丰富的策略配…

分布式日志采集 Loki 配置及部署详细

分布式日志采集 Loki 配置及部署详细 Loki 部署模式Loki 读写分离部署配置Loki 配置大全 Loki 部署模式 &#xff08;1&#xff09;可扩展部署模式 Loki 的简单可扩展部署模式是最简单的部署方式、首选方式。可扩展到每天几TB的日志&#xff0c;但是如果超出这个范围&#xff…

Oracle 11.2.0.1升级到11.2.0.4并做rman备份异机恢复

下载好数据库升级包&#xff0c;想去Oracle官网下载的&#xff0c;提示没有授权 只能在csdn找付费的了&#xff0c;9块1个&#xff0c;下载了前2个。 注意&#xff0c;总共有7个包&#xff0c;如果Oracle是安装在linux服务器&#xff0c;且无图形界面管理的 只需要第一&#xf…

液压传动知识

绪论 工作原理 依靠运动者的液体的压力能传递动力液体在受调节、控制状态下工作&#xff0c;液压传动和控制同等重要液压传动以液体为工作介质 液压系统组成 动力元件&#xff1a;机械能转换为液体压力能。液压泵控制元件&#xff1a;对液体流动方向、压力、流量进行控制或…

PyCharm简介二

PyCharm是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Python开发。它提供了代码编辑、调试、项目管理以及许多其他功能&#xff0c;能够显著提高Python开发者的工作效率。虽然PyCharm不是Python开发的必要软件&#xff0c;但它在以…

uniapp零基础入门Vue3组合式API语法版本开发咸虾米壁纸项目实战

嗨&#xff0c;大家好&#xff0c;我是爱搞知识的咸虾米。 今天给大家带来的是零基础入门uniapp&#xff0c;课程采用的是最新的Vue3组合式API版本&#xff0c;22年发布的uniappVue2版本获得了官方推荐&#xff0c;有很多同学等着我这个vue3版本的那&#xff0c;如果没有学过vu…

php简单的单例模式

本文由 ChatMoney团队出品 单例模式是一种常用的设计模式&#xff0c;它的核心思想是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。在 PHP 中实现单例模式通常有三种形式&#xff1a;饿汉式&#xff08;Eager&#xff09;、懒汉式&#xff08;Lazy&…

部署nginx服务用于浏览服务器目录并实现账号密码认证登录

1、背景&#xff1a; 因公司业务需求&#xff0c;部署一套数据库备份中心服务&#xff0c;但是因为备份的数据库很多&#xff0c;有项目经理要求能经常去查看备份数据库情况及下载备份数据文件的需求。根据该需求&#xff0c;需要在备份数据库的服务器上部署一个nginx服务&…

CentOS 7.9 快速更换 阿里云源教程

CentOS 7.9 更换源教程 总结 # 下载 wget yum -y install wget # 备份 yum 源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载阿里云的yum源到 /etc/yum.repos.d/ # 此处以 CentOS 7 为例&#xff0c;如果是其它版本或者系统的话&#…

【AIGC自动化编程技巧笔记】一、起步

本专栏参考了CSDN高级讲师李宁的《AIGC自动化编程技巧》&#xff0c;是学习过程中记录的笔记。 一、ChatGPT的实质 尽管ChatGPT的功能非常强大&#xff0c;看似无所不能&#xff0c;但是ChatGPT毕竟只是基于很多算法和 数据并运行在强大GPU上的大量代码而已。ChatGPT甚至并不…

【新奇E100-开发记录】

新奇E100-开发记录 ■ 环境■ 编译器■ Ubuntu主机环境需要安装如下工具■ mips32R1工具链(toolchain )■ defconfig■ dts的选择■ 全局编译■■■ 环境 ■ 编译器 ■ Ubuntu主机环境需要安装如下工具 shell $ sudo apt install git $ sudo apt install gcc $ sudo apt i…

js替换对象里面的对象名称

data为数组&#xff0c;val为修改前的名称&#xff0c;name为修改后的名称 JSON.parse(JSON.stringify(data).replace(/val/g, name)) &#xff1b; 1.替换data里面的对象tenantInfoRespVO名称替换成tenantInfoUpdateReqVO 2.替换语句&#xff1a; 代码可复制 let tenantInf…

基于Spring Boot的先进时尚室内管理系统

1 项目介绍 1.1 研究背景 随着21世纪信息技术革命的到来&#xff0c;互联网的普及与发展对人类社会的演变产生了深远影响&#xff0c;跨越了物质生活的丰盈边界&#xff0c;更深层次地滋养了人类的精神文化生活。在过去&#xff0c;囿于地理位置和技术条件的限制&#xff0c;…