برنامه نویسی

برنامه خواننده فاکتور با Genai در 10 دقیقه – آموزش

بگذارید سعی کنیم با کمک فناوری و ابزارهای تولیدی AI ، یک برنامه وب ساده ایجاد کنیم. ما از ChatGPT برای به دست آوردن تنظیم اولیه پروژه استفاده خواهیم کرد. با این کار ، ما می توانیم به روزرسانی های اضافی را در صورت لزوم ادغام کنیم.

تصویر تولید شده توسط Stabilityai - Stablediffusion

پیش نیاز

در زیر پیش نیازهای لازم (یا ENV/ابزارهای مورد استفاده) برای توسعه برنامه وجود دارد:

  • پایتون 3.10
  • لینوکس (در این مورد)
  • IDE یا ویراستار
  • حافظه 2 گیگابایتی

پس از تنظیم همه چیز ، می توانیم همانطور که در زیر نشان داده شده است از سریع (یا مشابه) استفاده کنیم و کل تنظیمات کد را برای برنامه خود از ChatGPT دریافت کنیم. (لطفا “بغل کردن smolagents” را در متن نادیده بگیرید – این برای یک فعالیت متفاوت در نظر گرفته شده بود)

you are an expert in python programming with high skills of huggingface smolagents library and other required libraries. Generate a complete project with any number of required python program files and functions to implement a web application (using flask and basic html css and js) that requires no user auth, with a page having a mandatory image file upload option part of a form submission. after submitting, it should be parsed by a vision lang model and then the parsed output should be written as a doc file and then emailed to a default email id
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این توانست این درخواست را انجام دهد ، اما همانطور که انتظار می رفت ، عملکرد خوبی نداشت ، بنابراین مجبور شدم 2 پیام پیگیری را ارائه دهم (یکی برای دریافت همه پرونده های اسکریپت وابستگی و دیگری برای بسته بندی کل اسکریپت های پروژه به عنوان اسکریپت پوسته). بعداً ، من اسکریپت پوسته را برای ایجاد تنظیم پروژه ، که من در محلی ذخیره کردم و سپس آن را با دستور زیر اجرا کردم ، دریافت کردم:

chmod +x flask_vlm_app.sh
./flask_vlm_app.sh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کد با توضیح

بگذارید قطعه های کد را در جریان کار برنامه کاربردی طی کنیم.

برنامه

from flask import Flask, render_template, request, send_file
import os
from werkzeug.utils import secure_filename
from image_processor import process_image
from document_generator import create_doc
from email_sender import send_email

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['OUTPUT_FOLDER'] = 'outputs'
DEFAULT_EMAIL = "amrs.tech@gmail.com"

