﻿
{"id":27645,"date":"2025-03-10T21:40:38","date_gmt":"2025-03-10T21:40:38","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=27645"},"modified":"2025-03-10T21:40:38","modified_gmt":"2025-03-10T21:40:38","slug":"semantic-kernel-ile-huggingface-uzerinden-image-captioning-ve-translate-uygulamasi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/semantic-kernel-ile-huggingface-uzerinden-image-captioning-ve-translate-uygulamasi\/","title":{"rendered":"Semantic Kernel \u0130le HuggingFace \u00dczerinden Image Captioning ve Translate Uygulamas\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, .NET ekosisteminde <a href=\"https:\/\/www.gencayyildiz.com\/blog\/semantic-kernel-nedir-deepseek-r1-esliginde-net-acisindan-derinlemesine-degerlendirelim\/\" target=\"_blank\">Semantic Kernel<\/a> ile HuggingFace&#8217;de ki <em>&#8216;Salesforce\/blip-image-captioning-base&#8217;<\/em> modelini kullanarak, verdi\u011fimiz g\u00f6rsel i\u00e7eri\u011fine g\u00f6re bir a\u00e7\u0131klama \u00fcretimi yani <em>Image Captioning<\/em> \u00e7al\u0131\u015fmas\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<h4>Image Captioning Nedir?<\/h4>\n<p>Image Captioning, bir g\u00f6rseli analiz edip i\u00e7eri\u011fini metinsel olarak a\u00e7\u0131klama s\u00fcrecidir. Yani bir yapay zeka modelinin herhangi bir g\u00f6r\u00fcnt\u00fcy\u00fc okuyarak ona uygun bir a\u00e7\u0131klama (caption) \u00fcretmesi anlam\u0131na gelmektedir.<\/p>\n<p>HuggingFace \u00fczerinde BLIP veya LLaVA gibi modelleri kullanarak kolayca Image Captioning yap\u0131labilmektedir. \u0130\u015fte bu modellerden baz\u0131lar\u0131;<\/p>\n<ul>\n<li><em><a href=\"https:\/\/huggingface.co\/Salesforce\/blip-image-captioning-base\" target=\"_blank\">Salesforce\/blip-image-captioning-base<\/a><\/em><br \/>\nBu model, g\u00f6rseller i\u00e7in a\u00e7\u0131klamalar olu\u015fturmak \u00fczere tasarlanm\u0131\u015ft\u0131r ve geni\u015f bir kullan\u0131m alan\u0131na sahiptir.\n<\/li>\n<li><em><a href=\"https:\/\/huggingface.co\/Salesforce\/blip-image-captioning-large\" target=\"_blank\">Salesforce\/blip-image-captioning-large<\/a><\/em><br \/>\nDaha b\u00fcy\u00fck bir versiyon olan bu model, daha detayl\u0131 ve hassas a\u00e7\u0131klamalar \u00fcretmek i\u00e7in geli\u015ftirilmi\u015ftir.\n<\/li>\n<li><em><a href=\"https:\/\/huggingface.co\/nlpconnect\/vit-gpt2-image-captioning\" target=\"_blank\">nlpconnect\/vit-gpt2-image-captioning<\/a><\/em><br \/>\nVision Transformer (ViT) ve GPT-2 modellerini birle\u015ftirerek g\u00f6rseller i\u00e7in a\u00e7\u0131klamalar \u00fcretir.\n<\/li>\n<li><em><a href=\"https:\/\/huggingface.co\/microsoft\/git-large-coco\" target=\"_blank\">microsoft\/git-large-coco<\/a><\/em><br \/>\nMicrosoft taraf\u0131ndan geli\u015ftirilen bu model, COCO veri seti \u00fczerinde e\u011fitilmi\u015ftir ve y\u00fcksek kaliteli g\u00f6rsel a\u00e7\u0131lamalar\u0131yla bilinir.\n<\/li>\n<li><em><a href=\"https:\/\/huggingface.co\/Salesforce\/blip2-opt-2.7b\" target=\"_blank\">Salesforce\/blip2-opt-2.7b<\/a><\/em><br \/>\nBLIP-2 mimarisine sahip bu model, g\u00f6rsel ve dil modellerini birle\u015ftirerek etkili a\u00e7\u0131klamalar \u00fcretir.\n<\/li>\n<\/ul>\n<p>Bizler bu i\u00e7eri\u011fimizde yaz\u0131m\u0131z\u0131n ilk sat\u0131rlar\u0131nda bahsetti\u011fimiz \u00fczere <em>&#8216;Salesforce\/blip-image-captioning-base&#8217;<\/em> modelini kullan\u0131yor olaca\u011f\u0131z. O halde hadi ba\u015flayal\u0131m&#8230;<\/p>\n<h4>Semantic Kernel \u0130le Image Captioning Uygulamas\u0131<\/h4>\n<p>Semantic Kernel&#8217;da Image Captioning&#8217;i \u00f6rneklendirebilmek i\u00e7in \u00f6ncelikle bir .NET uygulamas\u0131 olu\u015fturmam\u0131z gerekmektedir. Bizler i\u00e7erik s\u00fcrecinde \u00e7al\u0131\u015fmay\u0131 bir Asp.NET Core uygulamas\u0131 \u00fczerinden y\u00fcr\u00fct\u00fcyor olaca\u011f\u0131z. Tabi sizler arzu ederseniz, i\u00e7eri\u011fi Console Application ya da farkl\u0131 bir altyap\u0131 e\u015fli\u011finde takipte bulunabilirsiniz.<\/p>\n<p>\u00c7al\u0131\u015fma s\u00fcrecinde a\u015fa\u011f\u0131daki paketlerden istifade edilecektir;<\/p>\n<ul>\n<li><code><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel\" target=\"_blank\">Microsoft.SemanticKernel<\/a><br \/>\n<span style=\"font-size:12px;\">(Install-Package Microsoft.SemanticKernel)<\/span><\/code><\/li>\n<li><code><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.SemanticKernel.Connectors.HuggingFace\" target=\"_blank\">Microsoft.SemanticKernel.Connectors.HuggingFace<\/a><br \/>\n<span style=\"font-size:12px;\">(Install-Package Microsoft.SemanticKernel.Connectors.HuggingFace -Version 1.40.1-preview)<\/span><br \/>\n<span style=\"font-size:12px;color:red;\">\u00d6zellikle bu paketin son s\u00fcr\u00fcm\u00fcn\u00fc kontrol ediniz!<\/span><\/code><\/li>\n<\/ul>\n<p>Paketler y\u00fcklendikten sonra Semantic Kernel \u00fczerinden HuggingFace entegrasyonunu a\u015fa\u011f\u0131daki gibi ger\u00e7ekle\u015ftirebiliriz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services\r\n    .AddKernel()\r\n    .AddHuggingFaceImageToText(\r\n        model: &quot;Salesforce\/blip-image-captioning-base&quot;,\r\n        apiKey: &quot;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&quot;\r\n    );\r\n\r\nvar app = builder.Build();\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>Tabi bu yap\u0131land\u0131rma s\u00fcrecinde a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi bir uyar\u0131yla kar\u015f\u0131la\u015fma ihtimalinizin oldu\u011funu s\u00f6ylemekte fayda g\u00f6rmekteyim;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi.png\" alt=\"Semantic Kernel \u0130le HuggingFace&#039;de Image Captioning \u00c7al\u0131\u015fmas\u0131\" width=\"803\" height=\"401\" class=\"aligncenter size-full wp-image-27647\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi.png 803w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-300x150.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-768x384.png 768w\" sizes=\"auto, (max-width: 803px) 100vw, 803px\" \/><\/a>Hatan\u0131n metinsel hali;<\/p>\n<div style=\"color:red;text-align:center;font-size:12px;line-height:1.4;\">&#8216;Microsoft.SemanticKernel.HuggingFaceKernelBuilderExtensions<br \/>\n.AddHuggingFaceImageToText(Microsoft.SemanticKernel.IKernelBuilder, string, System.Uri?, string?, string?, System.Net.Http.HttpClient?)&#8217; is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.<\/div>\n<p>Yani burada diyor ki, <code>AddHuggingFaceImageToText<\/code> metodu \u015fimdilik de\u011ferlendirme a\u015famas\u0131ndad\u0131r ve gelecekteki g\u00fcncellemelerde bu kullan\u0131m de\u011fi\u015fikli\u011fe u\u011frayabilir yahut komple kald\u0131r\u0131labilir. Bunu bil de ona g\u00f6re kullan demektedir \ud83d\ude42 Ee haliyle bizim bu projeyi derleyebilmemiz i\u00e7in \u015fimdilik bu uyar\u0131y\u0131 g\u00f6rmezden gelmemiz gerekmektedir. Bunun i\u00e7in derleyici uyar\u0131lar\u0131n\u0131 ge\u00e7ici olarak kapatmam\u0131z\u0131 sa\u011flayan a\u015fa\u011f\u0131daki <code>#pragma warning<\/code> y\u00f6nergelerinden istifade etmemiz yeterlidir;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\n#pragma warning disable SKEXP0070\r\nbuilder.Services\r\n    .AddKernel()\r\n    .AddHuggingFaceImageToText(\r\n        model: &quot;Salesforce\/blip-image-captioning-base&quot;,\r\n        apiKey: &quot;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&quot;\r\n    );\r\n#pragma warning restore SKEXP0070\r\n\r\nvar app = builder.Build();\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>Burada; <code>#pragma warning disable SKEXP0070<\/code> talimat\u0131 ile <em>SKEXP0070<\/em> kodlu derleyici uyar\u0131s\u0131n\u0131 kapat\u0131rken, <code>#pragma warning restore SKEXP0070<\/code> talimat\u0131 ile de ayn\u0131 kodlu derleyici uyar\u0131s\u0131n\u0131 o sat\u0131rdan itibaren tekrardan a\u00e7\u0131yoruz.<\/p>\n<p>\u015eimdi de bu yap\u0131land\u0131rman\u0131n i\u00e7eri\u011fine odaklan\u0131rsak e\u011fer <em>model<\/em> ve <em>apiKey<\/em> de\u011ferlerinin verildi\u011fini g\u00f6r\u00fcyorsunuz. Bu de\u011ferler i\u00e7in HuggingFace&#8217;e gitmemiz gerekti\u011fi a\u015fikar. <em>model<\/em> de\u011feri i\u00e7in kullan\u0131lacak modelin profilinden a\u015fa\u011f\u0131daki g\u00f6rseldeki alan\u0131 kopyalamam\u0131z gerekmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-1.png\" alt=\"Semantic Kernel \u0130le HuggingFace&#039;de Image Captioning \u00c7al\u0131\u015fmas\u0131\" width=\"506\" height=\"259\" class=\"aligncenter size-full wp-image-27648\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-1.png 506w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-1-300x154.png 300w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/a><em>apiKey<\/em> i\u00e7in ise a\u015fa\u011f\u0131daki ekran al\u0131nt\u0131s\u0131nda oldu\u011fu gibi <em>Access Tokens<\/em> yap\u0131land\u0131rmalar\u0131na gidip &#8216;Create new token&#8217; diyerek yeni bir access token olu\u015fturulmas\u0131 yeterlidir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi.gif\" alt=\"Semantic Kernel \u0130le HuggingFace&#039;de Image Captioning \u00c7al\u0131\u015fmas\u0131\" width=\"800\" height=\"498\" class=\"aligncenter size-full wp-image-27649\" \/><\/a>Evet, b\u00f6ylece art\u0131k Semantic Kernel arac\u0131l\u0131\u011f\u0131yla .NET uygulamas\u0131 ile HuggingFace&#8217;de ki ilgili modelin entegrasyonunu ba\u015far\u0131yla yapm\u0131\u015f bulunuyoruz.<\/p>\n<p>\u015eimdi s\u0131rada bu modelin i\u015flevselli\u011fini kullanma var! Bunun i\u00e7in a\u015fa\u011f\u0131daki gibi bir endpoint olu\u015ftural\u0131m ve client&#8217;tan gelen g\u00f6rsellerin a\u00e7\u0131klamalar\u0131n\u0131 ilgili modelle \u00fcretip geriye d\u00f6nd\u00fcrelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n#pragma warning disable SKEXP0001\r\napp.MapPost(&quot;\/image-captioning&quot;, async (IImageToTextService imageToTextService, IFormFile file) =&gt;\r\n{\r\n    using var memoryStream = new MemoryStream();\r\n    await file.CopyToAsync(memoryStream);\r\n    var imageContent = new ImageContent(memoryStream.ToArray(), &quot;image\/jpeg&quot;);\r\n    var textContent = await imageToTextService.GetTextContentAsync(imageContent);\r\n    return textContent.Text;\r\n}).DisableAntiforgery();\r\n#pragma warning restore SKEXP0001\r\n<\/pre>\n<\/div>\n<p><div id=\"attachment_27651\" style=\"width: 235px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-27651\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua-225x300.jpg\" alt=\"Kliside Dua\" width=\"225\" height=\"300\" class=\"size-medium wp-image-27651\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua-225x300.jpg 225w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua-768x1024.jpg 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua-1152x1536.jpg 1152w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/kilisede-dua.jpg 1200w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><p id=\"caption-attachment-27651\" class=\"wp-caption-text\">Kliside Fatiha \ud83d\ude42<\/p><\/div>Evet, burada da <code>#pragma warning<\/code> talimatlar\u0131 e\u015fli\u011finde \u00e7al\u0131\u015fmam\u0131z gerekti\u011fini g\u00f6r\u00fcyorsunuz. Malum&#8230; Hala deneme s\u00fcr\u00fcm\u00fcndeyiz. Velhas\u0131l i\u015flevselli\u011fe odaklan\u0131rsak e\u011fer, client&#8217;tan gelen g\u00f6rselin a\u00e7\u0131klamas\u0131n\u0131 <code>IImageToTextService<\/code> t\u00fcr\u00fcnden nesneyle olduk\u00e7a basit bir \u015fekilde ger\u00e7ekle\u015ftiriyoruz. Detaylar kodda ap a\u00e7\u0131k belli diye d\u00fc\u015f\u00fcn\u00fcyorum&#8230;<\/p>\n<p>\u015eimdi yap\u0131lan bu \u00e7al\u0131\u015fmay\u0131 yandaki benim \u015fahsi g\u00f6rselimle test edelim istiyorum. Bunun i\u00e7in Postman&#8217;de a\u015fa\u011f\u0131daki iste\u011fi haz\u0131rlay\u0131p, g\u00f6nderelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2.png\" alt=\"Semantic Kernel \u0130le HuggingFace&#039;de Image Captioning \u00c7al\u0131\u015fmas\u0131\" width=\"1279\" height=\"513\" class=\"aligncenter size-full wp-image-27652\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2.png 1279w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2-300x120.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2-1024x411.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-2-768x308.png 768w\" sizes=\"auto, (max-width: 1279px) 100vw, 1279px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere Image Captioning neticesinde \u00fcretilen a\u00e7\u0131klamaya g\u00f6z atarsak e\u011fer<br \/>\n<em style=\"font-size:12px;\"><u>a man standing in a stone building<\/u><\/em> yorumunda bulunuldu\u011funu g\u00f6rece\u011fiz. Halbuki bu g\u00f6rselde ta\u015f binada duran bir adamdan daha \u00e7ok kilise de dua eden bir Gen\u00e7ay var diyerek bu modele dalas\u0131 geliyor insan\u0131n i\u00e7inden \ud83d\ude42<\/p>\n<p>Nas\u0131l? G\u00fczel de\u011fil mi? \ud83d\udc4f\ud83d\udc4f\ud83d\udc4f<\/p>\n<p>Tabi burada g\u00f6rsel hakk\u0131nda \u00fcretilen a\u00e7\u0131klaman\u0131n \u0130ngilizce oldu\u011fu a\u015fikar. Bizler bu a\u00e7\u0131klaman\u0131n T\u00fcrk\u00e7e olarak yap\u0131lmas\u0131n\u0131 istiyor olabiliriz. Bunun i\u00e7in ilgili modelin bir yap\u0131land\u0131rmas\u0131 olabilir, bilmiyorum. Ben i\u00e7eri\u011fi zenginle\u015ftirmek ad\u0131na OpenRouter \u00fczerinden bir modele daha ba\u011flan\u0131p, bu yorumu T\u00fcrk\u00e7e&#8217;ye translate ettirmek istiyorum. \u015eimdi gelin bu \u00e7al\u0131\u015fmay\u0131 da ger\u00e7ekle\u015ftirelim.<\/p>\n<h4>\u00dcretilen A\u00e7\u0131klamay\u0131 T\u00fcrk\u00e7e&#8217;ye Translate Etme<\/h4>\n<p>Bunun i\u00e7in OpenRouter platformu \u00fczerinden <em><a href=\"https:\/\/openrouter.ai\/qwen\/qwq-32b:free\/api\" target=\"_blank\">Qwen: QwQ 32B (free)<\/a><\/em> modelini kullanaca\u011f\u0131z.<\/p>\n<p><strong><em>Neden bu model?<\/em><\/strong> diye sorabilirsiniz. Herhangi bir nedeni yok \ud83d\ude42 A\u00e7\u0131klamas\u0131nda belirtildi\u011fi \u00fczere bir ak\u0131l y\u00fcr\u00fctme modeli olmas\u0131 bu \u00e7al\u0131\u015fma i\u00e7in se\u00e7ilmesine yetti.<\/p>\n<p><strong><em>Peki, bu modele OpenRouter yerine HuggingFace&#8217;den eri\u015fim g\u00f6steremezmiydik?<\/em><\/strong> diye sorarsan\u0131z da, evet g\u00f6sterebilirdik! Yani bu model bir yandan da HuggingFace&#8217;de ahanda <a href=\"https:\/\/huggingface.co\/Qwen\/QwQ-32B\" target=\"_blank\">\u015fu adreste<\/a> yay\u0131nlanmaktad\u0131r. Yine bu i\u00e7erikte belirti\u011fim ayn\u0131 metotlar arac\u0131l\u0131\u011f\u0131yla ilgili modeli yap\u0131land\u0131r\u0131p kullanabilirdik!<\/p>\n<p><strong><em>Neden OpenRouter?<\/em><\/strong> sorusunun cevab\u0131 ise bir ka\u00e7 sat\u0131r \u00f6ncede belirtti\u011fim \u00fczere sadece zenginlik olmas\u0131 gayesindendir&#8230;<\/p>\n<p>Velhas\u0131l, \u015fimdi uygulamam\u0131za a\u015fa\u011f\u0131daki yap\u0131land\u0131rma \u00fczerinden Semantic Kernel ile OpenRouter entegrasyonunu da ger\u00e7ekle\u015ftirelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.SemanticKernel;\r\nusing Microsoft.SemanticKernel.ImageToText;\r\nusing OpenAI;\r\nusing System.ClientModel;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\n#pragma warning disable SKEXP0070\r\nbuilder.Services\r\n    .AddKernel()\r\n    .AddHuggingFaceImageToText(\r\n        model: &quot;Salesforce\/blip-image-captioning-base&quot;,\r\n        apiKey: &quot;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&quot;\r\n    )\r\n#pragma warning restore SKEXP0070\r\n    .AddOpenAIChatCompletion(\r\n        modelId: &quot;qwen\/qwq-32b:free&quot;,\r\n        openAIClient: new OpenAIClient(\r\n            credential: new ApiKeyCredential(&quot;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&quot;),\r\n            options: new OpenAIClientOptions\r\n            {\r\n                Endpoint = new Uri(&quot;https:\/\/openrouter.ai\/api\/v1&quot;)\r\n            })\r\n        );\r\n\r\nvar app = builder.Build();\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere, Semantic Kernel ile bir .NET uygulamas\u0131na birden fazla model yap\u0131land\u0131rmas\u0131n\u0131 bu \u015fekilde ger\u00e7ekle\u015ftirebilmekteyiz. Ayr\u0131ca dikkat ederseniz <code>AddOpenAIChatCompletion<\/code> yap\u0131land\u0131rmas\u0131n\u0131 gerek olmad\u0131\u011f\u0131 i\u00e7in <code>#pragma warning<\/code> y\u00f6nergesinin d\u0131\u015f\u0131nda uygulayarak normal bir \u015fekilde yap\u0131land\u0131rmada bulunuyorum. \u00c7\u00fcnk\u00fc sonraki s\u00fcr\u00fcmlerde de\u011fi\u015fiklik ihtimali sadece <code>AddHuggingFaceImageToText<\/code> metodunun bulundu\u011fu k\u00fct\u00fcphane i\u00e7in ge\u00e7erlidir.<\/p>\n<p>Art\u0131k <em>Qwen: QwQ 32B (free)<\/em> modelini de uygulamaya dahil etti\u011fimize g\u00f6re translate i\u015flemine ge\u00e7ebiliriz. Bunun i\u00e7in yukar\u0131da olu\u015fturdu\u011fumuz endpoint&#8217;tin i\u015flevselli\u011finde a\u015fa\u011f\u0131daki gibi ufak bir katk\u0131da bulunmam\u0131z yeterli olacakt\u0131r;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n#pragma warning disable SKEXP0001\r\napp.MapPost(&quot;\/image-captioning&quot;, async (IImageToTextService imageToTextService, Kernel kernel, IFormFile file) =&gt;\r\n{\r\n    using var memoryStream = new MemoryStream();\r\n    await file.CopyToAsync(memoryStream);\r\n    var imageContent = new ImageContent(memoryStream.ToArray(), &quot;image\/jpeg&quot;);\r\n    var textContent = await imageToTextService.GetTextContentAsync(imageContent);\r\n\r\n    string promptTemplate = &quot;Bu metni T\u00fcrk\u00e7e'ye \u00e7evir : {{$input}}&quot;;\r\n    var function = kernel.CreateFunctionFromPrompt(promptTemplate);\r\n    var arguments = new KernelArguments { &#x5B;&quot;input&quot;] = textContent.Text };\r\n    var result = await function.InvokeAsync(kernel, arguments);\r\n\r\n    return result.GetValue&lt;string&gt;();\r\n}).DisableAntiforgery();\r\n#pragma warning restore SKEXP0001\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz, Image Captioning neticesinde AI modelden elde edilen a\u00e7\u0131klama metnini <code style=\"color:purple;font-size:12px;\">\"Bu metni T\u00fcrk\u00e7e'ye \u00e7evir : {{$input}}\"<\/code> \u015feklinde bir prompt template e\u015fli\u011finde Kernel&#8217;a g\u00f6nderiyor ve b\u00f6ylece translate i\u015flemini de di\u011fer AI modeli taraf\u0131ndan ger\u00e7ekle\u015ftiriyoruz.<\/p>\n<p>Uygulamay\u0131 bu vaziyette tekrar derleyip, ayn\u0131 g\u00f6rsel \u00fczerinden teste tabi tutarsak bu sefer de a\u015fa\u011f\u0131daki neticeyi al\u0131yoruz;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3.png\" alt=\"Semantic Kernel \u0130le HuggingFace&#039;de Image Captioning \u00c7al\u0131\u015fmas\u0131\" width=\"1269\" height=\"512\" class=\"aligncenter size-full wp-image-27655\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3.png 1269w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3-300x121.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3-1024x413.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/03\/Semantic-Kernel-Ile-HuggingFacede-Image-Captioning-Calismasi-3-768x310.png 768w\" sizes=\"auto, (max-width: 1269px) 100vw, 1269px\" \/><\/a>Evet, g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ba\u015far\u0131yla translate i\u015flemini de ger\u00e7ekle\u015ftirmi\u015f bulunuyoruz.<\/p>\n<p>Anlayaca\u011f\u0131n\u0131z, iki farkl\u0131 platformdaki AI modellerini, Semantic Kernel sayesinde ayn\u0131 yap\u0131land\u0131rma yakla\u015f\u0131m\u0131yla uygulamaya rahatl\u0131kla entegre etmi\u015f bulunuyoruz. \u0130\u015fte Semantic Kernel&#8217;\u0131n en b\u00fcy\u00fck avantaj\u0131, sa\u011flad\u0131\u011f\u0131 abstraction ile farkl\u0131 yap\u0131land\u0131rma gerektiren platformlar \u00fczerinde kolayl\u0131kla handle yapabilmemize ve biz geli\u015ftiricilerin sadece uygulaman\u0131n gereksinimlerine odaklanarak sadece koda odaklanmam\u0131za olanak tan\u0131mas\u0131 oldu\u011funu s\u00f6yleyebiliriz.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki GitHub adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/SemanticKernel.HuggingFace.ImageCaptioning.Translate\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/SemanticKernel.HuggingFace.ImageCaptioning.Translate<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, .NET ekosisteminde Semantic Kernel ile HuggingFace&#8217;de ki &#8216;Salesforce\/blip-image-captioning-base&#8217; modelini kullanarak, verdi\u011fimiz g\u00f6rsel i\u00e7eri\u011fine g\u00f6re bir a\u00e7\u0131klama \u00fcretimi yani Image Captioning \u00e7al\u0131\u015fmas\u0131 ger\u00e7ekle\u015ftirece\u011fiz. Image Captioning Nedir? Image Captioning, bir g\u00f6rseli analiz edip&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":27587,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5222,5220],"tags":[5266,5264,5262,5263,5265,5267,5238,5268,5221],"class_list":["post-27645","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-llm","category-yapay-zeka-ai","tag-blip-modeli","tag-gorsel-aciklama-uretimi","tag-huggingface","tag-image-captioning","tag-image-captioning-nedir","tag-llava-modeli","tag-openrouter","tag-qwen-qwq-32b","tag-semantic-kernel"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=27645"}],"version-history":[{"count":5,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27645\/revisions"}],"predecessor-version":[{"id":27658,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27645\/revisions\/27658"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/27587"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=27645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=27645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=27645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}