以图搜图功能实现

以图搜图这个功能相当实用, 之前在实现这个功能的时候, 有一些笔记, 今天就整合成博文, 分享给大家。


这个demo主要实现的功能包括:

  • 自定义拍照界面
  • 图像识别
  • 以图搜图
  • 信息获取(通过识别出的图像, 获取对应信息)


下面是一个简单的演示,  如下:

     


那么如何实现这样的功能呢?

如果自己去完成图像识别, 显然不现实。

最早我研究的是谷歌API, 不过谷歌在天朝, 大家都懂得...


然后是百度了,尝试了下,  效果还不错。 另外, 百度也有自己“以图搜图”对应的App。不过我们只是为了学会如何实现怎样的功能, 管他呢。


所以,在以图搜图功能上, 我选择了使用百度API,不过百度这个API只提供给他们的“百度轻拍”APP, 不对外开放,我也是通过轻拍抓到的API,然后进行分析。


好了, 接下去就是分析过程了。 demo之后会提供。


1. UIImage 转 NSString

之后我们会采用 post方式, 获取对应的json数据,但是这个请求里面,要传入 base64Encoding 编码的 NSString (这里放的是图片信息)

(不要问我为什么, 百度就是这样设计的 )

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. UIImage* pic =[UIImage imageNamed:@"test_1.png"];  
  2. NSData* pictureData =UIImagePNGRepresentation(pic);  
  3. NSString* pictureDataString =[pictureData base64Encoding];  

2. POST请求

这里, 我抓到的URL是这样的: http://qingpai.baidu.com/api/irs/rex?reqid=196423494211296782&ak=eyJjdCI6IjIwIn0%3D&encoding=base64

如果感兴趣如何获取的, 可以留言, 如果真有疑惑, 我之后会专门再写一篇文章。 这里不是本次的主题, 就不涉及这部分内容了

简单分析下这个API。 

qingpai.baidu.com/api/  很明显 , 它是为 ”百度轻拍“提供的

reqid, ak 这个是绑定设备的。 这里固定使用这个就可以

encoding=base64 表示传入数据的编码方式。


上面那个API是固定的, 需要改变的是我们post时候传入的数据

具体如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. UIImage* pic =[UIImage imageNamed:@"test_1.png"];  
  2. NSData* pictureData =UIImagePNGRepresentation(pic);  
  3. NSString* pictureDataString =[pictureData base64Encoding];  
  4. //Post请求  
  5. NSString *post = [NSString stringWithFormat:@"%@", pictureDataString];  
  6.   
  7. NSData *bodyData = [[post stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]dataUsingEncoding:NSUTF8StringEncoding];//把bodyString转换为NSData数据  
  8. NSURL *serverUrl = [NSURL URLWithString:@"http://qingpai.baidu.com/api/irs/rex?reqid=196423494211296782&ak=eyJjdCI6IjIwIn0%3D&encoding=base64"];//获取到服务器的url地址  
  9. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverUrl  
  10.                                                        cachePolicy:NSURLRequestReloadIgnoringCacheData  
  11.                                                    timeoutInterval:10];//请求这个地址, timeoutInterval:10 设置为10s超时:请求时间超过10s会被认为连接不上,连接超时  
  12.   
  13. [request setHTTPMethod:@"POST"];//POST请求  
  14. [request setHTTPBody:bodyData];//body 数据  
  15. [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];//请求头  
  16. NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
  17. NSString *result = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];  
  18.   
  19. NSMutableDictionary *addressDic = [result objectFromJSONString];  
  20.   
  21. //异步发送request,成功后会得到服务器返回的数据  
  22. //返回的数据 根据系统的不同会返回不同编码的数据,比如windows 为GBK,Ubuntu 为UTF8.。。  
  23. //注意转换编码格式  
  24. NSLog(@"%@", addressDic);  

看一下打印的信息, 是json数据, 我拆分完以后, 大体长这样:



返回的数据很多, 大家感兴趣可以自己逐一分析。

简单的介绍下. 

facesatar 表示 识别出来相似的明星人脸。

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. "name""\u90ac\u9756\u9756",  
  2. "nameid""1931",  
  3. "simi""0.904725",  
  4. "pid""1932\/64.jpg",  
  5. "width""440",  
  6. "height""440",  
  7. "face_left""143",  
  8. "face_top""107",  
  9. "face_width""193",  
  10. "face_height""193"  

