PDFãã¡ã€ã«ããç¹å®ã®æ å ±ãå¹ççã«æœåºãããããšèããããšã¯ãããŸãããïŒå¥çŽæžãè«æ±æžãªã©ãããžãã¹ã§æ±ãPDFã¯å€å²ã«ãããããã®äžããå¿ èŠãªæ å ±ãæ¢ãåºãäœæ¥ã¯æã«å€§ããªè² æ ãšãªããŸãã
è¿å¹ŽãAIæè¡ã®çºå±ã«ããããããã課é¡ã解決ããããŒã«ãç»å ŽããŠããŸããä»åã¯ãGoogle Cloudã®ãµãŒãã¹ã§ãããDocument AIããšãGemini APIããçšããŠãPDFããæ å ±ãæœåºãã2ã€ã®æ¹æ³ãæ¯èŒæ€èšŒããŠã¿ãŸããã
- ãã¿ãŒã³A: PDFãDocument AIã§é«ç²ŸåºŠã«æåèµ·ããïŒOCRïŒãããã®ããã¹ãããŒã¿ãGemini APIã§è§£æããŠå¿ èŠãªæ å ±ãæœåºããã
- ãã¿ãŒã³B: PDFãç»åãã¡ã€ã«ã«å€æããGemini APIã®ãã«ãã¢ãŒãã«æ©èœïŒç»åèªèã»è§£æïŒã®ã¿ã§å¿ èŠãªæ å ±ãæœåºããã
ã©ã¡ãã®æ¹æ³ãããé«ãç²ŸåºŠã§æ å ±ãæœåºã§ããã®ã§ããããïŒæ€èšŒçµæãããšã«ãããããã®ç¹åŸŽãšä»åŸã®å¯èœæ§ã«ã€ããŠèå¯ããŸãã
æ€èšŒã®èæ¯ãšç®ç
ããžãã¹ææžã®å€ãã¯PDF圢åŒã§ããåããããŸããããã®å 容ã¯ç»åããŒã¿ãšããŠæ±ãããããšãå€ããåçŽãªããã¹ãæ€çŽ¢ã§ã¯æ å ±ãèŠã€ããããªãããšããããŸãããŸãããã©ãŒããããçµ±äžãããŠããªãææžããç¹å®ã®é ç®ïŒäŸïŒå¥çŽæéãéé¡ãæ åœè åãªã©ïŒãæãåºãäœæ¥ã¯ãæéãšåŽåããããåçŽäœæ¥ã«ãªããã¡ã§ãã
ããã§ãAIãæŽ»çšããæ å ±æœåºã泚ç®ãããŠããŸããä»åã¯ãç¹ã«ç²ŸåºŠã®é«ããæåŸ ããããDocument AI + Gemini APIãã®çµã¿åããïŒãã¿ãŒã³AïŒãšãããã·ã³ãã«ãªæ§æã§å®çŸã§ãããGemini APIåäœãïŒãã¿ãŒã³BïŒã®2ã€ã®ã¢ãããŒãã§ãã©ã¡ããããå®çšçãªã®ãããã®ç²ŸåºŠãæ¯èŒæ€èšŒããããšãç®çãšããŸããã
æ€èšŒæ¹æ³
ä»åã¯ãããã€ãã®ããžãã¹ææžïŒPDF圢åŒïŒã察象ãšãã以äžã®2ã€ã®æ¹æ³ã§æ å ±æœåºã詊ã¿ãŸãããGoogle Colaboratory ç°å¢ã§Pythonã³ãŒããå®è¡ããŠæ€èšŒãè¡ããŸããã
ãã¿ãŒã³AïŒDocument AI + Gemini API
- Document AIã«ããæåèµ·ãã: ãŸããGoogle Cloudã®Document AIã䜿çšããPDFãã¡ã€ã«ããé«ç²ŸåºŠãªããã¹ãããŒã¿ãæœåºããŸããDocument AIã¯ãOCRïŒå åŠçæåèªèïŒæè¡ã«ç¹åããŠãããã¬ã€ã¢ãŠãããã©ã³ããç°ãªãææžãããæ£ç¢ºã«æåãèªèããããšãç®æãããµãŒãã¹ã§ãã
- Gemini APIã«ããæ å ±æœåº: Document AIã§æœåºããããã¹ãããŒã¿ããGemini APIã«å ¥åããŸãããããŠããå¥çŽæéãæœåºããŠãã ããããæ¯ææ¡ä»¶ã¯äœã§ããïŒããšãã£ãæç€ºïŒããã³ããïŒãäžããããšã§ãããã¹ãããŒã¿ã®äžããç®çã®æ å ±ãæœåºãããŸãã
ãã¿ãŒã³BïŒGemini APIã®ã¿
- PDFã®ç»å倿: 察象ã®PDFãã¡ã€ã«ãç»åãã¡ã€ã«ïŒäŸïŒPNG圢åŒïŒã«å€æããŸãã
- Gemini APIã«ããæ å ±æœåº: Gemini APIã®ãã«ãã¢ãŒãã«æ©èœã掻çšããç»åãã¡ã€ã«ãçŽæ¥èªã¿èŸŒãŸããŸãããã¿ãŒã³Aãšåæ§ã«ãããã³ãããäžããŠç»åå ã®æåæ å ±ãèªèãããç®çã®æ å ±ãæœåºãããŸãã
å®è¡ã³ãŒãäŸïŒãã¿ãŒã³AïŒDocument AI + Gemini API on Google ColabïŒ
ä»åã®æ€èšŒïŒãã¿ãŒã³AïŒã§ã¯ãäž»ã«ä»¥äžã®ãããªPythonã³ãŒããå®è¡ããŸããã
1. å¿ èŠãªã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
ãŸããGoogle Colaboratory ç°å¢ã§ãGoogle Cloud Document AIãšGemini APIãå©çšããããã®ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
Python
!pip install --upgrade google-cloud-documentai
!pip install -q -U google-genai
2. èªèšŒãšåæèšå®
Google Cloudãžã®èªèšŒæ å ±ãèšå®ããå¿ èŠãªã©ã€ãã©ãªãã€ã³ããŒãããŸããAPIããŒãããã§èšå®ããŸãã
Python
import os
from google.api_core.client_options import ClientOptions
from google.cloud import documentai
from google import genai
from google.genai import types
# import PIL.Image # ãã¿ãŒã³Bã§ç»åãã¡ã€ã«ãæ±ãå Žåã¯å¿
èŠ
# --- Google CloudèªèšŒ ---
# Google Cloudãããžã§ã¯ãã§äœæãããµãŒãã¹ã¢ã«ãŠã³ãããŒã®JSONãã¡ã€ã«ãã¹ãæå®ããŸãã
# Colabã«ã¢ããããŒãããããGoogle DriveãããŠã³ãããŠãã¹ãæå®ããŠãã ããã
credentials_path = '/path/to/your/service-account-key.json' # â
ããªãã®ããŒãã¡ã€ã«ã®ãã¹ã«çœ®ãæããŠãã ãã
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = credentials_path
# --- Gemini APIããŒèšå® ---
# Google AI Studioãªã©ã§ååŸããAPIããŒãèšå®ããŸãã
# åè: https://aistudio.google.com/app/apikey
genai.configure(api_key="YOUR_API_KEY") # â
ããªãã®APIããŒã«çœ®ãæããŠãã ãã
# --- Document AI èšå® ---
project_id = "your-gcp-project-id" # â
ããªãã®Google Cloudãããžã§ã¯ãIDã«çœ®ãæããŠãã ãã
location = "us" # äŸ: "us" ãŸã㯠"eu" ãªã©ãå©çšãããªãŒãžã§ã³
processor_id = "your-ocr-processor-id" # â
å©çšããDocument AIããã»ããµID (äŸ: OCRçš)ã«çœ®ãæããŠãã ãã
æå®ãããPDFãã¡ã€ã«ãDocument AIã§åŠçããæœåºãããããã¹ããå«ãDocumentãªããžã§ã¯ããè¿ã颿°ã§ãã
Python
def process_document(
project_id: str,
location: str,
file_path: str,
processor_id: str,
) -> documentai.Document:
"""
æå®ãããPDFãã¡ã€ã«ãDocument AIã§åŠçããDocumentãªããžã§ã¯ããè¿ãã
"""
# Document AIã¯ã©ã€ã¢ã³ãã®åæå (ãªãŒãžã§ã³æå®)
opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
client = documentai.DocumentProcessorServiceClient(client_options=opts)
# ããã»ããµã®ãã«ãã¹ãååŸ
processor_path = client.processor_path(project_id, location, processor_id)
# PDFãã¡ã€ã«ããã€ããªã§èªã¿èŸŒã
try:
with open(file_path, "rb") as image:
image_content = image.read()
except FileNotFoundError:
print(f"ãšã©ãŒ: ãã¡ã€ã«ãèŠã€ãããŸãã - {file_path}")
return None
# Document AIãžã®ãªã¯ãšã¹ãããŒã¿ãäœæ
raw_document = documentai.RawDocument(
content=image_content,
mime_type="application/pdf", # PDFã®å Žå
)
# Document AIãžåŠçãªã¯ãšã¹ããéä¿¡
request = documentai.ProcessRequest(name=processor_path, raw_document=raw_document)
try:
result = client.process_document(request=request)
return result.document
except Exception as e:
print(f"ãšã©ãŒ: Document AIã§ã®åŠçäžã«ãšã©ãŒãçºçããŸãã - {e}")
return None
äžããããããã¹ãïŒãŸãã¯ç»åãšããã¹ãïŒãšããã³ãããGemini APIã«éä¿¡ããçµæã®ããã¹ããè¿ã颿°ã§ãã
Python
def generate_content_with_gemini(contents):
"""
Gemini APIã«ãªã¯ãšã¹ããéä¿¡ããçæãããããã¹ããè¿ãã
"""
# Geminiã¯ã©ã€ã¢ã³ãã®åæåïŒAPIããŒã¯ genai.configure ã§èšå®æžã¿ïŒ
# client = genai.Client() # genai.configureã䜿ããªãå Žå
model = genai.GenerativeModel('gemini-pro') # ããã¹ãã®ã¿ã®å Žå 'gemini-pro'ãç»åã䜿ãå Žå 'gemini-pro-vision' ãªã©
try:
response = model.generate_content(contents)
return response.text
except Exception as e:
print(f"ãšã©ãŒ: Gemini APIã§ã®åŠçäžã«ãšã©ãŒãçºçããŸãã - {e}")
# ãšã©ãŒå
容ã«ãã£ãŠã¯ response.prompt_feedback ãªã©ã§è©³çްã確èª
if hasattr(e, 'response') and hasattr(e.response, 'prompt_feedback'):
print(f"Prompt Feedback: {e.response.prompt_feedback}")
return None
åŠç察象ã®PDFãã¡ã€ã«ãã¹ãªã¹ããå®çŸ©ããåãã¡ã€ã«ã«å¯ŸããŠDocument AIã§ã®ããã¹ãæœåºãGemini APIã§ã®æ å ±æœåºãé ã«å®è¡ããŸãã
Python
# åŠç察象ã®PDFãã¡ã€ã«ãã¹ã®ãªã¹ã (ãµã³ãã«)
file_paths = [
'/path/to/your/invoice1.pdf', # â
å®éã®ãã¡ã€ã«ãã¹ã«çœ®ãæããŠãã ãã
'/path/to/your/agency_invoice_A.pdf', # â
å®éã®ãã¡ã€ã«ãã¹ã«çœ®ãæããŠãã ãã
'/path/to/your/company_invoice_B.pdf',# â
å®éã®ãã¡ã€ã«ãã¹ã«çœ®ãæããŠãã ãã
# ... ä»ã®ãã¡ã€ã«ãã¹ã远å ...
]
# Gemini APIã«æž¡ãããã³ãã (æ
å ±æœåºã®æç€º)
# å
·äœçãªæœåºé
ç®ãã«ãŒã«ã¯ã察象ã®ããã¥ã¡ã³ãã«åãããŠèª¿æŽãå¿
èŠã§ãã
prompt = """
以äžã®[æåå]ã¯ãè«æ±æžãOCRåŠçããæååã§ãã
ãã®[æåå]ãè§£æãã[Jsonãã³ãã¬ãŒã]ã§æå®ããããã³ãã¬ãŒãã䜿ãã€ã€[ã«ãŒã«]ã«åŸã£ãŠJsonæååã®ã¿ãè¿ããŠãã ããã
[ã«ãŒã«]----------------------
次ã®ïŒã€ã®é
ç®ã®æ
å ±ãæœåºããŠãã ããã
ïŒïŒè«æ±æžNO
ïŒä»¥äžç¥ïŒ
[æåå]----------------------
"""
# åºå圢åŒãæå®ããJSONãã³ãã¬ãŒã
json_template = """
[Jsonãã³ãã¬ãŒã]----------------------
{
"no": "%ããã«è«æ±æžNOãå
¥ããŠãã ãã%",
ïŒä»¥äžç¥ïŒ
}
"""
# åãã¡ã€ã«ã«å¯ŸããŠåŠçãå®è¡
for file_path in file_paths:
print(f"--- Processing: {os.path.basename(file_path)} ---") # ãã¡ã€ã«åã衚瀺
# 1. Document AIã§ããã¹ãæœåº
document = process_document(project_id, location, file_path, processor_id)
if document and document.text:
# æœåºããããã¹ãã衚瀺ïŒç¢ºèªçšãå¿
èŠã«å¿ããŠã³ã¡ã³ãã¢ãŠãïŒ
# print("--- Extracted Text (Document AI) ---")
# print(document.text[:500] + "...") # é·ãããå Žåã¯äžéšè¡šç€º
# 2. Gemini APIã«æž¡ãã³ã³ãã³ããäœæ
# ããã³ãããæœåºããããã¹ããJSONãã³ãã¬ãŒããçµå
gemini_input_text = "\n".join([prompt, document.text, json_template])
# 3. Gemini APIã§æ
å ±æœåº
print("--- Extracting Information (Gemini API) ---")
extracted_json_text = generate_content_with_gemini([gemini_input_text]) # ããã¹ãã®ã¿æž¡ã
if extracted_json_text:
print(extracted_json_text)
else:
print("Gemini APIããã®å¿çããããŸããã§ããã")
else:
print("Document AIã«ããããã¹ãæœåºã«å€±æããŸããã")
print("-" * 40 + "\n") # ãã¡ã€ã«ããšã®åºåãç·
# (åè) Geminiã«æž¡ãæçµçãªå
¥åå
容ã®äŸïŒããã³ãã+OCRããã¹ã+ãã³ãã¬ãŒãïŒ
# print("--- Example Gemini Input ---")
# print("\n".join([prompt, "ïŒããã«OCRã§ååŸããããã¹ããå
¥ããŸãïŒ", json_template]))
- äžèšã³ãŒããå®è¡ããã«ã¯ãäºåã«Google Cloud Platformã§ãããžã§ã¯ããäœæããDocument AI APIãæå¹åããµãŒãã¹ã¢ã«ãŠã³ãããŒãäœæã»èšå®ããŠããå¿ èŠããããŸãã
- Gemini APIããŒãå¥éååŸããã³ãŒãå ã«èšå®ããå¿ èŠããããŸãã
file_pathsãããã³ããå ã®æœåºã«ãŒã« ([ã«ãŒã«]) ã¯ãå®éã®æ¥åã察象ããã¥ã¡ã³ãã«åãããŠé©å®å€æŽããŠãã ããã- ãšã©ãŒãã³ããªã³ã°ã¯åºæ¬çãªãã®ã®ã¿å«ãŸããŠããŸããå®éã®éçšã§ã¯ããã詳现ãªãšã©ãŒåŠçã远å ããããšãæšå¥šããŸãã
- ãã¿ãŒã³BïŒGemini APIã®ã¿ïŒã®å Žåã¯ãPDFãç»åã«å€æããåŠçãšã
generate_content_with_gemini颿°ã«ç»åããŒã¿ãæž¡ãåŠçïŒäŸ:PIL.Image.open(image_path)ã§ç»åãéããcontents=[prompt, image]ã®ããã«æž¡ãïŒãå¿ èŠã«ãªããŸãã
è©äŸ¡æ¹æ³
ããããã®æ¹æ³ã§æœåºããæ å ±ããå ã®PDFã®å 容ãšäžèŽããŠããããç®èŠã§ç¢ºèªããé ç®ããšã®æ£è§£çãšå šäœã®æ£è§£çãç®åºããŸããã
æ€èšŒçµæïŒããŒã¿ã§èŠã粟床æ¯èŒ
æ€èšŒã®çµæãå šäœçãªæ£è§£çã¯ãã¿ãŒã³AïŒDocument AI + Gemini APIïŒã®æ¹ãé«ããšããçµæã«ãªããŸããã
- ãã¿ãŒã³A (Document AI & Gemini API) å šäœæ£è§£ç: 92.9%
- ãã¿ãŒã³B (Gemini APIã®ã¿) å šäœæ£è§£ç: 88.7%
å å·®ã§ã¯ãããŸãããDocument AIã§äžåºŠããã¹ãåããã¹ããããèžãã æ¹ããããæ£ç¢ºã«æ å ±ãæœåºã§ããåŸåãèŠãããŸããã
é ç®å¥ã«èŠãŠã¿ããšãç¹ã«ãå¥çŽæéããèªåæŽæ°ã®æç¡ããè§£çŽéç¥æéããšãã£ãé ç®ã§ããã¿ãŒã³Aã®ç²ŸåºŠããã¿ãŒã³Bãäžåã£ãŠããŸãããç¹ã«ãè§£çŽéç¥æéãã«ãããŠã¯ããã¿ãŒã³Aã85.7%ã ã£ãã®ã«å¯Ÿãããã¿ãŒã³Bã¯64.3%ãšãæ¯èŒç倧ããªå·®ãèŠãããŸãããããã¯ãDocument AIãã¬ã€ã¢ãŠããè§£æããŠæ£ç¢ºã«ããã¹ããæœåºããèœåã«é·ããŠãããããGemini APIãåŸç¶ã®åŠçã§æ å ±ãç¹å®ãããããªã£ããããšèããããŸãã
äžæ¹ã§ããæ¯ææ¡ä»¶ãã®é ç®ã§ã¯ããã¿ãŒã³BïŒ96.4%ïŒããã¿ãŒã³AïŒ92.9%ïŒããããã«äžåãçµæãšãªããŸãããããã¯ãæ¯ææ¡ä»¶ã«é¢ããèšè¿°ãæ¯èŒçå®åçãªè¡šçŸã§æžãããŠãããç»åããã®çŽæ¥çãªèªã¿åãã§ãGemini APIãããŸãè§£éã§ããå¯èœæ§ãèããããŸãã
å šäœãšããŠã¯ãããã¿ãŒã³Aã®æ¹ãâæ°æã¡â粟床ãè¯ãã£ãããšããã®ãä»åã®æ€èšŒã®çµè«ã§ãã
ãªãDocument AI + Gemini APIã®æ¹ã粟床ãé«ãã£ãã®ãïŒïŒèå¯ïŒ
ä»åã®æ€èšŒã§ãã¿ãŒã³Aã®ç²ŸåºŠããããã«äžåã£ãçç±ãšããŠã¯ã以äžã®ç¹ãèããããŸãã
- Document AIã®å°éæ§: Document AIã¯ããã®åã®éããææžãã®è§£æã«ç¹åããAIã§ããPDFã®ãããªæ§é åã»åæ§é åãããææžãããã¬ã€ã¢ãŠããèæ ®ãã€ã€é«ç²ŸåºŠã«ããã¹ããæœåºããèœåã«åªããŠããŸããããã«ãããGemini APIã¯ãã€ãºã®å°ãªããæŽçãããããã¹ãããŒã¿ãæ±ãããšãã§ããçµæãšããŠæ å ±æœåºã®ç²ŸåºŠåäžã«ã€ãªãã£ãå¯èœæ§ããããŸãã
- Gemini APIã®è² æ 軜æž: ãã¿ãŒã³Bã§ã¯ãGemini APIãç»åããæåãèªèãããã®æå³ãè§£éããŠæ å ±ãæœåºãããšãããè€æ°ã®ã¿ã¹ã¯ãåæã«ããªãå¿ èŠããããŸãããäžæ¹ããã¿ãŒã³Aã§ã¯æåèªèã®å€§éšåãDocument AIãæ ããããGemini APIã¯ããã¹ãããŒã¿ã®ãæå³è§£éããšãæ å ±æœåºãã«éäžã§ããŸãããã®åœ¹å²åæ ããæçµçãªç²ŸåºŠã®å·®ã«ç¹ãã£ãã®ãããããŸããã
ãã ãããã¿ãŒã³Bã®Gemini APIåäœã§ã®æœåºç²ŸåºŠã88.7%ãšæ±ºããŠäœãããã§ã¯ãããŸãããPDFãç»å倿ããæéã¯ãããŸãããDocument AIãå©çšããªãåãã·ã¹ãã æ§æãã·ã³ãã«ã«ã§ãããšããã¡ãªããããããŸãã
ä»åŸã®å±æ
ä»åã¯ãæ¯èŒçããã¹ããäžå¿ã®ããžãã¹ææžã§æ€èšŒãè¡ããŸãããããããå®äžçã®ææžã«ã¯ãææžãã®ã¡ã¢ã远èšãããŠããããå³ãã°ã©ããå€ãå«ãŸããŠããããããã®ãå°ãªããããŸããã
ä»åŸã¯ã以äžã®ãããªã±ãŒã¹ã§æ€èšŒãè¡ãããšã§ãããããã®æ¹æ³ã®åŸæã»äžåŸæãããã«æ·±ãçè§£ã§ãããšèããŠããŸãã
- ææžãæåãå«ãPDF: Document AIãGemini APIãææžãæåãã©ã®çšåºŠèªèã§ãããã
- å³ã衚ãå€ãPDF: ã¬ã€ã¢ãŠããè€éãªå Žåã«ãã©ã¡ãã®æ¹æ³ãæ£ç¢ºã«æ å ±ãæœåºã§ãããã
- äœè§£å床ã®PDF: ã¹ãã£ã³ç¶æ ãæªãææžã§ã®ç²ŸåºŠå·®ã
ãããã®æ€èšŒãéããŠããŠãŒã¹ã±ãŒã¹ã«å¿ããæé©ãªæ å ±æœåºæ¹æ³ãèŠæ¥µããŠãããããšèããŠããŸãã
ãŸãšã
ä»åã®æ€èšŒã§ã¯ãPDFããã®æ å ±æœåºã«ãããŠãDocument AIã§ããã¹ãåããŠããGemini APIã§æ å ±ãæœåºããïŒãã¿ãŒã³AïŒæ¹ããPDFãç»ååããŠGemini APIã®ã¿ã§æœåºããïŒãã¿ãŒã³BïŒããããå šäœçã«ãããã«é«ã粟床 ã瀺ãããšã確èªã§ããŸããã
- 粟床ãæåªå ãããªã: Document AI + Gemini API ã®çµã¿åãããæåãªéžæè¢ã
- ã·ã¹ãã æ§æã®ã·ã³ãã«ããã³ã¹ããéèŠãããªã: Gemini APIåäœã§ã®æŽ»çšãååã«æ€èšã®äŸ¡å€ããã
æœåºãããæ å ±ã®çš®é¡ããå ã®PDFã®ç¶æ ïŒããã¹ãäžå¿ããå³ãææžããå€ãããªã©ïŒã«ãã£ãŠãæé©ãªæ¹æ³ã¯ç°ãªã£ãŠããå¯èœæ§ããããŸãã
AIã«ããæ å ±æœåºæè¡ã¯æ¥ã é²åããŠããŸããä»åŸãGemini APIã®ç»åèªèèœåãããã«åäžããã°ããã¿ãŒã³Bã®ç²ŸåºŠã远ãã€ãã远ãè¶ãå¯èœæ§ãååã«èããããŸããåŒãç¶ããææ°æè¡ã®ååãæ³šèŠããããå¹ççãªæ å ±æŽ»çšã®æ¹æ³ãæ¢ã£ãŠãããããšæããŸãã
æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããããã®èšäºããPDFããã®æ å ±æœåºã«ãããAI掻çšãæ€èšãããŠããæ¹ã ã®åèã«ãªãã°å¹žãã§ãã