🤗

🤗15行のPythonでBLIPによる画像キャプション生成🤗

2023/03/26に公開

Google Colabolatory等で実行してね

# 依存関係セットアップ
!pip install transformers

# モデルの読み込み
from transformers import BlipProcessor, BlipForConditionalGeneration

processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large")

# 画像キャプション生成する関数の定義
from PIL import Image
import requests

def generate_caption(image_url):
  raw_image = Image.open(requests.get(image_url, stream=True).raw).convert('RGB')
  w,h = raw_image.size
  display(raw_image.resize((w//15,h//15)))

  # こういうヒントを与えてあげることができる
  # 画像の種類が不明な場合は削ってください
  text = "a photography of"
  inputs = processor(raw_image, text, return_tensors="pt")
  # max_length=20が推奨されてるけど詳しく説明させてみたいので長めにしている
  out = model.generate(**inputs, min_length=20, max_length=50)
  generated_caption = processor.decode(out[0], skip_special_tokens=True)
  print(generated_caption)

ここまでコメントと空行除いて15行

generate_caption 関数を呼び出す

generate_caption('https://i.gyazo.com/0301ae28236d7a50abedb0f2670bf170.jpg')

結果

Image from Gyazo

Discussion