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: アプリケーションを実行してアクセスする
Flaskアプリケーションを開始します:
python app.pyブラウザを開いて、次のリンクにアクセスしてください:
http://your_server_ip:5000画像をアップロードし、従業員の詳細を抽出し、データベースにデータが保存されていることを確認してください。
よくある質問
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による効率的な方法で従業員確認データを処理および管理する自動化された方法を提供します。
