Langchain과 GPT-4 Vision을 사용하여 이미지에서 텍스트를 추출하는 방법에 대해 알아보자.
준비사항
먼저 필요한 라이브러리를 설치한다.
pip install python-dotenv langchain-openai
환경 설정
OpenAI API 키를 환경변수로 설정하기 위해 .env
파일을 사용한다.
from dotenv import load_dotenv
load_dotenv()
이미지 인코딩 함수 구현
이미지를 base64로 인코딩하는 유틸리티 함수를 만든다.
import base64
import os
def encode_image_from_file(file_path):
with open(file_path, "rb") as image_file:
image_content = image_file.read()
file_ext = os.path.splitext(file_path)[1].lower()
if file_ext in [".jpg", ".jpeg"]:
mime_type = "image/jpeg"
elif file_ext == ".png":
mime_type = "image/png"
else:
mime_type = "image/unknown"
return f"data:{mime_type};base64,{base64.b64encode(image_content).decode('utf-8')}"
이 함수는:
- 이미지 파일을 읽어서 바이너리 데이터로 변환
- 파일 확장자를 확인하여 적절한 MIME 타입 설정
- base64로 인코딩하여 데이터 URL 형식으로 반환
OCR 실행하기
이제 Langchain을 사용하여 이미지에서 텍스트를 추출해보자.
# 이미지 경로 설정
image_path = "./invoice.jpeg"
# 시스템 프롬프트와 메시지 설정
system_prompt = "이미지에서 텍스트를 추출해줘. 추출한 텍스트만 응답으로 내려줘"
messages = [
{
"role": "system",
"content": system_prompt,
},
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"{encode_image_from_file(image_path)}"},
},
],
},
]
# Langchain ChatOpenAI 모델 초기화 및 실행
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke(messages)
결과 확인
실행 결과로 이미지에서 추출된 텍스트를 확인할 수 있ek.
print(response.content)
예제로 사용된 영수증 이미지에서 다음과 같은 텍스트가 추출되었다.
중요 정보는 마스킹했다.
반응형