提起AI,大家都会先想到Python,确实Python作为一门好几十年的老语言,上一波的AI大流行使它焕发了青春。大家用Phtyon来做AI,最主要的原因无非就是编码量更少,很多数学和AI相关的Api都是现成的。但是随着ML.net的问世,我们现在可以在.netcore平台上使用比Python更少的代码来实现AI的功能了。

ML是Machine Learning的缩写,从命名上可以看出微软对于对于AI的现状还是有非常清醒的认识的。目前我们所有声称的人工智能其实只是机器学习,离真正意义上的人工智能还差的很远。这也是为什么,AI这个概念几乎每十年就火一次,然后陷入沉寂,因为我们在算法上其实始终没有突破,只是硬件比以前强大了,算的比以前快了而已。

上一波的AI创业大军已经纷纷倒下了,这也使我们认识到目前AI的水平是很难独立支撑一块完整的创新业务的,但是作为已有系统的补充,作为数据分析的工具,AI还是很有用的,尤其是在图像识别,语义分析,数值预测等已有成熟算法的领域。

读到这里是不是以为这篇文章是喷概念的?必须不是啊,干货来了:

ML.Net主要特点:

跨平台,开源,使用简单,支持Tensorflow等扩展

一、 使用ML.Net的图形化工具生成机器学习代码

目前的Visual Studio 2019已经包含了ML.Net的图形化工具,只不过还是预览版,需要你手动开启,首先在Visual Studio Installer里安装的功能中勾选ML.Net

然后在visual studio的 工具->选项中,选择展示预览功能

从这里我们也可以看出,微软已经计划在后续的visual studio中将ML.NET作为默认工具集成进来了。

安装完毕之后,随便建一个.netcore的项目,控制台的就可以。右键点击添加就会看到ML.NET的选项,

点击之后会有图形界面,然你从几种常见的需求中选择,比如语义识别,图像识别,数值预测等,后续它还会支持图片中物体识别等更复杂的需求。整个过程非常直观,按照它的界面一步一步走就可以,它最终会帮你训练模型并生成使用模型和再次训练模型的代码。

二、 手动引用Nuget包进行开发

在已有项目中手动添加AI的支持,只需要从Nuget上手动引用Microsoft.ML包,以及其他任务相关的包,如果需要使用tensorflow训练的模型,则需要引用SciSharp.TensorFlow.Redist包。训练和使用模型的代码都比较简单,根据机器学习的类型不同,少则10几行,多则几十行代码就可以完成训练的编码。

三、 实战演示

公司内部已有app需要增加一些额外功能,用户用手机截图上传的时候,系统需要判断图片有没有最上方的状态栏。由于手机本身系统的不同,再加上安卓手机状态栏基本上都能自定义,所以状态栏的样式是五花八门的,传统方式很难实现这个需求。最终我们使用WTM+ML.NET快速搭建了一个AI图片分类的平台,这个平台的功能包括:

  1. 可维护多种图片识别的任务。虽然目前的需求只有状态栏识别这一个,但是系统应该支持多种图片任务。
  2. 每种任务可以自定义具体分类
  3. 每种任务可以指定不同的图片预处理操作,比如状态栏识别这个任务应该在训练和识别之前对原始图片进行裁剪,只判断上方80像素高的区域。
  4. 提供后台界面允许管理人员对数据进行标注
  5. 允许在线增量训练
  6. 提供对外API接口,使其他系统可以使用该api来进行图片识别的工作
  7. 其他通用模块,如日志,用户,权限等

以上的需求我们用了不到一个工作日,使用WTM+ML.NET就快速实现了,当然准备初次训练所需的图片用了两周的时间。最终我们使用了七千多张带状态栏的图片,和两千多张不带状态栏的图片训练完成了这个模型,准确率可以达到95%。后续通过人工标注和增量训练这个准确度还可以提高。

这个系统目前已经上线,为一个40万日活的App提供图片识别服务,表现相当稳定。

Talk is cheep, show me the code?

没问题,欢迎来我们在CSDN上的课程 https://edu.csdn.net/course/detail/27568 , 或者在csdn里搜索WTM找到我们的视频教程。里面有完整的从0开始开发上述系统的视频讲解,并有完整的源代码。 源码不是公司的哦,公司用的Layui,我又用VUE重新写了一遍。 用了WTM,这都不是事儿,快得很。

人工智能?.netcore一样胜任!的更多相关文章

  1. Python3 与 NetCore 基础语法对比(就当Python和C#基础的普及吧)

    Jupyter排版:https://www.cnblogs.com/dotnetcrazy/p/9102030.html 汇总系列:https://www.cnblogs.com/dunitian/p ...

  2. 谷歌AI中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  3. 谷歌 AI 中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  4. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖

    在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...

  5. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战

    大家好,先自我介绍一下,我是王睿.之前在Facebook/Instagram担任AI技术负责人,现在DataPipeline任Head of AI,负责研发企业级业务异常检测产品,旨在帮助企业一站式解 ...

  6. .NetCore MVC中的路由(2)在路由中使用约束

    p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...

  7. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  8. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  9. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

随机推荐

  1. 初至cnblogs —— 博客搬迁

    感觉写博客是一种总结.分享知识的有效方式,于是打算坚持通过博客这一载体来提升自己. 最初通过 Hexo + GitHub Page 来搭建个人博客,但是通过这种方式搭建的博客基本没有访问量.个人感觉没 ...

  2. (私人收藏)清新文艺唯美PPT模板

    清新文艺唯美PPT模板 https://pan.baidu.com/s/12hP5pT2KfPGCgOnvp0rOIAf0dj

  3. 跟着阿里学JavaDay07——Java基础语法(五)

    我们后面的笔记我,打算直接用程序,加注释进行记录.日后若本人有疑问,可进行网络查询加以整理回复 package com.cionda.JavaDemo.dept; public class JavaD ...

  4. .NET 开源项目 StreamJsonRpc 介绍[中篇]

    阅读本文大概需要 11 分钟. 上一篇介绍了一些预备知识,包括 JSON-RPC 介绍和实现了 JSON-RPC 的 StreamJsonRpc 介绍,讲到了 StreamJsonRpc 可以通过 . ...

  5. vue-devtools的安装

    为了能够很好的检查vue代码,安装vue-devtools; 1.下载devtools插件,建议大家去找正规的路径下载(随便在网页上下载的缺文件,我已入坑),正规地址:https://github.c ...

  6. Mybatis源码初探——优雅精良的骨架

    @ 目录 前言 精良的Mybatis骨架 宏观设计 基础支撑 日志 日志的加载 日志的使用 数据源 数据源的创建 池化技术原理 数据结构 获取连接 回收连接 缓存 缓存的实现 CacheKey 反射 ...

  7. java 中Object类中toString()的使用

    1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() 2. Object类中toString()的定义: public String toString() { return ...

  8. cf1216E2 Numerical Sequence (hard version) 二分查找、思维题

    题目描述 The only difference between the easy and the hard versions is the maximum value of k. You are g ...

  9. 蓝桥杯大学B组省赛2020模拟赛(一)题解与总结

    题目链接:https://www.jisuanke.com/contest/6516 A:题目: 我们称一个数是质数,而且数位中出现了 5 的数字是有趣的. 例如 5, 59, 457.求1到1000 ...

  10. pytest框架使用教程

    Pytest框架 一.简介 pytest:基于unittest之上的单元测试框架 有什么特点? 自动发现测试模块和测试方法 断言更加方便,assert + 表达式,例如 assert 1 == 1 灵 ...