1. 程式人生 > 其它 >Python 識別花卉種類,並自動整理分類

Python 識別花卉種類,並自動整理分類

怎麼會有人不喜歡花呢?今天我們也來鑑定一下網路熱門植物!最近春天很多花都開了,我正好趁著清明假期到戶外踏青並拍攝

了不少花卉的照片。

由於對很多花不是特別熟悉,所以我們需要藉助軟體來識別究竟是什麼花的種類。市面上的識花軟體有很多,比如花伴侶、形

色、百度等等,我測試後發現百度的識別效果最為優秀。於是我就有了一個想法,能不能批量呼叫百度的介面,對花卉照片進行

識別並分類呢?

百度影象識別

百度的影象識別介面,可以精準識別超過十萬種物體和場景,包含10餘項高精度的識圖能力並提供相應的API服務。

https://cloud.baidu.com/product/imagerecognition

我們按照步驟建立新應用,並得到專屬自己的API Key和Secret Key,具體如下圖所示。

影象識別提供一個組合API介面,支援多種類識別服務的靈活組合呼叫,這裡只需要呼叫植物識別就可以滿足需求。

如何Python呼叫百度影象識別API介面?

第一步,呼叫鑑權介面獲取token。

Python學習交流Q群:906715085###
API_Key = '**********'
Secret_Key = '**********'

def get_access_token(API_Key,Secret_Key): 
    host = '**********
' response = requests.get(host) return response.json()['access_token'] access_token = get_access_token(API_Key,Secret_Key)

 

第二步,識別影象種類

在互動式環境中輸入如下命令:

Python學習交流Q群:906715085####
import requests
import base64

request_url = '**********'
# 二進位制方式開啟圖片檔案
f = open(r'D:\下載\QQ截圖20220407203203.png
', 'rb') img = base64.b64encode(f.read()) params = {"image":img} request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: print (response.json()['result'][0]['name'])

 

輸出:

櫻花

呼叫百度影象識別介面的返回引數如下圖所示,對我們來說,只需要其中的name(植物名稱)引數。

讀取照片檔案

我將拍攝的照片存放在D:\下載\花卉合集路徑下,所以需要使用os模組進行讀取檔案列表,方便進行後續的批量操作。

在互動式環境中輸入如下命令:

import os
path = "D:\下載\花卉合集"

filenames = os.listdir(path)
filenames

 

輸出:

['QQ截圖20220405223301.png',
 'QQ截圖20220405223320.png',
 ......
 '微信圖片_20220405225020.jpg',
 '微信圖片_20220405225023.jpg']

 

os模組中的listdir()⽅法,接收⼀個路徑引數path,返回的是該路徑下所有⽂件的⽂件名組成的列表。這樣,我們就獲取了該路徑

下所有的花卉圖片檔名,如下圖所示。

整理分類照片

接著,我們便可以使用for迴圈語句,依次對花卉照片進行影象識別,並按照識別出的名稱進行分類整理到對應的資料夾中。

在互動式環境中輸入如下命令:

for i in filenames:
    flower_name = get_fname(i)
    file_path = os.path.join(path,i)
    folder_path = os.path.join(path,flower_name)
    if not os.path.exists(folder_path): 
        os.mkdir(folder_path)
    shutil.move(file_path,folder_path)

 

其中get_fname()函式,是我們將前文中百度影象識別程式碼封裝為一個自定義函式,此處呼叫即可返回得到照片對應的花卉名稱

flower_name。

後續的程式碼與之前分享過的自動分類整理檔案幾乎一致,即if判斷是否已經存在對應花卉名稱的資料夾,若不存在則建立。最後,

呼叫shutil模組移動花卉照片至對應資料夾。

具體執行效果,如下方動圖所示

最後

大家都去動手試試,這麼好的一個發明不得炫起來。今天的分享到這裡就結束了,喜歡的小夥伴記得點贊收藏,不懂的小夥伴記

得點贊評論,關注我一起學Python。