ウェブサイト検索

Hugging Face Transformersを使用したLlama 3.2による画像処理


紹介

画像からの洞察を抽出することは、長い間、金融、医療、法律などの業界での課題でした。従来の方法、例えば光学文字認識(OCR)は、複雑なレイアウトや文脈理解に苦しんできました。

Llama 3.2 Visionは、視覚的質問応答やOCRのような画像処理能力を向上させる高度なAIモデルです。このモデルをDigitalOceanのクラウドインフラストラクチャと統合することで、このチュートリアルはAI駆動の画像処理を実装するためのスケーラブルで効率的な方法を提供します。

このチュートリアルでは、DigitalOceanのクラウドインフラストラクチャを使用してLlama 3.2 Visionをセットアップする方法を学び、画像から従業員のIDや名前を抽出するためのAI駆動の画像処理にどのように使用するかを示します。インストールおよび構成手順をカバーし、視覚的質問応答やOCRにモデルを使用する方法の例も提供します。このチュートリアルの終わりまでに、画像処理のニーズに合わせてLlama 3.2 Visionを活用するための確固たる理解を得ることができるでしょう。

前提条件

進む前に、次のことを確認してください:

  • Python 3.10以上がインストールされたDigitalOceanのGPUドロップレット。
  • アクセスキーとシークレットキーを持つDigitalOcean Spacesアカウント。
  • デジタルオーシャンのマネージドMySQLデータベース。
  • ハギングフェイスのトークン。

ステップ1 - 環境を設定する

あなたのGPUドロップレットにSSH接続する

SSHを介してサーバーに接続します:

ssh root@your_server_ip

Pythonをインストールして仮想環境を作成する

次のコマンドを実行して、Pythonの仮想環境を設定します:

apt install python3.10-venv -y
python3.10 -m venv llama-env

仮想環境をアクティブにする

source llama-env/bin/activate

ステップ2 - 必要な依存関係をインストールする

PyTorchとHugging Face CLIをインストールする

pip install torch torchvision torchaudio
pip install -U "huggingface_hub[cli]"
huggingface-cli login

Transformersライブラリをインストールする

pip install --upgrade transformers

FlaskとAWS SDK(Boto3)をインストールする

Boto3は、S3互換のDigitalOcean Spacesとやり取りするために必要です。

pip install flask boto3

Python用のMySQLコネクタをインストールする

pip install mysql-connector-python

ステップ3 - Nginxのインストールと設定

Flask アプリケーションを提供するために Nginx をインストールします:

sudo apt install nginx -y

ステップ4 - Flaskウェブアプリケーションのセットアップ

アプリケーションフォルダ構造

プロジェクトを次のように整理してください:

llama-webapp/
├── app.py                # Main Flask app file
├── static/
│   └── styles.css        # Optional: CSS file for styling
└── templates/
    └── index.html        # HTML template for the web page

アプリケーションのためのPythonコード

以下は、アップロードされた画像を処理し、従業員の詳細を抽出するLlama 3.2モデルをロードするFlaskアプリ(app.py)です。

import os
import json
import requests
from PIL import Image
from flask import Flask, request, render_template, session
from transformers import MllamaForConditionalGeneration, AutoProcessor
import boto3
import torch
import mysql.connector
import re

Initialize Flask app
app = Flask(__name__)
app.secret_key = "your_secret_key"  # Replace with a strong secret key

Load the Llama 3.2 model and processor
model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(
    model_id, torch_dtype=torch.bfloat16, device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_id)

DigitalOcean Spaces setup
SPACE_NAME = "your_space_name"
SPACE_REGION = "your_region"
ACCESS_KEY = "your_access_key"
SECRET_KEY = "your_secret_key"

s3 = boto3.client(
    "s3",
    region_name=SPACE_REGION,
    endpoint_url=f"https://{SPACE_REGION}.digitaloceanspaces.com",
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY
)

DigitalOcean Managed MySQL setup
DB_HOST = "your_mysql_host"
DB_PORT = 25060
DB_NAME = "your_database_name"
DB_USER = "your_username"
DB_PASSWORD = "your_password"

Function to establish a database connection
def get_db_connection():
    try:
        conn = mysql.connector.connect(
            host=DB_HOST, port=DB_PORT, database=DB_NAME, user=DB_USER, password=DB_PASSWORD
        )
        print("✅ Database connection successful!")
        return conn
    except Exception as e:
        print(f"❌ Error connecting to the database: {e}")
        return None

