🐴

Claude3 APIを使った画像解析アプリを50行で実装する

2024/03/12に公開

データサイエンティストのせきとばです。
Claude3は画像解析も精度が高いと話題ですね。
デモ用にClaude 3 APIを用いた画像解析アプリを開発したので紹介します。

APIキー取得

以下の記事で紹介しています。ご参照ください。
https://note.com/life_chatgpt/n/ndd7774b6913a

実装

streamlitで実装します。
50行でした。

インストール

必要なライブラリをインストールします。
ご自身の環境に合わせて不足モジュールをインストールしてください。

%pip install -qU langchain-anthropic streamlit

APIキー読み込み

.envファイルにAPIキーを設定して読み込んでください。

from dotenv import load_dotenv
load_dotenv()  # .env ファイルから環境変数を読み込む

実装コード

import streamlit as st
import base64
import json
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from dotenv import load_dotenv
load_dotenv()  # .env ファイルから環境変数を読み込む

# Streamlitアプリのタイトルとサイドバーの設定
st.set_page_config(page_title="Image Analysis with Claude 3", layout="wide")
st.sidebar.title("Upload Image")

def upload_image():
    uploaded_file = st.sidebar.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
    if uploaded_file is not None:
        return uploaded_file
    return None

# Base64エンコードのための関数
def get_base64_encoded_image(image_file):
    encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return encoded_string

def analyze_image(image_file, prompt):
    chat = ChatAnthropic(temperature=0.5, model_name="claude-3-opus-20240229")
    system = "You are an AI assistant that analyzes images based on the given prompt."
    human = "{text}"
    prompt_template = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
    chain = prompt_template | chat
    result = chain.invoke(input={"text": json.dumps({"image": get_base64_encoded_image(image_file), "prompt": prompt})})
    return result

# メインの処理
def main():
    image_file = upload_image()
    if image_file:
        # 画像を表示
        st.image(image_file, caption='Uploaded Image', use_column_width=True)
        
        # プロンプトの入力欄
        prompt = st.text_input("Enter a prompt for image analysis:")
        
        if st.button("Analyze"):
            # 画像解析を実行し、結果を表示
            result = analyze_image(image_file, prompt)
            st.write("Analysis Result:")
            st.write(result)

if __name__ == "__main__":
    main()

アプリ起動

streamlit run app.py

アプリ画面

サイドバーから画像をアップロードできます。

画像をアップロードすると、メイン画面に画像が表示されます。

[出典]ガートナーレポート

プロンプトを入力してAnalyzeを押すと出力結果が返されます。

コード50行で画像解析アプリが完成しました。
紹介したのは基本コードですが、モデル名やパラメータなど調整することで精度を高めることができます。
社内デモなどに活用して生成AIを推進していきましょう。

Discussion