{"id":606053,"date":"2024-01-24T17:00:00","date_gmt":"2024-01-24T14:00:00","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/"},"modified":"2024-01-24T17:00:00","modified_gmt":"2024-01-24T14:00:00","slug":"generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/","title":{"rendered":"#Generate image alt text at scale with AI: A 7-step guide for SEOs"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a2eaa3a8ddd7\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a2eaa3a8ddd7\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Use_image-to-text_and_text-to-text_AI_to_efficiently_generate_quality_alt_text_at_scale\" >Use image-to-text and text-to-text AI to efficiently generate quality alt text at scale<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Generating_image_alt_text_matters_for_accessibility_and_SEO\" >Generating image alt text matters for accessibility and SEO<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_1_Find_images_with_blank_alt_text_to_optimize\" >Step 1: Find images with blank alt text to optimize<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_2_Download_the_images_ready_for_BLIP\" >Step 2: Download the images ready for BLIP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_3_Install_the_image-to-text_interpreter_BLIP\" >Step 3: Install the image-to-text interpreter (BLIP)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_4_Create_text_captions_via_BLIP_for_your_downloaded_images\" >Step 4: Create text captions (via BLIP) for your downloaded images<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_5_Organize_and_make_sense_of_the_output\" >Step 5: Organize and make sense of the output<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_6_Filter_the_generated_captions_via_ChatGPT\" >Step 6: Filter the generated captions via ChatGPT<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Step_7_Communicate_with_your_web_developer\" >Step 7: Communicate with your web developer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/buradabiliyorum.com\/en\/generate-image-alt-text-at-scale-with-ai-a-7-step-guide-for-seos\/#Leverage_AI_to_efficiently_create_alt_text_at_scale\" >Leverage AI to efficiently create alt text at scale<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"subhead\" itemprop=\"alternativeHeadline\"><span class=\"ez-toc-section\" id=\"Use_image-to-text_and_text-to-text_AI_to_efficiently_generate_quality_alt_text_at_scale\"><\/span>Use image-to-text and text-to-text AI to efficiently generate quality alt text at scale <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<div class=\"bialty-container\">\nImage alt text is important for accessibility and beneficial for SEO. But if you have lots of images on your website, manually writing alt text for all of them will be time-consuming. This article is a step-by-step guide for using AI to generate alt text automatically at scale.<\/p>\n<ul>\n<li>We will use Screaming Frog to identify images with missing alt text across a website.\u00a0<\/li>\n<li>Then, we\u2019ll leverage an image captioning AI called BLIP to create text de<a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">script<\/a>ions of images automatically.\u00a0<\/li>\n<li>To refine the AI-generated captions, we\u2019ll use ChatGPT.\u00a0<\/li>\n<li>Finally, we\u2019ll hand off the alt text to a developer to link the alt text with the appropriate images. <\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"h-generating-image-alt-text-matters-for-accessibility-and-seo\"><span class=\"ez-toc-section\" id=\"Generating_image_alt_text_matters_for_accessibility_and_SEO\"><\/span>Generating image alt text matters for accessibility and SEO<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Alt text is the text that loads when an image fails to load. Alt text also is what screen readers use to produce audio descriptions of images for visually impaired users.<\/p>\n<p><!-- \/1038259\/SEL_Post-text --><\/p>\n<div id=\"div-gpt-ad-1693000027709-0\"><\/div>\n<div id=\"post-break\"><\/div>\n<p>You might be asking, \u201cAlt text for SEO has minimal impact, so why bother?\u201d Minimal impact is better than none. And using AI makes the task efficient and cost-effective.\u00a0The initial setup may take some time, but the ongoing effort is minimized. <\/p>\n<p>Here are the seven steps for using AI to generate image alt text at scale:<\/p>\n<ul>\n<li><strong>Step 1:<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-1-find-images-with-blank-alt-text-to-optimize\">Find images with blank alt text to optimize<\/a>.<\/li>\n<li><strong>Step 2<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-2-download-the-images-ready-for-blip\">Download the images ready for BLIP<\/a>.<\/li>\n<li><strong>Step 3<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-3-install-the-image-to-text-interpreter-blip\">Install the image-to-text interpreter (BLIP)<\/a>.<\/li>\n<li><strong>Step 4<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-4-create-text-captions-via-blip-for-your-downloaded-images\">Create text captions (via BLIP) for your downloaded images<\/a>.<\/li>\n<li><strong>Step 5<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-5-organize-and-make-sense-of-the-output\">Organize and make sense of the output<\/a>.<\/li>\n<li><strong>Step 6<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-6-filter-the-generated-captions-via-chatgpt\">Filter the generated captions via ChatGPT<\/a>.<\/li>\n<li><strong>Step 7<\/strong>: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"#h-step-7-communicate-with-your-web-developer\">Communicate with your web developer<\/a>.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"h-step-1-find-images-with-blank-alt-text-to-optimize\"><span class=\"ez-toc-section\" id=\"Step_1_Find_images_with_blank_alt_text_to_optimize\"><\/span>Step 1: Find images with blank alt text to optimize<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This step is fairly simple. We will crawl a site and extract all the image embeds that do not have alt text. In this case, we\u2019re going to look at the Classic British Hotels website.\u00a0<\/p>\n<p>This site was chosen for the demo because it\u2019s not too large and is based on WordPress, a platform familiar to most SEOs. Additionally, this site displays images well, even with JavaScript disabled, enhancing accessibility for our purposes. <\/p>\n<p>Some images lack alt text, but they seem straightforward to describe in context, which is important when working with AI that may not recognize specific niche products.<\/p>\n<p>Crawl the site with Screaming Frog to isolate images with missing alt text. Screaming Frog has an official guide on <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.screamingfrog.co.uk\/how-to-find-missing-image-alt-text\/\">isolating missing alt text<\/a>, which we\u2019ll follow for the most part.<\/p>\n<p>Let\u2019s launch the crawler:<\/p>\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{ \" core false image data-wp-interactive class=\"aligncenter size-full wp-lightbox-container\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1570\" height=\"873\" data-wp-effect--setstylesonresize=\"effects.core.image.setStylesOnResize\" data-wp-effect=\"effects.core.image.setButtonStyles\" data-wp-init=\"effects.core.image.initOriginImage\" data-wp-on--click=\"actions.core.image.showLightbox\" data-wp-on--load=\"actions.core.image.handleLoad\" alt=\"Screaming Frog Crawl Launched\" class=\"wp-image-436778\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched.png 1570w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-600x334.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-800x445.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-200x111.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-768x427.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-1536x854.png 1536w\" data-lazy-sizes=\"(max-width: 1570px) 100vw, 1570px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched.png\"><noscript><img fetchpriority=\"high\" decoding=\"async\" width=\"1570\" height=\"873\" data-wp-effect--setstylesonresize=\"effects.core.image.setStylesOnResize\" data-wp-effect=\"effects.core.image.setButtonStyles\" data-wp-init=\"effects.core.image.initOriginImage\" data-wp-on--click=\"actions.core.image.showLightbox\" data-wp-on--load=\"actions.core.image.handleLoad\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched.png\" alt=\"Screaming Frog Crawl Launched\" class=\"wp-image-436778\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched.png 1570w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-600x334.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-800x445.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-200x111.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-768x427.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/1-Screaming-Frog-Crawl-Launched-1536x854.png 1536w\" sizes=\"(max-width: 1570px) 100vw, 1570px\"><\/noscript><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge image: Screaming Frog Crawl Launched\" data-wp-on--click=\"actions.core.image.showLightbox\" data-wp-style--right=\"context.core.image.imageButtonRight\" data-wp-style--top=\"context.core.image.imageButtonTop\"><br \/>\n            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\"><path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path><\/svg><\/button>        <\/p>\n<div data-wp-body=\"\" class=\"wp-lightbox-overlay zoom\" data-wp-bind--role=\"selectors.core.image.roleAttribute\" data-wp-bind--aria-label=\"selectors.core.image.dialogLabel\" data-wp-class--initialized=\"context.core.image.initialized\" data-wp-class--active=\"context.core.image.lightboxEnabled\" data-wp-class--hideanimationenabled=\"context.core.image.hideAnimationEnabled\" data-wp-bind--aria-modal=\"selectors.core.image.ariaModal\" data-wp-effect=\"effects.core.image.initLightbox\" data-wp-on--keydown=\"actions.core.image.handleKeydown\" data-wp-on--touchstart=\"actions.core.image.handleTouchStart\" data-wp-on--touchmove=\"actions.core.image.handleTouchMove\" data-wp-on--touchend=\"actions.core.image.handleTouchEnd\" data-wp-on--click=\"actions.core.image.hideLightbox\" tabindex=\"-1\">\n                <button type=\"button\" aria-label=\"Close\" style=\"fill: #000\" class=\"close-button\" data-wp-on--click=\"actions.core.image.hideLightbox\"><br \/>\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\" width=\"20\" height=\"20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z\"><\/path><\/svg><\/button><\/p>\n<div class=\"lightbox-image-container\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full responsive-image\"><img decoding=\"async\" data-wp-bind--src=\"https:\/\/searchengineland.com\/context.core.image.imageCurrentSrc\" data-wp-style--object-fit=\"selectors.core.image.lightboxObjectFit\" src=\"\" alt=\"Screaming Frog Crawl Launched\" class=\"wp-image-436778\"><\/figure>\n<\/div>\n<\/div>\n<div class=\"lightbox-image-container\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full enlarged-image\"><img decoding=\"async\" data-wp-bind--src=\"https:\/\/searchengineland.com\/selectors.core.image.enlargedImgSrc\" data-wp-style--object-fit=\"selectors.core.image.lightboxObjectFit\" src=\"\" alt=\"Screaming Frog Crawl Launched\" class=\"wp-image-436778\"><\/figure>\n<\/div>\n<\/div>\n<div class=\"scrim\" style=\"background-color: #fff\" aria-hidden=\"true\"><\/div>\n<\/p><\/div>\n<\/figure>\n<\/div>\n<p>Once the crawl is complete, export the addresses of images that are missing alt text:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1962\" height=\"1144\" alt=\"Export Images Missing Alt Text\" class=\"wp-image-436779\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text.png 1962w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-580x338.png.webp 580w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-800x466.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-194x113.png.webp 194w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-768x448.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-1536x896.png 1536w\" data-lazy-sizes=\"(max-width: 1962px) 100vw, 1962px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1962\" height=\"1144\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text.png\" alt=\"Export Images Missing Alt Text\" class=\"wp-image-436779\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text.png 1962w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-580x338.png.webp 580w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-800x466.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-194x113.png.webp 194w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-768x448.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/2-Export-Images-Missing-Alt-Text-1536x896.png 1536w\" sizes=\"auto, (max-width: 1962px) 100vw, 1962px\"><\/noscript><\/figure>\n<\/div>\n<p>Be sure to click the <em>Export<\/em> button to have a local record (CSV \/ Excel) of all the images missing alt text.<\/p>\n<p>We now have the addresses of all images missing their alt text. To run them through a locally installed AI (BLIP), which will interpret these images, we need to download them all. In this case, there are just over 230 images.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-step-2-download-the-images-ready-for-blip\"><span class=\"ez-toc-section\" id=\"Step_2_Download_the_images_ready_for_BLIP\"><\/span>Step 2: Download the images ready for BLIP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You\u2019ll need to copy all the image URLs from your \u201cimages_missing_alt_text\u201d file (Column A). paste them into a Notepad (.txt) file, and then save.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1126\" height=\"983\" alt=\"Move Missing Alt Image URLs to Txt File\" class=\"wp-image-436780\" style=\"width:629px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File.png 1126w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-387x338.png.webp 387w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-687x600.png.webp 687w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-129x113.png.webp 129w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-768x670.png.webp 768w\" data-lazy-sizes=\"(max-width: 1126px) 100vw, 1126px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1126\" height=\"983\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File.png\" alt=\"Move Missing Alt Image URLs to Txt File\" class=\"wp-image-436780\" style=\"width:629px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File.png 1126w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-387x338.png.webp 387w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-687x600.png.webp 687w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-129x113.png.webp 129w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/3-Move-Missing-Alt-Image-URLs-to-Txt-File-768x670.png.webp 768w\" sizes=\"auto, (max-width: 1126px) 100vw, 1126px\"><\/noscript><\/figure>\n<\/div>\n<p>For the next part, I like using the Firefox add-on called <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/addons.mozilla.org\/en-GB\/firefox\/addon\/downthemall\/\">DownThemAll!<\/a>, which is also <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/chromewebstore.google.com\/detail\/downthemall\/nljkibfhlpcnanjgbnlnbjecgicbjkge\">available for Chrome<\/a>. Once the browser plugin is installed, open your browser. Right-click to open the context menu, then run the DownThemAll manager:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1129\" height=\"1408\" alt=\"DownThemAll Open Manager\" class=\"wp-image-436781\" style=\"width:630px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager.png 1129w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-271x338.png.webp 271w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-481x600.png.webp 481w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-91x113.png.webp 91w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-768x958.png.webp 768w\" data-lazy-sizes=\"(max-width: 1129px) 100vw, 1129px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1129\" height=\"1408\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager.png\" alt=\"DownThemAll Open Manager\" class=\"wp-image-436781\" style=\"width:630px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager.png 1129w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-271x338.png.webp 271w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-481x600.png.webp 481w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-91x113.png.webp 91w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/4-DownThem-All-Open-Manager-768x958.png.webp 768w\" sizes=\"auto, (max-width: 1129px) 100vw, 1129px\"><\/noscript><\/figure>\n<\/div>\n<p>Right-click on the manager\u2019s background and choose <em>Import from file<\/em>.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1670\" height=\"1701\" alt=\"DownThemAll Import from File\" class=\"wp-image-436782\" style=\"width:613px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File.png 1670w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-332x338.png.webp 332w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-589x600.png.webp 589w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-111x113.png.webp 111w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-768x782.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-1508x1536.png 1508w\" data-lazy-sizes=\"(max-width: 1670px) 100vw, 1670px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1670\" height=\"1701\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File.png\" alt=\"DownThemAll Import from File\" class=\"wp-image-436782\" style=\"width:613px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File.png 1670w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-332x338.png.webp 332w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-589x600.png.webp 589w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-111x113.png.webp 111w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-768x782.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/5-DownThemAll-Import-from-File-1508x1536.png 1508w\" sizes=\"auto, (max-width: 1670px) 100vw, 1670px\"><\/noscript><\/figure>\n<\/div>\n<p>Select the text file that you created earlier. Once you do that, you can then finalize some settings before initiating the batch download:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1722\" height=\"1234\" alt=\"DownThemAll Queue Image Downloads\" class=\"wp-image-436783\" style=\"width:631px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads.png 1722w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-472x338.png.webp 472w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-800x573.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-158x113.png.webp 158w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-768x550.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-1536x1101.png 1536w\" data-lazy-sizes=\"(max-width: 1722px) 100vw, 1722px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1722\" height=\"1234\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads.png\" alt=\"DownThemAll Queue Image Downloads\" class=\"wp-image-436783\" style=\"width:631px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads.png 1722w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-472x338.png.webp 472w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-800x573.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-158x113.png.webp 158w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-768x550.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/6-DownThemAll-Queue-Image-Downloads-1536x1101.png 1536w\" sizes=\"auto, (max-width: 1722px) 100vw, 1722px\"><\/noscript><\/figure>\n<\/div>\n<p>I like to specify a subfolder so that the downloaded images are grouped together. <\/p>\n<p>DownThemAll! will create this subfolder within your <em>Downloads<\/em> folder, then place all the images inside. Click the <em>Download<\/em> button.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1275\" alt=\"DownThemAll Process Image Downloads\" class=\"wp-image-436784\" style=\"width:724px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-543x338.png.webp 543w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-800x498.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-182x113.png.webp 182w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-768x478.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-1536x956.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1275\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads.png.webp\" alt=\"DownThemAll Process Image Downloads\" class=\"wp-image-436784\" style=\"width:724px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-543x338.png.webp 543w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-800x498.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-182x113.png.webp 182w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-768x478.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/7-DownThemAll-Process-Image-Downloads-1536x956.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>All of the images should now be downloaded.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1171\" alt=\"Downloaded Images\" class=\"wp-image-436785\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-591x338.png.webp 591w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-800x457.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-198x113.png.webp 198w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-768x439.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-1536x878.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1171\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images.png.webp\" alt=\"Downloaded Images\" class=\"wp-image-436785\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-591x338.png.webp 591w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-800x457.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-198x113.png.webp 198w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-768x439.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/8-Downloaded-Images-1536x878.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"h-step-3-install-the-image-to-text-interpreter-blip\"><span class=\"ez-toc-section\" id=\"Step_3_Install_the_image-to-text_interpreter_BLIP\"><\/span>Step 3: Install the image-to-text interpreter (BLIP)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now that we have a folder full of images that don\u2019t have alt text, we need a way to transmute the images into short snippets of text, for descriptive image captions.\u00a0<\/p>\n<p>I\u2019ve explored using ChatGPT for on-page product descriptions before, but it\u2019s not suitable for our needs. OpenAI, the creators of ChatGPT, focus on text-to-text AI, while we require image-to-text AI. For this purpose, we can use <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/huggingface.co\/docs\/transformers\/model_doc\/blip\">BLIP<\/a>.<\/p>\n<p>Since BLIP is simply a proposed model, we need a publicly accessible project that someone has produced using BLIP, something suitable for our purposes.\u00a0<\/p>\n<p>Using <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/git-scm.com\/\">Git<\/a>, we can clone the following project created by Cobanov: <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/cobanov\/image-captioning\">https:\/\/github.com\/cobanov\/image-captioning<\/a>. <\/p>\n<p>To do this, you will first have to install Git (<a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/git-scm.com\/book\/en\/v2\/Getting-Started-Installing-Git\">documentation here<\/a>) and then run a couple of commands (using the installed Git CMD) similar to:<\/p>\n<pre class=\"wp-block-code\"><code>cd c:\\git\ngit clone https:\/\/github.com\/cobanov\/image-captioning.git<\/code><\/pre>\n<p>Please note that the above assumes that you have created a folder named \u201cgit\u201d in your C: drive (Windows). Once executed, the project will be cloned to c:\\git\\image-captioning. <\/p>\n<p>You should also visit Cobanov\u2019s <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/cobanov\/image-captioning\">project page here<\/a>, then scroll down and read the <em>README<\/em> section, including the <em>Usage<\/em> sub-section.<\/p>\n<p>Note that this project relies upon <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.python.org\/downloads\/\">Python<\/a> and also requires you to install some Python modules that are not shipped with Python\u2019s (Windows) installer by default. I used <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.python.org\/downloads\/release\/python-3109\/\">Python version 3.10.9<\/a> for this demo.<\/p>\n<p>After connecting Windows Command Prompt to my Python install by <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.educative.io\/answers\/how-to-add-python-to-path-variable-in-windows\">amending the Windows PATH variable<\/a> (I believe Python also has options to do this as you install it), I needed to run some additional CMD commands to get everything working as I would like:<\/p>\n<pre class=\"wp-block-code\"><code>python -m pip install --upgrade tqdm\npython -m pip install --upgrade torch\npython -m pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https:\/\/download.pytorch.org\/whl\/cu118\npython -m pip install timm==0.4.12 transformers==4.17.0 fairscale==0.4.4 pycocoevalcap pillow<\/code><\/pre>\n<p>If you run one or two of the above commands and receive some errors, try not to worry too much. The referenced commands represent the sequence of module installations, which proved successful for me.\u00a0<\/p>\n<p>Since I use Python quite a lot, there may be other dependencies that are already satisfied by my Python install.\u00a0<\/p>\n<p>Later, if you run the project (we haven\u2019t reached that stage yet, in this article) and see errors relating to Modules not existing, or not being found, you should additionally install such modules.<\/p>\n<hr class=\"wp-block-separator has-text-color has-cyan-bluish-gray-color has-css-opacity has-cyan-bluish-gray-background-color has-background\"><!-- START INLINE FORM --><br \/>\n<!-- END INLINE FORM --><\/p>\n<hr class=\"wp-block-separator has-text-color has-cyan-bluish-gray-color has-css-opacity has-cyan-bluish-gray-background-color has-background\">\n<h2 class=\"wp-block-heading\" id=\"h-step-4-create-text-captions-via-blip-for-your-downloaded-images\"><span class=\"ez-toc-section\" id=\"Step_4_Create_text_captions_via_BLIP_for_your_downloaded_images\"><\/span>Step 4: Create text captions (via BLIP) for your downloaded images<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Your project folder should look similar to this one:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1819\" height=\"1181\" alt=\"Image Captioning GitProject Folder\" class=\"wp-image-436786\" style=\"width:744px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder.png 1819w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-521x338.png.webp 521w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-800x519.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-174x113.png.webp 174w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-768x499.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-1536x997.png 1536w\" data-lazy-sizes=\"(max-width: 1819px) 100vw, 1819px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1819\" height=\"1181\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder.png\" alt=\"Image Captioning GitProject Folder\" class=\"wp-image-436786\" style=\"width:744px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder.png 1819w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-521x338.png.webp 521w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-800x519.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-174x113.png.webp 174w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-768x499.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/9-Image-Captioning-Git-Project-Folder-1536x997.png 1536w\" sizes=\"auto, (max-width: 1819px) 100vw, 1819px\"><\/noscript><\/figure>\n<\/div>\n<p>My project folder has a couple of extra folders.\u00a0<\/p>\n<p>Since documentation for such projects is rarely perfect, I created my own notes in a <em>#Notes<\/em> folder.\u00a0<\/p>\n<p>Since the <em>images<\/em> folder contains proof of concept images to run against the AI (demo images) provided by the project author, I also created my own folder to place new images in, named <em>inputs<\/em>.<\/p>\n<p>I suggest you also create your own <em>inputs<\/em> folder so you don\u2019t get muddled up with the demo images. <\/p>\n<p>Also note that <em>checkpoints<\/em> may not exist until you run the project for the first time, which should trigger the download of a specified checkpoint\/data model.<\/p>\n<p>Once you have done all that, copy all of the images that you downloaded earlier (via DownThemAll) to the <em>inputs<\/em> folder:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"750\" alt=\"Image Captioning Git Project Inputs\" class=\"wp-image-436787\" style=\"width:712px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs.png.webp 1200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-541x338.png.webp 541w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-800x500.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-181x113.png.webp 181w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-768x480.png.webp 768w\" data-lazy-sizes=\"(max-width: 1200px) 100vw, 1200px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"750\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs.png.webp\" alt=\"Image Captioning Git Project Inputs\" class=\"wp-image-436787\" style=\"width:712px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs.png.webp 1200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-541x338.png.webp 541w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-800x500.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-181x113.png.webp 181w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/10-Image-Captioning-Git-Project-Inputs-768x480.png.webp 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\"><\/noscript><\/figure>\n<\/div>\n<p>Now it\u2019s time to execute our project. Open Windows Command Prompt and execute a couple of commands like this:<\/p>\n<pre class=\"wp-block-code\"><code>cd C:\\git\\image-captioning\npython inference.py -i C:\\git\\image-captioning\\inputs -b 238<\/code><\/pre>\n<p>Note that you may need to amend the above commands to point to the correct Git project install and image inputs folder if you have created your Git project with a location or structure different from mine.<\/p>\n<p>The \u201c-b 238\u201d part of the command is very important. The project and script need to be told how large the batch is. <\/p>\n<p>I have 238 images to caption in this instance, so the correct \u201c-b\u201d (batch) number is 238. You can ask the script to execute your images via numerous smaller batches.\u00a0<\/p>\n<p>For instance, if I wanted the script to save captions when it was halfway through and then again at the end, I could use \u201c-b 119\u201d since 119 is half of 238. <\/p>\n<p>Note that you need to be careful here. If you input a number that is not a factor of (i.e., cannot be evenly divided into) the total number of images, the script will crash. You have been warned!<\/p>\n<p>Let\u2019s attempt an execution:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1639\" height=\"489\" alt=\"Image Captioning Project Execution\" class=\"wp-image-436788\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution.png 1639w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-600x179.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-800x239.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-200x60.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-768x229.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-1536x458.png 1536w\" data-lazy-sizes=\"(max-width: 1639px) 100vw, 1639px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1639\" height=\"489\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution.png\" alt=\"Image Captioning Project Execution\" class=\"wp-image-436788\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution.png 1639w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-600x179.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-800x239.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-200x60.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-768x229.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/11-Image-Captioning-Project-Execution-1536x458.png 1536w\" sizes=\"auto, (max-width: 1639px) 100vw, 1639px\"><\/noscript><\/figure>\n<\/div>\n<p>Excellent, execution has been successful, and inference has commenced. All the images were found; this is exactly what we wanted to see.\u00a0<\/p>\n<p>If the script crashes and the number of images found is different from the total number of images within your <em>inputs<\/em> folder, then something is wrong with the format of your images.<\/p>\n<p>By experimenting with this project and its associated scripts, I have found that only JPG and PNG images are accepted.\u00a0<\/p>\n<ul>\n<li>You can use WebP images by simply changing their file extensions to \u201c.png.\u201d JPEG images will also be accepted if the file extensions are altered to \u201c.jpg\u201d (without the \u201ce\u201d). There\u2019s no need to make any actual changes to the images themselves.<\/li>\n<li>SVG images seem to be fundamentally incompatible and will not be accepted. (This AI is probably only capable of working with rasterized rather than vector-based images.)<\/li>\n<\/ul>\n<p>Once the script is running successfully, note that your own GPU (graphics card) and local machine are doing the work. You\u2019re not accessing an API to generate text from images, it\u2019s all happening on your workstation.\u00a0<\/p>\n<p>As such, a more powerful, more graphically capable PC is advised. I\u2019m running this on a machine with a 30-<a href=\"https:\/\/buradabiliyorum.com\/en\/category\/watch-movies-tv-seriess\/\" data-internallinksmanager029f6b8e52c=\"8\" title=\"Watch Movies &amp; TV Series\" target=\"_blank\" rel=\"noopener\">series<\/a> NVIDIA graphics card (and a Ryzen 7 5800X). The results didn\u2019t take long to come in (a minute or two), but the more images you have to analyze, the more it will take longer.<\/p>\n<p>Now that we have run the script, it\u2019s time to make sense of the output.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-step-5-organize-and-make-sense-of-the-output\"><span class=\"ez-toc-section\" id=\"Step_5_Organize_and_make_sense_of_the_output\"><\/span>Step 5: Organize and make sense of the output<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You should now have a generated text file like this one:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1151\" height=\"1413\" alt=\"Image Captions Output\" class=\"wp-image-436789\" style=\"width:620px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output.png 1151w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-275x338.png.webp 275w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-489x600.png.webp 489w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-92x113.png.webp 92w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-768x943.png.webp 768w\" data-lazy-sizes=\"(max-width: 1151px) 100vw, 1151px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1151\" height=\"1413\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output.png\" alt=\"Image Captions Output\" class=\"wp-image-436789\" style=\"width:620px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output.png 1151w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-275x338.png.webp 275w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-489x600.png.webp 489w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-92x113.png.webp 92w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/12-Image-Captions-Output-768x943.png.webp 768w\" sizes=\"auto, (max-width: 1151px) 100vw, 1151px\"><\/noscript><\/figure>\n<\/div>\n<p>The output may look intimidating, but it\u2019s simply a comma-separated list that can be easily handled in Microsoft Excel (or similar). Start by copying the entire contents of the notepad file and then pasting them as values into a fresh Excel sheet:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1266\" height=\"1346\" alt=\"Image Captions Pasted Excel\" class=\"wp-image-436790\" style=\"width:609px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel.png 1266w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-318x338.png.webp 318w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-564x600.png.webp 564w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-106x113.png.webp 106w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-768x817.png.webp 768w\" data-lazy-sizes=\"(max-width: 1266px) 100vw, 1266px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1266\" height=\"1346\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel.png\" alt=\"Image Captions Pasted Excel\" class=\"wp-image-436790\" style=\"width:609px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel.png 1266w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-318x338.png.webp 318w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-564x600.png.webp 564w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-106x113.png.webp 106w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/13-Image-Captions-Pasted-Excel-768x817.png.webp 768w\" sizes=\"auto, (max-width: 1266px) 100vw, 1266px\"><\/noscript><\/figure>\n<\/div>\n<p>We need to separate the image file paths (local) from the image captions. To do this, we must create a couple of formulas in columns B and C.\u00a0<\/p>\n<p>There\u2019s also a way to do this using the <em>Text to Columns<\/em> entry in the <em>Data<\/em> tab. However, this data is split by \u201c, \u201d (comma space) rather than a single character, so for our purposes, formulas will work better. (This also evades potential complications where image captions contain commas.)<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1114\" alt=\"Image-Captions-Formulae-to-Separate-Data\" class=\"wp-image-436791\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-600x326.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-800x435.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-200x109.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-768x418.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-1536x835.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1114\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data.png.webp\" alt=\"Image-Captions-Formulae-to-Separate-Data\" class=\"wp-image-436791\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-600x326.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-800x435.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-200x109.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-768x418.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/14-Image-Captions-Formulae-to-Separate-Data-1536x835.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>Assuming the pasted data resides in Column A, opening from cell A1, the formula that you need for cell B1 is:<\/p>\n<p><code>=LEFT(A1, FIND(\", \", A1) - 1)<\/code><\/p>\n<p>The formula which you need for cell C1 is:<\/p>\n<p><code>=MID(A1, FIND(\", \", A1) + 2, LEN(A1))<\/code><\/p>\n<p>Each formula can be copied down its column (B or C) until the total data population is achieved. Once this is done, we should correct the casing of the generated image captions.\u00a0<\/p>\n<p>To emulate sentence casing, we should capitalize the first letter of each text string contained within column C:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1477\" height=\"1156\" alt=\"Image-Captions-Casing-Correction\" class=\"wp-image-436792\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction.png 1477w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-432x338.png.webp 432w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-767x600.png.webp 767w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-144x113.png.webp 144w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-768x601.png.webp 768w\" data-lazy-sizes=\"(max-width: 1477px) 100vw, 1477px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1477\" height=\"1156\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction.png\" alt=\"Image-Captions-Casing-Correction\" class=\"wp-image-436792\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction.png 1477w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-432x338.png.webp 432w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-767x600.png.webp 767w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-144x113.png.webp 144w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/15-Image-Captions-Casing-Correction-768x601.png.webp 768w\" sizes=\"auto, (max-width: 1477px) 100vw, 1477px\"><\/noscript><\/figure>\n<\/div>\n<p>The formula for cell D1 is:<\/p>\n<p><code>=UPPER(LEFT(C2,1))&amp;LOWER(MID(C2,2,LEN(C2)-1))<\/code><\/p>\n<p>Now, we can begin to format the data. We can add a new row for column titles. <\/p>\n<p>You can also take this opportunity to apply column filters or (preferred) format the table as an actual table. Adding some frozen panes may also help:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1976\" height=\"1178\" alt=\"Format-the-Data\" class=\"wp-image-436793\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data.png 1976w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-567x338.png.webp 567w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-800x477.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-190x113.png.webp 190w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-768x458.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-1536x916.png 1536w\" data-lazy-sizes=\"(max-width: 1976px) 100vw, 1976px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1976\" height=\"1178\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data.png\" alt=\"Format-the-Data\" class=\"wp-image-436793\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data.png 1976w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-567x338.png.webp 567w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-800x477.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-190x113.png.webp 190w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-768x458.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/16-Format-the-Data-1536x916.png 1536w\" sizes=\"auto, (max-width: 1976px) 100vw, 1976px\"><\/noscript><\/figure>\n<\/div>\n<p>This is great, but we don\u2019t know which image captions relate to which specific images on the website. We only have local image file paths rather than the original image URLs (as they appear online, on the website).\u00a0<\/p>\n<p>We need to isolate each image\u2019s individual file name, separate from the total file path. If we do this, we can snap the data back together with VLOOKUP.<\/p>\n<p>Create a new column in between columns B and C (so, a new column C) and apply the following formula:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1966\" height=\"1263\" alt=\"Image-Captions-Extract-Image-Filename\" class=\"wp-image-436794\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename.png 1966w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-526x338.png.webp 526w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-800x514.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-176x113.png.webp 176w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-768x493.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-1536x987.png 1536w\" data-lazy-sizes=\"(max-width: 1966px) 100vw, 1966px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1966\" height=\"1263\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename.png\" alt=\"Image-Captions-Extract-Image-Filename\" class=\"wp-image-436794\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename.png 1966w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-526x338.png.webp 526w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-800x514.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-176x113.png.webp 176w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-768x493.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/17-Image-Captions-Extract-Image-Filename-1536x987.png 1536w\" sizes=\"auto, (max-width: 1966px) 100vw, 1966px\"><\/noscript><\/figure>\n<\/div>\n<p>The formula which you need for the new cell (C1) is:<\/p>\n<p><code>=RIGHT(B2,LEN(B2)-FIND(\"~\",SUBSTITUTE(B2,\"\\\",\"~\",LEN(B2)-LEN(SUBSTITUTE(B2,\"\\\",\"\")))))<\/code><\/p>\n<p>We now need to open \u201cimages_missing_alt_text.xlsx\u201d which we exported previously from Screaming Frog. Don\u2019t close the sheet that you have been building so far; have both open.<\/p>\n<p>Inside of \u201cimages_missing_alt_text.xlsx\u201d, create a new column between columns A and B (so, a new column B):<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1378\" alt=\"Missing-Alt-Text-Extract-Image-Filename\" class=\"wp-image-436795\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-502x338.png.webp 502w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-800x538.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-168x113.png.webp 168w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-768x517.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-1536x1033.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1378\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename.png.webp\" alt=\"Missing-Alt-Text-Extract-Image-Filename\" class=\"wp-image-436795\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-502x338.png.webp 502w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-800x538.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-168x113.png.webp 168w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-768x517.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/18-Missing-Alt-Text-Extract-Image-Filename-1536x1033.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>The formula which you need for Cell B2 is:<\/p>\n<p><code>=RIGHT(A2,LEN(A2)-FIND(\"~\",SUBSTITUTE(A2,\"https:\/\/searchengineland.com\/\",\"~\",LEN(A2)-LEN(SUBSTITUTE(A2,\"https:\/\/searchengineland.com\/\",\"\")))))<\/code><\/p>\n<p>We can snap the data together now that we have two sheets containing an identical <em>Image Filename<\/em>.\u00a0<\/p>\n<p>(<strong>Sidenote:<\/strong> In the \u201cimages_missing_alt_text.xlsx\u201d sheet, the data we want comes before the <em>Image Filename<\/em>. This won\u2019t work for VLOOKUP since it can only ascertain data to the right of the match criteria. As a result, utilizing INDEX and MATCH might have been a better solution. However, VLOOKUP is simpler and more accessible for marketers. So, we\u2019re opting for a basic VLOOKUP approach since the entire process is already complex.)<\/p>\n<p>We need to copy the values within column B and paste them as values within the same position:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1339\" height=\"1089\" alt=\"Missing-Alt-Text-Image-Filename-Paste-as-Values\" class=\"wp-image-436796\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values.png 1339w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-416x338.png.webp 416w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-738x600.png.webp 738w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-139x113.png.webp 139w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-768x625.png.webp 768w\" data-lazy-sizes=\"(max-width: 1339px) 100vw, 1339px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1339\" height=\"1089\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values.png\" alt=\"Missing-Alt-Text-Image-Filename-Paste-as-Values\" class=\"wp-image-436796\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values.png 1339w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-416x338.png.webp 416w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-738x600.png.webp 738w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-139x113.png.webp 139w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/19-Missing-Alt-Text-Image-Filename-Paste-as-Values-768x625.png.webp 768w\" sizes=\"auto, (max-width: 1339px) 100vw, 1339px\"><\/noscript><\/figure>\n<\/div>\n<p>Once this is done, we can move the values within Column A to a new column \u2013 between columns B and C. We can then erase column A, resulting in the following output:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1020\" alt=\"Missing-Alt-Text-Image-Reorganised-Data\" class=\"wp-image-436797\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-600x299.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-800x399.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-200x100.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-768x383.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-1536x765.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1020\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data.png.webp\" alt=\"Missing-Alt-Text-Image-Reorganised-Data\" class=\"wp-image-436797\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-600x299.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-800x399.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-200x100.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-768x383.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/20-Missing-Alt-Text-Image-Reorganised-Data-1536x765.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>We want the <em>Image Filename<\/em> on the left and the <em>Address <\/em>on the right.\u00a0<\/p>\n<p>Finally, we can go back to the sheet that we were previously creating and perform a VLOOKUP to pull in the <em>Address<\/em> as <em>Image URL<\/em>. <\/p>\n<p>To do this, we will need to create a new column between columns C and D (so, a new column D):<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1574\" height=\"927\" alt=\"Image-Captions-VLOOKUP-Execution\" class=\"wp-image-436798\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution.png 1574w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-574x338.png.webp 574w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-800x471.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-192x113.png.webp 192w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-768x452.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-1536x905.png 1536w\" data-lazy-sizes=\"(max-width: 1574px) 100vw, 1574px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1574\" height=\"927\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution.png\" alt=\"Image-Captions-VLOOKUP-Execution\" class=\"wp-image-436798\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution.png 1574w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-574x338.png.webp 574w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-800x471.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-192x113.png.webp 192w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-768x452.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/21-Image-Captions-VLOOKUP-Execution-1536x905.png 1536w\" sizes=\"auto, (max-width: 1574px) 100vw, 1574px\"><\/noscript><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1065\" alt=\"Image-Captions-VLOOKUP-Return\" class=\"wp-image-436799\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-600x312.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-800x416.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-200x104.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-768x399.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-1536x799.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1065\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return.png.webp\" alt=\"Image-Captions-VLOOKUP-Return\" class=\"wp-image-436799\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-600x312.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-800x416.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-200x104.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-768x399.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/22-Image-Captions-VLOOKUP-Return-1536x799.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>We can then copy and paste values for the entire table, making the data static (i.e., not reliant on formulas) to ensure a proper snapshot of data:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1068\" alt=\"Image-Captions-Make-Data-Static\" class=\"wp-image-436800\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-600x313.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-800x417.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-200x104.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-768x400.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-1536x801.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1068\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static.png.webp\" alt=\"Image-Captions-Make-Data-Static\" class=\"wp-image-436800\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-600x313.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-800x417.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-200x104.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-768x400.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/23-Image-Captions-Make-Data-Static-1536x801.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>Finally, we can hide columns A, B, C and E to get the output that we want:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"929\" height=\"1149\" alt=\"Image-Captions-Final-Data\" class=\"wp-image-436801\" style=\"width:601px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data.png 929w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-273x338.png.webp 273w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-485x600.png.webp 485w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-91x113.png.webp 91w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-768x950.png.webp 768w\" data-lazy-sizes=\"(max-width: 929px) 100vw, 929px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"929\" height=\"1149\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data.png\" alt=\"Image-Captions-Final-Data\" class=\"wp-image-436801\" style=\"width:601px;height:auto\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data.png 929w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-273x338.png.webp 273w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-485x600.png.webp 485w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-91x113.png.webp 91w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/24-Image-Captions-Final-Data-768x950.png.webp 768w\" sizes=\"auto, (max-width: 929px) 100vw, 929px\"><\/noscript><\/figure>\n<\/div>\n<p>You\u2019ll notice in the example above that there are duplicates in captions. This happened because the website stores various revisions of each image with different dimensions. <\/p>\n<p>The images are stored at full resolution and in various dimensions, as is required by the engine generating thumbnails of each image. It is acceptable for identical or similar captions to apply to the same images, even at different resolutions.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-step-6-filter-the-generated-captions-via-chatgpt\"><span class=\"ez-toc-section\" id=\"Step_6_Filter_the_generated_captions_via_ChatGPT\"><\/span>Step 6: Filter the generated captions via ChatGPT<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>BLIP is great for generating short captions of text from images. (If you want longer captions, try a separate model known as CLIP.) However, its command of the English language is not as strong as OpenAI\u2019s ChatGPT.\u00a0<\/p>\n<p>We can fire the generated BLIP image captions through ChatGPT to clean them up. We\u2019re moving away from locally installed AI to cloud AI, which comes with API costs.<\/p>\n<p>I won\u2019t go over the details here as I recently covered accessing ChatGPT\u2019s AI capabilities in a previous article. (Go and read it if you haven\u2019t yet.) Afterward, the next steps should appear straightforward, and I\u2019ll outline the basics here.<\/p>\n<p>In essence, we want to send the captions off to ChatGPT, along with a prompt that will help increase each caption\u2019s <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a> standard. Utilizing my own Python \/ Excel project and formulas (to translate each BLIP caption into a ChatGPT prompt), I can produce something like this:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"769\" alt=\"ChatGPT-Rework-Prompt-Sheet\" class=\"wp-image-436802\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-600x225.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-800x300.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-200x75.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-768x288.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-1536x577.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"769\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet.png.webp\" alt=\"ChatGPT-Rework-Prompt-Sheet\" class=\"wp-image-436802\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-600x225.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-800x300.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-200x75.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-768x288.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/25-ChatGPT-Rework-Prompt-Sheet-1536x577.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>For example, the BLIP caption of \u201cA living room filled with furniture and a painting\u201d results in the formula-generated prompt of:<\/p>\n<blockquote class=\"wp-block-quote\"><p>\n\u201c<em>Previously, we created some alt text for images. In this example, the alt text reads as such: \u201cA living room filled with furniture and a painting.\u201d The text is very accurate against the image, so please do not change the general content or information within this snippet. That being said, sometimes the standard of English isn\u2019t very good. Could you please re-write the current alt text, so that it uses better English? And also, so that it is better formatted as alt text. No coding needed. Don\u2019t use overly promotional language. Use UK English. Don\u2019t provide any additional text, other than the alt text which you would supply. The direct alt text only please.<\/em>\u201d\n<\/p><\/blockquote>\n<p>This prompt is detailed for a reason. The more specifics you give ChatGPT (tone, language style, technical requirements), the better. Most details can be combined easily, with the only exception being the BLIP caption.<\/p>\n<p>Now, I can utilize my own Python script (which interacts with Microsoft Excel documents) to fire this off to OpenAI via their API:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1126\" alt=\"ChatGPT-Script-Execution\" class=\"wp-image-436803\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-600x330.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-800x440.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-200x110.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-768x422.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-1536x845.png 1536w\" data-lazy-sizes=\"(max-width: 2048px) 100vw, 2048px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution.png.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1126\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution.png.webp\" alt=\"ChatGPT-Script-Execution\" class=\"wp-image-436803\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution.png.webp 2048w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-600x330.png.webp 600w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-800x440.png.webp 800w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-200x110.png.webp 200w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-768x422.png.webp 768w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/26-ChatGPT-Script-Execution-1536x845.png 1536w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\"><\/noscript><\/figure>\n<\/div>\n<p>Once I have the output, I can use VLOOKUP to pull this data through to the sheet that I created earlier:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1253\" height=\"1140\" alt=\"ChatGPT-Final-Output\" class=\"wp-image-436804\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output.png 1253w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-372x338.png.webp 372w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-659x600.png.webp 659w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-124x113.png.webp 124w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-768x699.png.webp 768w\" data-lazy-sizes=\"(max-width: 1253px) 100vw, 1253px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output.png\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1253\" height=\"1140\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output.png\" alt=\"ChatGPT-Final-Output\" class=\"wp-image-436804\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output.png 1253w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-372x338.png.webp 372w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-659x600.png.webp 659w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-124x113.png.webp 124w,https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/27-ChatGPT-Final-Output-768x699.png.webp 768w\" sizes=\"auto, (max-width: 1253px) 100vw, 1253px\"><\/noscript><\/figure>\n<\/div>\n<p>ChatGPT has now enhanced the output from BLIP. <\/p>\n<p>Again, if you want to read more about how to interact with ChatGPT \/ OpenAI in terms of text-to-text-based output (specifically for SEO), read my previous article. There\u2019s a lot of detail within this article which will bring you from proof of concept to full and commercially viable completion.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-step-7-communicate-with-your-web-developer\"><span class=\"ez-toc-section\" id=\"Step_7_Communicate_with_your_web_developer\"><\/span>Step 7: Communicate with your web developer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You now have a list of image URLs without alt text, a list of BLIP-generated captions, and a list of ChatGPT refined alt text outputs. <\/p>\n<p>This is where your experience as a marketer (even a highly technical one) ends. You must now share this three-column sheet to an accomplished web developer, who will create a script that appends your alt texts to images. <\/p>\n<p>This must be a back-end script. A front-end script that injects the alt texts would not be suitable, as Google would need to execute those injections to apply them. <\/p>\n<p>Whatever changes are made, they must be applied to the database(s) in the back end so that Google has a better (non-generated) fix on the front-end output.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-leverage-ai-to-efficiently-create-alt-text-at-scale\"><span class=\"ez-toc-section\" id=\"Leverage_AI_to_efficiently_create_alt_text_at_scale\"><\/span>Leverage AI to efficiently create alt text at scale<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>We\u2019ve deployed image-to-text (BLIP, local) and text-to-text (ChatGPT, external) AIs with a shared goal. Endless possibilities arise from combining these technologies. This showcases how AI can enhance efficiency in SEO workflows.\u00a0<\/p>\n<p>Setup may take a couple of days initially, but tasks can be done in hours once you get the hang of it. As this cutting-edge <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/technology\/\" data-internallinksmanager029f6b8e52c=\"4\" title=\"Technology\" target=\"_blank\" rel=\"noopener\">technology<\/a> integrates into mainstream SEO tools in the near future, you\u2019ll see the value in staying ahead of the competition \u2013 producing what they cannot in a fraction of the time.<\/p>\n<p><em>Special thanks to:<\/em><\/p>\n<ul>\n<li><em>Cobanov for creating the essential <\/em><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/cobanov\/image-captioning\"><em>Git project<\/em><\/a><em> that made this demonstration possible.<\/em><\/li>\n<li><em>My friend, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/in\/mikewors\/\">Mike Worswick<\/a>, for his decade-long friendship and valuable contributions. Collaborating with Mike allowed me to discover image-to-text AI applications relevant to SEO. Thank you, Mike!<\/em><\/li>\n<\/ul>\n<\/div>\n<p><\/p>\n<div class=\"about-author\">\n    About the author<\/p>\n<div class=\"information\">\n<div class=\"author-module\">\n<div class=\"row\">\n<div class=\"col-12 col-lg-3 text-center\">\n<div class=\"avatar\">\n                        <img loading=\"lazy\" decoding=\"async\" class=\"img-fluid rounded-circle avatar-border\" alt=\"James Allen\" width=\"140\" height=\"140\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2023\/09\/James-Allen.jpeg.webp\"><noscript><img loading=\"lazy\" decoding=\"async\" class=\"img-fluid rounded-circle avatar-border\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2023\/09\/James-Allen.jpeg.webp\" alt=\"James Allen\" width=\"140\" height=\"140\"><\/noscript>\n                                            <\/div>\n<\/p><\/div>\n<div class=\"col-12 col-lg-9\">\n<div class=\"about\">\n<div class=\"name\">\n                            <strong>James Allen<\/strong>\n                        <\/div>\n<div class=\"row g-2 pt-2\">\n<div class=\"col-auto\">\n                                    <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/in\/scriptedinsight\/\" aria-label=\"opens in a new tab\"><i class=\"fab fa-linkedin\"><\/i><\/a>\n                                <\/div>\n<\/p><\/div>\n<p>                        Hailing from the Midlands of the United Kingdom; James Allen has been working in search since 2009. Specialising in technical SEO early in his career, he is an auditor who is capable of ascertaining his own data. With a solid knowledge of XPath and some working knowledge of Python, James also dabbles in AI scripting (for example, combining the functions of BLIP with Open-AI&#8217;s GPT suite of technologies). James decided to split his career between then technical SEO, light API scripting and Analytics support disciplines. Due to this, he also has high familiarity with Google Analytics, Google Tag Manager and managing custom events within the data layer. James specialises in page-speed analysis, and utilising AI for SEO purposes.                  <\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMN63nwsw68G3Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology<\/a><\/span> category.<\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/searchengineland.com\/generate-image-alt-text-at-scale-with-ai-436775\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Use image-to-text and text-to-text AI to efficiently generate quality alt text at scale Image alt text is important for accessibility and beneficial for SEO. But if you have lots of images on your website, manually writing alt text for all of them will be time-consuming. This article is a step-by-step guide for using AI to&#8230;<\/p>\n","protected":false},"author":1,"featured_media":606054,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/searchengineland.com\/wp-content\/seloads\/2024\/01\/Generate-image-alt-text-at-scale-with-AI-A-7-step-guide-for-SEOs.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[78070,148084],"class_list":["post-606053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-seo","tag-technical-optimization"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/606053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=606053"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/606053\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/606054"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=606053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=606053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=606053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}