Function to extract Employee ID & Name from an image
def extract_employee_details(image_path):
    """Extracts Employee Name and ID using Llama 3.2 Vision AI."""
    try:
        image = Image.open(image_path)
        prompt = (
            "Extract the Employee ID and Name from the given image. "
            "Provide output in valid JSON format with keys: 'employee_id' and 'employee_name'."
        )
        messages = [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": prompt}]}]

        input_text = processor.apply_chat_template(messages, add_generation_prompt=True)
        inputs = processor(image, input_text, return_tensors="pt").to(model.device)

        output = model.generate(**inputs, max_new_tokens=1024)
        raw_result = processor.decode(output[0])

        json_match = re.search(r"\{.*?\}", raw_result, re.DOTALL)
        extracted_data = json.loads(json_match.group(0)) if json_match else {}
        employee_id = extracted_data.get("employee_id", "").strip()
        employee_name = extracted_data.get("employee_name", "").strip()

        return employee_id, employee_name
    except Exception as e:
        return None, None

Flask Routes
@app.route("/", methods=["GET", "POST"])
def index():
    """Handles image uploads, extracts Employee Name & ID, and stores it in MySQL."""
    result = None
    image_url = session.get("image_url")

    if request.method == "POST":
        image_file = request.files.get("image")
        if not image_file:
            return "Error: Please upload an image.", 400
        filename = image_file.filename
        image_path = os.path.join("/tmp", filename)
        image_file.save(image_path)

        employee_id, employee_name = extract_employee_details(image_path)
        return render_template("index.html", result=result, image_url=image_url)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

ステップ5: アプリケーションを実行してアクセスする

  1. Flaskアプリケーションを開始します:

    python app.py
    
  2. ブラウザを開いて、次のリンクにアクセスしてください:

    http://your_server_ip:5000
    
  3. 画像をアップロードし、従業員の詳細を抽出し、データベースにデータが保存されていることを確認してください。

よくある質問

1. Llama 3.2とは何ですか、そしてそれは以前のバージョンとどのように異なりますか?

Llama 3.2は、Meta(Facebook)が開発した最先端のAIモデルであり、前モデルであるLlama 3を基にしています。自然言語理解の向上、画像処理を含むマルチモーダルタスクでの性能向上、さらにHugging Face Transformersとの統合時の効率向上を提供します。

2. Llama 3.2は画像を直接処理できますか?

はい、Llama 3.2は視覚モデル(11Bおよび90B)を導入しており、これにより画像を直接処理し理解することが可能になり、画像のキャプション付け、物体認識、シーン解釈などのタスクを実行できるようになります。

3. Llama 3.2の画像処理における一般的な使用例は何ですか?

Llama 3.2は、以下のような画像処理タスクを支援できます。

  • 画像キャプション作成: 画像から説明文を生成すること.
  • 物体認識: 視覚モデルと結合した際に画像内の物体を特定すること。
  • テキスト抽出(OCR): 画像から抽出したテキストの解釈を支援します。
  • スタイル転送と画像編集:AIを活用した画像生成と修正を支援します。

4. Llama 3.2と一緒にHugging Face Transformersを使うための設定はどうすればいいですか?

必要なライブラリをインストールし、以下の手順でモデルをロードできます:

pip install transformers torch torchvision

次に、モデルを読み込むには:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "meta-llama/llama-3-2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

画像を扱う場合は、CLIPのようなトランスフォーマーのビジョンモデルも必要になるかもしれません。

from transformers import CLIPProcessor, CLIPModel

clip_model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

5. Llama 3.2を画像キャプション作成にどのように使用できますか?

Llama 3.2の視覚モデルは、画像に対して高品質なキャプションを生成できます。

from transformers import AutoProcessor, AutoModelForVision2Seq
from PIL import Image

model_name = "meta-llama/llama-3.2-vision"
processor = AutoProcessor.from_pretrained(model_name)
model = AutoModelForVision2Seq.from_pretrained(model_name)

image = Image.open("your_image.jpg")
inputs = processor(images=image, return_tensors="pt")
output = model.generate(**inputs)

caption = processor.batch_decode(output, skip_special_tokens=True)[0]
print("Generated Caption:", caption)

6. 自分のデータセットでLlama 3.2 Visionをファインチューニングできますか?

はい、Hugging Faceのtransformersライブラリを使用してLoRA(低ランク適応)でLlama 3.2 Visionを微調整できます。

例のファインチューニング設定:

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"]
)
fine_tuned_model = get_peft_model(model, config)

これにより、全体のモデルを再訓練することなく効率的なファインチューニングが可能になります。

結論

このチュートリアルでは、Llama 3.2 Visionモデルを使用して、画像から従業員IDと名前を抽出する方法を学びました。画像の保存にはDigitalOcean Spacesを統合し、構造化データの保存には管理されたMySQLデータベースを使用しました。このソリューションは、AIによる効率的な方法で従業員確認データを処理および管理する自動化された方法を提供します。

関連記事: