《无限小亮的科普日报》经常在网络上发布一些识别热门生物的视频,既普及了生物知识,又满足了观众的好奇心。今天我们也来鉴定一下网络上流行的植物吧!最近,许多花都在春天盛开。正好趁着清明假期去户外,拍了很多花的照片。由于我们对很多花不是很熟悉,所以需要借助软件来识别花的种类。市面上的花卉识别软件有很多,比如花伴、行色、百度等,经过测试,发现百度的识别效果最好。于是灵机一动,能不能批量调用百度的接口对花卉照片进行识别分类?(完整代码见文末)百度图像识别百度图像识别接口可准确识别超过10万种物体和场景,包括10多种高精度图像识别能力,并提供相应的API服务。https://cloud.baidu.com/product/imagerecognition我们按照步骤新建一个应用,得到自己的APIKey和SecretKey,如下图。图像识别提供组合API接口,支持多种垂直识别服务的灵活组合调用。这里只需要识别植物就可以满足要求。如何用Python调用百度图片识别API接口?第一步是调用认证接口获取token。API_Key='**********'Secret_Key='**********'defget_access_token(API_Key,Secret_Key):host='************'response=requests.get(host)returnresponse.json()['access_token']access_token=get_access_token(API_Key,Secret_Key)第二步识别图片类型,在交互环境输入如下命令:importrequestimportbase64request_url='***********'#以二进制方式打开图片文件f=open(r'D:\Download\QQ截图20220407203203.png','rb')img=base64.b64encode(f.read())params={"image":img}request_url=request_url+"?access_token="+access_tokenheaders={'content-type':'application/x-www-form-urlencoded'}response=requests.post(request_url,data=params,headers=headers)ifresponse:print(response.json()['result'][0]['name'])输出:Sakura调用百度图片识别接口的返回参数如图下图。对于我们来说,只有名称(植物名称)参数是必需的。读取照片文件我把拍的照片存放在D:\Download\FlowerCollection这个路径下,所以需要使用os模块来读取文件列表,方便后续的批量操作。在交互环境中输入以下命令:importospath="D:\Download\FlowerCollection"filenames=os.listdir(path)filenamesoutput:['QQ截图20220405223301.png','QQ截图20220405223320.png',......'微信图片_20220405225020.jpg','微信图片_20220405225023.jpg']os模块中的listdir()方法接收一个路径参数path,返回该路径下所有文件的文件名列表。这样我们就得到了该路径下所有花卉图片的文件名,如下图所示。照片整理分类接下来我们可以使用for循环语句依次对花卉照片进行图像识别,根据识别到的名称将它们分类到相应的文件夹中。在交互式环境中输入以下命令:foriinfilenames:flower_name=get_fname(i)file_path=os.path.join(path,i)folder_path=os.path.join(path,flower_name)ifnotos.path。exists(folder_path):os.mkdir(folder_path)shutil.move(file_path,folder_path)其中get_fname()函数是我们将上篇文章中的百度图片识别代码封装成一个自定义函数,这里可以调用返回对应的照片花名flower_name。后面的代码和之前分享的自动分类文件几乎一样,就是判断花名对应的文件夹是否已经存在,不存在则创建。最后调用shutil模块将花卉照片移动到对应的文件夹中。具体执行效果如下动画所示。