这里是一项的数据. 我们需要的主要是 “name” 和 “simi”属性,分别标示 明星姓名, 相似度。

其他的熟悉包括图片的大小, 人脸的位置, 如果需要也可以使用。

另外, name 这里的编码是Unicode,所以如果一起输出可能不明白什么意思。(缩小到name, 单个输出, 在终端可以看到中文)不过我们获取到这个“name”值后,是可以直接显示,会显示中文的。


另外. 提供一个好用的网站,便于测试

中文转Unicode 
Unicode转中文
http://javawind.net/tools/native2ascii.jsp?action=transform


再有,similar列表这里列举出了相似的图片及其来源。 具体大家可以自己分析。


三。获取详细信息

我们可以通过json数据里面, 获取到相似度最高的那个人物姓名(也可以是景点名字, 这个API比较强大)

然后调用如下API,就可以显示显示详细信息了。百度都为“轻拍”封装好了。

比如, 人物姓名是 “邬靖靖” , 调用如下URL:

http://qingpai.baidu.com/api/proxy/search?word=邬靖靖&pn=1

我这里直接用Safari打开, 就可以看到如下效果:



这样一个封装好的WAP界面, 我们可以直接在UIWebView中, 利用URL打开, 效果就很好了。



将到这里, 主要就是分享一些可供我们直接使用的API。 当然, 这个API在别处肯定是找不到的。


另外, 图片搜索我们还可以拓展出好多知识,

比如 人脸识别,光学字符识别, 图像文字识别....

以上提到的那3部分, 之前都有写过相关demo。 不过最近忙着考试, 等以后有时间了再逐一分享。


希望以上内容对你有所帮助。

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

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

相关文章

【Milvus的以图搜图】

0. 介绍 Milvus官方在bootcamp项目中给开发者提供多种解决方案,包含常见的以图搜图、人脸检索、DNA相似性检索、视频检索等等,具体可以参考bootcamp项目。 本文主要就bootcamp中以图搜图reverse_image_search的代码介绍如何运行该样例,进而了…

文心一言独立APP支持语音/ 知乎限制AI生成回答/ AMD新掌机芯片性能超NS二十倍...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好,今天是4月26日星期三,离五一不远了,大家安排好假期怎么过了吗? 如果不打算出门,也可以利用这个时间研究一下最新的AI工具。 今日科技圈新鲜事也会送上~‍…

波士顿动力新机器人登场!

问耕 编译整理 量子位 出品 | 公众号 QbitAI 互联网改变了现代人类生活的方方面面。 未来还能更好么? “互联网让人们收到世界上所有的信息,但是机器人技术能让人们触达和操纵世界上所有的东西。不仅仅局限于信息,而是一切”,莱伯…

服务器ip被封一般是什么情况?

在什么情况下,我们的网站才会有被封的概率?跟我们所选择的服务器有所关联? 使用国外云主机ip被封的几率会比国内云主机高,有朋友就认为使用国外云主机ip容易被封,其实这个观点是错误的。由于使用国外云主机不用备案,有不少站长…

服务器ip总是被封,怎么办?

服务器IP被封如何预防?IP被封了,会对网站带来影响,要解决这一问题,我们需要从预防这一步开始。下面跟大家讲讲如何操作。 1、预防流量超载   如果你的服务器流入/流出的数据过多,远超出已订购的服务器带宽资源,那么…

为什么自己的IP会被服务器封?

网络爬虫类是获取互联网大数据的主流方式,但在获取信息时,IP地址总是受到目标站点的限制。   在很多情况下,IP地址是网站反爬机制的依据。当我们访问网站时,我们的ip地址将被记录下来。   如果抓取频率高于目标网站的限制阀值…

Linux做爬虫被封IP怎么办

如果您的 Linux 爬虫被目标网站封禁了 IP 地址,可以考虑以下几种解决方案: 1、切换 IP 地址 您可以使用代理服务器或 PPTP 等工具来改变您的 IP 地址。这些工具可以模拟不同的网络位置并使您的爬虫变得更加隐蔽。例如在 Python 中,可以通过…

论文解读:GPT Understands, Too

