天天看點

20行Python代碼開發植物識别 app

這篇文章介紹如何用Python快速實作一個植物識别的app,家裡養了幾盆多肉還叫不上名字,正好拿來識别一下。實作這樣一個app隻需要20行左右的代碼,先來看下效果:

另外,我也開發了微信小程式版本,大家可以體驗一下。

實作該app主要包含兩步,前端界面開發和後端植物識别服務,下面來分别介紹一下。

前端的實作方式有很多種,剛剛說的小程式是一種,但對于習慣用Python的開發者來說,我們還是希望能通過Python語言來開發界面。果然真有這樣的工具,叫

streamlit

,它是專門為資料科學家、機器學習工程師而開發的,使用它的時候不需要關心布局、樣式、服務部署等web相關的知識,而就像開發普通Python程式一樣,快速建構優美的app。

streamlit

的安裝也很簡單,執行

pip install streamlit

指令即可。想入門

streamlit

的朋友可以看次條的文章。

接下來,我們把前端界面開發出來,從上面動圖可以看到,最核心邏輯為接收使用者輸入的圖檔,并将其顯示出來。

import streamlit as st

# 設定網站标題
st.title('植物識别')

# 圖檔選擇框
uploaded_file = st.file_uploader('選擇一張圖檔', type=['jpg', 'png'])
if uploaded_file is not None:
    # 顯示已選的檔案
    st.image(uploaded_file, caption='已選檔案', use_column_width=True)
           

界面完成後,我們再來考慮植物圖檔的識别服務,這裡我用的是百度AI的服務

執行

pip install baidu-aip

指令即可安裝百度AI的Python SDK。然後,再去百度AI開放平台注冊一個賬号獲得相應的APP_KEY和SCRET_KEY。編寫代碼調用植物識别服務

from aip import AipImageClassify

APP_ID = 'xxx'  # 換成自己的 APP_ID
API_KEY = 'xxx' # 換成自己的 API_KEY
SECRET_KEY = 'xxx' # 換成自己的 SECRET_KEY
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

""" 植物識别結果 """
res = client.plantDetect(image)  # 調用百度api識别植物
           

最後将傳回的結果在app上展示即可,完整代碼如下

import streamlit as st
from aip import AipImageClassify

APP_ID = 'xxx'
API_KEY = 'xxx'
SECRET_KEY = 'xxx'
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

# 設定網站标題
st.title('植物識别')

# 圖檔選擇框
uploaded_file = st.file_uploader('選擇一張圖檔', type=['jpg', 'png'])
if uploaded_file is not None:
    # 顯示已選的檔案
    st.image(uploaded_file, caption='已選檔案', use_column_width=True)
    bs = uploaded_file.read()

    """ 植物識别結果 """
    res = client.plantDetect(bs)  # 調用百度api識别植物
    res['result']  # 顯示輸出結果

    """ 該植物最有可能是 """, res['result'][0]['name']  # 取預測機率最大的結果
           

執行

streamlit run plant_detect.py

指令啟動app,看到有如下輸出

You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8501
  Network URL: http://192.168.1.3:8501
           

在浏覽器通路指定的位址即可。

希望這篇文章的内容能對你有用,接下來我會定期分享這種AI小應用希望大家能夠喜歡。另外,完整代碼(包括微信小程式)已經開放,公衆号背景回複關鍵字 植物識别 即可擷取完整資料。

歡迎公衆号「渡碼」,輸出别地兒看不到的幹貨。