Emgu CV4图像处理之打开Tensorflow训练模型17(C#)

news2024/11/24 7:30:51

本文测试环境:

win10  64位

vistual studio 2019  

Emgu CV 4.6.0

环境配置准备:

1 新增控制台项目,.net framework为4.7.2

2  把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下

3  项目选择x64

4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll  

具体配置参考:
Emgu CV4图像处理之环境搭建1(C#)_zxy2847225301的博客-CSDN博客

Tensorflow模型下载链接(Tensorflow模型太难找了,找了一圈才找到这个,免积分下载,如果csdn自动调整了该资源的积分,请联系我,我这边修改回0积分):

https://download.csdn.net/download/zxy13826134783/86954448

把下载的文件,解压后,全部复制到项目的Debug目录下

中文的找了一圈都没有找到EmguCV操作tensorflow模型的,幸好在stack overflow中找到了,参考链接如下:

c# - How to detect custom object using EmguCV - Stack Overflow

c++写的参考链接:

OpenCV调用TensorFlow预训练模型_AI吃大瓜的博客-CSDN博客_opencv tensorflow

打开Tensorflow模型函数原型为:

DnnInvoke.ReadNetFromTensorflow(string model,[string config = null])

第一个参数model为pb模型文件路径

第二个参数config为配置文件路径,可选

程序中测试的原图如下:

street.png

cat1.png

cat2.png

cat3.png

参考代码如下:

using Emgu.CV;
using Emgu.CV.Dnn;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EmguCVDemo2
{
    class Program
    {
        static void Main(string[] args)
        {
            OpenTensorflowModel("street.png", "frozen_inference_graph.pb", "ssd_inception_v2_coco_2017_11_17.pbtxt");
            CvInvoke.WaitKey(0);
            Console.ReadLine();
        }
        /// <summary>
        /// 打开Tensorflow模型
        /// </summary>
        private static void OpenTensorflowModel(string imgFileName, string pbFileName, string configFileName)
        {

            using (Image<Bgr, byte> image1 = new Image<Bgr, byte>(imgFileName))
            {
                int interception = 0;

                int cols = image1.Width;

                int rows = image1.Height;

                Net netcfg = DnnInvoke.ReadNetFromTensorflow(pbFileName, configFileName);//(Directory.GetCurrentDirectory() + @"\fldr\CO.pb", Directory.GetCurrentDirectory() + @"\fldr\graph.pbtxt");

                netcfg.SetInput(DnnInvoke.BlobFromImage(image1.Mat, 1, new System.Drawing.Size(300, 300), default(MCvScalar), true, false));

                Mat mat = netcfg.Forward();
                #region mat.GetData()返回的类型要根据模型的实践情况来,后面的解析识别结果也会不一样
                float[,,,] flt = (float[,,,])mat.GetData();
                string[] getMessage = {"Index0", "man", "Index2", "car","Index4", "Index5", "Index6", "Index7", "Index8"
                                        ,"Index9", "light", "Index11", "Index12", "Index13"
                                        ,"Index14", "Index15", "Index16", "cat", "Index18"
                                        ,"Index19", "Index20", "Index21", "Index22", "Index23"};
                for (int x = 0; x < flt.GetLength(2); x++)
                {
                    //分值大于0.9
                    if (flt[0, 0, x, 2] > 0.9)
                    {
                        int left = Convert.ToInt32(flt[0, 0, x, 3] * cols);
                        int top = Convert.ToInt32(flt[0, 0, x, 4] * rows);
                        int right = Convert.ToInt32(flt[0, 0, x, 5] * cols);
                        int bottom = Convert.ToInt32(flt[0, 0, x, 6] * rows);
                        Console.WriteLine("分值:" + flt[0, 0, x, 2] + "  下标:" + flt[0, 0, x, 1]);
                        int index = (int)flt[0, 0, x, 1];
                        if (index < 23)
                        {
                            CvInvoke.PutText(image1, getMessage[index], new Point((left + right) / 2, (top + bottom) / 2), Emgu.CV.CvEnum.FontFace.HersheySimplex, 1, new MCvScalar(0, 0, 255));
                        }
                        image1.Draw(new Rectangle(left, top, right - left, bottom - top), new Bgr(0, 0, 255), 2);

                    }
                }
                #endregion
                CvInvoke.Imshow("image1", image1);
                image1.Save("testing-1.png");
            }
        }
        


    }
}

经过多方测试,发现flt[0, 0, x, 1]是识别结果信息,flt[0, 0, x, 2]为识别的分值;getMessage 中的信息要自己试了,我试了人、猫、汽车

运行结果:

把代码中的street.png换成cat1.png,运行结果如下:

 再换成cat2.png后运行结果如下:

再换成cat3.png后运行结果如下:

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

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

相关文章

(CVE-2019-0227)Axis<=1.4 远程命令执行漏洞

结尾附上本文的环境和PoC 一、漏洞介绍 漏洞本质是管理员对AdminService的配置错误。当enableRemoteAdmin属性设置为true时&#xff0c;攻击者可以构造WebService调用freemarker组件中的template.utility.Execute类&#xff0c;远程利用AdminService接口进行WebService发布&am…

Linux_gdb_进程概念

目录 进度条 学习过程 自主实现&#xff1a; Linux的git操作 .gitignore .git git add . git commit git push git log git status git pull 进度条 学习过程 首先创建源文件&#xff0c;这个源文件就是我们要写的进度条的定义 接下来&#xff0c;我们创建文件Ma…

化工行业供应商协同管理系统:助力企业打造良好营商环境,提升运营效率

化工行业是我国工业发展的重要基础&#xff0c;也是国民经济发展和生活不可或缺的一部分。化工产品的更新换代&#xff0c;产业的不断升级&#xff0c;对原材料的采购也提出了更高要求。 由于精细化工行业原材料的质量和成本&#xff0c;与供应商的选择与资质具有重要的关联性…

[附源码]计算机毕业设计JAVAjsp医院网上预约系统

[附源码]计算机毕业设计JAVAjsp医院网上预约系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM myb…

关于Python和自动化

最近碰到了好几次面试都需要问Python。 在这里我有一个误区&#xff0c;向各位面试官先陈述一下。 之前的时候&#xff0c;对C和C研究的更加多一点&#xff0c;再加上多年的自动化维护经验&#xff0c;自认为对po封装模式的理解&#xff0c;因此对于自认为对Python是十拿九稳&a…

[Spring MVC6]事务管理与缓存机制

Spring MVC 关于Spring与MaBatis事务管理&#xff0c;这里的事务管理类似于数据库中的transaction,基本操作也都一样。同时介绍了MaBatis缓存模式&#xff0c;特别是一级缓存与二级缓存。 希望对你有所帮助&#xff01; 目录Spring 事务管理MyBatis 事务管理MyBatis 缓存模式一…

html实现个人空间主页(附源码)

文章目录1.设计思路1.1 欢迎界面1.2 屏保界面1.3 主界面1.4 我的项目界面1.5 我的日记界面1.6 我的日记管理界面2.效果展示和代码展示2.1 动态效果图2.2 主界面代码2.3 欢迎页代码2.4 屏保代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weix…

JavaScript算法 — 二叉树遍历

目录1、构造二叉树2、递归遍历3、非递归遍历3.1 先序3.2 中序3.3 后序1、构造二叉树 树节点&#xff1a; // 二叉树节点的构造函数 function TreeNode(val, left, right) {this.val (valundefined ? 0 : val)this.left (leftundefined ? null : left)this.right (rightu…

给好朋友用代码画一个爱心吧

目录 效果图 html爱心 python爱心 ​编辑 代码 html python 浅浅分析一下《燃烧我&#xff0c;照亮你》剧中的爱心代码 光棍节要到了&#xff0c;不给心意的人写个爱心代码&#xff1f; 话不多说&#xff0c;上才艺&#xff0c;这里有两种爱心&#xff0c;一种是html&a…

Unity功能—— 在VS中快速访问Unity API对应文档

声明&#xff1a;本文为个人笔记&#xff0c;用于学习研究使用非商用&#xff0c;内容为个人研究及综合整理所得&#xff0c;若有违规&#xff0c;请联系&#xff0c;违规必改。 Unity功能—— 在VS中快速访问Unity API对应文档 文章目录Unity功能—— 在VS中快速访问Unity API…

光点科技数据口袋数据填报系统满足多类型企业报表需求_光点科技

在招聘过程中&#xff0c;HR对数据处理存在一定的需求&#xff0c;手动整理繁杂的数据无疑是加大招聘工作量&#xff0c;因此&#xff0c;借助数据填报系统更好地进行处理数据工作&#xff0c;不失为帮助HR减轻招聘工作量的良方。 光点数据填报系统利用传统商业报表工具进行数据…

中国热泵空调行业发展趋势及投资风险研究报告

智研瞻产业研究院专注于中国产业经济情报及研究&#xff0c;目前主要提供的产品和服务包括传统及新兴行业研究、商业计划书、可行性研究、市场调研、专题报告、定制报告等。涵盖文化体育、物流旅游、健康养老、生物医药、能源化工、装备制造、汽车电子、农林牧渔等领域&#xf…

基于springboot二手交易平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;非前后端分离 前端技术&#xff1a;vue.jselementUI等框架实现 服务端技术&#xff1a;springbootmybatis-pl…

Linux服务器中配置tomcat的服务,并通过端口8888访问

引言: Tomcat是常见的免费的web服务器,前端服务很多都是通过tomcat部署的&#xff01;所以多了解点肯定没坏处&#xff01; 一、配置端口 1.防火墙策略中配置8888端口&#xff0c;并允许策略&#xff1a; 二、安装tomcat包 1.新建tomcat文件夹 进入 /usr/local,并新建文件夹…

弹框确认按钮,请求两个接口跳转刷新页面,并使用async和await将异步改成同步的数据?

前景&#xff1a;公司前后端不分离项目&#xff0c;使用的框架element-ui较低版本的&#xff0c;弹框确定按钮加载动态按钮的loading。 //插件 npm i element-ui -S效果图: 代码: <template><div><el-button type"text" click"dialogVisible …

Hive——操作数据库创建修改表(DDL数据定义)

DDL操作1. 数据库操作1.1 创建&查询数据库1.2 修改&删除数据库2. 表操作2.1 创建表2.2 内部表和外部表2.2.1 管理表2.2.2外部表2.2.3管理表与外部表的互相转换2.3 修改表1. 数据库操作 1.1 创建&查询数据库 定义&#xff1a; CREATE DATABASE [IF NOT EXISTS] d…

IDEA settings设置技巧,最常用快捷键,让你的编译器用更加得心应手

导读 每次下载安装新的 IDEA 以后&#xff0c;都免不了对该软件进行一些优化配置&#xff0c;以方便我们在使用的时候更加得心应手。一份趁手的设置&#xff0c;无疑能让我们的工作效率事半功倍。 碍于每次自己重装 IDEA 都需要去网搜一大堆文章去设置 settings&#xff0c;所以…

Vue框架的学习(Vue的基础指令操作二 V-For)第二课

今天的任务理解下面的几个指令操作 重点在V-for上 V-if V-else V-show V-For 本文章的重心放在V-For 从数据到数组到对象一步一步的去查找 底层的原理 v-show和v-if的用法看起来是一致的&#xff0c;也是根据一个条件决定是否显示元素或者组件 下面是 V-if V-else V-sho…

1. 云计算简介

1.2 云计算的定义和分类 云计算的定义 美国国家标准与技术研究院&#xff08;NIST&#xff09;定义&#xff1a; 云计算是一种模型&#xff0c;它可以实现随时随地、便捷地、随需应变地从可配置计算资源共享池中获取所需的资源&#xff08;例如&#xff0c;网络、服务器、存…

【记录】终端如何 进入conda(base) 环境,如何退出 conda(base)环境,终端快速进入Jupyter notebook的方法

目录一、终端 进入 conda&#xff08;base&#xff09; 环境二、终端 退出 conda&#xff08;base&#xff09; 环境三、终端进入 Jupyter notebook 的方法一、终端 进入 conda&#xff08;base&#xff09; 环境 --->> win R : 输入cmd 回车&#xff0c;进入终端界面。…