使用 ML.NET 识别乐高颜色块

每一个乐高迷都拥有很多的颜色块,需要进行排序和按类型分拣,按照《Organizing your LEGO Bricks》或许有所帮助,但这不是一个简单的任务,因为有很多颜色块有非常微妙的差异。如果换作一个典型的程序员可以做什么来解决这个问题呢?你猜对了 - 建立一个程序使用 ML.NET 来识别乐高的颜色块。

首先,我们将创建一个控制台应用并添加所需的包

> dotnet new console
> dotnet add package Microsoft.ML
> dotnet add package Microsoft.ML.Vision
> dotnet add package Microsoft.ML.ImageAnalytics
> dotnet add package SciSharp.TensorFlow.Redist

在项目文件夹的根目录中,我将创建一个名为 pieces 的子文件夹,并在此文件夹中创建一些颜色分类的子文件夹,放置训练集中的每种颜色的图片。

使用时,我们需要定义输入和输出模型(分类器提供分类结果)。

public class ModelInput
{public string Label { get; set; }public string ImageSource { get; set; }
}public class ModelOutput
{public String PredictedLabel { get; set; }
}

为了训练模型,我们首先创建一个由目录中的图像组成的输入数据集,并将其作为标签分配它们位于的目录的名称。在此之后,我们创建训练管道,最后,使用数据进行训练以创建模型。

static void TrainModel()
{// Create the input datasetvar inputs = new List<ModelInput>();foreach (var subDir in Directory.GetDirectories(inputDataDirectoryPath)){foreach (var file in Directory.GetFiles(subDir)){inputs.Add(new ModelInput() { Label = subDir.Split("\\").Last(), ImageSource = file });}}var trainingDataView = mlContext.Data.LoadFromEnumerable<ModelInput>(inputs);// Create training pipelinevar dataProcessPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label", "Label").Append(mlContext.Transforms.LoadRawImageBytes("ImageSource_featurized", null, "ImageSource")).Append(mlContext.Transforms.CopyColumns("Features", "ImageSource_featurized"));var trainer = mlContext.MulticlassClassification.Trainers.ImageClassification(new ImageClassificationTrainer.Options() { LabelColumnName = "Label", FeatureColumnName = "Features" }).Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel", "PredictedLabel"));IEstimator<ITransformer> trainingPipeline = dataProcessPipeline.Append(trainer);// Create the modelmlModel = trainingPipeline.Fit(trainingDataView);
}

现在,使用这个训练模型,我们可以尝试对一个新图像进行分类。通过为其中一个图像创建模型输入,然后将它传递到使用分类器构建的模型创建的预测引擎。

static ModelOutput Classify(string filePath)
{// Create input to classifyModelInput input = new ModelInput() { ImageSource = filePath };// Load model and predictvar predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel);return predEngine.Predict(input);
}

最后让我们用4种不同的颜色来测试这一点。

static void Main()
{TrainModel();var result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Black.jpg");Console.WriteLine($"Testing with black piece. Prediction: {result.PredictedLabel}.");result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Blue.jpg");Console.WriteLine($"Testing with blue piece. Prediction: {result.PredictedLabel}.");result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Green.jpg");Console.WriteLine($"Testing with green piece. Prediction: {result.PredictedLabel}.");result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Yellow.jpg");Console.WriteLine($"Testing with yellow piece. Prediction: {result.PredictedLabel}.");
}

结果如图所示。

4张图片对了3个!略微有点令人失望。但这是一个很好的开始,因为它给了我们机会去深入,并试图了解如何改进分类,使其更准确。也许它需要更多的训练数据,也许有更好的分类算法我们可以使用!

项目完整示例代码和训练数据在GIthub上:https://github.com/BeanHsiang/Vainosamples/tree/master/CSharp/ML/LegoColorIdentifier

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

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

相关文章

维修计算机机房管理员职责,机房管理员岗位职责

