{"id":99808,"date":"2025-03-02T23:07:42","date_gmt":"2025-03-02T19:37:42","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/invoice-reader-app-with-genai-in-10-minutes-tutorial-mhd\/"},"modified":"2025-03-02T23:07:42","modified_gmt":"2025-03-02T19:37:42","slug":"invoice-reader-app-with-genai-in-10-minutes-tutorial-mhd","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/invoice-reader-app-with-genai-in-10-minutes-tutorial-mhd\/","title":{"rendered":"\u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u0627\u0646\u0646\u062f\u0647 \u0641\u0627\u06a9\u062a\u0648\u0631 \u0628\u0627 Genai \u062f\u0631 10 \u062f\u0642\u06cc\u0642\u0647 &#8211; \u0622\u0645\u0648\u0632\u0634"},"content":{"rendered":"<div data-article-id=\"2306866\" id=\"article-body\">\n<p>\u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u0633\u0639\u06cc \u06a9\u0646\u06cc\u0645 \u0628\u0627 \u06a9\u0645\u06a9 \u0641\u0646\u0627\u0648\u0631\u06cc \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f\u06cc AI \u060c \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u0627\u0632 ChatGPT \u0628\u0631\u0627\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0627\u0648\u0644\u06cc\u0647 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n<p><\/p>\n<p><strong>\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632<\/strong><\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 (\u06cc\u0627 ENV\/\u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647) \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ul>\n<li>\u067e\u0627\u06cc\u062a\u0648\u0646 3.10<\/li>\n<li>\u0644\u06cc\u0646\u0648\u06a9\u0633 (\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f)<\/li>\n<li>IDE \u06cc\u0627 \u0648\u06cc\u0631\u0627\u0633\u062a\u0627\u0631<\/li>\n<li>\u062d\u0627\u0641\u0638\u0647 2 \u06af\u06cc\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc<\/li>\n<\/ul>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u0632 \u0633\u0631\u06cc\u0639 (\u06cc\u0627 \u0645\u0634\u0627\u0628\u0647) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0627\u0632 ChatGPT \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645. (\u0644\u0637\u0641\u0627 &#8220;\u0628\u063a\u0644 \u06a9\u0631\u062f\u0646 smolagents&#8221; \u0631\u0627 \u062f\u0631 \u0645\u062a\u0646 \u0646\u0627\u062f\u06cc\u062f\u0647 \u0628\u06af\u06cc\u0631\u06cc\u062f &#8211; \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0641\u0639\u0627\u0644\u06cc\u062a \u0645\u062a\u0641\u0627\u0648\u062a \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0628\u0648\u062f)<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>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\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062a\u0648\u0627\u0646\u0633\u062a \u0627\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f \u060c \u0627\u0645\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc \u0631\u0641\u062a \u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u062e\u0648\u0628\u06cc \u0646\u062f\u0627\u0634\u062a \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u062c\u0628\u0648\u0631 \u0634\u062f\u0645 2 \u067e\u06cc\u0627\u0645 \u067e\u06cc\u06af\u06cc\u0631\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0645 (\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u06a9\u0644 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0648\u0633\u062a\u0647). \u0628\u0639\u062f\u0627\u064b \u060c \u0645\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0648\u0633\u062a\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062a\u0646\u0638\u06cc\u0645 \u067e\u0631\u0648\u0698\u0647 \u060c \u06a9\u0647 \u0645\u0646 \u062f\u0631 \u0645\u062d\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0645 \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0645 \u060c \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">chmod<\/span> +x flask_vlm_app.sh\n.\/flask_vlm_app.sh\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2>\n<p>  \u06a9\u062f \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d<br \/>\n<\/h2>\n<p>\u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u0642\u0637\u0639\u0647 \u0647\u0627\u06cc \u06a9\u062f \u0631\u0627 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u06a9\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0637\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p><strong>\u0628\u0631\u0646\u0627\u0645\u0647<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"n\">flask<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Flask<\/span><span class=\"p\">,<\/span> <span class=\"n\">render_template<\/span><span class=\"p\">,<\/span> <span class=\"n\">request<\/span><span class=\"p\">,<\/span> <span class=\"n\">send_file<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">werkzeug.utils<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">secure_filename<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">image_processor<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">process_image<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">document_generator<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">create_doc<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">email_sender<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">send_email<\/span>\n\n<span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Flask<\/span><span class=\"p\">(<\/span><span class=\"n\">__name__<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">UPLOAD_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">'<\/span><span class=\"s\">uploads<\/span><span class=\"sh\">'<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">OUTPUT_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">'<\/span><span class=\"s\">outputs<\/span><span class=\"sh\">'<\/span>\n<span class=\"n\">DEFAULT_EMAIL<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">amrs.tech@gmail.com<\/span><span class=\"sh\">\"<\/span>\n\n<span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">makedirs<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">UPLOAD_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">],<\/span> <span class=\"n\">exist_ok<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">makedirs<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">OUTPUT_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">],<\/span> <span class=\"n\">exist_ok<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">index<\/span><span class=\"p\">():<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nf\">render_template<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">index.html<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nd\">@app.route<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">\/upload<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">methods<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">POST<\/span><span class=\"sh\">'<\/span><span class=\"p\">])<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">upload<\/span><span class=\"p\">():<\/span>\n    <span class=\"k\">if<\/span> <span class=\"sh\">'<\/span><span class=\"s\">image<\/span><span class=\"sh\">'<\/span> <span class=\"ow\">not<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">files<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">No file part<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">400<\/span>\n    <span class=\"nb\">file<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">files<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">image<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span>\n    <span class=\"k\">if<\/span> <span class=\"nb\">file<\/span><span class=\"p\">.<\/span><span class=\"n\">filename<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">''<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">No selected file<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">400<\/span>\n\n    <span class=\"n\">filename<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">secure_filename<\/span><span class=\"p\">(<\/span><span class=\"nb\">file<\/span><span class=\"p\">.<\/span><span class=\"n\">filename<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">filepath<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">UPLOAD_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">],<\/span> <span class=\"n\">filename<\/span><span class=\"p\">)<\/span>\n    <span class=\"nb\">file<\/span><span class=\"p\">.<\/span><span class=\"nf\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">filepath<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">extracted_text<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">process_image<\/span><span class=\"p\">(<\/span><span class=\"n\">filepath<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">doc_path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">OUTPUT_FOLDER<\/span><span class=\"sh\">'<\/span><span class=\"p\">],<\/span> <span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"si\">{<\/span><span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">splitext<\/span><span class=\"p\">(<\/span><span class=\"n\">filename<\/span><span class=\"p\">)[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span><span class=\"si\">}<\/span><span class=\"s\">.docx<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">create_doc<\/span><span class=\"p\">(<\/span><span class=\"n\">extracted_text<\/span><span class=\"p\">,<\/span> <span class=\"n\">doc_path<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nf\">send_email<\/span><span class=\"p\">(<\/span><span class=\"n\">DEFAULT_EMAIL<\/span><span class=\"p\">,<\/span> <span class=\"n\">doc_path<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"nf\">send_file<\/span><span class=\"p\">(<\/span><span class=\"n\">doc_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">as_attachment<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">'<\/span><span class=\"s\">__main__<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span>\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"n\">debug<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0646\u062f\u0647 \u0627\u0635\u0644\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Flask (\u0633\u0631\u0648\u0631) \u0631\u0627 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u0634\u0648\u0646\u062f (Image_Processor \u060c Document_Generator \u0648 email_sender). \u062f\u0648 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f &#8211; \u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0628\u0627 \u0641\u0631\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc (\u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a) \u0627\u0631\u0633\u0627\u0644 \u0641\u0631\u0645 \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0641\u0627\u06a9\u062a\u0648\u0631. \u0642\u0633\u0645\u062a \u062f\u0648\u0645 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0622\u0646 \u062f\u0631 \u06cc\u06a9 \u0641\u0647\u0631\u0633\u062a \u062f\u0631 \u0633\u0631\u0648\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0645\u06cc \u06cc\u0627\u0628\u062f \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0628\u0627 VLM \u0645\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u067e\u0633 \u0627\u0632 \u0622\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u062d\u062a\u0648\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0634\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u0646\u062f \u0628\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644.<\/p>\n<p><strong>image_processor.py<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"n\">transformers<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AutoProcessor<\/span><span class=\"p\">,<\/span> <span class=\"n\">AutoModelForImageTextToText<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">PIL<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Image<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">torch<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">process_image<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">processor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AutoProcessor<\/span><span class=\"p\">.<\/span><span class=\"nf\">from_pretrained<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">HuggingFaceTB\/SmolVLM-500M-Instruct<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">model<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AutoModelForImageTextToText<\/span><span class=\"p\">.<\/span><span class=\"nf\">from_pretrained<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">HuggingFaceTB\/SmolVLM-500M-Instruct<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">conversation<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"sh\">\"<\/span><span class=\"s\">role<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">user<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"sh\">\"<\/span><span class=\"s\">content<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:[<\/span>\n                <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">type<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">image<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">url<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">image_path<\/span><span class=\"p\">},<\/span>\n                <span class=\"p\">{<\/span><span class=\"sh\">\"<\/span><span class=\"s\">type<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">text<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">text<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">Describe this image in detail.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">}<\/span>\n            <span class=\"p\">]<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">]<\/span>\n\n    <span class=\"n\">inputs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">processor<\/span><span class=\"p\">.<\/span><span class=\"nf\">apply_chat_template<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">conversation<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">add_generation_prompt<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">tokenize<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">return_dict<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">return_tensors<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">pt<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">).<\/span><span class=\"nf\">to<\/span><span class=\"p\">(<\/span><span class=\"n\">model<\/span><span class=\"p\">.<\/span><span class=\"n\">device<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">output_ids<\/span> <span class=\"o\">=<\/span> <span class=\"n\">model<\/span><span class=\"p\">.<\/span><span class=\"nf\">generate<\/span><span class=\"p\">(<\/span><span class=\"o\">**<\/span><span class=\"n\">inputs<\/span><span class=\"p\">,<\/span> <span class=\"n\">max_new_tokens<\/span><span class=\"o\">=<\/span><span class=\"mi\">400<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">generated_texts<\/span> <span class=\"o\">=<\/span> <span class=\"n\">processor<\/span><span class=\"p\">.<\/span><span class=\"nf\">batch_decode<\/span><span class=\"p\">(<\/span><span class=\"n\">output_ids<\/span><span class=\"p\">,<\/span> <span class=\"n\">skip_special_tokens<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">OUTPUT==&gt;<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span><span class=\"n\">generated_texts<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">generated_texts<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0628\u063a\u0644 \u06a9\u0631\u062f\u0646 <strong>\u0646\u0634\u0627\u0646\u06af\u0631<\/strong> \u0627\u0632 \u0645\u062f\u0644 \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u060c \u06a9\u0647 \u0628\u0647\u062a\u0631 \u0627\u0632 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0645\u062f\u0644 \u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f (ChatGPT \u06a9\u062f \u0631\u0627 \u0628\u0627 \u0645\u062f\u0644-\u062a\u0635\u0648\u06cc\u0631 \u0633\u0627\u0632\u06cc Blip-Image Salesforce \u0627\u0631\u0627\u0626\u0647 \u062f\u0627\u062f \u06a9\u0647 \u062e\u0648\u0628 \u0639\u0645\u0644 \u0646\u06a9\u0631\u062f). \u0628\u0631\u0627\u06cc \u062f\u0642\u062a \u0628\u06cc\u0634\u062a\u0631 \u0648 \u0646\u062a\u0627\u06cc\u062c \u062e\u0627\u0635 \u06a9\u0627\u0631 \u0628\u0647\u062a\u0631 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0686\u0646\u062f \u0639\u06a9\u0633 \u0646\u0645\u0648\u0646\u0647 \u062f\u06cc\u06af\u0631 \u0631\u0627 \u0628\u0627 \u0644\u06cc\u0633\u062a \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u0645.<\/p>\n<p><strong>email_sender.py<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">import<\/span> <span class=\"n\">smtplib<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">email.message<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">EmailMessage<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"nf\">send_email<\/span><span class=\"p\">(<\/span><span class=\"n\">recipient<\/span><span class=\"p\">,<\/span> <span class=\"n\">file_path<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">EMAIL_ADDRESS<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">EMAIL_ADDRESS<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">EMAIL_PASSWORD<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">getenv<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">EMAIL_PASSWORD<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"c1\"># print('emailauth==&gt;',EMAIL_ADDRESS, EMAIL_PASSWORD)\n<\/span>\n    <span class=\"n\">msg<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">EmailMessage<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">Subject<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">'<\/span><span class=\"s\">Extracted Text Document<\/span><span class=\"sh\">'<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">From<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">EMAIL_ADDRESS<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">To<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">recipient<\/span>\n    <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_content<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Please find the extracted text document attached.<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">with<\/span> <span class=\"nf\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">file_path<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">rb<\/span><span class=\"sh\">'<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">msg<\/span><span class=\"p\">.<\/span><span class=\"nf\">add_attachment<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">f<\/span><span class=\"p\">.<\/span><span class=\"nf\">read<\/span><span class=\"p\">(),<\/span>\n            <span class=\"n\">maintype<\/span><span class=\"o\">=<\/span><span class=\"sh\">'<\/span><span class=\"s\">application<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">subtype<\/span><span class=\"o\">=<\/span><span class=\"sh\">'<\/span><span class=\"s\">octet-stream<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">filename<\/span><span class=\"o\">=<\/span><span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">basename<\/span><span class=\"p\">(<\/span><span class=\"n\">file_path<\/span><span class=\"p\">),<\/span>\n            <span class=\"n\">disposition<\/span><span class=\"o\">=<\/span><span class=\"sh\">'<\/span><span class=\"s\">inline<\/span><span class=\"sh\">'<\/span>\n        <span class=\"p\">)<\/span>\n\n    <span class=\"k\">with<\/span> <span class=\"n\">smtplib<\/span><span class=\"p\">.<\/span><span class=\"nc\">SMTP<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">smtp.gmail.com<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">587<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">server<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">server<\/span><span class=\"p\">.<\/span><span class=\"nf\">starttls<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">server<\/span><span class=\"p\">.<\/span><span class=\"nf\">login<\/span><span class=\"p\">(<\/span><span class=\"n\">EMAIL_ADDRESS<\/span><span class=\"p\">,<\/span> <span class=\"n\">EMAIL_PASSWORD<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">server<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">msg<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0647 \u067e\u06cc\u0634 \u0641\u0631\u0636_\u0645\u06cc\u0644 \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 (\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645 \u062a\u0627 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0632 \u0628\u062f\u0633\u062a \u0622\u06cc\u062f \u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0641\u0642\u0637 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u0627\u0633\u062a). \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u0634\u06cc\u0621 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0627 \u0645\u0648\u0636\u0648\u0639 \u060c \u0627\u0632 \u060c \u0628\u0647 \u0648 \u0633\u067e\u0633 \u0628\u062f\u0646 \u0647\u0633\u062a\u06cc\u0645. \u0633\u067e\u0633 \u060c \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u067e\u06cc\u0648\u0633\u062a \u06a9\u0631\u062f\u0646 \u0633\u0646\u062f (\u0645\u062d\u062a\u0648\u0627\u06cc \u0641\u0627\u06a9\u062a\u0648\u0631) \u0648 \u0633\u067e\u0633 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0648 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0633\u062a\u06cc\u0645. \u0627\u06af\u0631 \u0627\u0632 \u0645\u062d\u06cc\u0637 \u0645\u062c\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f <code>env\/bin\/activate<\/code> \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u0634\u0646\u0627\u0633\u0647 \u0627\u06cc\u0645\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f. (\u062a\u0648\u062c\u0647: \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0627 \u0633\u0631\u0648\u0631 Gmail \u0628\u0647 \u0631\u0645\u0632 \u0648\u0631\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f &#8211; Ref &#8211; \u067e\u0627\u0633\u062e \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Google \u0628\u0631\u0627\u06cc \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u0628\u0631\u0646\u0627\u0645\u0647)<\/p>\n<p>\u0639\u0627\u0644\u06cc! \u0627\u06a9\u0646\u0648\u0646 \u060c \u0628\u0627 \u06a9\u062f \u067e\u0631\u0648\u0698\u0647 \u0647\u0645\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u060c \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u0628\u0627\u06cc\u062f \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>flask_vlm_app\/        # Project root\n\u2502\u2500\u2500 uploads\/          # Folder for uploaded images (created dynamically)\n\u2502\u2500\u2500 outputs\/          # Folder for generated documents (created dynamically)\n\u2502\u2500\u2500 templates\/        # HTML template directory\n\u2502   \u2514\u2500\u2500 index.html    # Webpage for image upload\n\u2502\u2500\u2500 app.py            # Main Flask application\n\u2502\u2500\u2500 image_processor.py # Processes image using a vision-language model\n\u2502\u2500\u2500 document_generator.py # Creates .docx file from extracted text\n\u2502\u2500\u2500 email_sender.py   # Sends extracted text document via email\n\u2502\u2500\u2500 requirements.txt  # List of required dependencies (if needed)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062a\u0645\u0627\u0645 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0646\u062f (\u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0645\u062c\u0627\u0632\u06cc \u060c \u0648 ENV \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f) <code>pip install -r requirements.txt<\/code> \u06cc\u0627 <code>pip install <pkg\/><\/code> \u0628\u0631\u0627\u06cc \u0647\u0631 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Flask==3.0.3\ntorch==2.6.0\ntransformers\npillow==11.1.0\npython-docx==1.1.2\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u0634\u0631\u0648\u0639 \u0634\u0648\u062f &#8211; \u0633\u0631\u0648\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 Flask \u0631\u0627 \u0628\u0627 \u062f\u0633\u062a\u0648\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f <code>python app.py<\/code> \u062f\u0627\u062e\u0644 \u067e\u0648\u0634\u0647 \u067e\u0631\u0648\u0698\u0647. \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u067e\u0633 \u0627\u0632 \u0631\u0641\u062a\u0646 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>localhost:5000<\/code> (\u06af\u0627\u0647\u06cc \u0627\u0648\u0642\u0627\u062a \u060c \u067e\u0648\u0631\u062a \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a 8000 \u0628\u0627\u0634\u062f &#8211; \u0628\u0631 \u0627\u0633\u0627\u0633 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Flask \u0634\u0645\u0627) \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628.<br \/>\u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0632 \u06cc\u06a9 \u0641\u0627\u06a9\u062a\u0648\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0631\u0648\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0646\u0628\u0627\u0637 \u0645\u062f\u0644 \u0628\u0627\u06cc\u062f \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0637\u0648\u0644 \u0628\u06a9\u0634\u062f \u0648 \u0633\u067e\u0633 \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcampnlgzizjlmo6n6z2.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631 UI\" loading=\"lazy\" width=\"800\" height=\"245\" title=\"\"><\/p>\n<p>\u0648\u0644\u0627 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0627\u06cc\u0645\u06cc\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f (\u0645\u0634\u0631\u0648\u0637 \u0628\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u06af\u06cc\u0631\u0646\u062f\u0647 \u0645\u0627\u0644 \u0634\u0645\u0627 \u0628\u0627\u0634\u062f) \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0634\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u06cc\u0648\u0633\u062a Docx.<\/p>\n<p>\u0627\u06cc\u0646 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc AI \u0645\u0648\u0644\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0631\u0627\u06cc \u062a\u0642\u0648\u06cc\u062a \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u0628\u0627 \u062a\u0644\u0627\u0634 \u06a9\u0645\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f. \u0627\u062d\u0633\u0627\u0633 \u0631\u0627\u062d\u062a\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u062f \u0648 \u062f\u0631 \u0646\u0638\u0631\u0627\u062a \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u0628\u06af\u0630\u0627\u0631\u06cc\u062f. \u0645\u0645\u0646\u0648\u0646<\/p>\n<p>\u067e\u06cc\u0648\u0646\u062f GitHub: https:\/\/github.com\/amrs-tech\/invoice-reader<\/p>\n<p>\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0645\u0628\u0627\u0631\u06a9!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u0633\u0639\u06cc \u06a9\u0646\u06cc\u0645 \u0628\u0627 \u06a9\u0645\u06a9 \u0641\u0646\u0627\u0648\u0631\u06cc \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f\u06cc AI \u060c \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u0627\u0632 ChatGPT \u0628\u0631\u0627\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0627\u0648\u0644\u06cc\u0647 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u0645. \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 (\u06cc\u0627 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":99809,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-99808","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/99808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=99808"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/99808\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/99809"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=99808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=99808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=99808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}