一、百度云AI服务

  最近在调研一些云服务平台的AI(人工智能)服务,了解了一下阿里云、腾讯云和百度云。其中,百度云提供了图像识别及图像搜索,而且还细分地提供了相似图片这项服务,比较符合我的需求,且百度云提供了每日10000次入库和500次检索的免费次数,使得我可以更快地试用,且没有任何花费。更为重要的是,百度云提供了兼容.NET Core 2.0的C# SDK,这是更加让我选择试用的原因。

  

  这里抛开BAT各个AI服务提供的算法的精准度不说,百度的AI服务的友好度还是蛮高的。废话不多说,这里我主要试用百度AI的两个服务:

  (1)图像识别  

  图像识别服务是百度基于深度学习及大规模图像训练,准确识别图片中的物体类别、位置、置信度等综合信息。它的主要应用场合在于:图片内容检索及相册分类或智能美图这种场景。

  

  (2)图像搜索  

  图像搜索是指以图搜图,在指定图库中搜索出相同或相似的图片。这里我主要Focus在了试用相似图片搜索这个子功能,即从一堆图片里(这堆图片是我自己建立的一个图像库)找到跟我指定的一张图片最相似的一些其他图片。

  

  关于百度云AI C# SDK

  百度云AI C# SDK在2018年中旬开始支持了.NET Core 2.0,我们可以通过Nuget安装它:

  

  接下来要做的就是,根据文档的示例完成Demo。

二、图片内容识别

2.1 内容识别实现

  代码很简单,直接调用SDK提供的API即可实现图片识别:

  1. public class Program
  2. {
  3. private static ImageClassify aipClassifyClient;
  4.  
  5. static Program()
  6. {
  7. aipClassifyClient = new ImageClassify(BaiduAipSimSettings.ApiKey, BaiduAipSimSettings.SecretKey);
  8. }
  9.  
  10. public static void Main(string[] args)
  11. {
  12. var filePath = @"Images\bk.jpg";
  13.  
  14. // 图片识别Demo
  15. ImageClassifyDemo(filePath);
  16.  
  17. Console.ReadKey();
  18. }
  19.  
  20. private static void ImageClassifyDemo(string filePath)
  21. {
  22. var image = File.ReadAllBytes(filePath);
  23.  
  24. try
  25. {
  26. var result = aipClassifyClient.AdvancedGeneral(image);
  27. Console.WriteLine("Api Response :");
  28. Console.WriteLine(result);
  29. }
  30. catch (Exception ex)
  31. {
  32. Console.WriteLine(ex.Message);
  33. }
  34. }
  35. }

  其中,ApiKey和SecretKey是我们在百度云平台申请的账号,可以在管理中心找到:

  

2.2 内容识别测试

  (1)人物:贝克汉姆

  

  从分析结果中看出,前三个结果是最接近的Topic。

  (2)静物:室内客厅

  接下来来一个复杂一点的客厅照片,看看结果如何:

  

  可以看到,识别结果的自我评分都不太高,我想要的是“客厅”,但是只识别出来了“装修效果图”,还需要多多学习。

三、获取相似图片

3.1 准备图片库

  首先,我们需要准备一个图片库,在百度云管理中心创建这个图片库,然后通过Web管理界面或者SDK上传上去:

  

  这里我只上传了100多张图片,实际中应该根据自己的业务场景上传尽可能多的图片。需要说的是,在上传时可以为每个图片添加Tags,这个Tags只能是两个整数(API要求),也就是你本地数据库中的一些ID,比如分类ID。另外就是,对于Brief属性,我们一般可以传递一个JSON字符串进去,可以包含ID、Name以及Url,这样当你获取结果之后可以直接使用这个Brief属性进行反序列化,拿到URL等信息。

3.2 获取相似图片实现

  代码仍然很简单,如下:

  1. public class Program
  2. {
  3. private static ImageSearch aipSearchClient;
  4.  
  5. static Program()
  6. {
  7. aipSearchClient = new ImageSearch(BaiduAipSimSettings.ApiKey, BaiduAipSimSettings.SecretKey);
  8. }
  9.  
  10. public static void Main(string[] args)
  11. {
  12. var filePath = @"Images\卧室.jpg";
  13.  
  14. // 相似图片Demo
  15. SimilarImageDemo(filePath);
  16.  
  17. Console.ReadKey();
  18. }
  19.  
  20. private static void SimilarImageDemo(string filePath)
  21. {// 检索
  22. var searchOptions = new Dictionary<string, object>{
  23. {"tags", "100,1"},
  24. {"tag_logic", ""},
  25. {"pn", ""},
  26. {"rn", ""}
  27. };
  28. SimilarSearchFromLib(filePath, searchOptions);
  29. }
  30.  
  31. /// <summary>
  32. /// 单张图片入库
  33. /// </summary>
  34. private static void ImportToLib(string filePath, Dictionary<string, object> options = null)
  35. {
  36. var image = File.ReadAllBytes(filePath);
  37.  
  38. try
  39. {
  40. var result = aipSearchClient.SimilarAdd(image, options);
  41. Console.WriteLine("Api Response :");
  42. Console.WriteLine(result);
  43. }
  44. catch (Exception ex)
  45. {
  46. Console.WriteLine(ex.Message);
  47. }
  48. }
  49.  
  50. /// <summary>
  51. /// 相似图检索
  52. /// </summary>
  53. private static void SimilarSearchFromLib(string filePath, Dictionary<string, object> options = null)
  54. {
  55. var image = File.ReadAllBytes(filePath);
  56.  
  57. try
  58. {
  59. var response = aipSearchClient.SimilarSearch(image, options).ToObject<SearchResponse>();
  60.  
  61. var result = response.Result.Take();
  62. Console.WriteLine("Similarity Result :");
  63. foreach (var item in result)
  64. {
  65. Console.WriteLine("{0}:{1}", item.Brief, item.Score);
  66. }
  67. }
  68. catch (Exception ex)
  69. {
  70. Console.WriteLine(ex.Message);
  71. }
  72. }
  73. }

  直接参考API文档示例即可。