os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
os.makedirs(app.config['OUTPUT_FOLDER'], exist_ok=True)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    if 'image' not in request.files:
        return "No file part", 400
    file = request.files['image']
    if file.filename == '':
        return "No selected file", 400

    filename = secure_filename(file.filename)
    filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
    file.save(filepath)

    extracted_text = process_image(filepath)

    doc_path = os.path.join(app.config['OUTPUT_FOLDER'], f"{os.path.splitext(filename)[0]}.docx")
    create_doc(extracted_text, doc_path)

    send_email(DEFAULT_EMAIL, doc_path)

    return send_file(doc_path, as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این پرونده اصلی است که برنامه Flask (سرور) را هدایت می کند و اسکریپت های وابستگی ما در اینجا وارد می شوند (Image_Processor ، Document_Generator و email_sender). دو نقطه پایانی وجود دارد – یکی برای صفحه اصلی با فرم بارگذاری پرونده و دیگری برای (ارسال درخواست) ارسال فرم و تجزیه فاکتور. قسمت دوم از دریافت پرونده بارگذاری شده و ذخیره آن در یک فهرست در سرور جریان می یابد و سپس آن را با VLM ما تجزیه می کند و پس از آن ارسال محتوای تجزیه شده به عنوان یک سند به یک آدرس ایمیل.

image_processor.py

from transformers import AutoProcessor, AutoModelForImageTextToText
from PIL import Image
import torch

def process_image(image_path):
    processor = AutoProcessor.from_pretrained("HuggingFaceTB/SmolVLM-500M-Instruct")
    model = AutoModelForImageTextToText.from_pretrained("HuggingFaceTB/SmolVLM-500M-Instruct")

    conversation = [
        {
            "role": "user",
            "content":[
                {"type": "image", "url": image_path},
                {"type": "text", "text": "Describe this image in detail."}
            ]
        }
    ]

    inputs = processor.apply_chat_template(
        conversation,
        add_generation_prompt=True,
        tokenize=True,
        return_dict=True,
        return_tensors="pt",
    ).to(model.device)

    output_ids = model.generate(**inputs, max_new_tokens=400)
    generated_texts = processor.batch_decode(output_ids, skip_special_tokens=True)
    print("OUTPUT==>",generated_texts)
    return generated_texts
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این اسکریپت است که برای پردازش تصویر بارگذاری شده از کاربر استفاده می شود. بغل کردن نشانگر از مدل برای تجزیه تصویر استفاده می شود ، که بهتر از بسیاری از مدل های تصویر کار می کند (ChatGPT کد را با مدل-تصویر سازی Blip-Image Salesforce ارائه داد که خوب عمل نکرد). برای دقت بیشتر و نتایج خاص کار بهتر ، می توانیم چند عکس نمونه دیگر را با لیست پیام ها ارائه دهیم.

email_sender.py

import smtplib
import os
from email.message import EmailMessage

def send_email(recipient, file_path):
    EMAIL_ADDRESS = os.getenv("EMAIL_ADDRESS")
    EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")
    # print('emailauth==>',EMAIL_ADDRESS, EMAIL_PASSWORD)

    msg = EmailMessage()
    msg['Subject'] = 'Extracted Text Document'
    msg['From'] = EMAIL_ADDRESS
    msg['To'] = recipient
    msg.set_content("Please find the extracted text document attached.")

    with open(file_path, 'rb') as f:
        msg.add_attachment(
            f.read(),
            maintype='application',
            subtype='octet-stream',
            filename=os.path.basename(file_path),
            disposition='inline'
        )

    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
        server.send_message(msg)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این اسکریپت برای ارسال ایمیل به پیش فرض_میل که در ابتدا تنظیم کرده ایم (می توانیم آن را تغییر دهیم تا از کاربر نیز بدست آید ، اما این فقط به عنوان مثال است). ما در حال ساخت شیء ایمیل با موضوع ، از ، به و سپس بدن هستیم. سپس ، ما در حال پیوست کردن سند (محتوای فاکتور) و سپس ورود به سیستم و ارسال پیام ایمیل هستیم. اگر از محیط مجازی استفاده می شود ، می توانید ویرایش کنید env/bin/activate برای افزودن شناسه ایمیل و رمز عبور به محیط ، در غیر این صورت می توانید مستقیماً آن را به محیط سیستم اضافه کنید. (توجه: برای ارسال ایمیل با سرور Gmail به رمز ورود برنامه نیاز دارید – Ref – پاسخ پشتیبانی Google برای رمزهای عبور برنامه)

عالی! اکنون ، با کد پروژه همه تنظیم شده ، پرونده ها و ساختار پوشه پروژه باید چیزی شبیه به این باشد:

flask_vlm_app/        # Project root
│── uploads/          # Folder for uploaded images (created dynamically)
│── outputs/          # Folder for generated documents (created dynamically)
│── templates/        # HTML template directory
│   └── index.html    # Webpage for image upload
│── app.py            # Main Flask application
│── image_processor.py # Processes image using a vision-language model
│── document_generator.py # Creates .docx file from extracted text
│── email_sender.py   # Sends extracted text document via email
│── requirements.txt  # List of required dependencies (if needed)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اطمینان حاصل کنید که تمام کتابخانه های مورد نیاز نصب شده اند (در صورت لزوم در محیط مجازی ، و ENV را فعال کنید) pip install -r requirements.txt یا pip install برای هر کتابخانه

Flask==3.0.3
torch==2.6.0
transformers
pillow==11.1.0
python-docx==1.1.2
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بگذارید شروع شود – سرور برنامه Flask را با دستور شروع کنید python app.py داخل پوشه پروژه. شما باید پس از رفتن به صفحه ای مانند تصویر زیر مشاهده کنید localhost:5000 (گاهی اوقات ، پورت ممکن است 8000 باشد – بر اساس پیکربندی برنامه Flask شما) در مرورگر وب.
سپس می توانید یک فایل تصویری از یک فاکتور بارگذاری کرده و روی بارگذاری کلیک کنید. برای استنباط مدل باید چند دقیقه طول بکشد و سپس ارسال ایمیل.

تصویر UI

ولا شما باید یک ایمیل دریافت کرده باشید (مشروط بر اینکه آدرس ایمیل گیرنده مال شما باشد) با محتوای تجزیه شده به عنوان پیوست Docx.

این نشان می دهد که چگونه می توان از ابزارهای AI مولد به راحتی برای تقویت بهره وری با تلاش کمتر استفاده کرد. احساس راحتی کنید که واکنش نشان دهید و در نظرات بازخورد بگذارید. ممنون

پیوند GitHub: https://github.com/amrs-tech/invoice-reader

یادگیری مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا