찾다
백엔드 개발파이썬 튜토리얼빠르고 더러운 문서 분석: Python에서 GOT-OCR과 LLama 결합

이미지에 대한 OCR LLM 분석을 수행하는 방법을 살펴보겠습니다. 수십년의 경험을 가진 전문가가 제시하는 최선의 방법이 아닐까? 설마. 그러나 그것은 실제 생활에서 비슷한 접근 방식을 취하는 사람에게서 나온 것입니다. 프로덕션에 바로 사용할 수 있는 코드가 아닌 실용적인 코드 조각이 포함된 주말 프로젝트 버전이라고 생각하세요. 파헤쳐보자!

여기서 우리의 목표는 무엇입니까?

이미지(또는 PDF)를 가져와서 OCR을 사용하여 텍스트를 추출한 다음 LLM을 사용하여 해당 텍스트를 분석하여 유용한 메타데이터를 얻을 수 있는 간단한 파이프라인을 구축하겠습니다. 이는 자동으로 문서를 분류하거나, 들어오는 서신을 분석하거나, 스마트 문서 관리 시스템을 구축하는 데 유용할 수 있습니다. 우리는 널리 사용되는 오픈 소스 도구를 사용하여 작업을 비교적 간단하게 진행할 것입니다.

그리고 아래의 모든 내용은 귀하가 이미 HF 변압기에 꽤 익숙하다고 가정합니다. 그렇지 않다면 https://huggingface.co/docs/transformers/en/quicktour를 확인하세요. 시작하기 좋은 곳인 것 같습니다. 나는 한 번도 해본 적이 없고 단지 예를 통해 배웠습니다. 결국엔...

어떤 패키지가 필요합니까?

우리는 무거운 작업을 위해 토치와 트랜스포머를 사용하고 사용자 친화적인 콘솔 출력으로 우리의 삶을 더 쉽게 만들기 위해 pymupdf 및 rich를 사용할 것입니다(저는 rich를 좋아하므로 기본적으로 재미로 사용합니다).

import json
import time
import fitz

import torch
from transformers import AutoModel, AutoTokenizer, pipeline

from rich.console import Console
console = Console()

이미지 준비

먼저 어떤 이미지를 입력으로 사용해야 할까요? 여기에서는 Hugging Face를 기본 작업으로 사용하고 있으므로 주요 웹 페이지의 첫 번째 페이지를 테스트 주제로 사용하겠습니다. 텍스트와 복잡한 형식을 모두 갖춘 좋은 후보입니다. OCR을 진행하는 데 적합합니다.

That landing page of HF that was mentioned above

보다 현실적인 솔루션을 위해 입력이 PDF라고 가정해 보겠습니다. 현실 세계에서는 아마도 PDF를 다루게 될 것이기 때문입니다. 모델이 처리할 수 있도록 PNG 형식으로 변환해야 합니다.

INPUT_PDF_FILE = "./data/ocr_hf_main_page.pdf"
OUTPUT_PNG_FILE = "./data/ocr_hf_main_page.png"

doc = fitz.open(INPUT_PDF_FILE)
page = doc.load_page(0)
pixmap = page.get_pixmap(dpi=300)
img = pixmap.tobytes()

with console.status("Converting PDF to PNG...", spinner="monkey"):
    with open(OUTPUT_PNG_FILE, "wb") as f:
        f.write(img)

여기에서 실제 OCR을 수행하세요.

저는 이 작업을 위해 다양한 OCR 솔루션을 사용해 보았습니다. 물론, tesseract와 다른 옵션도 많이 있습니다. 하지만 내 테스트 사례에서는 GOT-OCR2_0(https://huggingface.co/stepfun-ai/GOT-OCR2_0)을 사용하여 최상의 결과를 얻었습니다. 그럼 바로 시작해 보겠습니다.

tokenizer = AutoTokenizer.from_pretrained(
    "ucaslcl/GOT-OCR2_0",
    device_map="cuda",
    trust_remote_code=True,
)
model = AutoModel.from_pretrained(
    "ucaslcl/GOT-OCR2_0",
    trust_remote_code=True,
    low_cpu_mem_usage=True,
    use_safetensors=True,
    pad_token_id=tokenizer.eos_token_id,
)
model = model.eval().cuda()

여기서 무슨 일이 벌어지고 있는 걸까요? 음, 기본 AutoModel과 AutoTokenizer, 유일하게 특별한 부분은 cuda를 사용하도록 모델을 설정한다는 것입니다. 그리고 이것은 선택 사항이 아닙니다. 모델을 실행하려면 CUDA 지원이 필요합니다.

이제 모델을 정의했으므로 실제로 저장된 파일에 적용해 보겠습니다. 또한 시간을 측정하여 인쇄해 드립니다. 다른 모델과 비교할 뿐만 아니라 사용 사례에서 너무 오래 기다리는 것이 가능한지 이해하는 데에도 유용합니다(우리의 경우에는 매우 빠르지만).

import json
import time
import fitz

import torch
from transformers import AutoModel, AutoTokenizer, pipeline

from rich.console import Console
console = Console()

원본 이미지에서 얻은 내용은 다음과 같습니다.

INPUT_PDF_FILE = "./data/ocr_hf_main_page.pdf"
OUTPUT_PNG_FILE = "./data/ocr_hf_main_page.png"

doc = fitz.open(INPUT_PDF_FILE)
page = doc.load_page(0)
pixmap = page.get_pixmap(dpi=300)
img = pixmap.tobytes()

with console.status("Converting PDF to PNG...", spinner="monkey"):
    with open(OUTPUT_PNG_FILE, "wb") as f:
        f.write(img)

^ 텍스트가 모두 있고 서식은 없지만 의도적인 것입니다.

GOT-OCR2_0은 매우 유연합니다. HTML을 포함한 다양한 형식으로 출력할 수 있습니다. 다음은 이를 사용할 수 있는 다른 방법입니다.

tokenizer = AutoTokenizer.from_pretrained(
    "ucaslcl/GOT-OCR2_0",
    device_map="cuda",
    trust_remote_code=True,
)
model = AutoModel.from_pretrained(
    "ucaslcl/GOT-OCR2_0",
    trust_remote_code=True,
    low_cpu_mem_usage=True,
    use_safetensors=True,
    pad_token_id=tokenizer.eos_token_id,
)
model = model.eval().cuda()

마지막으로 LLM을 시도해 보세요

이제 재미있는 부분인 LLM 선택이 시작됩니다. 어느 것이 최고인지에 대한 끊임없는 토론이 있었고 어디를 가든 기사가 있었습니다. 하지만 간단하게 해보자. 모든 사람과 그들의 개는 LLM에 대해 들어본 적이 있을 것이다. 야마. 따라서 Llama-3.2-1B를 사용하여 텍스트를 처리하겠습니다.

텍스트에서 무엇을 얻을 수 있나요? 텍스트 분류, 감정 분석, 언어 감지 등과 같은 기본적인 사항을 생각해 보세요. 업로드된 문서를 자동으로 분류하거나 약국에 수신되는 팩스를 정렬하는 시스템을 구축한다고 상상해 보세요.

프롬프트 엔지니어링에 대한 심층적인 내용은 건너뛰겠습니다. (이것은 완전히 다른 글이고 제가 아무것도 쓰지 않을 것이라고 믿습니다.) 기본 아이디어는 다음과 같습니다.

def run_ocr_for_file(func: callable, text: str):
    start_time = time.time()
    res = func()
    final_time = time.time() - start_time

    console.rule(f"[bold red] {text} [/bold red]")
    console.print(res)
    console.rule(f"Time: {final_time} seconds")

    return res

result_text = None
with console.status(
    "Running OCR for the result file...",
    spinner="monkey",
):
    result_text = run_ocr_for_file(
        lambda: model.chat(
            tokenizer,
            OUTPUT_PNG_FILE,
            ocr_type="ocr",
        ),
        "plain texts OCR",
    )

그건 그렇고, 내가 여기서 프롬프트/콘텐츠로 우스꽝스러울 정도로 어리석은 짓을 하고 있는 걸까요? 알려줘요. "신속한 엔지니어링"은 매우 새로운 기능이며 아직 충분히 심각하게 받아들이지 않습니다.

모델은 때때로 마크다운 코드 블록으로 결과를 래핑하므로 이를 처리해야 합니다. (더 깔끔한 방법을 아시는 분이 계시다면 저는 귀기울입니다.)

Hugging Face- The Al community building the future.  https: / / hugging face. co/  Search models, datasets, users. . .  Following 0
All Models Datasets Spaces Papers Collections Community Posts Up votes Likes New Follow your favorite Al creators Refresh List black-
forest- labs· Advancing state- of- the- art image generation Follow stability a i· Sharing open- source image generation models
Follow bria a i· Specializing in advanced image editing models Follow Trending last 7 days All Models Datasets Spaces deep see k- a
i/ Deep Seek- V 3 Updated 3 days ago· 40 k· 877 deep see k- a i/ Deep Seek- V 3- Base Updated 3 days ago· 6.34 k· 1.06 k 2.39 k
TRELLIS Q wen/ QV Q- 72 B- Preview 88888888888888888888 888888888888888888 301 Gemini Co der 1 of 3 2025-01-01,9:38 p. m

일반적으로 출력으로 얻는 내용은 다음과 같습니다.

# format texts OCR:
result_text = model.chat(
  tokenizer,
  image_file,
  ocr_type='format',
)

# fine-grained OCR:
result_text = model.chat(
  tokenizer,
  image_file,
  ocr_type='ocr',
  ocr_box='',
)
# ... ocr_type='format', ocr_box='')
# ... ocr_type='ocr', ocr_color='')
# ... ocr_type='format', ocr_color='')

# multi-crop OCR:
# ... ocr_type='ocr')
# ... ocr_type='format')

# render the formatted OCR results:
result_text = model.chat(
  tokenizer,
  image_file,
  ocr_type='format',
  render=True,
  save_render_file = './demo.html',
)

요약하자면

우리는 PDF를 가져와서 매우 우수한 OCR을 사용하여 텍스트를 추출한 다음 LLM을 사용하여 해당 텍스트를 분석하여 유용한 메타데이터를 얻을 수 있는 작은 파이프라인을 구축했습니다. 생산 준비가 되었나요? 아마도 그렇지 않을 것입니다. 그러나 비슷한 것을 구축하려는 경우 이는 확실한 출발점이 됩니다. 멋진 점은 PDF 처리부터 OCR, LLM 분석에 이르기까지 다양한 오픈 소스 도구를 결합하여 유용한 것을 만드는 방법입니다.

쉽게 연장할 수 있습니다. 더 나은 오류 처리 기능을 추가하거나 여러 페이지에 대한 지원을 추가하거나 다른 LLM을 사용해 볼 수도 있습니다. 아니면 문서 관리 시스템에 연결할 수도 있습니다. 그러기를 바랍니다. 재미있는 작업이 될 것 같아요.

이것은 단지 한 가지 방법일 뿐이라는 점을 기억하세요. 특정 사용 사례에 더 잘 맞는 다른 접근 방식이 수십 가지 있을 수 있습니다. 하지만 이것이 여러분의 실험을 위한 좋은 출발점이 되기를 바랍니다! 아니면 댓글로 작업 방법을 가르쳐 줄 수 있는 완벽한 장소입니다.

위 내용은 빠르고 더러운 문서 분석: Python에서 GOT-OCR과 LLama 결합의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬의 주요 목적 : 유연성과 사용 편의성파이썬의 주요 목적 : 유연성과 사용 편의성Apr 17, 2025 am 12:14 AM

Python의 유연성은 다중 파리가 지원 및 동적 유형 시스템에 반영되며, 사용 편의성은 간단한 구문 및 풍부한 표준 라이브러리에서 나옵니다. 유연성 : 객체 지향, 기능 및 절차 프로그래밍을 지원하며 동적 유형 시스템은 개발 효율성을 향상시킵니다. 2. 사용 편의성 : 문법은 자연 언어에 가깝고 표준 라이브러리는 광범위한 기능을 다루며 개발 프로세스를 단순화합니다.

파이썬 : 다목적 프로그래밍의 힘파이썬 : 다목적 프로그래밍의 힘Apr 17, 2025 am 12:09 AM

Python은 초보자부터 고급 개발자에 이르기까지 모든 요구에 적합한 단순성과 힘에 호의적입니다. 다목적 성은 다음과 같이 반영됩니다. 1) 배우고 사용하기 쉽고 간단한 구문; 2) Numpy, Pandas 등과 같은 풍부한 라이브러리 및 프레임 워크; 3) 다양한 운영 체제에서 실행할 수있는 크로스 플랫폼 지원; 4) 작업 효율성을 향상시키기위한 스크립팅 및 자동화 작업에 적합합니다.

하루 2 시간 안에 파이썬 학습 : 실용 가이드하루 2 시간 안에 파이썬 학습 : 실용 가이드Apr 17, 2025 am 12:05 AM

예, 하루에 2 시간 후에 파이썬을 배우십시오. 1. 합리적인 학습 계획 개발, 2. 올바른 학습 자원을 선택하십시오. 3. 실습을 통해 학습 된 지식을 통합하십시오. 이 단계는 짧은 시간 안에 Python을 마스터하는 데 도움이 될 수 있습니다.

Python vs. C : 개발자를위한 장단점Python vs. C : 개발자를위한 장단점Apr 17, 2025 am 12:04 AM

Python은 빠른 개발 및 데이터 처리에 적합한 반면 C는 고성능 및 기본 제어에 적합합니다. 1) Python은 간결한 구문과 함께 사용하기 쉽고 데이터 과학 및 웹 개발에 적합합니다. 2) C는 고성능과 정확한 제어를 가지고 있으며 게임 및 시스템 프로그래밍에 종종 사용됩니다.

파이썬 : 시간 약속과 학습 속도파이썬 : 시간 약속과 학습 속도Apr 17, 2025 am 12:03 AM

Python을 배우는 데 필요한 시간은 개인마다 다릅니다. 주로 이전 프로그래밍 경험, 학습 동기 부여, 학습 리소스 및 방법 및 학습 리듬의 영향을받습니다. 실질적인 학습 목표를 설정하고 실용적인 프로젝트를 통해 최선을 다하십시오.

파이썬 : 자동화, 스크립팅 및 작업 관리파이썬 : 자동화, 스크립팅 및 작업 관리Apr 16, 2025 am 12:14 AM

파이썬은 자동화, 스크립팅 및 작업 관리가 탁월합니다. 1) 자동화 : 파일 백업은 OS 및 Shutil과 같은 표준 라이브러리를 통해 실현됩니다. 2) 스크립트 쓰기 : PSUTIL 라이브러리를 사용하여 시스템 리소스를 모니터링합니다. 3) 작업 관리 : 일정 라이브러리를 사용하여 작업을 예약하십시오. Python의 사용 편의성과 풍부한 라이브러리 지원으로 인해 이러한 영역에서 선호하는 도구가됩니다.

파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.