{"id":53648,"date":"2025-08-19T11:05:49","date_gmt":"2025-08-19T01:05:49","guid":{"rendered":"https:\/\/www.cloudproinc.com.au\/?p=53648"},"modified":"2025-08-20T15:26:03","modified_gmt":"2025-08-20T05:26:03","slug":"simple-python-ai-app-with-llama-to-describe-images","status":"publish","type":"post","link":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/","title":{"rendered":"Simple Python AI App with Llama to Describe Images"},"content":{"rendered":"\n<p>Want a quick win with multimodal AI? In this post, you\u2019ll build a tiny Python app that uses a Llama vision model to look at an image and tell you what it is. We\u2019ll use <a href=\"https:\/\/ollama.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ollama <\/a>to run the model locally (no paid keys required), then call it from Python. By the end, you\u2019ll run the script on your machine and see real descriptions printed to your terminal.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-we-ll-build\">What we\u2019ll build<\/h2>\n\n\n\n<p>A command-line tool:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Input: an image file (JPEG\/PNG).<\/li>\n\n\n\n<li>Output: a short description of what\u2019s in the image, generated by a Llama multimodal model.<\/li>\n\n\n\n<li>Stack: Python + <code>ollama<\/code> (local LLM runtime) + Llama <strong>vision<\/strong> model.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"683\" height=\"1024\" data-src=\"\/wp-content\/uploads\/2025\/08\/Ollama-App-683x1024.png\" alt=\"\" class=\"wp-image-53649 lazyload\" data-srcset=\"\/wp-content\/uploads\/2025\/08\/Ollama-App-683x1024.png 683w, \/wp-content\/uploads\/2025\/08\/Ollama-App-200x300.png 200w, \/wp-content\/uploads\/2025\/08\/Ollama-App-768x1152.png 768w, \/wp-content\/uploads\/2025\/08\/Ollama-App-980x1470.png 980w, \/wp-content\/uploads\/2025\/08\/Ollama-App-480x720.png 480w, \/wp-content\/uploads\/2025\/08\/Ollama-App.png 1024w\" data-sizes=\"(max-width: 683px) 100vw, 683px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 683px; --smush-placeholder-aspect-ratio: 683\/1024;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-prerequisites\">Prerequisites<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/category\/python\/\"><strong>Python<\/strong> <\/a>3.9+ and <code>pip<\/code><\/li>\n\n\n\n<li><strong>Ollama<\/strong> installed (macOS, Windows, or Linux):\n<ul class=\"wp-block-list\">\n<li>Download and install from the Ollama site, then ensure <code>ollama<\/code> works in your terminal: <code>ollama --version<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Pull a <strong>Llama vision<\/strong> model. As of writing, a good default is: <code>ollama pull llama3.2-vision<\/code> If your Ollama catalog differs, any \u201c<em>vision<\/em>\u201d or \u201c<em>llava<\/em>\u201d compatible model works. You can list models with <code>ollama list<\/code>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-create-a-python-virtual-environment\">Create a Python virtual environment<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-adce9169f892d0e06dbe09bee4f4a27f\"><code>python -m venv .venv\n# Windows\n.venv\\Scripts\\activate\n# macOS\/Linux\nsource .venv\/bin\/activate<\/code><\/pre>\n\n\n\n<p>Install dependencies:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b76c8f5fd5ad115640c6bdd293daa1e4\"><code>pip install ollama pillow<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ollama<\/code> is the official Python client for the local Ollama server.<\/li>\n\n\n\n<li><code>Pillow<\/code> (PIL) lets us open\/validate image files and optionally resize\/convert.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-python-app\">The Python app<\/h2>\n\n\n\n<p>Create <code>describe_image.py<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-016d2844774715fe93e415236c0dc90d\"><code>import sys\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom PIL import Image\nimport ollama  # pip install ollama\n\nMODEL_NAME = \"llama3.2-vision\"\n\nPROMPT_TEMPLATE = \"\"\"You are an assistant that describes images clearly and concisely.\nReturn 1\u20133 sentences describing the main subject and notable details.\nBe specific but avoid guessing text that isn\u2019t legible.\"\"\"\n\ndef validate_image(path: Path) -&gt; Optional&#91;Path]:\n    if not path.exists():\n        print(f\"Error: file not found: {path}\")\n        return None\n    try:\n        with Image.open(path) as im:\n            im.verify()  # quick integrity check\n        return path\n    except Exception as e:\n        print(f\"Error: not a valid image ({e})\")\n        return None\n\ndef describe_image(image_path: Path) -&gt; str:\n    \"\"\"\n    Sends the image to the local Llama vision model via Ollama and returns the description.\n    \"\"\"\n    # Ollama accepts an array of messages; attach the image path on the user message.\n    response = ollama.chat(\n        model=MODEL_NAME,\n        messages=&#91;{\n            \"role\": \"user\",\n            \"content\": PROMPT_TEMPLATE,\n            \"images\": &#91;str(image_path)]\n        }],\n        options={\n            # Tweak generation if you like:\n            \"temperature\": 0.2,\n            \"num_predict\": 256\n        }\n    )\n    # The assistant's message is in response&#91;'message']&#91;'content']\n    return response&#91;\"message\"]&#91;\"content\"].strip()\n\ndef main():\n    if len(sys.argv) &lt; 2:\n        print(\"Usage: python describe_image.py &lt;path-to-image&gt;\")\n        sys.exit(1)\n\n    image_path = Path(sys.argv&#91;1])\n    valid = validate_image(image_path)\n    if not valid:\n        sys.exit(2)\n\n    print(f\"Using model: {MODEL_NAME}\")\n    print(f\"Analyzing image: {valid}\\n\")\n\n    try:\n        description = describe_image(valid)\n        print(\"Description:\\n\")\n        print(description)\n    except ollama.ResponseError as e:\n        print(f\"Ollama error: {e}\")\n        print(\"Tip: Make sure the model is pulled and the Ollama service is running.\")\n        sys.exit(3)\n    except Exception as e:\n        print(f\"Unexpected error: {e}\")\n        sys.exit(4)\n\nif __name__ == \"__main__\":\n    main()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-the-code-does\">What the code does<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Validates<\/strong> the image path and ensures the file is actually an image.<\/li>\n\n\n\n<li><strong>Sends<\/strong> a message to the Llama vision model via <code>ollama.chat()<\/code>, attaching the image in the <code>images<\/code> array.<\/li>\n\n\n\n<li><strong>Prints<\/strong> the model\u2019s natural-language description.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-run-the-app\">Run the app<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Start (or ensure) the Ollama service is running. On most systems, Ollama runs as a background service after installation. If needed: <code>ollama serve<\/code> (Keep that window open, or run it as a service.)<\/li>\n\n\n\n<li>In another terminal where your virtual environment is active, run: <code>python describe_image.py .\/samples\/cat.jpg<\/code> Replace <code>.\/samples\/cat.jpg<\/code> with any local JPG\/PNG.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-example-output\">Example output<\/h3>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-08ddb5c955927a6807bcda6b18499f87\"><code>Using model: llama3.2-vision\nAnalyzing image: samples\/cat.jpg\n\nDescription:\n\nA brown tabby cat is sitting on a windowsill, looking slightly to the left. \nSunlight highlights the fur, and a blurred outdoor scene is visible beyond the glass.\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Your output will vary; that\u2019s normal. If the response looks too long or too vague, lower <code>temperature<\/code> or tighten the prompt (e.g., \u201cReturn a single concise sentence.\u201d).<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-troubleshooting\">Troubleshooting<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>Ollama error: model not found<\/code><\/strong><br>You likely didn\u2019t pull the model. Run: <code>ollama pull llama3.2-vision<\/code><\/li>\n\n\n\n<li><strong><code>Connection refused<\/code> or timeouts<\/strong><br>Ensure the Ollama server is running: <code>ollama serve<\/code> (or restart it).<br>On Windows\/macOS, try quitting\/relaunching the Ollama app.<\/li>\n\n\n\n<li><strong>Slow first run<\/strong><br>The first inference can be slower while weights are paged into memory. Subsequent runs are faster.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-extending-the-app\">Extending the app<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Batch mode:<\/strong> Loop over a folder and describe every image.<\/li>\n\n\n\n<li><strong>Structured output:<\/strong> Ask the model to return JSON (e.g., <code>{ \"objects\": [...], \"scene\": \"...\" }<\/code>) and parse it.<\/li>\n\n\n\n<li><strong>Confidence:<\/strong> Prompt the model to include uncertainty (e.g., \u201cIf unsure, say you\u2019re not certain.\u201d).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-recap\">Recap<\/h2>\n\n\n\n<p>You just built a tiny\u2014but powerful\u2014Python app that uses a local Llama vision model to describe images. With Ollama handling the model runtime and a few lines of Python, you can experiment with multimodal AI entirely on your machine. Try different images, tweak the prompt, and explore richer outputs like object lists or captions tailored for your use case.<\/p>\n\n\n\n<ul class=\"wp-block-yoast-seo-related-links yoast-seo-related-links\">\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/18\/build-a-multi-agent-assistant-in-python-with-the-openai-agents-sdk\/\">Build a Multi-Agent Assistant in Python with the OpenAI Agents SDK<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/07\/21\/integrating-azure-ai-vision-for-image-analysis-in-c-applications\/\">Integrating Azure AI Vision for Image Analysis in C# Applications<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/07\/25\/assigning-local-admins-to-windows-11-through-intune\/\">Assigning Local Admins to Windows 11 through Intune<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/07\/22\/generate-an-image-caption-with-azure-ai-vision-and-net\/\">Generate an Image Caption With Azure AI Vision and .NET<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/05\/01\/building-a-blazor-net-app-that-recognizes-images-with-openai\/\">Building a Blazor .NET App that Recognizes Images with OpenAI<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Want a quick win with multimodal AI? In this post, you\u2019ll build a tiny Python app that uses a Llama vision model to look at an image and tell you what it is. We\u2019ll use Ollama to run the model locally (no paid keys required), then call it from Python. By the end, you\u2019ll run [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":53662,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"Simple Python AI App with Llama to Describe Images","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[24,13,81],"tags":[],"class_list":["post-53648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-blog","category-llama"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Simple Python AI App with Llama to Describe Images - CPI Consulting<\/title>\n<meta name=\"description\" content=\"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simple Python AI App with Llama to Describe Images\" \/>\n<meta property=\"og:description\" content=\"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/\" \/>\n<meta property=\"og:site_name\" content=\"CPI Consulting\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-19T01:05:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-20T05:26:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudproinc.com.au\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"CPI Staff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"CPI Staff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/\"},\"author\":{\"name\":\"CPI Staff\",\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#\\\/schema\\\/person\\\/192eeeb0ce91062126ce3822ae88fe6e\"},\"headline\":\"Simple Python AI App with Llama to Describe Images\",\"datePublished\":\"2025-08-19T01:05:49+00:00\",\"dateModified\":\"2025-08-20T05:26:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/\"},\"wordCount\":517,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/simple-python-ai-app-with-llama-to-describe-images-1.png\",\"articleSection\":[\"AI\",\"Blog\",\"Llama\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/\",\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/\",\"name\":\"Simple Python AI App with Llama to Describe Images - CPI Consulting\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/simple-python-ai-app-with-llama-to-describe-images-1.png\",\"datePublished\":\"2025-08-19T01:05:49+00:00\",\"dateModified\":\"2025-08-20T05:26:03+00:00\",\"description\":\"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#primaryimage\",\"url\":\"\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/simple-python-ai-app-with-llama-to-describe-images-1.png\",\"contentUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/simple-python-ai-app-with-llama-to-describe-images-1.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/08\\\/19\\\/simple-python-ai-app-with-llama-to-describe-images\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cloudproinc.com.au\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simple Python AI App with Llama to Describe Images\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#website\",\"url\":\"https:\\\/\\\/cloudproinc.com.au\\\/\",\"name\":\"Cloud Pro Inc - CPI Consulting Pty Ltd\",\"description\":\"Cloud, AI &amp; Cybersecurity Consulting | Melbourne\",\"publisher\":{\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cloudproinc.com.au\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#organization\",\"name\":\"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd\",\"url\":\"https:\\\/\\\/cloudproinc.com.au\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/favfinalfile.png\",\"contentUrl\":\"\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/favfinalfile.png\",\"width\":500,\"height\":500,\"caption\":\"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd\"},\"image\":{\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/cloudproinc.com.au\\\/#\\\/schema\\\/person\\\/192eeeb0ce91062126ce3822ae88fe6e\",\"name\":\"CPI Staff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"caption\":\"CPI Staff\"},\"sameAs\":[\"http:\\\/\\\/www.cloudproinc.com.au\"],\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/author\\\/cpiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Simple Python AI App with Llama to Describe Images - CPI Consulting","description":"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/","og_locale":"en_US","og_type":"article","og_title":"Simple Python AI App with Llama to Describe Images","og_description":"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.","og_url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/","og_site_name":"CPI Consulting","article_published_time":"2025-08-19T01:05:49+00:00","article_modified_time":"2025-08-20T05:26:03+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/www.cloudproinc.com.au\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","type":"image\/png"}],"author":"CPI Staff","twitter_card":"summary_large_image","twitter_misc":{"Written by":"CPI Staff","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#article","isPartOf":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/"},"author":{"name":"CPI Staff","@id":"https:\/\/cloudproinc.com.au\/#\/schema\/person\/192eeeb0ce91062126ce3822ae88fe6e"},"headline":"Simple Python AI App with Llama to Describe Images","datePublished":"2025-08-19T01:05:49+00:00","dateModified":"2025-08-20T05:26:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/"},"wordCount":517,"commentCount":0,"publisher":{"@id":"https:\/\/cloudproinc.com.au\/#organization"},"image":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","articleSection":["AI","Blog","Llama"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/","url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/","name":"Simple Python AI App with Llama to Describe Images - CPI Consulting","isPartOf":{"@id":"https:\/\/cloudproinc.com.au\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","datePublished":"2025-08-19T01:05:49+00:00","dateModified":"2025-08-20T05:26:03+00:00","description":"Create a Simple Python AI App with Llama to Describe Images effortlessly. No paid keys needed, just Python and Ollama.","breadcrumb":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#primaryimage","url":"\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","contentUrl":"\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/19\/simple-python-ai-app-with-llama-to-describe-images\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudproinc.com.au\/"},{"@type":"ListItem","position":2,"name":"Simple Python AI App with Llama to Describe Images"}]},{"@type":"WebSite","@id":"https:\/\/cloudproinc.com.au\/#website","url":"https:\/\/cloudproinc.com.au\/","name":"Cloud Pro Inc - CPI Consulting Pty Ltd","description":"Cloud, AI &amp; Cybersecurity Consulting | Melbourne","publisher":{"@id":"https:\/\/cloudproinc.com.au\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudproinc.com.au\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudproinc.com.au\/#organization","name":"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd","url":"https:\/\/cloudproinc.com.au\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudproinc.com.au\/#\/schema\/logo\/image\/","url":"\/wp-content\/uploads\/2022\/01\/favfinalfile.png","contentUrl":"\/wp-content\/uploads\/2022\/01\/favfinalfile.png","width":500,"height":500,"caption":"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd"},"image":{"@id":"https:\/\/cloudproinc.com.au\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudproinc.com.au\/#\/schema\/person\/192eeeb0ce91062126ce3822ae88fe6e","name":"CPI Staff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","caption":"CPI Staff"},"sameAs":["http:\/\/www.cloudproinc.com.au"],"url":"https:\/\/www.cloudproinc.com.au\/index.php\/author\/cpiadmin\/"}]}},"jetpack_featured_media_url":"\/wp-content\/uploads\/2025\/08\/simple-python-ai-app-with-llama-to-describe-images-1.png","jetpack-related-posts":[{"id":57425,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2026\/04\/12\/meta-muse-spark-promises-personal-superintelligence-three-questions-every-cio-should-ask-first\/","url_meta":{"origin":53648,"position":0},"title":"Meta Muse Spark Promises &#8220;Personal Superintelligence.&#8221; Three Questions Every CIO Should Ask First","author":"CPI Staff","date":"April 12, 2026","format":false,"excerpt":"On April 8, Meta Superintelligence Labs unveiled Muse Spark \u2014 their first model in a new Muse series \u2014 and framed it as the opening move toward \"personal superintelligence.\" The pitch is bold: an AI assistant that does not just answer questions, but understands your world because it is built\u2026","rel":"","context":"In &quot;AI for Business &amp; AI Strategy&quot;","block_context":{"text":"AI for Business &amp; AI Strategy","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai-for-business-ai-strategy\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png 1x, \/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png 1.5x, \/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png 2x, \/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png 3x, \/wp-content\/uploads\/2026\/04\/meta-muse-spark-personal-superintelligence-cio-questions-cover.png 4x"},"classes":[]},{"id":53341,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/05\/01\/building-a-blazor-net-app-that-recognizes-images-with-openai\/","url_meta":{"origin":53648,"position":1},"title":"Building a Blazor .NET App that Recognizes Images with OpenAI","author":"CPI Staff","date":"May 1, 2025","format":false,"excerpt":"In this blog post, we\u2019ll show you how to Build a Blazor .NET App that Recognizes Images with OpenAI. You\u2019ll see how we securely upload image files, send them to OpenAI\u2019s API, and return a natural-language response\u2014seamlessly integrated into a modern web interface. This example highlights how CPI Consulting applies\u2026","rel":"","context":"In &quot;.NET&quot;","block_context":{"text":".NET","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/net\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/05\/Building-a-Blazor-NET-App-that-Recognizes-Images-with-OpenAI-e1746073555343.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/05\/Building-a-Blazor-NET-App-that-Recognizes-Images-with-OpenAI-e1746073555343.png 1x, \/wp-content\/uploads\/2025\/05\/Building-a-Blazor-NET-App-that-Recognizes-Images-with-OpenAI-e1746073555343.png 1.5x, \/wp-content\/uploads\/2025\/05\/Building-a-Blazor-NET-App-that-Recognizes-Images-with-OpenAI-e1746073555343.png 2x"},"classes":[]},{"id":53640,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/18\/build-a-multi-agent-assistant-in-python-with-the-openai-agents-sdk\/","url_meta":{"origin":53648,"position":2},"title":"Build a Multi-Agent Assistant in Python with the OpenAI Agents SDK","author":"CPI Staff","date":"August 18, 2025","format":false,"excerpt":"This post \"Build a Multi-Agent Assistant in Python with the OpenAI Agents SDK\" shows how to build an AI agent that can (a) generate secure passwords, (b) tell the current time, and (c) hand off coding questions to a Python-tutor sub-agent. Along the way, we\u2019ll cover what the Agents SDK\u2026","rel":"","context":"In &quot;AI Agents&quot;","block_context":{"text":"AI Agents","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai-agents\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png 1x, \/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png 1.5x, \/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png 2x, \/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png 3x, \/wp-content\/uploads\/2025\/08\/build-a-multi-agent-assistant-in-python-with-the-openai-agen-1.png 4x"},"classes":[]},{"id":53914,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/21\/run-pytorch-in-net-with-torchsharp\/","url_meta":{"origin":53648,"position":3},"title":"Run PyTorch in .NET with TorchSharp","author":"CPI Staff","date":"September 21, 2025","format":false,"excerpt":"Build and ship PyTorch models in .NET using TorchSharp, ONNX, or a Python service. Practical steps, code, and deployment tips for teams on Windows, Linux, and containers.","rel":"","context":"In &quot;.NET&quot;","block_context":{"text":".NET","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/net\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 1x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 1.5x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 2x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 3x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 4x"},"classes":[]},{"id":53867,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/15\/alpaca-vs-phi-3-for-fine-tuning\/","url_meta":{"origin":53648,"position":4},"title":"Alpaca vs Phi-3 for Fine-Tuning","author":"CPI Staff","date":"September 15, 2025","format":false,"excerpt":"A practical comparison of Alpaca and Microsoft Phi-3 for instruction fine-tuning, with clear guidance, code snippets, and a decision checklist for teams balancing accuracy, cost, and compliance.","rel":"","context":"In &quot;Blog&quot;","block_context":{"text":"Blog","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/blog\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png 1x, \/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png 1.5x, \/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png 2x, \/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png 3x, \/wp-content\/uploads\/2025\/09\/alpaca-vs-phi-3-for-instruction-fine-tuning-in-practice.png 4x"},"classes":[]},{"id":53910,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/21\/build-a-chat-bot-with-streamlit\/","url_meta":{"origin":53648,"position":5},"title":"Build a Chat Bot with Streamlit","author":"CPI Staff","date":"September 21, 2025","format":false,"excerpt":"A practical, friendly guide to designing, building, and shipping a Streamlit chat bot with modern LLMs, retrieval, and secure deployment for teams.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 1x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 1.5x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 2x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 3x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/comments?post=53648"}],"version-history":[{"count":1,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53648\/revisions"}],"predecessor-version":[{"id":53650,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53648\/revisions\/53650"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/media\/53662"}],"wp:attachment":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/media?parent=53648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/categories?post=53648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/tags?post=53648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}