# 貓與狗的隨機圖
由於 Gradio Playground 與 Hugging Face Space 均無法執行 requests 或 urllib 等爬蟲套件 (猜測是資安或業務考量, 付費帳戶也許就可以執行), 因此本測試均於本機執行 (也可以在 Colab 執行).
十. 貓狗隨機圖片 :
下面這兩個超棒的網站提供隨機的貓狗圖片 :
# https://thecatapi.com/ (貓)
# https://dog.ceo (狗)
更棒的是還提供 API 讓我們可以用 Python 爬蟲程式輕易取得圖片, 其 API 網址如下 :
呼叫 requests.get() 並傳入 API 網址會傳回 JSON 字串回應, 呼叫字串的 json() 方法轉成字典或字典串列 data 後即可透過索引與屬性取得圖片的 URL :
貓咪圖片的網址 : data[0]['url']
狗狗圖片的網址 : data['message']
這些都可以利用 RestMan/PostMan 或瀏覽器開發者工具等分析 HTTP/HTTPS 的請求與回應訊息得到, 具體方法參考 :
1. 取得隨機貓咪圖片 :
首先用 Gradio 寫一個取得隨機貓咪圖片的 Web app, 程式碼如下 :
import gradio as gr
import requests
def handler():
try:
url='https://api.thecatapi.com/v1/images/search'
r=requests.get(url) # 傳回 json 字串
data=r.json() # 轉成 Python 物件 (字典串列)
return data[0]['url'] # 傳回圖片網址
except Exception as e: # 出現例外
return None # 傳回 None 不顯示圖片
out1=gr.Image(type='filepath',
label='可愛的貓咪圖片',
width=640,
height=480)
iface=gr.Interface(
fn=handler,
inputs=[],
outputs=[out1],
title='隨機貓咪圖',
flagging_mode='never'
)
iface.launch()
此例沒有輸入只有一個 Image 輸出元件, 當按下 Generate 按鈕時呼叫 handler() 函式利用 requests.get() 透過 API 網址取得圖片, 結果如下 :
也可以用 Python 內建的 urllib 模組來爬, 這樣就毋須安裝 requests, 改寫如下 :
import gradio as gr
import urllib.request
import json
def handler():
try:
url='https://api.thecatapi.com/v1/images/search'
r=urllib.request.urlopen(url)
data=json.load(r)
return data[0]['url']
except Exception as e:
return None
out1=gr.Image(type='filepath',
label='可愛的貓咪圖片',
width=640,
height=480)
iface=gr.Interface(
fn=handler,
inputs=[],
outputs=[out1],
title='隨機貓咪圖',
flagging_mode='never'
)
iface.launch()
2. 取得隨機狗狗圖片 :
上面的隨機貓咪圖程式稍微修改一下即可取得狗狗圖片 :
import gradio as gr
import requests
def handler():
try:
url='https://dog.ceo/api/breeds/image/random'
r=requests.get(url) # 傳回 json 字串
data=r.json() # 轉成 Python 物件 (字典串列)
return data['message'] # 傳回圖片網址
except Exception as e: # 出現例外
return None # 傳回 None 不顯示圖片
out1=gr.Image(type='filepath',
label='可愛的狗狗圖片',
width=640,
height=480)
iface=gr.Interface(
fn=handler,
inputs=[],
outputs=[out1],
title='隨機狗狗圖',
flagging_mode='never'
)
iface.launch()
結果如下 :
3. 選擇要取得隨機貓咪或狗狗圖片 :
可以用一個 Radio 或 Dropdown 元件來選擇要取得貓咪還是狗狗圖片, 程式碼如下 :
import gradio as gr
import requests
def handler(sel):
try:
if sel=='貓咪':
url='https://api.thecatapi.com/v1/images/search'
r=requests.get(url) # 傳回 json 字串
data=r.json() # 轉成 Python 物件 (字典串列)
return data[0]['url'] # 傳回圖片網址
else:
url='https://dog.ceo/api/breeds/image/random'
r=requests.get(url) # 傳回 json 字串
data=r.json() # 轉成 Python 物件 (字典串列)
return data['message'] # 傳回圖片網址
except Exception as e:
return None
in1=gr.Radio(label='請選擇貓咪或狗狗',
choices=['貓咪', '狗狗'],
value='貓咪')
out1=gr.Image(type='filepath',
label='可愛的貓咪圖片',
width=640,
height=480)
iface=gr.Interface(
fn=handler,
inputs=[in1],
outputs=[out1],
title='隨機貓咪或狗狗圖片',
flagging_mode='never'
)
iface.launch()
此使用一個 Radio 輸入物件讓使用者選擇要取得貓咪或狗狗圖片 (預設是貓咪), 其值會在按下 Submit 鈕時傳給 fn 所指定之處理函式 handler() 之參數 sel, 只要判斷 sel 是 '貓咪' 還是 '狗狗' 分別去不同 API 網址爬得隨機圖片之 url 即可, 結果如下 :
4. 在 Colab 佈署貓狗隨機圖片 App :
上面的程式也可以在 Google 的 Colab 實作, 首先要安裝 gradio 套件 :
!pip install gradio
然後機上面的程式貼到 Colab 儲存格中執行即可, 結果如下 :
沒有留言 :
張貼留言