机房管理员在现代教育技术中心主任的领导下&#xff0c;负责学生机房的规划建设和日常管理工作。具体履行以下职责&#xff1a;一、树立一切以教学为中心的服务意识&#xff0c;加强与教师之间的联系&#xff0c;注重业务学习&#xff0c;不断提高业务技能。二、掌握计算机操作…

ccs加载out文件_类加载流程、类加载机制及自定义类加载器详解

原文&#xff1a;juejin.im/post/5cffa528e51d4556da53d091一、引言当程序使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。二、类的加载、链接、初始化1、加载类加载指的是将类的class文件读入内存&a…

写给自己,2020的年终总结

大概从2017年起&#xff0c;每年在博客园写一篇博客回顾自己过去的一年已经成为我的一种习惯&#xff0c;今年也同样毫不例外。不过与往年相比&#xff0c;总归还是受拖延症的影响&#xff0c;在公历年即将过去才开始动手敲下第一行文字。如果要给自己的2020年年终总结列一个篇…

2021福建计算机会考操作题,2021年福建省信息技术会考笔试试题答案.doc

.6信息技术基础(必修)选择题(共50题&#xff0c;每题1分&#xff0c;每题只有一个正确答案)1&#xff0e;下列相关信息叙述&#xff0c;不正确是A&#xff0e;信息无处不在&#xff0c;但并不一定全部是真实B&#xff0e;信息能够被存放和传输C&#xff0e;信息价值完全取决于信…

unity中单位是米还是厘米_【一步数学】小学数学单位换算公式大全及专项训练...

重量单位换算1吨1000千克 1吨1000 000克吨&#xff1a;吨是重量单位&#xff0c;公制一吨等于1000公斤&#xff1a;计算船只容积的单位&#xff0c;一吨等于2.83立方米&#xff08;合100立方英尺&#xff09;。1千克1000克 500克1斤千克&#xff1a;克&#xff0c;(符号kg或㎏)…

起点低,是彪悍的最好证明!

阅读本文大概需要4分钟。一个读者的问题&#xff1a;洋哥&#xff0c;我老家是农村的&#xff0c;只考上了专科&#xff0c;毕业后北漂两年月薪才7000&#xff0c;每天都会很焦虑&#xff0c;想努力但想到自己的过去&#xff0c;又怀疑努力是否有用。和这个读者聊了很久&#x…

量子计算机与新型传感器,新型量子传感器为超导量子计算机发展开辟了新路径...

莫斯科国立科技大学(NUSTMISIS)、俄罗斯量子中心(RQC)、以及德国卡尔斯鲁厄理工学院(KIT)的一支联合研究团队&#xff0c;已经在量子优势研究方面取得了重大的进展。由发表在《npj量子信息》期刊上的研究论文可知&#xff0c;其打造的一款量子传感器&#xff0c;为量子比特中两…

二分法查找是基于有序_201,查找顺序查找

查找算法中顺序查找算是最简单的了&#xff0c;无论是有序的还是无序的都可以&#xff0c;也不需要排序&#xff0c;只需要一个个对比即可&#xff0c;但其实效率很低。我们来看下代码1public static int search1(int[] a, int key) {2 for (int i 0, length a.length; i …

河南大学计算机组成原理,河南大学计算机组成原理考点

河南大学计算机组成原理考点 (34页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;11.90 积分第&#xff11;章 计算机系统概论1、计算机硬件的五大部件&#xff1f;三大部分&#xff1f;运算器 存储器…

【Git】Git-常用命令备忘录(二)

开发过程中&#xff0c;各种问题都会出现&#xff0c;比如手残&#xff0c;眼花&#xff0c;头昏&#xff0c;导致了误操作&#xff0c;那么git作为一款由Linus亲自操刀&#xff0c;替换掉BitMover公司的BitKeeper的优秀源代码管理工具,让您在各种乱七八糟的误操作中&#xff0…

zipsys驱动签名工具_全球首发 300系列主板USB WIN7 64位驱动 SMXDIY

本版为改版驱动&#xff0c;仅供SMXDIY会员学习测试&#xff0c;禁止传播。众所周知&#xff0c;H310/B360/H370/Z390是没USB的WIN7驱动的。网上也找不到相关的资料&#xff0c;大家普遍默认没驱动&#xff0c;但这已经成为历史。我们这发布的是真的驱动&#xff0c;可以整合到…

.NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?

背景在.NET中&#xff0c;异常是指成员没有完成它的名称宣称可以完成的行动。在异常的机制中&#xff0c;异常和某件事情的发生频率无关。有时候需要对一些失败的任务进行多次的重试&#xff0c;如果重试的次数达到我们设定的阀值&#xff0c;则再放弃任务。解决方案使用一个静…

电子商务与计算机科学与技术的相关性,电子商务、计算机科学与技术、法学等相关专业。.doc...

电子商务、计算机科学与技术、法学等相关专业。.doc优先选派专业&#xff1a;金融学、财务管理、经济学、市场营销、电子商务、计算机科学与技术、法学等相关专业。交流学校专业设置情况详见链接&#xff1a; /jwc/jxjh/zyjs.asp1、专业建设概况&#xff1a;学校已形成以经济学…

excel筛选排序从小到大_excel表格怎么按字数的多少来排列!

excel表格怎么按字数的多少来排列为了更好的做好我们的语料编定及翻译工作&#xff0c;尤其是个别语料数量较多&#xff0c;最多可达2000条。我们可以将字数少的&#xff0c;意图明确的&#xff0c;不会有异议的&#xff0c;我们可以根据每句话的字数&#xff0c;用excel来进行…

计算机系统的工作方式,某计算机系统输入/输出采用双缓冲工作方式,其工作过程如下图所示,假设磁盘块与缓冲 - 信管网...

第2题&#xff1a;实时操作系统(RTOS)内核与应用程序之间的接口称为( )。A&#xff0e;I&#xff0f;O接口B&#xff0e;PCIC&#xff0e;APID&#xff0e;GUI答案解析与讨论&#xff1a;www.cnitpm.com/st/2867029381.html第3题&#xff1a;嵌入式处理器是嵌入式系统的核心部…

怎么从转移特性曲线上看dibl_「科普向」这篇让你快速搞懂IGBT的静态特性

IGBT的静态特性其实并非难以理解的东西,即便是对于外行人而言。刚接触那会儿&#xff0c;看到转移特性、输出特性之类的就想溜之大吉&#xff0c;加之网上查询的资料一概笼统简单&#xff0c;只描述特性曲线所表示的关系结果&#xff0c;却并不解释曲线为何这里弯曲、那里平直&…

对CORS OPTIONS预检请求的一些思考

前后端分离模大势所趋&#xff0c;跨域问题更是老生常谈。《程序员应对浏览器同源策略的姿势》一文提到三种跨域请求方案&#xff0c;重点讲述了w3c和浏览器厂商推出的CORS规范。同源策略 所谓同源是指域名、协议、端口相同。不同源的浏览器脚本(javascript、ActionScript、ca…

2020计算机单招的大专,2020专科和单招的区别

单招即单招招生是国家授权高职院校独立组织考试录取的一种方式&#xff0c;必须于高考前完成录取。众所周知&#xff0c;单招学校大部分是专科学校&#xff0c;那么&#xff0c;单招和专科有什么区别呢?下面是小编为大家收集的关于2020专科和单招的区别_选择单招有什么好处。希…

前端跨域请求get_前端实现跨域访问

1.ajax方式跨域直接使用jsonp即可dataType : "jsonp",2.使用getJson跨域获取数据$.getJSON("http://api.taobao.com/apitools/ajax_props.do&jsoncallback?",function (data) {alert(data);});执行原理&#xff1a;发送请求时需要传一个callback的回调…

如何在 ASP.NET Core 中使用 NLog 的高级特性

NLog 是一个开源的轻量级日志框架&#xff0c;提供了丰富的日志路由和管理功能&#xff0c;同时 NLog 也是非常容易的去配置和扩展&#xff0c;其实在之前的文章中我已经讨论过了 Nlog&#xff0c;在这篇我准备继续和大家讨论一下 NLog 的更多高级功能。接下来看看如何通过 .co…