iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

在第 18 天,我們將專注於處理 Line Bot 收到的圖片消息。Line Bot 除了能處理文字消息外,也能接收用戶上傳的圖片,並對圖片進行回應或處理,例如保存圖片、分析內容等。

步驟 1:接收和保存圖片

Line Bot 在收到圖片後,可以通過 ImageMessage 事件處理器來接收圖片消息,並進行處理或存儲。當用戶發送圖片時,LINE 會給我們一個 message_id,通過這個 message_id 可以下載圖片。

  1. 設置圖片消息的處理器

    • 當用戶發送圖片時,ImageMessage 事件會觸發,你可以用此來處理該圖片。

    例子:

    @handler.add(MessageEvent, message=ImageMessage)
    def handle_image_message(event):
        message_id = event.message.id  # 獲取圖片的 message_id
        image_content = line_bot_api.get_message_content(message_id)  # 下載圖片內容
    
        # 保存圖片到本地
        with open(f"{message_id}.jpg", "wb") as f:
            for chunk in image_content.iter_content():
                f.write(chunk)
    
        reply_message = "圖片已收到並保存!"
        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
    
  2. 使用 Line SDK 下載圖片

    • line_bot_api.get_message_content(message_id) 可以下載用戶發送的圖片。你可以將其保存到本地伺服器,或進行進一步處理,如使用圖像識別工具。
  3. 處理大文件

    • 如果圖片較大,建議使用流式讀取方式來下載並處理圖片,這樣可以避免內存過載。

步驟 2:進行圖片分析

處理圖片後,你可以進一步使用圖像分析 API 來對圖片內容進行分析,如識別對象、顏色、文字等。

  1. 整合圖像識別 API

    • 例如,可以使用 Google Cloud Vision API、Microsoft Azure 的圖像識別 API,或其他開源的圖像識別工具來分析圖片的內容。

    例子(假設使用 Google Vision API 進行文字識別):

    from google.cloud import vision
    
    def analyze_image(image_path):
        client = vision.ImageAnnotatorClient()
        with open(image_path, "rb") as image_file:
            content = image_file.read()
        image = vision.Image(content=content)
        response = client.text_detection(image=image)
        texts = response.text_annotations
        return texts[0].description if texts else "未能識別圖片中的文字"
    
    @handler.add(MessageEvent, message=ImageMessage)
    def handle_image_message(event):
        message_id = event.message.id
        image_content = line_bot_api.get_message_content(message_id)
    
        # 保存圖片
        image_path = f"{message_id}.jpg"
        with open(image_path, "wb") as f:
            for chunk in image_content.iter_content():
                f.write(chunk)
    
        # 圖像識別
        result = analyze_image(image_path)
    
        reply_message = f"圖片中的文字是: {result}"
        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
    

步驟 3:處理 GIF 或其他動態圖

Line Bot 也支持 GIF 等其他圖片格式的處理。處理 GIF 的邏輯和普通圖片類似,不過在處理過程中,可以進一步分析或處理每一幀畫面,或者直接回應 GIF 文件。


上一篇
Day 18: 實現更複雜的對話邏輯
下一篇
Day 20: 處理音頻與其他多媒體信息
系列文
從無到有,LINE著不走30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言