이미지에서 구조화 된 차량 데이터 추출 | lihi gur arie, phd | 2025 년 1 월
OpenAI API, Langchain 및 Pydantic을 사용하여 이미지에서 구조화 된 정보를 추출하는 자동 차량 문서 시스템을 구축하십시오.


검사 지점에 카메라 모니터링 자동차가 있다고 상상해보십시오. 귀하의 임무는 유형, 번호판 번호, 제조사, 모델 및 색상과 같은 복잡한 차량 세부 사항을 문서화하는 것입니다. 이 작업은 어려운 일입니다. 고전적인 컴퓨터 비전 방법은 다양한 패턴으로 어려움을 겪고 있으며 감독 된 딥 러닝은 여러 특수 모델, 광범위한 레이블이 붙은 데이터 및 지루한 교육을 통합해야합니다. 사전 훈련 된 최근 발전 멀티 모달 LLM (MLLMS) 필드는 빠르고 유연한 솔루션을 제공하지만 구조화 된 출력에 적응하려면 조정이 필요합니다.
이 튜토리얼에서는 차량 이미지에서 필수 세부 사항을 추출하는 차량 문서 시스템을 구축합니다. 이러한 세부 사항은 구조화 된 형식으로 추출하여 추가 다운 스트림 사용을 위해 액세스 할 수 있습니다. 우리는 사용할 것입니다 Openai데이터를 추출하려면 GPT-4, Pydantic 출력을 구조화합니다 랭케인 파이프 라인을 오케스트레이션합니다. 결국, 원시 이미지를 구조화되고 실행 가능한 데이터로 변환하기위한 실용적인 파이프 라인이 있습니다.
이 튜토리얼은 시각적 작업을 위해 LLM을 사용하는 데 관심이있는 컴퓨터 비전 실무자, 데이터 과학자 및 개발자를 대상으로합니다. 전체 코드는 사용하기 쉬운 Colab 노트북으로 제공되어 단계별로 따라갈 수 있도록 도와줍니다.
- GPT-4 비전 모델 : GPT-4는 OpenAI가 개발 한 멀티 모달 모델로 텍스트와 이미지를 모두 이해할 수 있습니다. [1]. 방대한 양의 다중 모드 데이터에 대해 교육을받은 것은 종종 미세 조정이 필요없이 다양한 작업을 제로 샷 방식으로 일반화 할 수 있습니다. GPT-4의 정확한 아키텍처와 크기는 공개되지 않았지만, 그 기능은 현장에서 가장 진보 된 기능 중 하나입니다. GPT-4는 OpenAI API를 통해 유료 토큰을 기준으로 제공됩니다. 이 튜토리얼에서는 탁월한 제로 샷 성능을 위해 GPT-4를 사용하지만 코드는 귀하의 요구에 따라 다른 모델과 쉽게 교체 할 수 있습니다.
- 랑케인 : 파이프 라인을 구축하기 위해 Langchain을 사용합니다. Langchain은 복잡한 워크 플로를 단순화하고 코드의 일관성을 보장하며 LLM 모델간에 쉽게 전환 할 수있는 강력한 프레임 워크입니다. [2]. 우리의 경우, Langchain은 이미지로드, 프롬프트 생성, GPT 모델을 호출하며 출력을 구조화 된 데이터로 구문 분석하는 단계를 연결하는 데 도움이됩니다.
- Pydantic : Pydantic은 Python의 데이터 검증을위한 강력한 라이브러리입니다. [3]. 우리는 Pydantic을 사용하여 GPT-4 모델에서 예상 출력의 구조를 정의합니다. 이를 통해 출력이 일관되고 작업하기 쉬운 지 확인하는 데 도움이됩니다.
차량 검사 검사 점에서 데이터를 시뮬레이션하려면 ‘자동차 번호판’Kaggle 데이터 세트의 차량 이미지 샘플을 사용합니다. [4]. 이 데이터 세트는 Apache 2.0 라이센스로 제공됩니다. 아래 이미지를 볼 수 있습니다.
실제 구현에 뛰어 들기 전에 우리는 몇 가지 준비를 처리해야합니다.
- OpenAI API 키를 생성하십시오– OpenAI API는 유료 서비스입니다. API를 사용하려면 OpenAI 계정에 가입하고 유료 계획에 연결된 비밀 API 키를 생성해야합니다 (자세한 내용).
- OpenAI를 구성하십시오 – Colab에서는 API 키를 왼쪽 사이드 바 (🔑)에있는 환경 변수 (비밀)로 안전하게 저장할 수 있습니다. 비밀을 만듭니다
OPENAI_API_KEY
API 키를value
필드 및 ‘노트북 액세스’를 토글합니다. - 설치 및 가져 오기 필요한 라이브러리.
파이프 라인 아키텍처
이 구현에서는 Langchain을 사용할 것입니다 chain
파이프 라인의 일련의 단계를 함께 연결하는 추상화. 파이프 라인 체인은 4 개의 구성 요소, 즉 이미지 로딩 구성 요소, 프롬프트 생성 구성 요소, MLLM 호출 구성 요소 및 구문 분석기 구성 요소로 구성되어 LLM의 출력을 구조화 된 형식으로 구문 분석합니다. 체인의 각 단계에 대한 입력 및 출력은 일반적으로 사전으로 구성되며 키는 매개 변수 이름을 나타내고 값은 실제 데이터입니다. 그것이 어떻게 작동하는지 봅시다.
이미지 로딩 구성 요소
체인의 첫 번째 단계는 이미지를로드하고 Base64 인코딩으로 변환하는 것입니다. GPT-4는 이미지가 텍스트 기반 (Base64) 형식으로되어야하기 때문입니다.
def image_encoding(inputs):
"""Load and Convert image to base64 encoding"""with open(inputs["image_path"], "rb") as image_file:
image_base64 = base64.b64encode(image_file.read()).decode("utf-8")
return {"image": image_base64}
그만큼 inputs
매개 변수는 이미지 경로를 포함하는 사전이며, 출력은 기반 64 인코딩 된 이미지를 포함하는 사전입니다.
Pydantic으로 출력 구조를 정의하십시오
우리는 명명 된 클래스를 사용하여 필요한 출력 구조를 지정하는 것으로 시작합니다. Vehicle
Pydantic ‘s에서 물려받습니다 BaseModel
. 각 필드 (예 : Type
,,, Licence
,,, Make
,,, Model
,,, Color
)를 사용하여 정의됩니다 Field
이를 통해 우리는 다음을 허용합니다.
- 출력 데이터 유형을 지정하십시오 (예 :
str
,,,int
,,,list
등.). - LLM 필드에 대한 설명을 제공하십시오.
- LLM을 안내하는 예를 포함하십시오.
그만큼 ...
각각의 (Ellipsis) Field
필드가 필요하고 생략 할 수 없음을 나타냅니다.
수업이 어떻게 보이는지는 다음과 같습니다.
class Vehicle(BaseModel):Type: str = Field(
...,
examples=["Car", "Truck", "Motorcycle", 'Bus'],
description="Return the type of the vehicle.",
)
License: str = Field(
...,
description="Return the license plate number of the vehicle.",
)
Make: str = Field(
...,
examples=["Toyota", "Honda", "Ford", "Suzuki"],
description="Return the Make of the vehicle.",
)
Model: str = Field(
...,
examples=["Corolla", "Civic", "F-150"],
description="Return the Model of the vehicle.",
)
Color: str = Field(
...,
example=["Red", "Blue", "Black", "White"],
description="Return the color of the vehicle.",
)
파서 구성 요소
LLM 출력이 예상 형식과 일치하는지 확인하려면 JsonOutputParser
초기화 Vehicle
수업. 이 파서는 출력이 우리가 정의한 구조를 따르고 필드, 유형 및 제약 조건을 확인합니다. 출력이 예상 형식과 일치하지 않으면 구문 분석기가 유효성 검사 오류가 발생합니다.
그만큼 parser.get_format_instructions()
메소드는 스키마를 기반으로 일련의 명령어를 생성합니다. Vehicle
수업. 이 지침은 프롬프트의 일부가되며 출력을 구조화하여 구문 분석 할 수있는 방법에 대한 모델을 안내합니다. 당신은 볼 수 있습니다 instructions
Colab 노트북의 가변 콘텐츠.
parser = JsonOutputParser(pydantic_object=Vehicle)
instructions = parser.get_format_instructions()
프롬프트 생성 구성 요소
파이프 라인의 다음 구성 요소는 프롬프트를 구성하는 것입니다. 프롬프트는 시스템 프롬프트와 인간 프롬프트로 구성됩니다.
- 시스템 프롬프트 : 정의
SystemMessage
그리고 우리는 그것을 사용하여 AI의 역할을 설정합니다. - 인간 프롬프트 : 정의
HumanMessage
1) 작업 설명 2) 파서에서 가져온 형식 지침 및 3) Base64 형식의 이미지 및 이미지 품질로 구성됩니다.detail
매개 변수.
그만큼 detail
매개 변수는 모델이 이미지를 처리하고 텍스트 이해를 생성하는 방법을 제어합니다. [5]. 세 가지 옵션이 있습니다. low
,,, high
또는 auto
:
low
: 모델은 이미지의 저해상도 (512 x 512 px) 버전을 처리하고 예산이 85 개의 토큰 인 이미지를 나타냅니다. 이를 통해 API는 더 빠른 응답을 반환하고 입력 토큰을 적게 소비 할 수 있습니다.high
: 모델은 먼저 저해상도 이미지 (85 토큰)를 분석 한 다음 512 x 512px 타일 당 170 개의 토큰을 사용하여 상세 작물을 만듭니다.auto
: 기본 설정, 여기서low
또는high
설정은 이미지 크기로 자동으로 선택됩니다.
우리의 설정을 위해 low
해상도는 충분하지만 다른 응용 프로그램은 혜택을받을 수 있습니다 high
해상도 옵션.
프롬프트 생성 단계를위한 구현은 다음과 같습니다.
@chain
def prompt(inputs):
"""Create the prompt"""prompt = [
SystemMessage(content="""You are an AI assistant whose job is to inspect an image and provide the desired information from the image. If the desired field is not clear or not well detected, return none for this field. Do not try to guess."""),
HumanMessage(
content=[
{"type": "text", "text": """Examine the main vehicle type, make, model, license plate number and color."""},
{"type": "text", "text": instructions},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{inputs['image']}", "detail": "low", }}]
)
]
return prompt
@chain 데코레이터는이 기능이 Langchain 파이프 라인의 일부임을 나타내는 데 사용되며,이 기능의 결과는 워크 플로의 단계로 전달 될 수 있습니다.
mllm 구성 요소
파이프 라인의 다음 단계는 MLLM을 호출하여 이미지에서 정보를 작성하여 MLLM_response
기능.
먼저 멀티 모달 GTP-4 모델을 초기화합니다 ChatOpenAI
다음 구성으로 :
model
GPT-4 모델의 정확한 버전을 지정합니다.temperature
결정적인 반응을 보장하기 위해 0.0으로 설정하십시오.max_token
출력의 최대 길이를 1024 토큰으로 제한합니다.
다음으로 GPT-4 모델을 사용하여 호출합니다 model.invoke
이미지 및 프롬프트가 포함 된 조립 된 입력으로. 모델은 입력을 처리하고 이미지에서 정보를 반환합니다.
구성 파이프 라인 체인
모든 구성 요소가 정의 된 후에는 |
파이프 라인 체인을 구성하는 연산자. 이 연산자는 한 단계의 출력을 다음 단계의 입력에 순차적으로 연결하여 매끄러운 워크 플로를 만듭니다.
단일 이미지에서의 추론
이제 재미있는 부분이 온다! 이미지 경로가 포함 된 사전을 전달하여 차량 이미지에서 정보를 추출 할 수 있습니다. pipeline.invoke
방법. 작동 방식은 다음과 같습니다.
output = pipeline.invoke({"image_path": f"{img_path}"})
출력은 차량 세부 사항이있는 사전입니다.
데이터베이스 또는 API 응답과의 추가 통합을 위해 출력 사전을 JSON으로 쉽게 변환 할 수 있습니다.
json_output = json.dumps(output)
이미지 배치에 대한 추론
Langchain은 여러 이미지를 동시에 처리 할 수있게하여 배치 추론을 단순화합니다. 이렇게하려면 이미지 경로가 포함 된 사전 목록을 전달하고 사용 파이프 라인을 호출해야합니다. pipeline.batch
:
# Prepare a list of dictionaries with image paths:
batch_input = [{"image_path": path} for path in image_paths]# Perform batch inference:
output = pipeline.batch(batch_input)
결과 출력 사전은 Pandas Dataframe과 같은 테이블 데이터로 쉽게 변환 할 수 있습니다.
df = pd.DataFrame(output)
우리가 볼 수 있듯이 GPT-4 모델은 차량 유형, 번호판, 제조사, 모델 및 색상을 올바르게 식별하여 정확하고 구조화 된 정보를 제공했습니다. 오토바이 이미지에서와 같이 세부 사항이 명확하게 보이지 않는 경우 프롬프트에 지시받은대로 ‘None’을 반환했습니다.
이 튜토리얼에서는 이미지에서 구조화 된 데이터를 추출하고 차량 문서 시스템을 구축하는 데 사용하는 방법을 배웠습니다. 동일한 원칙을 광범위한 다른 응용 프로그램에도 적용 할 수 있습니다. 우리는 GPT-4 모델을 사용하여 차량 세부 사항을 식별하는 데 강력한 성능을 보여주었습니다. 그러나 Langchain 기반 구현은 유연하여 다른 MLLM 모델과 쉽게 통합 할 수 있습니다. 우리는 좋은 결과를 얻었지만 LLM 기반 모델에서 발생할 수있는 잠재적 할당을 염두에 두는 것이 중요합니다.
실무자는 또한 유사한 시스템을 구현할 때 잠재적 개인 정보 및 안전 위험을 고려해야합니다. OpenAI API 플랫폼의 데이터는 기본적으로 모델을 훈련시키는 데 사용되지 않지만 [6]민감한 데이터를 처리하려면 적절한 규정 준수가 필요합니다.
여기서 끝까지 축하합니다. 감사를 표시하고 알고리즘 자존감을 높이려면 yourx50을 클릭하십시오.
더 배우고 싶습니까?
[1] GPT-4 기술 보고서 https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
[2] 랭케인 https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
[3] Pydantic https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
[4] ‘자동차 번호판’Kaggle 데이터 세트 https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
[5] Openai – 낮거나 높은 충실도 이미지 이해 https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
[6] OpenAI의 엔터프라이즈 개인 정보 https://towardsdatascience.com/extracting-structured-vehicle-data-from-images-794128aa8696?source=rss—-7f60cf5620c9—4
Post Comment