• 通过C#调用百度图片搜索


    一、图库创建
    1、提供了网站页面的接口

    这种上传方法,效率相对比较低,如果全部使用的话,还是需要使用API。(注:图库管理仅供测试体验,实际业务中对图片库的管理操作(入库、删除、更新),请以API接口调用结果为准。)
    2、该接口实现单张图片入库,入库时需要同步提交图片及可关联至本地图库的摘要信息(具体变量为brief,具体可传入图片在本地标记id、图片url、图片名称等);同时可提交分类维度信息(具体变量为tags,最多可传入2个tag),方便对图库中的图片进行管理、分类检索。**注:重复添加完全相同的图片会返回错误。**

    public void SimilarAddDemo() {
        var image = File.ReadAllBytes("图片文件路径");
        // 调用相似图检索—入库, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
        var result = client.SimilarAdd(image);
        Console.WriteLine(result);
        // 如果有可选参数
        var options = new Dictionary<string, object>{
            {"brief", "{"name":"周杰伦", "id":"666"}"},
            {"tags", "100,11"}
        };
        // 带参数调用相似图检索—入库, 图片参数为本地图片
        result = client.SimilarAdd(image, options);
        Console.WriteLine(result);
    }
    public void SimilarAddUrlDemo() {
        var url = "http//www.x.com/sample.jpg";
     
        // 调用相似图检索—入库, 图片参数为远程url图片,可能会抛出网络等异常,请使用try/catch捕获
        var result = client.SimilarAddUrl(url);
        Console.WriteLine(result);
        // 如果有可选参数
        var options = new Dictionary<string, object>{
            {"brief", "{"name":"周杰伦", "id":"666"}"},
            {"tags", "100,11"}
        };
        // 带参数调用相似图检索—入库, 图片参数为远程url图片
        result = client.SimilarAddUrl(url, options);
        Console.WriteLine(result);
    }
    根据此编写代码:
    private void btnAdd_Click(object sender, EventArgs e)
            {
                //鉴权
                var APP_ID = "24936407";
                var API_KEY = "yLFm8KRYpgMSHujjuFVs955r";
                var SECRET_KEY = "6jIxRriVGZRax4Ba62GHcrXds4qinUXn ";
                var client = new Baidu.Aip.ImageSearch.ImageSearch(API_KEY, SECRET_KEY);
                //读取图片
                DirectoryInfo dinfo = new DirectoryInfo("E:/未来项目/SMD皮肤镜/参考资料/excel模板/图库");
                //获取指定目录下的全部子目录及文件类型
                FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos();
                int iNumber = 0;
                foreach (FileSystemInfo fsinfo in fsinfos)
                {
                    // 调用相似图检索—入库, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
                    string strFileName = fsinfo.FullName;
                    var image = File.ReadAllBytes(strFileName);
                 
                    var options = new Dictionary<string, object>();
                    string strBrief = "{"name":"" + fsinfo.Name + "", "id":"666"}";
                    string strTags = iNumber.ToString() + ",1";
                    options.Add("brief", strBrief);
                    options.Add("tags", strTags);
        
                    var result = client.SimilarAdd(image, options);
                    iNumber++;
                }
            } 
     }

    这样的话,第一分类都做出来了,而且有摘要标注。(但是发现丢了10张,按照它的意思是重复的会丢掉)

    二、搜索代码
    完成入库后,可使用该接口实现相似图检索。支持传入指定分类维度(具体变量tags)进行检索,返回结果支持翻页(具体变量pn、rn)。

     //鉴权
                var APP_ID = "24936407";
                var API_KEY = "yLFm8KRYpgMSHujjuFVs955r";
                var SECRET_KEY = "6jIxRriVGZRax4Ba62GHcrXds4qinUXn ";
                var client = new Baidu.Aip.ImageSearch.ImageSearch(API_KEY, SECRET_KEY);
                var image = File.ReadAllBytes("e:/template/lena.jpg");
                // 调用相似图检索—检索, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
                var result = client.SimilarSearch(image);
    字段是否必选类型说明
    log_iduint64唯一的log id,用于问题定位
    result_numuint32检索结果数
    resultobject[]结果数组
    +cont_signstring图片签名,可以用来删除图片或定位问题
    +scorefloat图片相关性,取值范围0-1,越接近1代表越相似
    +briefstringadd时添加的brief信息
    has_morebool是否还有下一页,返回值:true、false;如果不分页,不用关注该字段

    自己检索自己是没有问题的

    三、准确性测试和界面改造
    1、我尝试对原图像进行一些处理
        这里是进行了缩放,这样的话主体区域应该不会变化
    结果符合预期
    2、我尝试找到类似的图片
    这个就不是很符合预期,看来这个图库还是需要整理。
    3、界面改造成为可以显示搜索结果的
    这样看来,确实蛮像的。

    private void button2_Click(object sender, EventArgs e)
            {
                //鉴权
                var APP_ID = "24936407";
                var API_KEY = "yLFm8KRYpgMSHujjuFVs955r";
                var SECRET_KEY = "6jIxRriVGZRax4Ba62GHcrXds4qinUXn ";
                var client = new Baidu.Aip.ImageSearch.ImageSearch(API_KEY, SECRET_KEY);
                var image = File.ReadAllBytes("E:/未来项目/SMD皮肤镜/参考资料/excel模板/1.jpg");
                // 调用相似图检索—检索, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
                var result = client.SimilarSearch(image);
                string str = result.ToString();
                string strFirst = result.First.ToString();
                string strSecond = result.First.Next.First.First.First.First.ToString();
                //反序列化
                Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(strSecond);
                string strPath = @"E:/未来项目/SMD皮肤镜/参考资料/excel模板/图库/" + values.First().Value.ToString();
                pictureBox1.Image = Bitmap.FromFile(strPath);
            }
        }


    4、扩展
        现在已经有词库了,那么可以据此从网络搜索数据,得出统一的处理方法,几个反馈做下去,就可以将这个做实。







    附件列表

      目前方向:图像处理,人工智能
    • 相关阅读:
      关于获取路径
      今天最好的生日礼物就是重新找到目标
      Fedora与Ubuntu安装g++的命令
      CMPXCHG8B 比较并交换 8 字节
      关于 WIN32_LEAN_AND_MEAN
      i386和i686
      Intrinsic function
      VC9: LINK : warning LNK4068: /MACHINE not specified; defaulting to X86
      Linux内核中的Min和Max函数
      linux重定向命令应用及语法
    • 原文地址:https://www.cnblogs.com/jsxyhelu/p/15362922.html
    Copyright © 2020-2023  润新知