论文解读:GPT Understands, Too 虽然GPT在传统的预训练微调方面并没有在自然语言理解任务上达到最好的效果, 但是当使用我们提出的P-tuning方法时,便可以与BERT相媲美。P-tuning是一种新的微调方法,其使用可训练的连续空间内的pro…

【论文阅读】GPT系列论文详解

文章目录 GPTIntroductionFrameworkUnsupervised pre-trainingSupervised fine-tuningTask-specific input transformations Experiment Language Models are Unsupervised Multitask Learners(GPT-2)AbsIntroductionApproachDataset & Model Results Language Models are …

做知识付费,这十大知识付费平台一定要知道

做知识付费,这十大知识付费平台一定要知道 想成为李一舟、透透堂这样通过知识付费赚钱的人,一定要知道下面中国排名前十大知识付费平台,这里面呢,你完全能看到各类课程是怎么制作的,以及怎么从0到1做一个能赚钱的课程。…

知识付费哪个领域最火?

小说要花钱才能看了,电影也需要会员了,就连音乐都需要花钱才能听了。如此种种,在生活中比比皆是,时代的进步提升了大众的版权意识,尊重原创。而这也意味着,在以后越来越多的知识内容,都需要通过…

知识付费网课项目靠谱吗?为什么依然有人对它有偏见

知识付费网课项目,是近几年来特别热门的一种网络赚钱方式,从操作方式来讲,适合公司,适合工作室,也适合个人,越来越多的人靠知识付费网课分销项目月入过万。 这是时代的产物,是经济发展的产物,是自然的产物,尽管如此,当提到知识付费网课项目的时候,还是很多人对它有偏…

浅谈短剧授权推广,会简单视频剪辑即可。

什么是短剧推广?相信很多人在短视频平台都有看到过一些账号发布的像电视剧一样的短剧,内容时长短,集数多,作品左下方有个按钮,点击进去可以看全集,但要看后续需要像看小说或漫画一样去充值。 短剧推广就是对…

剪映VS会声会影哪个好用,视频剪辑软件剪映会声会影之间对比之

随着网络视频的发展,越来越多的人开始学习视频剪辑,毕竟技多不压身,而在众多剪辑软件中,剪映和会声会影是很适合新手使用的软件,那剪映与会声会影的区别有哪些?剪映会声会影哪个好用?下面就仔细…

CapCut_v2.0 国际版本剪映

这是一款免费的多合一视频编辑应用程序。可帮助您创建令人赞叹的视频,专业风格滤镜,一键轻松美颜,让生活一秒变大片! 从后台下载压缩包解压后,双击应用安装,然后根据上图勾选、同意,即可一键安装…

剪辑副业怎么接单?学完剪辑去哪里可以接单赚钱

我们熟悉了剪辑的流程之后呢,剪辑一条视频就只需要每天的两三个小时的时间。之后的项目多了话,还可能熟能生巧,进行高效率的剪辑。而根据目前市场上的价格,剪辑一个视频的价格在200到500之间不等。当然了,这种兼职的前…

OpenAI估值已达290亿美元:新一轮融资宣告完成

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自:机器之心 因为 ChatGPT 的发布,OpenAI 成为了目前最炙手可热的创业公司,很多投资者都希望加入光荣的…

利用Python实现作业自动批改系统

在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得,我们不耐烦,倘若遇到许多张图片需要抠,那就今天教你用Python制作一款界面化的抠图小程序吧! 正文 PS 小故事 一…

​数字化转型升级之工业元宇宙与AIGC

月説小飞象交流会 生活就是,面对复杂,保持欢喜。心烦时,记住三句话:1、算了吧。2、没关系。3、会过去的。 内部交流│24期 数字化转型升级 工业元宇宙与AIGC data analysis ●●●● 分享人:李铁军 ‍ 现如今数字化不再…

AutoCV第四课:Python基础

目录 Python基础注意事项一、2023/4/4更新前言1.class1.1 基本介绍1.2 类的实例化1.3 魔法函数 2.生成器2.1 定义2.2 生成器函数2.3 生成器表达式 3.迭代器和可迭代对象3.1 迭代器3.2 可迭代对象3.3 区别和联系 4.装饰器4.1 定义和语法4.2 类作为装饰器4.2.1 形式14.2.2 形式2 …