“老项,我昨晚把百度ai里面的车型识别接口用了一下,觉得还挺好用的。不过单独用还好,但是和flask结合起来,我就不知道怎么做了。”新的一天,老项和小王刚到公司,小王就向老项汇报前一天晚上做的工作了。
老项听了说:“这个百度ai的接口也没用过,要不你先给我讲一下这个接口怎么用的,然后我跟你说一下如何结合flask来使用这个接口。”
“敢情今天我讲课啊,正好我也想试试自己能不能讲,那我这就开始啦。”小王说完,开始了百度ai接口车型识别的介绍。
使用车型识别接口前的准备
百度ai平台提供了非常多的ai接口,而我的项目要做车型识别,所以我选用图像识别中的车型识别接口。通过以下几个步骤就可以开始使用该接口了。
- 注册一个百度账号
- 用百度账号登录百度智能云平台
- 在控制台界面创建一个应用
- 在创建新应用界面填入应用名称,选择应用类型,选择想要使用的接口,对应用做简单的描述。然后点击立即创建,就可以创建一个新的应用了。
- 创建成功后,在应用列表中可以看到新建的应用,需要记录应用对应的AppID,API Key,Secret Key。后面开发需要使用。
- 根据官方文档的提示,在使用python使用该接口前,需要安装一个百度ai的包,使用命令pip install baidu-aip进行安装即可。安装完成后,就可以进行开发了。
使用车型识别接口
车型识别接口的使用还是比较简单的,我这里直接使用了百度基于python的sdk进行开发,按照百度给我们的接口文档进行使用即可,主要有以下几个步骤。
- 构建AipImageClassify客户端对象。实际上就是构建Python SDK,这个时候就要使用前面记录的AppID,API Key和Secret Key。代码如下图。
- 构建好客户端对象以后,可以写一个读取图片文件的方法。然后将读取到的图片数据作为参数传到识别方法中,识别方法的返回值就是我们想要的识别结果。对返回值进行进一步的解析就可以得到想要的结果了。在使用识别方法的时候还可以加一些参数。通过字典对参数进行传递,具体见识别代码。读取图片的代码见下面第一张图,识别图片的代码见第二张图,输入的参数说明见第三张图。
- 识别的结果保存在一个字典里面,字典里面,我们对字典进行解析就可以得到想要的数据了。比如要获取识别的第一个结果的车辆名称,按下图的方式从字典获取即可。识别结果的参数说明见第二张图。
“好了,我讲完了。后续如何跟flask结合起来我就不太明白了。”小王讲完,跟老项说。
老项听完小王的讲解,回答道:“嗯,我明白这个接口如何使用了,主要的输入就是图片数据,所以如果要结合flask使用。那就需要考虑如何把图片数据从前端页面传给服务器后台。我们可以使用表单来传递图片文件。除了用表单传递图片文件,我们还可以用表单传递图片的url信息。接下来我跟你说下具体如何写代码吧。”
在flask中使用百度ai接口
通过前端上传图片进行识别
我们首先要实现表单上传图片的处理。我们可以新建一个页面模板,编写表单相关代码如下图。
后台代码则要处理页面渲染和表单提交的图片信息。也就是要分别处理get和post请求。注意图片数据通过request.files.get()方法来获取。该前端对应的后台代码如下图。
我们拿到图片对象后,可以使用该对象的read()方法,获取该图片的数据。这个数据就可以直接使用百度的ai接口进行处理。在视图方法中获取到识别的数据以后,直接将该数据传给前台,由前台展示数据即可。调整后的后台和前端代码如下图。
通过前端上传url地址进行识别
当然我们也可以通过前端上传一个url地址给后台,再由后台进行处理识别。前端主要是增加一个文本提交框,用于提交url地址,代码见下图。
后台通过request.form拿到url地址。不过后台拿到地址以后,需要主动去请求这个地址的数据,把地址对应的图片数据拿回来,然后进行识别处理即可。这个可以用到urllib里面request的urlopen方法。我的方法做了一个简单的判断,如果用户有提交url,则只处理url,如果没有提交url,就处理提交的图片文件。具体的后台代码见下图。
“好了,flask和百度ai的结合就先暂时讲到这里。小王,你需要做的是把更多的功能通过以前学习过的知识点扩展出来。比如识别到可能的车型后,可以构造一些超链接,点击这些链接可以进入到车型的详情页面。你可以在车型详情页显示更多的信息,比如查询到的百度百科里面的信息。”老项讲完,开始给小王布置了任务。
“好的,我回去就把功能再细化一下”小王答应道,就准备开始一天的工作了。