纵有疾风起
人生不言弃

初探机器学习之使用百度AI服务实现图片识别与相似图片


一、百度云AI服务

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图

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

  (1)图像识别  

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(1)

  (2)图像搜索  

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(2)

  关于百度云AI C# SDK

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(3)

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

二、图片内容识别

2.1 内容识别实现

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

    public class Program    {        private static ImageClassify aipClassifyClient;        static Program()        {            aipClassifyClient = new ImageClassify(BaiduAipSimSettings.ApiKey, BaiduAipSimSettings.SecretKey);        }        public static void Main(string[] args)        {            var filePath = @"Images\bk.jpg";            // 图片识别Demo            ImageClassifyDemo(filePath);            Console.ReadKey();        }        private static void ImageClassifyDemo(string filePath)        {            var image = File.ReadAllBytes(filePath);            try            {                var result = aipClassifyClient.AdvancedGeneral(image);                Console.WriteLine("Api Response :");                Console.WriteLine(result);            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }        }    }

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(4)

2.2 内容识别测试

  (1)人物:贝克汉姆

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(5)

初探机器学习之使用百度AI服务实现图片识别与相似图片插图(6)

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

  (2)静物:室内客厅

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(7)

初探机器学习之使用百度AI服务实现图片识别与相似图片插图(8)

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

三、获取相似图片

3.1 准备图片库

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(9)

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

3.2 获取相似图片实现

  代码仍然很简单,如下:

    public class Program    {        private static ImageSearch aipSearchClient;        static Program()        {            aipSearchClient = new ImageSearch(BaiduAipSimSettings.ApiKey, BaiduAipSimSettings.SecretKey);        }        public static void Main(string[] args)        {            var filePath = @"Images\卧室.jpg";            // 相似图片Demo            SimilarImageDemo(filePath);            Console.ReadKey();        }        private static void SimilarImageDemo(string filePath)        {// 检索            var searchOptions = new Dictionary<string, object>{                    {"tags", "100,1"},                    {"tag_logic", "0"},                    {"pn", "0"},                    {"rn", "10"}                };            SimilarSearchFromLib(filePath, searchOptions);        }        /// <summary>        /// 单张图片入库        /// </summary>        private static void ImportToLib(string filePath, Dictionary<string, object> options = null)        {            var image = File.ReadAllBytes(filePath);                        try            {                var result = aipSearchClient.SimilarAdd(image, options);                Console.WriteLine("Api Response :");                Console.WriteLine(result);            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }        }        /// <summary>        /// 相似图检索        /// </summary>        private static void SimilarSearchFromLib(string filePath, Dictionary<string, object> options = null)        {            var image = File.ReadAllBytes(filePath);            try            {                var response = aipSearchClient.SimilarSearch(image, options).ToObject<SearchResponse>();                var result = response.Result.Take(5);                Console.WriteLine("Similarity Result :");                foreach (var item in result)                {                    Console.WriteLine("{0}:{1}", item.Brief, item.Score);                }            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }        }    }

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

3.3 获取结果测试

  测试图片:简约沙发

初探机器学习之使用百度AI服务实现图片识别与相似图片插图(10)  

  测试效果如下图所示:

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(11)

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

  初探机器学习之使用百度AI服务实现图片识别与相似图片插图(12)

四、小结

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

参考资料

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

 

文章转载于:https://www.cnblogs.com/edisonchou/p/edc_machine_learning_use_baiduyun_ai_image_service.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 初探机器学习之使用百度AI服务实现图片识别与相似图片

分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活