首頁 >後端開發 >Python教學 >這個好玩!用Python辨識花種類,並自動整理分類!

這個好玩!用Python辨識花種類,並自動整理分類!

WBOY
WBOY轉載
2023-04-12 13:49:091744瀏覽

這個好玩!用Python辨識花種類,並自動整理分類!

「無窮小亮的科普日常」經常會發布一些鑑定網絡熱門生物視頻,既科普了生物知識,又滿足觀眾們的獵奇心理。今天我們也來鑑定網路熱門植物吧!最近春天很多花都開了,我正好趁著清明假期到戶外踏青並拍攝了不少花卉的照片。

這個好玩!用Python辨識花種類,並自動整理分類!

因為對許多花不是特別熟悉,所以我們需要藉助軟體來辨識究竟是什麼花的種類。市面上的識花軟體很多,像是花伴侶、形色、百度等等,測試後發現百度的辨識效果最為優秀。於是我就有了一個想法,能不能批量調用百度的接口,對花卉照片進行識別並分類呢? (完整代碼見文末)

這個好玩!用Python辨識花種類,並自動整理分類!

百度圖像識別

百度的圖像識別接口,可以精確識別超過十萬種物體和場景,包含10餘項高精度的識圖能力並提供對應的API服務。

#https://www.php.cn/link/17d187eaf6157b4e219552d6a187290a

這個好玩!用Python辨識花種類,並自動整理分類!

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

這個好玩!用Python辨識花種類,並自動整理分類!

圖像識別提供一個組合API接口,支援多種垂類識別服務的靈活組合調用,這裡只需要調用植物識別就可以滿足需求。

如何Python呼叫百度影像辨識API介面?

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

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辨識花種類,並自動整理分類!

在互動式環境中輸入以下指令:

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(植物名稱)參數。

這個好玩!用Python辨識花種類,並自動整理分類!

讀取照片檔案

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

在互動式環境中輸入以下指令:

import os
path = "D:下载花卉合集"
filenames = os.listdir(path)
filenames

輸出

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

os模組中的listdir()⽅法,接收⼀個路徑參數path,傳回的是該路徑下所有⽂件的⽂件名稱所組成的清單。這樣,我們就取得了該路徑下所有的花卉圖片檔名,如下圖所示。

這個好玩!用Python辨識花種類,並自動整理分類!

整理分類照片

接著,我們便可以使用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辨識花種類,並自動整理分類!


以上是這個好玩!用Python辨識花種類,並自動整理分類!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除