3.3 获取结果测试

  测试图片:简约沙发

  

  测试效果如下图所示:

  

  可以看到,它将最相似的图片(全是沙发,当然我的图库里可是沙发、床、椅子、灯具啊啥的都有)都分析出来了:这里我只取了Brief属性,实际中它应该是一个JSON字符串,反序列化后就可以得到URL去获取真正的图片了。

  

四、小结

  本文是一个简单的百度云AI服务SDK的使用,没有过多关注算法和其他方面,只是一个简单的笔记说明,也希望我们.NET程序员能够多多借助云平台提供的AI服务实现自己的业务智能化实践。后续我会学习学习ML.NET,来玩玩机器学习。

参考资料

百度云,《C# SDK技术文档

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

初探机器学习之使用百度AI服务实现图片识别与相似图片的更多相关文章

  1. 初探机器学习之使用百度EasyDL定制化模型

    一.Why 定制化模型 一般来说,各大云服务厂商只会提供一些最常见通用的AI服务,针对具体场景的AI应用则需要在云服务厂商提供的服务之上进行定制.例如,通常的图像识别只能做到分析照片的主题内容,而我的 ...

  2. 用百度AI的OCR文字识别结合JAVA实现了图片的文字识别功能

    第一步可定要获取百度的三个东西 要到百度AI网站(http://ai.baidu.com/)去注册 然后获得 -const APP_ID = '请填写你的appid'; -const API_KEY ...

  3. c# 利用AForge和百度AI开发实时人脸识别

    baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...

  4. 小白学Python——用 百度AI 实现 OCR 文字识别

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,什么人脸识别.MQTT服务器.语音识别等等,应有尽有. 看看OCR识别免费的量 快 ...

  5. 微信开发+百度AI学习:植物识别

    直接上代码 服务端代码如下 private static readonly Baidu.Aip.ImageClassify.ImageClassify client = new Baidu.Aip.I ...

  6. 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  7. python基于百度AI开发文字识别

    很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...

  8. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  9. 百度AI开发平台简介

    AIstudio https://aistudio.baidu.com/aistudio/index 关于AI Studio AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,提供在线 ...

随机推荐

  1. PhpStorm服务激活

    日期 服务地址 状态  2018-03-15  http://idea.singee77.com/  使用中

  2. PHP内核之旅-2.SAPI中的Cli

    PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli 一.SAPI是什么? 1.1 理解SAPI (1)SAPI是PHP框架的接口层.有很多种服务器的SAPI的实 ...

  3. Linux 系统化学习系列文章总目录(持续更新中)

    本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...

  4. linux下c编程 基础

    1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理 ...

  5. Mysql服务启动与关闭

    启动: 在cmd中输入 net start mysql 关闭: 在cmd中输入  net stop mysql

  6. java并发之DelayQueue实际运用示例

    在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走. ...

  7. poi的合并单元格和冻结行列

    //创建工作薄(excel) Workbook wb = new HSSFWorkbook(); //创建sheet Sheet createSheet = wb.createSheet(" ...

  8. testng实现场景恢复

    自动化测试过程中存在很多的不稳定性,例如网络的不稳定,浏览器无响应等等,这些失败往往并不是产品中的错误.那么这时我们需要对执行失败的场景恢复重新执行,确认其是否确实失败. 以前使用QTP的时候也使用了 ...

  9. Python并发编程之从生成器使用入门协程(七)

    大家好,并发编程 进入第七篇. 从今天开始,我们将开始进入Python的难点,那就是协程. 为了写明白协程的知识点,我查阅了网上的很多相关资料.发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的 ...

  10. postman的安装与使用(模拟请求)

    最近需要测试产品中的REST API,无意中发现了PostMan这个chrome插件,把玩了一下,发现postman秉承了一贯以来google工具强大,易用的特质.独乐乐不如众乐乐,特此共享出来给大伙 ...