উপগোট নাকি ডাউনগোট?


309

ছাগলের একটি চিত্র দেওয়া হয়েছে, আপনার প্রোগ্রামটি ছাগলটিকে উল্টো দিকে রয়েছে কিনা তা সনাক্ত করার চেষ্টা করা উচিত।

উদাহরণ

এইগুলি ইনপুট কী হতে পারে তার উদাহরণ। প্রকৃত ইনপুট নয়

ইনপুট:

Downgoat

আউটপুট: Downgoat

ফটকা খেলা

আপনার প্রোগ্রামটি সর্বাধিক 30,000 বাইট হওয়া উচিত

  • ইনপুটটিতে পুরো ছাগল থাকবে
  • ছবিতে সর্বদা একটি ছাগল থাকবে
  • ছাগলটি যদি উল্টো দিকে থাকে তবে Downgoatঅন্যথায় আউটপুট দিনUpgoat

ইনপুটটি হবে তবে আপনি কোনও চিত্র একটি ইনপুট হিসাবে নিতে পারবেন (ফাইলের নাম, চিত্রের বেস 64))

গিস্ট ফাইলের নাম কেবল রেফারেন্সের জন্য হওয়ায় "উপগোট" বা "ডাউনগোট" থাকার জন্য চিত্রের নাম বা অন্যান্য মেটাডেটার উপর নির্ভর করবেন না।


দয়া করে হার্ডকোড করবেন না । এটি বিরক্তিকর, আমি এটি পুরোপুরি প্রয়োগ করতে পারি না তবে আমি সুন্দরভাবে জিজ্ঞাসা করতে পারি।

পরীক্ষার মামলা

ইমেজ সঙ্গে সারকথা । শুরু ইমেজ downgoatআছে Downgoatআউটপুট এবং ইমেজ দিয়ে শুরু upgoatআছে Upgoatআউটপুট।

পরীক্ষার মামলার দ্বিতীয় ব্যাচটি সমস্ত পরীক্ষার ক্ষেত্রে আপনার চিত্রগুলি পরীক্ষা করার বিষয়টি নিশ্চিত করুন। এই ছবিগুলি একটি jpgএস। মাপের চিত্র পরিবর্তন হওয়ার সম্ভাবনা রয়েছে কিন্তু না দ্বারা যে অনেক।


দ্রষ্টব্য: কোন হার্ডকোড উত্তরগুলি এড়াতে এবং প্রোগ্রামটির সাধারণ কার্য সম্পাদন পরীক্ষা করার জন্য কোনও উত্তর গ্রহণের আগে কয়েকটি পরীক্ষার কেস যুক্ত করা যেতে পারে।

আমার অবতারটি সঠিক হওয়ার জন্য বোনাস পয়েন্ট: পি

স্কোরিং

স্কোর এমন এক শতাংশ যা দ্বারা গণনা করা যায়: (number_correct / total) * 100


1
"ফিটিং" হার্ড-কোডিং হিসাবে গণনা করে?
নিক টি

@ নিকট "ফিটিং" বলতে আপনার অর্থ কী?
ডাউনগোট

@ ডাউনগোট এমন একটি মডেলের (সমীকরণ) জন্য প্যারামিটার নিয়ে আসছে যা ছাগলটি সঠিকভাবে মোকাবেলা করছে out " " ফিটিং " " বলতে বোঝায় কিছু প্রশিক্ষণ সেট বনাম পুরো ডেটা সেটটিতে মডেলটিকে ফিট করা।
নিক টি


29
এই ছবিগুলি কীভাবে একটি ছবিতে দুটি ছাগল পরিচালনা করবে তা দেখার জন্য আমি আগ্রহী।
ড্যানিয়েল

উত্তর:


293

গণিত, 100%, 141 বাইট

f@x_:=Count[1>0]@Table[ImageInstanceQ[x,"caprine animal",RecognitionThreshold->i/100],{i,0,50}];If[f@#>f@ImageReflect@#,"Up","Down"]<>"goat"&

ঠিক আছে, এটি প্রতারণার মতো কিছুটা বেশি অনুভব করে। এটি অত্যন্ত নির্বোধ হওয়ার পাশাপাশি অবিশ্বাস্যরূপে ধীর। ফাংশনটি fদেখতে পাচ্ছে যে আপনি গণিতের কম্পিউটার ভিশন বিল্টিনগুলির মধ্যে একটিতে স্বীকৃতি প্রান্ত স্থাপন করতে পারেন এবং চিত্রটিকে ক্যাপরিন প্রাণী হিসাবে স্বীকৃতি দিতে পারেন।

তারপরে আমরা দেখতে পাই যে চিত্রটি বা উল্টানো চিত্রটি আরও ছাগল। আপনার প্রোফাইল ইমেজে কাজ করে কারণ টাই ডাউনগোটের পক্ষে ভেঙে গেছে। চিত্রটি বোভিডস বা ক্যাপরিন প্রাণী সত্তার ধরণের অন্যান্য জেনারালাইজেশনকে উপস্থাপন করে কিনা তা জিজ্ঞাসা করে এটি উন্নত করার উপায়গুলি সম্ভবত রয়েছে।

প্রথম টেস্টিং সেটটির জন্য লিখিত স্কোর হিসাবে 100% এবং দ্বিতীয় পরীক্ষার সেটটির জন্য 94% উত্তর দিন, কারণ আলগরিদম ছাগলের জন্য 1% একটি অনিবার্য ফলাফল দেয় This এটি আরও দীর্ঘ গণনার সময় ব্যয় করে 100% পর্যন্ত উত্থাপিত হতে পারে আরও মান পরীক্ষা RecognitionThreshold। থেকে পালন 100করার জন্য 1000sufficies; কোনও কারণে ম্যাথামেটিকাকে মনে হয় যে এটি একটি খুব দুষ্টু চিত্র! ক্যাপরিন প্রাণী থেকে হুফেড মামালিতে স্বীকৃতি সত্তা পরিবর্তন করাও কাজ বলে মনে হচ্ছে।

Ungolfed:

goatness[image_] := Count[
                      Table[
                        ImageInstanceQ[
                          image, Entity["Concept", "CaprineAnimal::4p79r"],
                          RecognitionThreshold -> threshold
                        ],
                        {threshold, 0, 0.5, 0.01}
                      ],
                      True
                    ]

Function[{image},
  StringJoin[      
    If[goatness[image] > goatness[ImageReflect[image]],
      "Up",
      "Down"
    ],
    "goat"
  ]
]

বিকল্প সমাধান, 100% + বোনাস

g[t_][i_] := ImageInstanceQ[i, "caprine animal", RecognitionThreshold -> t]
f[i_, l_: 0, u_: 1] := Module[{m = (2 l + u)/3, r},
  r = g[m] /@ {i, ImageReflect@i};
  If[Equal @@ r,
   If[First@r, f[i, m, u], f[i, l, m]],
   If[First@r, "Up", "Down"] <> "goat"
   ]
  ]

এইটি আগের মতো একই কৌশল ব্যবহার করে তবে প্রান্তিকের উপর বাইনারি অনুসন্ধান করে। এখানে দুটি কার্যাদি জড়িত রয়েছে:

  • g[t]এর যুক্তিটি থ্রেশহোল্ড সহ একটি ছাগল চিত্র কিনা তা ফেরত দেয় t
  • fতিনটি পরামিতি লাগে: একটি চিত্র এবং প্রান্তিকের উপরের এবং নীচের দিকে আবদ্ধ। এটি পুনরাবৃত্ত হয়; এটি mউপরের এবং নিম্ন প্রান্তিকের (নীচের দিকে পক্ষপাতদুষ্ট) মধ্যে একটি প্রান্তিক পরীক্ষা করে কাজ করে । চিত্র এবং প্রতিফলিত চিত্রটি যদি ছাগল বা ছাগল উভয়ই হয় তবে এটি পরিসরের নীচের বা উপরের অংশটিকে যথাযথ হিসাবে সরিয়ে দেয় এবং নিজেকে আবার কল করে। অন্যথায়, যদি একটি চিত্র ছাগল এবং অন্যটি গো-ছাগল হয় Upgoatতবে এটি প্রথম চিত্র ছাগল এবং Downgoatঅন্যথায় (যদি দ্বিতীয়টি, প্রতিচ্ছবি চিত্র ছাগল হয়) ফিরে আসে।

ফাংশন সংজ্ঞাগুলি কিছুটা ব্যাখ্যা দাবী করে। প্রথমত, ফাংশন অ্যাপ্লিকেশনটি বাম-সহযোগী হয়। এর অর্থ g[x][y]হ'ল এর মতো কিছু ব্যাখ্যা করা হয় (g[x])[y]; " g[x]প্রয়োগের ফলাফল y।"

দ্বিতীয়ত, ম্যাথামেটিকায় অ্যাসাইনমেন্ট একটি প্রতিস্থাপনের নিয়ম সংজ্ঞায়নের সমান। অর্থাৎ f[x_] := x^2নেই না মানে "নামে একটি ফাংশন ডিক্লেয়ার fপরামিতি সঙ্গে xযে ফেরৎ x^2;" এর অর্থ এর কাছাকাছি, "যখনই আপনি এর মতো কিছু দেখেন f[ ... ], জিনিসটিকে ভিতরে কল করুন xএবং পুরো জিনিসটি প্রতিস্থাপন করুন x^2।"

এই দু'টিকে একসাথে রেখে আমরা দেখতে পাচ্ছি যে সংজ্ঞাটি gম্যাথমেটিকাকে বলছে যে ফর্মের কোনও অভিব্যক্তি (g[ ... ])[ ... ]নিয়োগের ডান হাতের সাথে প্রতিস্থাপন করতে ।

ম্যাথামেটিকা ​​যখন প্রকাশের মুখোমুখি হয় g[m](এর দ্বিতীয় লাইনে f), তখন এটি দেখতে পায় যে এক্সপ্রেশনটি তার জানা কোনও নিয়মের সাথে মেলে না এবং এটি অপরিবর্তিত রেখে দেয় leaves তারপরে এটি Mapঅপারেটরের সাথে মেলে /@, যার তর্কগুলি g[m]এবং তালিকা {i, ImageReflect@i}। ( /@এটি ইনফিক্স স্বরলিপি; এই অভিব্যক্তিটি হুবহু সমান Map[g[m], { ... }])) Mapএর দ্বিতীয় তর্কটির প্রতিটি উপাদানকে তার প্রথম যুক্তি প্রয়োগ করে প্রতিস্থাপন করা হয়, তাই আমরা পাই {(g[m])[i], (g[m])[ ... ]}। এখন ম্যাথমেটিকা ​​দেখেছে যে প্রতিটি উপাদান সংজ্ঞাটির সাথে মেলে gএবং প্রতিস্থাপনটি করে।

এইভাবে আমরা gএকটি ফাংশনের মতো কাজ করতে পারি যা অন্য ফাংশনটি ফিরিয়ে দেয়; এটি হ'ল আমাদের লিখিতভাবে প্রায় কাজ করে:

g[t_] := Function[{i}, ImageInstanceQ[i, "caprine animal", RecognitionThreshold -> t]]

(এক্ষেত্রে g[t]তার নিজস্ব মূল্যায়নের ব্যতীত Functionঅন্যটির কাছে এর আগে g[t]নিজেই কোনও রূপান্তর হয়নি was)

আমি যে চূড়ান্ত কৌশলটি ব্যবহার করি তা হ'ল alচ্ছিক প্যাটার্ন। প্যাটার্নটির l_ : 0অর্থ "কোনও অভিব্যক্তি মেলে এবং এটিকে উপলভ্য করে দিন l, বা কোনও কিছুর সাথে মেলে না এবং 0হিসাবে উপলভ্য করে l।" সুতরাং, যদি আপনি f[i]একটি যুক্তি (পরীক্ষার জন্য চিত্র) দিয়ে কল করেন তবে এটি কল করার মতো f[i, 0, 1]

এখানে আমি পরীক্ষার জোতা ব্যবহার করেছি:

gist = Import["https://api.github.com/gists/3fb94bfaa7364ccdd8e2", "JSON"];
{names, urls} = Transpose[{"filename", "raw_url"} /. Last /@ ("files" /. gist)];
images = Import /@ urls;
result = f /@ images
Tally@MapThread[StringContainsQ[##, IgnoreCase -> True] &, {names, result}]
(* {{True, 18}} *)

user = "items" /.
           Import["https://api.stackexchange.com/2.2/users/40695?site=codegolf", "JSON"];
pic = Import[First["profile_image" /. user]];
name = First["display_name" /. user];
name == f@pic
(* True *)

344
ছাগল নির্ধারণের জন্য গণিতের একটি বিল্টিন রয়েছে। আমি এটি সম্পর্কে অনুভূতি জানি না।
রবার্ট ফ্রেজার

119
ওও Whaaat সেখানে একটি builtin এর এই .... বাহ ...
Downgoat

171
তুমি আমার সাথে মজা করছো ছাগল ...
corsiKa

27
ম্যাথমেটিকার জন্য +1 কোনও চিত্রটি "আরও ছাগল" তা দেখতে সক্ষম হতে পারে।
কিউব্রেট

9
এটি ইতিবাচকভাবে হাস্যকর। +1 টি।
ApproachingDarknessFish

71

জাভাস্ক্রিপ্ট, 93.9%

var solution = function(imageUrl, settings) {

  // Settings
  settings = settings || {};
  var colourDifferenceCutoff = settings.colourDifferenceCutoff || 0.1,
      startX = settings.startX || 55,
      startY = settings.startY || 53;

  // Draw the image to the canvas
  var canvas = document.createElement("canvas"),
      context = canvas.getContext("2d"),
      image = new Image();
  image.src = imageUrl;
  image.onload = function(e) {
    canvas.width = image.width;
    canvas.height = image.height;
    context.drawImage(image, 0, 0);

    // Gets the average colour of an area
    function getColour(x, y) {

      // Get the image data from the canvas
      var sizeX = image.width / 100,
          sizeY = image.height / 100,
          data = context.getImageData(
            x * sizeX | 0,
            y * sizeY | 0,
            sizeX | 0,
            sizeY | 0
          ).data;

      // Get the average of the pixel colours
      var average = [ 0, 0, 0 ],
          length = data.length / 4;
      for(var i = 0; i < length; i++) {
        average[0] += data[i * 4] / length;
        average[1] += data[i * 4 + 1] / length;
        average[2] += data[i * 4 + 2] / length;
      }
      return average;
    }

    // Gets the lightness of similar colours above or below the centre
    function getLightness(direction) {
      var centre = getColour(startX, startY),
          colours = [],
          increment = direction == "above" ? -1 : 1;
      for(var y = startY; y > 0 && y < 100; y += increment) {
        var colour = getColour(startX, y);

        // If the colour is sufficiently different
        if(
          (
            Math.abs(colour[0] - centre[0]) +
            Math.abs(colour[1] - centre[1]) +
            Math.abs(colour[2] - centre[2])
          ) / 256 / 3
          > colourDifferenceCutoff
        ) break;
        else colours.push(colour);
      }

      // Calculate the average lightness
      var lightness = 0;
      for(var i = 0; i < colours.length; i++) {
        lightness +=
          (colours[i][0] + colours[i][1] + colours[i][2])
          / 256 / 3 / colours.length;
      }

      /*
      console.log(
        "Direction:", direction,
        "Checked y = 50 to:", y,
        "Average lightness:", lightness
      );
      */
      return lightness;
    }

    // Compare the lightness above and below the starting point
    //console.log("Results for:", imageUrl);
    var above = getLightness("above"),
        below = getLightness("below"),
        result = above > below ? "Upgoat" : "Downgoat";
    console.log(result);
    return result;
  };
};
<div ondrop="event.preventDefault();r=new FileReader;r.onload=e=>{document.getElementById`G`.src=imageUrl=e.target.result;console.log=v=>document.getElementById`R`.textContent=v;solution(imageUrl);};r.readAsDataURL(event.dataTransfer.files[0]);" ondragover="event.preventDefault()" style="height:160px;border-radius:12px;border:2px dashed #999;font-family:Arial,sans-serif;padding:8px"><p style="font-style:italic;padding:0;margin:0">Drag & drop image <strong>file</strong> (not just link) to test here... (requires HTML5 browser)</p><image style="height:100px" id="G" /><pre id="R"></pre></div>

ব্যাখ্যা

আলোটি কোথা থেকে আসছে তা যাচাই করার জন্য ব্ল্যাকক্যাপের ধারণার সহজ বাস্তবায়ন ।

বেশিরভাগ ছাগল তাদের চিত্রগুলির কেন্দ্রে থাকে এবং সূর্যের আলোর কারণে তাদের পেট সবসময় পিঠের চেয়ে গাer় হয়। প্রোগ্রামটি চিত্রের মাঝখানে শুরু হয় এবং রঙের একটি নোট তৈরি করে। এরপরে এটি কেন্দ্রের উপরে এবং নীচে পিক্সেলের গড় হালকাতা পায় যেখানে রঙের কেন্দ্রের রঙের চেয়ে আলাদা হয় (যখন ছাগলের দেহ শেষ হয় এবং পটভূমি শুরু হয়)। যে কোনও দিকের হালকা এটি নির্ধারণ করে যে এটি একটি উড়োজাহাজ বা ডাউনগোট।

দ্বিতীয় পরীক্ষার ক্ষেত্রে ডাউনগোট 9 এবং আপগোট 7 এবং 9 এর জন্য ব্যর্থ।


4
নিস! আমি আশা করিনি যে 100% এত সহজ হবে। আমি পরীক্ষার মামলার দ্বিতীয় ব্যাচ যুক্ত করেছি , আপনি কি তার ভিত্তিতে আপনার উত্তর আপডেট করতে পারবেন?
ডাউনগোট

এখানে বিকল্প লিঙ্কটি কি কাজ করে?
ডাউনগোট

@ ডাউনগোট ইয়েপ স্কোর আপডেট হয়েছে।
ব্যবহারকারী 81655

দুর্ভাগ্যক্রমে, আমি ছবিটি 180 ated ঘোরানোর পরে এবং এটি উল্লম্বভাবে উল্টানোর পরে এটি ব্যর্থ হয়। স্ক্রিনশট
এমআর 5

@ এমআর 5 আকর্ষণীয় ... তাই আপনার স্ক্রিনশটের চিত্রটি কি ডাউনগোট 4 থেকে কিছুটা আলাদা? এছাড়াও ব্রাউজারগুলির মধ্যে সামান্য পার্থক্য রয়েছে (এবং সম্ভবত অপারেটিং সিস্টেম?) এই উত্তরের পরামিতিগুলির সাথে আমি ক্রোম এবং ফায়ারফক্স (উইন্ডোজ ব্যবহার করে) উভয়ের জন্য একই ফলাফল পেয়েছি।
ব্যবহারকারী 81655

63

পাইথন, 100%, 225 বাইট

import requests

SEARCH = "http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl="
THRESHOLD = 30
url = raw_input()
print "Upgoat" if requests.get(SEARCH + url).content.count('img') > THRESHOLD else "Downgoat"

ছাগলে বিপরীত চিত্র অনুসন্ধান ব্যবহার করুন। পৃষ্ঠাটি যদি সন্তোষজনক পরিমাণের ফলাফল দেয় তবে এটি সম্ভবত একটি wardsর্ধ্বমুখী ছাগল। এই সমাধানটি সম্ভবত হাতে আঁকানো ছাগলগুলিতে বা বিং কখনও দুর্নীতিগ্রস্থ না হলে কাজ করবে না।


32
আমি এই উত্তরটি সম্পর্কে কেমন অনুভব করছি তা সম্পর্কে আমি নিশ্চিত নই। এটি সীমানা বৈধ, এবং প্রায় এই ফাঁকটি লঙ্ঘন করছে । বর্তমানে এটি সুস্পষ্ট নিয়ম ভঙ্গ করছে যে ইনপুটটি কোনও ফাইল বা স্থানীয় পাথ, কোনও url নয়। এটি আকর্ষণীয় উত্তরে তবে সীমান্তরেখার বৈধতা কী তা বিবেচনা করে আমি বলব এটির প্রতিযোগিতাটি প্রশ্নবিদ্ধ।
ডাউনগোট

50
@ ডাউনগোট যাতে আপনি তার উত্তরটি হ্রাস করেন?
Ave নগরী:

2
ইমাগার বা অন্য কিছুতে ফাইল আপলোড করে এটি ঠিক করুন ^^ এছাড়াও বিশ্বে আপনি বিং ব্যবহার করবেন কেন ???
Eumel

17
@ ইমেল কারণ গুগল এইচটিটিপি অনুরোধে থাকা ব্যবহারকারী-এজেন্ট কোনও সত্যিকারের ওয়েব ব্রাউজারের (বা তাদের মঞ্জুরিপ্রাপ্ত কিছু) এবং অন্য কোনও অ্যাপ্লিকেশন বা স্ক্রিপ্টের নয় কিনা তা পরীক্ষা করে। বিং এটি পরীক্ষা করে না, তারা আগত অনুরোধগুলি পাওয়ার জন্য মরিয়া। আমি অনুমান করি যে ব্যবহারকারী-এজেন্ট অতিরিক্ত কোড দিয়ে নকল হতে পারে এবং এটি কোনও কোড-গল্ফ না হওয়ায় কিছু যায় আসে না।
জর্ডিভিলাপ্লানা

14
কোড গল্ফ উত্তরগুলি আরও ছোট করার জন্য সেই মানক লুফোল রয়েছে। এটি কোনও কোড গল্ফ চ্যালেঞ্জ নয় তাই
লুফোলটি

58

জাভা, 93.9% 100%

এটি চিত্রের উপরের এবং নীচের অংশে সারি বিপরীতে নির্ধারণ করে কাজ করে। আমি ধরে নিই যে চিত্রের নীচের অর্ধেকের মধ্যে বিপরীতে 2 টি কারণে বড়:

  • 4 পা নীচের অংশে আছে
  • উপরের অংশের পটভূমিটি অস্পষ্ট হবে কারণ এটি সাধারণত ফোকাস-অঞ্চল

প্রতিবেশী পিক্সেল মানের পার্থক্য গণনা করে, পার্থক্যটি স্কোয়ারিং করে এবং সমস্ত স্কোয়ারের যোগফল রেখে আমি প্রতিটি সারিটির বিপরীতে নির্ধারণ করি।

হালনাগাদ

দ্বিতীয় ব্যাচের কিছু চিত্র আসল অ্যালগরিদম নিয়ে সমস্যা সৃষ্টি করেছিল।

upgoat3.jpg

এই চিত্রটি স্বচ্ছতা ব্যবহার করছে যা পূর্বে উপেক্ষা করা হয়েছিল। এই সমস্যাটি সমাধান করার জন্য বেশ কয়েকটি সম্ভাবনা রয়েছে তবে আমি 400x400 কালো পটভূমিতে সমস্ত চিত্র রেন্ডার করতে পছন্দ করেছি। এর নিম্নলিখিত সুবিধা রয়েছে:

  • আলফা চ্যানেল সহ চিত্রগুলি পরিচালনা করে
  • ইনডেক্সড এবং গ্রেস্কেল চিত্রগুলি পরিচালনা করে
  • কর্মক্ষমতা উন্নত করে (এই 13 এমপি চিত্রগুলি প্রক্রিয়া করার প্রয়োজন নেই)

downgoat8.jpg / upgoat8.jpg

এই চিত্রগুলি ছাগলের শরীরে বিশদভাবে বর্ণনা করেছে। এখানে সমাধানটি ছিল কেবল চিত্রটিকে উল্লম্ব দিক দিয়ে ঝাপসা করা। যাইহোক, এটি প্রথম ব্যাচের চিত্রগুলির সাথে সমস্যা তৈরি করেছে, যার পটভূমিতে উল্লম্ব কাঠামো রয়েছে। এখানে সমাধানটি ছিল কেবলমাত্র একটি নির্দিষ্ট প্রান্তিকের চেয়ে বেশি পার্থক্যগুলি গণনা করা এবং পার্থক্যের প্রকৃত মানটিকে উপেক্ষা করা।

সংক্ষেপে বলা হয়েছে, আপডেট করা অ্যালগরিদম চিত্রগুলির অনেক পার্থক্য সহ এমন অঞ্চলগুলির সন্ধান করে যা প্রিপ্রোসেসিংয়ের পরে এর মতো দেখাবে:

এখানে চিত্র বর্ণনা লিখুন

import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class UpDownGoat {
    private static final int IMAGE_SIZE = 400;
    private static final int BLUR_SIZE = 50;

    private static BufferedImage blur(BufferedImage image) {
        BufferedImage result = new BufferedImage(image.getWidth(), image.getHeight() - BLUR_SIZE + 1,
                BufferedImage.TYPE_INT_RGB);
        for (int b = 0; b < image.getRaster().getNumBands(); ++b) {
            for (int x = 0; x < result.getWidth(); ++x) {
                for (int y = 0; y < result.getHeight(); ++y) {
                    int sum = 0;
                    for (int y1 = 0; y1 < BLUR_SIZE; ++y1) {
                        sum += image.getRaster().getSample(x, y + y1, b);
                    }
                    result.getRaster().setSample(x, y, b, sum / BLUR_SIZE);
                }
            }
        }
        return result;
    }

    private static long calcContrast(Raster raster, int y0, int y1) {
        long result = 0;
        for (int b = 0; b < raster.getNumBands(); ++b) {
            for (int y = y0; y < y1; ++y) {
                long prev = raster.getSample(0, y, b);
                for (int x = 1; x < raster.getWidth(); ++x) {
                    long current = raster.getSample(x, y, b);
                    result += Math.abs(current - prev) > 5 ? 1 : 0;
                    prev = current;
                }
            }
        }
        return result;
    }

    private static boolean isUp(File file) throws IOException {
        BufferedImage image = new BufferedImage(IMAGE_SIZE, IMAGE_SIZE, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        graphics.drawImage(ImageIO.read(file), 0, 0, image.getWidth(), image.getHeight(), null);
        graphics.dispose();
        image = blur(image);
        int halfHeight = image.getHeight() / 2;
        return calcContrast(image.getRaster(), 0, halfHeight) < calcContrast(image.getRaster(),
                image.getHeight() - halfHeight, image.getHeight());
    }

    public static void main(String[] args) throws IOException {
        System.out.println(isUp(new File(args[0])) ? "Upgoat" : "Downgoat");
    }
}

এখানে বিকল্প লিঙ্কটি কি কাজ করে?
ডাউনগোট

@ ডাউনগোট হ্যাঁ, এটি কার্যকর ছিল। আমি স্কোর আপডেট করেছি (আপনার অবতারের বোনাস পয়েন্টগুলি সহ যা সঠিকভাবে স্বীকৃত নয় :) :)
স্লেফার

38

পাইথন 3, 91.6%

নতুন পরীক্ষা মামলার সাথে সংশোধিত

আপনি পরীক্ষা করতে চান ছাগলের ছবিতে ফাইলের নাম সেট করুন। এটি চিত্রের উপরের / নীচে অসম্পূর্ণ তৈরি করতে কার্নেল ব্যবহার করে I

from PIL import Image, ImageFilter
import statistics
k=(2,2,2,0,0,0,-2,-2,-2)
filename='0.png'
im=Image.open(filename)
im=im.filter(ImageFilter.Kernel((3,3),k,1,128))
A=list(im.resize((10,10),1).getdata())
im.close()
a0=[]
aa=0
for y in range(0,len(A)):
    y=A[y]
    a0.append(y[0]+y[1]+y[2])
aa=statistics.mean(a0)
if aa<383.6974:
    print('Upgoat')
else:
    print('Downgoat')

3
+1 চমৎকার কাজ! আমি সত্যিই জিনিসটা উচিত একটি ম্যাক PIL ইনস্টল করতে কিভাবে ...
Downgoat

আমি পরীক্ষার মামলার দ্বিতীয় ব্যাচ যুক্ত করেছি , আপনি কি তার ভিত্তিতে নিজের উত্তর আপডেট করতে পারবেন?
ডাউনগোট

@ ডাওনগোট সবেমাত্র করেছে
ম্যাজেন্টা

@ ডাউনওয়েটpip install Pillow
আসফ

16

হফ ট্রান্সফর্ম সহ ওপেনসিভি, 100%

আমার আসল ধারণাটি ছিল ছাগলের পায়ে উল্লম্ব রেখা সনাক্ত করা এবং এটির দেহ এবং দিগন্তের তুলনায় উল্লম্ব অবস্থান নির্ধারণ করা।

যেমনটি দেখা যাচ্ছে, সমস্ত চিত্রের মধ্যে, স্থলটি অত্যন্ত কোলাহলপূর্ণ, প্রচুর ক্যানি প্রান্ত সনাক্তকরণ আউটপুট তৈরি করে এবং হুফ ট্রান্সফর্ম থেকে সনাক্ত করা লাইনগুলির সাথে সম্পর্কিত। আমার কৌশলটি তখন নির্ধারণ করা হয়েছিল যে অনুভূমিক রেখাগুলি চিত্রের উপরের বা নীচের অর্ধেকের মধ্যে রয়েছে যা সমস্যা সমাধানের জন্য যথেষ্ট ছিল।

# Most of this code is from OpenCV examples
import cv2
import numpy as np

def is_upgoat(path):
    img = cv2.imread(path)
    height, width, channels = img.shape
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 100, 200, apertureSize=3)

    lines = cv2.HoughLines(edges, 1, np.pi/180, 200, None, 0, 0, np.pi/2-0.5, np.pi/2+0.5)
    rho_small = 0

    for line in lines:
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 5000*(-b))
        y1 = int(y0 + 5000*(a))
        x2 = int(x0 - 5000*(-b))
        y2 = int(y0 - 5000*(a))

        if rho/height < 1/2: rho_small += 1
        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),1, cv2.LINE_AA)

    output_dir = "output/"
    img_name = path[:-4]
    cv2.imwrite(output_dir + img_name + "img.jpg", img)
    cv2.imwrite(output_dir + img_name + "edges.jpg", edges)

    return rho_small / len(lines) < 1/2


for i in range(1, 10):
    downgoat_path = "downgoat" + str(i) + ".jpg"
    print(downgoat_path, is_upgoat(downgoat_path))

for i in range(1, 10):
    upgoat_path = "upgoat" + str(i) + ".jpg"
    print(upgoat_path, is_upgoat(upgoat_path))

চিত্রগুলি আউটপুট না করে পুরো ফাংশনটি এখানে:

def is_upgoat(path):
    img = cv2.imread(path)
    height, width, channels = img.shape
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 100, 200, apertureSize=3)

    lines = cv2.HoughLines(edges, 1, np.pi/180, 200, None, 0, 0, np.pi/2-0.5, np.pi/2+0.5)
    rho_small = 0

    for line in lines:
        rho, theta = line[0]
        if rho/height < 1/2: rho_small += 1

    return rho_small / len(lines) < 1/2

ডাউনগোট 1 প্রান্ত:

Downgoat1 প্রান্ত

ডাউনগোট 1 লাইন:

ডাউনগোট 1 লাইন

উপগোট 2 প্রান্ত এবং লাইন:

উপগ্রহ 2 প্রান্ত উপগ্রহ 2 লাইন

এমনকি পদ্ধতিটি বিশেষত কোলাহলপূর্ণ চিত্রগুলিতে ভাল কাজ করেছে। এখানে ডাউনগোট 3 প্রান্ত এবং লাইন রয়েছে:

downgoat3 প্রান্ত ডাউনগোট 3 লাইন


অভিযোজ্য বস্তু

হাফ ট্রান্সফর্ম ক্যানি প্রান্ত সনাক্তকরণের চেয়ে অনেক ভাল কাজ করার আগে এটি মধ্যমা অস্পষ্ট এবং অভিযোজিত গাউসিয়ান প্রান্তিকের দেখা দেয়, বেশিরভাগ যেহেতু মাঝারি ঝাপসা কোলাহলপূর্ণ অঞ্চলে ভাল। তবে তাত্ক্ষণিকভাবে আমার আসল পদ্ধতির সমস্যাগুলি স্পষ্ট: বিশিষ্ট পটভূমি লাইনগুলি সনাক্ত করা হয়েছে, পাশাপাশি কিছু ছবিতে ছাগলের মুখও রয়েছে।

def is_upgoat2(path):
    img = cv2.imread(path)
    #height, width, channels = img.shape
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = cv2.medianBlur(gray, 19)
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                   cv2.THRESH_BINARY_INV, 11, 2)

    lines = cv2.HoughLinesP(thresh, 1, np.pi / 180, threshold=100,
                            minLineLength=50, maxLineGap=10)

    vert_y = []
    horiz_y = []
    for line in lines:
        x1, y1, x2, y2 = line[0]
        # Vertical lines
        if x1 == x2 or abs((y2-y1)/(x2-x1)) > 3:
            vert_y.append((y1+y2)/2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

        # Horizontal lines
        if x1 != x2 and abs((y2-y1)/(x2-x1)) < 1/3:
            horiz_y.append((y1+y2)/2)
            cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)


    print(np.median(vert_y), np.median(horiz_y))

এখানে ডাউনগোট 8:

downgoat8 ত্রিশ downgoat8 প্রান্ত

কনট্যুরস (কোড দেখানো হয়নি) ছাগলের উপরের প্রান্তটি (মেরুদণ্ড) বেশ ভালভাবে সনাক্ত করে তবে পুরো আকারটি পেতে ব্যর্থ হয়।

contours এবং

আরও গবেষণা: ওপেনসিভিতে হর-বৈশিষ্ট্য ভিত্তিক অবজেক্ট সনাক্তকরণ রয়েছে যা সাধারণত গাড়ি এবং মুখের মতো জিনিসের জন্য ব্যবহৃত হয়, তবে এটি সম্ভবত ছাগলের জন্যও স্বতন্ত্র আকারের কারণে কাজ করতে পারে।

2 ডি বৈশিষ্ট্য স্বীকৃতি আশাব্যঞ্জক দেখাচ্ছে (স্কেলিং এবং রোটেশনের কারণে টেমপ্লেট মিলছে না) তবে আমি সি ++ এর জন্য ওপেনসিভি বের করতে খুব অলস।


10

পাইথন 3, ন্যালি, সাইকিট, 100%

এই কোডটি ছাগল প্রশিক্ষিত চিত্রের শ্রেণিবদ্ধকারীকে একটি একক ফাইলের নামের বিপরীতে চালায়, 'উপগোট' বা 'ডাউনগোট' প্রিন্ট করে। কোডটি নিজেই পাইথন 3 এর এক লাইন, এর আগে একটি একক বিশালাকার স্ট্রিং এবং আমদানি লাইন থাকে। দৈত্য স্ট্রিংটি আসলে ছাগল প্রশিক্ষিত শ্রেণিবদ্ধকারী, যা রানটাইমগুলিতে পিকআপ করা হয় না এবং শ্রেণিবিন্যাসের জন্য ইনপুট চিত্র দেয়।

ক্লাসিফায়ার টিপটিটি সিস্টেম ব্যবহার করে পেনসিলভেনিয়া বিশ্ববিদ্যালয়ের রান্ডাল ওলসন এবং দল থেকে তৈরি করা হয়েছিল। টিপিওটি জেনেটিক প্রোগ্রামিং ব্যবহার করে মেশিন-লার্নিং ইমেজ শ্রেণিবদ্ধ পাইপলাইনগুলি বিকশিত করতে সহায়তা করে। মূলত এটি আপনার দেওয়া ইনপুট ডেটার সাথে সর্বোত্তমভাবে কাজ করার জন্য বিভিন্ন পরামিতি এবং ধরণের শ্রেণিবিন্যাস বেছে নিতে কৃত্রিম নির্বাচন ব্যবহার করে, যাতে আপনাকে বেশ ভাল পাইপলাইন সেটআপ পেতে মেশিন লার্নিং সম্পর্কে বেশি কিছু জানতে হবে না। https://github.com/EpistasisLab/tpot । টিপিওটি বিজ্ঞান-শিখার শীর্ষে চলেছে, ইনরিয়া এট আল, http://scikit-learn.org/stable/

আমি টিভিতে প্রায় একশ ছাগলের ছবি দিয়েছি যা আমি ইন্টারনেটে পেয়েছি। আমি সেই ছবিগুলি বেছে নিয়েছি যা টেস্টে ছাগলের সাথে তুলনামূলকভাবে অনুরূপ ছিল, অর্থাৎ "ক্ষেত্রের মধ্যে", পাশ থেকে, চিত্রটিতে অন্য কিছু না করে। এই টিপিওটি প্রক্রিয়াটির আউটপুটটি মূলত একটি সাইকিট-লার এক্সট্রাট্রি ক্লাসিফায়ার অবজেক্ট ছিল। আমার ছাগলের উপর প্রশিক্ষিত (বা 'ফিট') হওয়ার পরে এই চিত্রের শ্রেণিবদ্ধকারীকে বিশাল স্ট্রিংয়ে আচ্ছাদিত করা হয়েছিল। তারপরে স্ট্রিংয়ে কেবল শ্রেণিবদ্ধ কোড নয়, তবে ছাগলের সমস্ত চিত্রের প্রশিক্ষণের "ছাপ" রয়েছে।

প্রশিক্ষণের চিত্রগুলিতে পরীক্ষার চিত্রটিতে 'ছাগলকে দাঁড় করানো' অন্তর্ভুক্ত করে প্রশিক্ষণের সময় আমি কিছুটা প্রতারণা করেছি, তবে জেনেরিক ছাগল-ইন-এ-ফিল্ডের চিত্রগুলিতে এটি এখনও বেশ ভালভাবে কাজ করে। সেখানে কোনও ট্রেডঅফ রয়েছে বলে মনে হচ্ছে - যত বেশি আমি টিপিওটি চালাতে দেব, এটি তত উন্নত শ্রেণিবদ্ধকারী। তবে উন্নত শ্রেণিবদ্ধীরাও 'বড়' বলে মনে হচ্ছে এবং শেষ পর্যন্ত গল্ফ খেলায় @ ডাউনগোটের দেওয়া 30,000 বাইট সীমাটির বিপরীতে দৌড়ে। এই কর্মসূচিটি বর্তমানে প্রায় 27 কেবাইটে রয়েছে। দয়া করে নোট করুন যে পরীক্ষার চিত্রগুলির 'দ্বিতীয় গ্রুপ'টি' ব্যাকআপ লিঙ্ক 'এর মতোই নষ্ট হয়ে গেছে, সুতরাং এটি কীভাবে তা করবে তা আমি নিশ্চিত নই। যদি সেগুলি মেরামত করা হয়, আমি সম্ভবত আবার শুরু করব, টিপিওটি পুনরায় চালু করব এবং এটিকে একগুচ্ছ নতুন চিত্র ফিড করব এবং দেখুন আমি 30 কে বাইটের অধীনে একটি নতুন শ্রেণিবদ্ধ তৈরি করতে পারছি কিনা।

ধন্যবাদ

আচার, bz2, বেস 64, নম্পি, sys, skimage.transform, skimage.io আমদানি করুন
গুলি = '' '
QlpoOTFBWSZTWbH8iTYAp4Z ///////////////////////////////////////////// 4E6fAAPR
OCLRpIfAbvhgIAAAAJCgAG68fDuYNrAwQbsADQAKBIJBITroq0UyRVNGVqljJVSvgAAAAEgAAAAA
AAO7AABugXamjQYyCIABQ6O7LEQ2hRwOdKSFCVuGgF1jBthaAUAAEgKGLVAAAAAKKCVFBIFEFKVE
DQNAaNPUGjTJjU000G1PU0ZAaaGJoyDQaDaQxPRP0oZpNo9NRGaJtRoaYmmyammnqGAjTBNpG1Ga
mT01GRoemTFNnoRNPZCm09pmP9VVVBlIgAAAmgAAExNAaBo0A1MA0ZAADRMCZoAajBNMGjTSntAC
YJgGiYJjU0YNTTCYCYTANABMATKHInox / 7VSqoZMgGQaGRoADQaDTRo00YQaAGgAGQ000yGmjQNG
mQ00DRhNADCNAAGmTIZGgaNGmgMhoZNAZDIIp4EBNACNNEMmhUjTyJ6T0h6k9qnqbTU8NCnqDaTJ
oaabTUaNqG0jIyG0T0ID1BkaGj1ABoMgGgwIxNAGhkGmTCZA0Ghk0DCKUQECYBMmIEyJhlPTU8k9
TGmpP0NNU9tRomTaU9PSep6UeIGGSGJppsU9MTKbVPyFPZMU8ET9QmmnppiJp5TT0A1PNSeJknpH
qb1T1PFGnqeqeNTSemyaT / VUEKiJAQp4JtJ6iTZNQNMgaabUBtRtTymxDUaepp6mgemp6ag9I9Ey
aaM1NGQaaDQ9TNJ6hoDag00PUaA00PUB6gNGR6jagANHqDT1DTTI9J0gKvsPxi9r9nnM1WbDVUTR
nBgijNiWaqCjE4kzhxREVREZNmqgdLCqGJUXEg0K0IUotA0AJiVHEoUpQUI0CFDQUFAlI0FUjiQc
SjQA0DRTQI0jSJRTQLSrSjUQlFBRSBSNFBQAUo0lA0CYjECNjAjiEaVChEKBKUCgxAi4gVxAA4hQ
cQABGiIMAYEDMI90oGBe6yPBxuR2XhdxeZ1XL5AOe46 / lgb3BhDEJzJA3cev7vi53o25xTVTDRTL
S1W9eT6bsd7nyJqit + + oxYIxWMYiKoqLGDERRMbmDk5 / f6rkb21xwxXFwxJYkqLFNSVjGDBjFGIiE
qiASEhEiLteHuvnMwqrqQgKhgZCZiYGIVCJEec2WyYMxkzjDibGEznHXdX7PtN84txMODGGnHFxY
GsFUZxYzGSoxZjnNNLO / 3fouWnGjjcYxnGCc4xVGycVFEZjDZsNpgzOM4UxIRQSGr + + hhCVYTQEJB
MhACqGoDJDAR + + সি + VeBCIQEqhACCRSMAEqiA0MARCEZiZkNQiKEJACuhYhx6tAQhhet2tXbimsqnn
5qIY9C5JNHDqZp2rlRGwrWGuGgdu4FIYehsHhUKrgtTZWLIJqoOGsaUi5c7iYp2n + + 46rbNtk8pSy
TJoqTh822poWQW92oaGuNk4 + + Qil6VnzEKp6Lla + + yUQqzH9N4p / vcI1WYVfBWLk53uwVcjn / iaf1x
kZJrY15LvF3c6bDSd7rtIF / CIeJ5ySSPDS8WpbhSth1jnyu1DFRb7ulLM6NlFMEVOCorVWdxjepR
5Nc0vgBvyASUIIJt9qydSewF7mdm76qnXx7NXCsl8ZDDG2 / 7KhXbsv3S1dTtXOitVYaUPrsnj + + NG
R1MPnB8p7Hvdwe4eXxf1Bf39iVuyg9r9aweH4Ht / NfXOQ4IJ + + q9UqxkeHy / Br1ixpI39nqf5 / 4gm
+ + LgfXIgl7f372D + + vf7 / 5D + + t8jLCs + + H23tsPj / lnZBkV + + XN / mfuvf + + 2anyF + + G + এ bGUypcqKqpb7iCo
QlBCSaYTfNYNeoXO19viV + + uYu6lckm6OXj9Tp9QzdR204Lp87r88k9ULU01rhNPleSE5XK01Nht2
wB94gHbgH5aAB / 4hTt + + y3OP41ivChK2SdsxThs4cw8p2uVsN5FTvdbYyDqkHKOdv6MDXJtk + + fP9U
5DFrCIhv7UQqmETgJWZWhQhDBUKlJVKRuLBari0uxZtg9q6L3K42KgbA1aXeD3ypsAhWxqK9TK59
zuFDq1sYAWeBrNuydhlVPhwDoa7rs0xZkRXtSwuyYXtqIGsoWv3eglDKBjICrev + T / pew8 // j513
S4f9JIPxCWiAoDeb + + iULXivpuL37uuEfiPr764B8OuKs1SrGVPUwelyHbu0yufCuMGLcP / 3fWryq
1UsZhJYJVQkrsEZBqJpkqWQiaYqbW9MsHsp75bTgxTNiy1cdasS2yU3GLG1jf1ajXwKd + + 5HugAoU
tkoFOFTCSlQpUQxsyVjWZPGsCg9gt9j818V6Kvl7v5rK1tfoqfGfF1VAAENVQVVB + + TUgAKqgAArd
D3XFc7OPq9D / bjG5yjUJeo + + UtdmF4WweIIIipSUqVK2ISSVr93 + + lkXLVyElqLZPL12cp3sc1CkPL
5IwHHuctF9lda56rrWDJy / ueRIKFF / fVB + + EAAlCWZzg3ywLIOUexFPhVz68zMJ9jK2cpO2Kkma3p
StTr71R0nR / Gqfiqg8EojIZ3LNE7UrqlPVIysrlogNqiJzimFb6yLlGnVjHz2EdpNV6XZ8iv7IdT
nN0ut93cJpaqV0cEixL2TzSPqmoXvqB6IKDm + + qmocLKnh2CWwsyqsMHtlV2 + + rqNzX3nVoN0Cg6vL
U2OQyZ + + xMs / gMc8yPKp5AIPqjjxNohmUc6ulA8IbleVQ2twH / Qc + + H3QukwweIdinUphR6cPtB8oN
K8g / jbgfO3A9NhBQDKIg5IFDqBF2Yg / kQT0lA9NUPUVfVEfWEfpiJ + + hQ2IB0oDtETMCZdHXCfrQN
qrthLhD0RNcJ6Y9EulXUgXS + + u3LqAPVXav7EuHVO3DzA3D5IeUZxJ4DyIIPZ5HqdwIIAjH3M3O7T
zfUe5873xTd7r3pwJvknerhHzvPn6vzoOpfBAxna5nUVkZ3qsbqsQFQxLQ0IOKkjliCAI5znlbm5
ub29vY6oAAAAAAAAAAAAACqqqgAAAAAAAAAAAKqqqtGpqaM + + fXWvZtXPp19ObTpWRyVSVzSaTnSZ
ISFlhCDkJ0WkkILE5KpK5pNJzpMkIm96uSToJKUXRg975M0XKsINJzoLBlWMGQ5RR0nKkFlFyRjJ
ISi6MHvfJmi5VhBpOdBYMqxgyHKKOk5QEVdE0FESD4xMmcIxOCC5hcb0F7mAXSUBk6EEkTEcoC8E
QpGkCSBCaqzovVoRckouU1WMZM95vNpRIYxVQaAgxG50kKDifCRxkiRWKxU3szGLmZHqkShKT2Fo
SIIujEYQg54EMjYyhJ5RKKM2hqbDJmxkz60YxYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVVVVVVVVVVVVVYygAwAAAA
AAAAAAAAADGQAFVVVYAAAAAAAAAAABVVVQAAAAAAAAAAAAAGMYxjGMYxjGAAAAAAAAAAAAKqqqxl
yZAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVVVVVVVVVVVVVVV
VAAAAAAAAAAAAVVVVaNXYZ9XJsNOhzoPjATZ7gjJHGZqZvMIwUCNiA3ON7mg8lirSKUQUpMTI0ZQ
NxorCSQKMFRGdFjaEZPhGEoxlKUgAAAAAAAAAAAACqqqgAAAAAAAAAAAAAMjNnzZtbNq6 + + jLp12r
r2pm17IyPWUke6TzZ7lg4jfIoCcieoRCAEiwesXIqSVnqmaamnS1s + + tra2wz6NGfV0Yy5cmXV058
2tp06cYYAAAAAAAAAAAAAAAAAAAAAAxjGMYxjGMYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqqqq
qqqqqqqqqsZcgAMAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqqqqqAAAAAAAAAAAAAAxkyZcmTL5X
UABaQRUCkFAEpBFgkAQi / yAIiyQorG8kZN9kMZMAVA1v18dKaO4pB0771qIqBiQVUIgVU / 3hAHaM
ggEApEkkXUCueVjqIqwv0JBQVdUQaqXTh01SUQosK + + NiU2qmwMHABALMSQ + + BUXW + + 7Xr09DlfqrdX
/ 939Xyc9YbJ / GjfTHd3mflYe8dzKSXup + R / HbwMZ8arVvHPdveWSm6FplrPLVmr2S843G4vE5O65
PJ4bC8DU5Luf + + 6ve / Xp0 / g6un0Hj / Ty0fn2O99Haarbd32V / Dny / Qc5sNf / zt7 + + dwOVu9 / 5Os2eg
0vXc5p9t4dmD1nVd / lairac3oOe0vZ9V + + fSdb + + LsOvxsPp9V1Gn8DR6 / ওয়াই / 7 / পিআরপি + + 7La38WU / 06fv
fB8TVaynfbXa6qUu6xdNqP7 + + FLY62em1Wnydnr9r3vjbDxtXkWeFrtT / nW63X6zw / E12s1 + + Vsrk /
ও H2 + + P5HkY97JyLvk5F6ud9cu5OTj3NtSvbUrsvL1VdclKMCEI / KZ + + htbPr46uEYwjGMeEz24bnash
zXEx3HMzQQZAQYBB9WpqbuxABZyiDy5zuTwGgskeZ3vWc + + ABzZFn1QCDPvZ0J96TVM1ENETFMVSQ
UxNFVVRK + + 690eoABfv372329iVOAmoTnKmXpwCVlmZmoABwwAAAORAAzRmgM6AZ85kAc2A6TpQ0Q
AAAClc5KO1AHe90CScngj / ABrQBsQABkXAGUWSrUqVKl9 / KLRiBAYDByIgJv / fkVEE72ARUN6QQT
av4jrx7Z + + ANFQeu4oaOQ2IIM36MBCY6 + + yU8Yn97qjqIuOZ + + 9iKAou4t0QKchQhdMMYRhCMLUcv + I
EQABvlVN9lZZYknOaiSc9 / oX6WU4KgZgAAAAAAAOS + + kDkWdAOdAAwgB98aQAAB + + 0dmnKykqA7gA7
w7yc1kqA8EDXNWbB4oANoeQLuMAF9XIowfMQzlqMIWrUYxtWoQjCNq1CEIxtWoQEKRQoVCgAKBEp
QKBWke4kA9PC9hAIHEkBD / IUkD2TCAb / pcCjmkJd2AO / lFXsIR35QfWwi + + hkF9fKi9rCIie4gRfE
ym3CH3EHl4A9hKhxJ / BgXBwisStCQLDeYA3MB6cvZLeLKyyysFJWKUJMzOQHtgAA4gA + + UAHIB9EA
M3ywBy + + eAAwh0AA6MAAaU6tpQkUTAAArsropQAAA14AAMYAcbi0uNS49KlS + + / Qygn9okGIUPw6YE
HpA8SfNPy / H4T7sxEA7lBBAPSIIKtIVMa6caqJDD5OfnbqJb71tVM6zwsIQAUgIwjvsAywAMqeVX
ve / 3pznOycydJCjgZyTUAAAAA + + gD6gDlDlA5YDPAHOgAYTQDog6M0QBpANIB1z9llcp0nR2juO5A
AqropQAANca4P / DDADGACtWDBhnIQjyV3R / 66ny2rhCMIQh7rcOMh + + Hynd5yMPK5XGdbifY0PcR3
GEI6fh9yjloxhCFqEIQhDeoQAD0YJX8q / evb4nOY3dZSk5qMzSmYnOgAADh3CgOJAA + + eAcnyYAA5
gAz4wgAHSgNH1BogAFlcp9lMHagAWJaidO + + AAAAAAMYACsGBCHpIWoQhpIRhDP6HjctrOQ4o6Lzb
P2RpiYdZjQD626Ff / PHsBn37P5PufLqbcUiBgCMIb3CAG6gC / VVOq9esSkUoSpIcDKyb3GZoAAAA
cYA4sA44MAAMAGdObAwQYQAH4OnAA6sdWDsHX35Uk7GgAAJ0lJRqQAAAABdumMZDbAKxRgxhnIQj
nd0ydDouH8vuGWtQhGEI6jwOK7n50c9L + + 2B4 / dPObGELUIbrGEY2oxhCEN5iPNAD1QXr053vTWWJ
SoUskoK67KSAcGOCe + + এএ + IAAAAPrAADmgAMIB + + M6I6YAAdUAdZRKnYzoDthpgFKWUkoAAAAABcu4
wAFaQwOWhCEYQjajGHm / S8dGMMH4cYwjEqlQCFz / 4edmzVADd7iqXwZpGvJyp7vSne5fDfw4NF8z
DLQjGELUIwjHeYwAADb0pelJOe7ybtQr3idApNwGYAAAAAfHAAAABmwcwcyHMgMIHPujB + + UAAaUA
TlNKgAfy0wEpf1SpQAAB4oABjDGAVF9WKMCHFWoRhuXv7UIxhCEPHtRhCEYww2BF2WXkBAfUgEZs
IrLoyRRB3bAo6GrNSCDMZkPwHld4ZXqqfWZHDB1X8PQ4ftgUL2AQAJykYAAZYWWTy9 / fJSpOc92m
KTpve9Ue0nOlFAAOGAcJxYAA4180ADNgcqAc0ADnsIAB0wAdSAAT / dZOUw7XtjtwacUknKYAAANg
AAMYAOLS43x0qVKl2ZnoEoqc2QDW8f + + sTtv / A1AIMUSdJOliTgaTCVQyOZxmCx6B7fdTji1wIOcL
QRhAMA0qVKupUqVOAX / V36qqqUsnPelCuzfqTy4lKlJ0ODAAAAAAAAfXA5MAwQAMJz4HQh0gAAAC
yVkqKABpgJqamlGpAADXA8YAAxjyQF9WKMCDkBWBo / f3nATMdNqPaFDUAg3zQSIg + + lM20pcyohl9
R0H1pgoVnawZP7O20Wvxf2LML7Co6hNxCoxEEREIRjG1ahHfoQAUpSlKZErMmyuuVlcrLLK8zfvV
11VZV / 2d + + / Vl6qqqvd5iqqqqqrhaqqqqqqqqqqqqqqqquIqqqqqqqqyePyc1k5OTkfLyMjIyMfNY
/ বিভাগ + + Pj / au3bt27dzdy5cuXLlzBuXLly5z9y5cuXLmguXLly5tOh2nRbTabLF / Nh7PF6XF0eLi4uL
i4mJiYmJiYlvY4eHsuuw7du3bt27du3bt2 + + 3t27du3b4HA4HA4HA4HAu9rd3d3tLu7u7u7u7v2N7
7G93u93v1 + + rB5b7eYRBmhGtRBsKy / GX7nOB1 / E3 / qXrb / 3FEEsgr3NOugQYgYIUoKUpDoMnMf9JD
lIjzOcRB8V0nUZ / J2IjPhEeewNb0JbaLYXfo9aPzTK2tiN5ALOEUiEbNlrUDRlB1MS + + eEEA + + BDJZ
+ + PbCQi4er6zV6K2iiCwOAQHKAQEIQIgsK8HQmk + + 3XIg4AbHDyyj2C7CQc / V3ix6TAb7qDRb / pOt1
ebs0bSBiBYgWQEG0bTBQpV + + hi7qnVA6OEHS20 / পি / 23o0fEmnxQ1qhXQkQrW1g1sHjQFrLvb + + iAWn
lK9nsvYQQqUWDrj30rLLFl85s4pl / CToEB2gAIQS7ZrwaSB08E27237snaWSIO7jXauo4q + + b4OeE
KpUKxq14UISbjbs2RBAPUU1ezYCbpVcJlh3K9CL7 + + BIebaJl1OUvpTI + + aCSVpzU + + Il8r4GQDpJoG
gGgR2en5fPQIPnu4x7XtkzByrR1QKTpsdMNCQYt0AaIlc2aEEAs + + qCTtZfBwYICmu4fpDGr2Hjae
psCC2AKD6apD39bTAGwy + + BZPQCAWOGWUaOFSbfCbMAyqoOAQQ6SDoATyAMWOZrG0hbHBBALXsyTC
ZJA53b9jyNZQ5HHH2ZGk / 13f / সি + ইনপুট / ZDte08YgB0kqUgG7pXT1ABAMX41Lbt4d1gi3BVNUKwAEJgH
cMJzQVfUq / X8 + + DBFgv12VXO1Fpoq5i7xXVgVAAuQC4o11H6opZ07GzB1kExvmeWckaqbkCRU1iJf
Z9gDVniZ8XUg + + zZ2lCTCU5qcdLqgrZ84SqB + + QwNCdQVw8ADECL + + / t8zQ5LrNT52orqvD4m6lPzd /
YyoxYg4ob1W / JpNtsPQ0XLzgZ0JpghiJlAIcxjlbbdBBrtkMjU5 + + BG6 / xqfFgvYmQAvbmxoIE / CD
BsOq6 / jpUl4ocf6meW7vnUb4YhSRX4MLMYHhJd9wgEGFLb6HBn4AED58IDj9n4vX7m2oFVibn7IE
/ RTRnVikkSXY2vf / PBBqNDu / IurbDfSqtJv8Jlu9zNdPEr / OYWQgrECDIzfa7rEYsmcgAJgIADr6
a0BBzs9qX3KO1uM9LgaY4 ++, vIxTUXMFjPWNf / n38HGXqT338kv9mub5gWYIhjiEEDd9VS / QgBAP + +
UaOqjT0PBqd3W1BPQqlPNiXksoF4rxC9wqpwa6mmggb53q4Krla2yg58EZ5RfgS1wDIgOADyo6q3
fostZ4HbsAAgHi0VzeKH / GVqr7zs36oA4UJLASwUkjJSX9EH0vMrq4AQdzftzQzEGxjeY48XN7Ty
9eIT2vRrwdhb1lbJljEebtaNNsuay9FQ0NROIeNOzwh5q6ryfpvXeFFDpIApEPrRApghYIiEFM32
n1P8enSqlVMLPwez / + + 7nkJ4qn04P7wd / 3UgIYz4JAQ9LZyKDz2ckVXrtJc3PJ23yu2 / pRB / VFKF /
PAnQeXIIa + + BU2EddC7OBF4kAOGhK3F5nm8SACAVVZvxO7 + + WQArXQrfXwkJA1bgDqrQsJlycegjze
PWc8RzzpycDyyCAe9lBwpbONqF3TcfVbssZBWPyz8cvfwXwKSAUhiQm7lasRaEEUiBQv4CRCK4r7
0 / ZmwmS5Ks77D9zvJPwJPrQK5P7QZpAF4c2zheVZwLVWQE4ke22p / W0HA3mMM + + PEpCsluAVqaYux
hkHopROiQKJgKQH6Q5nUHhx7f4fynJHZ7fv + + NYbllgCn / cNUv7bFd8 + + qFgeAvwB ++, GA / JVNTGN53
IB4WRpQQoiVv4Q60XPHXjmIfMQdt67x / xno + + j3jw8oPPoFGJxUoBg3qTG2R3KnRoEz3EJBVwrSlW
MSllN0Ngn4X88TZSSn4yioJoJgwC9nXql7l68n50Vw3ZeHSYAIB6GcHhVyOzlclfgFIXgBwAUD0Y
QE + + y4AQ98kOYiVVDEicHJ7vf + F / 6Pgus8Aem43Udv3PNO76n0KYLyZ307TUBna8nIWynQx2oTMU2
dsCW8ItuBERCQQo2 + + uuJ1R6nNjqxu / 4477i1foYXNYL16lbIPJgNFAcpJfRZqXv1an470C2sEQpa
qB78062iGy5rWmC7XNTOQxcOtlMlzPAzFbXONFWMAeiwgicygj / F8w / Keh / BCEBCCQe46qXWreFI
F9y41ErQyV + + zGVIHdiQ8IdgeFAA0ENQYGGVvxJAfiSfaWnSggzfIveHGXibYPW7g3HaVONwuUpvX
+ + TONfVrNC0QkhtuZpcGy9yii1YMQLNs9b6FS / J6TlPa2Vz8HueJYtMxYgxlY / Mxw9k5IIDkEFxsu
5pMlm13gS5cnrZoLfi4MJDy7AhQA7ANx / 1w4ckJIIn1dz86i4qNLZVG313vETqtgCatnCWfqa3 / ভী
aiFaoGPVKE5fBeh5cXum + + GP0Xfqs7d84PpzfD + + lVlIIQQECDekA +1 + + DmPqshl7IBv4LPAN9U4Hv7
kyOuussZHkeXSmLJbEG8AN4AdTJ8SHas8Lh2FO7IK8BfiEAB4gvFuCYAAMyCKwAWXxhlysSbKCqO
X5oEwpblsAcWnxmbYkhsCF0JLXTv6LC + + L1sfO1IamFQALWhg0BKtHIG / pvBjlrCol / RGt72YlSDM
KgEqBPTxHR / 7gUAYIwM0ur / 11xYqAPq2AWj9vikGf8kgnEZfBftker7vGEYN54bYwDwMwPr / tvqe
78KJRD / L9r / 4vUG + + s7zBC + + skgZJj9JWq / MFXMd + + t6sAYegSGJ / eoe4SFUEahIxBDBTE1BCJREQVU
U0UjMRUVIxMyITQjQkMTAyRFUQSoRUTVDUSECFCWoyBFIyERREIlav87qAiIuAhiVRkggn2JmQqC
mggioJIIKaihqQIgCBoq1EiKJoimJCBiaiKiImZGoCAlsO4Q4pEERVJBBCI / bsYKjMokiGDVMgMx
EqsbGCiCqZqBiZMpmSEjFX9 + + Yie5UICUkMTNDEEUEGpUQkQkU0QCIiQqs6pvC42JIkSiuAMLIh7h
cZKxi5zGRmbjBlfkNThAh3PMLQJO0kJFVCY1ZjISNVMFUb45gBSU0FGZ7GfzasbgNWogMLEOxBiA
3rG1wILGbnCpq4xVjARnwHiDkCwWAfxaEYGKrctSJxcgkTHw352YiOM7UEkEEZEV5xcYEqgL4vLJ
lQfG5rWIQgJDVv4WZ0YH / UOBKMg1ICQJ0ScqApiagQi9UNwQOy2OOgHJgSAiipcTFMahJWqVEPAy
OgyCCIMwImrAQMwd8AsnblR6VGR1PQzA1mxoQ1UpndpufbhB + + JREmjK + + ZhXCwnQCQUzyo + + ux9AvZ
UqRpnWxAQiNeRA4T0JrBB3hgs0JhpI3389AitYytiEql9bdeYIA32QwUAiJqUTuVAMSFRW5ArSph
X2wycKGIQL + + 9E0FImZkAju3G9BgTj58nLbRhhLLaavCpqgl1lhwYHDMQ6IdqAJEDXb2mC1DAiQwu
QgG3tDdTjjq2TxeQQ497iMECvvmdg9JZvQQiuupKGgwcAkAiQhiRAICJkBCAliRoQXZi + + 4bX6Qqf
54BVUVW3svV1AAGoDVQahr75ooWMQGImINv4HV + + WYAztv1YFAagjjqoR7LekYVBEc / tyMXCATHiN
QB24EH3ogGK4HUFw1QCh9l + + zAG4DhDKul9eOWUwAFzoYVdFIAuEKpeV2N0bXVBO0 / pp8g6 + + hDST9
JX3d6Pdlm89PwsACoAq / D8FdDO3hpyAAAKkpodVQCtghHXJ2RErK5wbs9XElajJiizuE85V + + ZXLd
Pyvy8xJOupddZ5jUTHTGEXWTNrTVo1k / u32XuDO8fpJRFzX2UKHpyclub3QmrRtnLDzSjvgEvvB7
q4UBLarBSmLSu2vTbrO + + ZSbdTc6xrbEWwt8 / 5hTso2Ra / 0agqAKv3nwdsPoXaRpJHO045EGgd72y
WrVszfzjOcVKkDCwEOIem7nv2gYPreIIBQhFovlA5DCNUYscEiTK / 4V0YQc4zKxElKSGrEyJBRhK
PAJTLfnOXThkGrlpBRKpW / L4WpuVL56myXL4dfGxr + + vy6pUp5lp8s1 / 1ouKjtqrb + + 04ioBfm1QTY
SIn9ANIpl1WXToEahjlGBu / sZIfKlLC8pB0gZbEbvzUFDMBqCIh / tfpxRwgnx1 / 0uHx7RPieotiQ
BYWISqFAQhLiZnVVycI8REQ0Hj7lTBFPuQjs + + e96w9Ab5IiX38YHg / 3D50OJjzJLSQ7bunfZDrrG
EZn35Y4fYQOEYd1c5j2D4nxPMEKJfASSWsDZqBSRwqEYNCt + + 6A3vDCJarMOHPPGt513RieQyBFjJ
Fu8a7CsC / pILluBQEK4XWubGgI + + Wdp5FnlHAGiMrrzB4ZyE2tsGErymPlkGDldc1J56XsL3uXUGN
4DjdYteEsK6aeWGMHQvhmLq81RyULQkPDuY7gaQmBYkohgb3TU8TrR5gannWpg + + WTydjeeD3uUNA
2z63a3xxMLTHLNaIGAYkiPGHTIkiuaTyjnXCZcOvY7rJsRK / kyXWF1YxE63khaonFdmIOIZCBo1S
8dCHtB / bqoGF12thHvgxOedj4ypXY29TNWidorby8bsa3O2fAMszfcuZdsYrMudt7PnuznKXFGfC
bs9lNAERIRIXFE0ZCnSD3VOodpzSGr3hO1zz2dgHNH8x1rpXbTOd4vwiltm22MIboTvvrrnaMgO2
aUPDivhZZyHjo1YkPjedqKEBPwIL1YXRJUN4K3AIa7Q1hIQhJ8H0mrnO751mGYvCvCzd2vFl2Kdz
OdQLw7uFY8JdlkTe6SrYxCCC0N + + RR6sLKYFQXlbMGu3PePLKtVuWMIndDDyJhyYbAjMxJPCltbXQ
dCxqKt047xOWRCvM3MGssh3L0aVfDoQa9SUWfXJ2 + + tB1ijxCMXFzN68Awy42A7yi6e / I33xXYdoT
Cum8d6bbsI9eT8sLTdZwmoT4dvbzhMccnztjnbArbS28KEPdhw2LxfhaIiQwEdrrGa23skoq + + b6x
yQCRmx8d4NB4u7B3d + + 1Ad2dt4TgUDHclmXZmD548bQgbpOTc + + h89SFWFt + + / dEzQZAb3K6b4FHr0P
SvWlxxUdgdRuFlIZb511xtsmHbaRIXHDLYa6LDjd2dd + + XDnae3fkT + + RhowXYlgvFLlArArdxprHB
2ei2bilLTbbjnrpPpjG4u87QzjfHDG2PQ4c + + UoQoPQi1GAhYtCooqWg + + D6NHfW98ZvmkXajLdOVL
OaV6zv3Yd + + UOljp7RCtbu + + lqpqTkvZOe8quNevfvRQr28tcNtN3djfIsNOr9N9rZwMCI4AwwZY3r
Q91OyY6Q0jpdcnJHNGg3wySm / Lpkcl48Uvzz23RAN6SUkZt / CCivGGMsQy3pe7grdOzhlr06hTIL
77MKXMyjnhJCpHpf0w1vhmIcRDqWPZgZpHY8hztyj35vV2lIQA6cuV1fHcdfO7ud3c9m8Oeuwhll
iFMK92ZjaMsN3TVq / G + এ zXvyhy3JyyyfQuVu2Y5gelrdnZ3T7Z + + Pbj02HeA8dy6lvQXj1319C0s0G
zbp26Wd81DXlZ5Y7dl5Wk / p0xw5deRdeuXVvBQ7bKWDTinWO ++, za9Dl1UuJXX + + V6 + + RKp7Bfv58pv
7szEu293TG0Lru9g0jod / fLWW1A403 + + VuWVfHw0vs6FXdDJewpvINawyIumNm3b3ZO6eWG0xo1XE
cJUttx1xnV07u0516EASDuy4aEZdfJsqePd437m32UG / y7e6mW7yV7hDndG5PDC8e3m2GEOImshk
XECUiDG7xwR1pC / ciBt3gQPtrMmIQ7xRKGCJWOC3YQCrGON3BFqQEAicIEIlzgdVVQBVrmgd4xAR
AOpkqZKQphqvHn5Bu2ivV6CMZaMmkoGXCUFcRDC3sK5VM2QUZLe5VxQLXLXTu5W2B4Bj4XePi01m
5xwxtdx4U8nrloM8OnjTyV9T35WDaCCGu7jUmYhk5SZCcUDIuN17rXB + C + + VqCqqoB93 / 0 টি + AXy4cx
I4e + Q + + Rd নগরী: + + K30f + + 95q4G + + nT4Rv2MSf5wwSskQvMBCgTSN4jJ80RzxSTKq1NU5AFVpsg4AW / CmH1Re
pH1Pn + + flms88wr + + lKrN + + 5N8RQXZfBc / TxbCjqbDwu3S2f3kk7C12cg / Cep4AOctOLvDbOWWGeMx7
LoaV2y1gWvwu63hPC6q4moW6XZ1nyryWuB7wZLgy3EDoXaaJYHOuxlwvcm6utwbo9q8DXKOG22mG
T09MXGGAxGkGt5ZzkRPtZTqhMYNi6l9j5rW / ohKV1dU3mteKvfSyL3uC8mihsFDw1jCt9bHS5ZQa
VIM05IlNE4ts2rGNhrpaYNzWnPme784eXaqimogkoiA + + yxCQQwwGC / N32IVAM87DPdj + + NQHqb3XH
মেগাওয়াট + + GtR3ZimnCBDwLaQX93rD5D6Pw4spVuZ9JRMjI6vQH0SE0jBgdWEHClL7KNYVAQYm0XXUBozO4
mthCt0gUb7K4vrlUpkjr / isfW5TseFDnDKusXXndg6ulr2yuvtJ5MkBrxMKWmN1uRWDgqnWs8mxM
67xWEqQmWSTuD5b / OH8o / EFF + + 7T / 39M37r + + R5ZYZ5es29pvL0vZ7ezGAxGQze04l6pvaAIfElD1j
uyCH7BJW + + ld3zg5AvvlZ4z + + D9K64KWyiVUyrs0xR3pejvdT1tL7vah6PmZNWILx3wpnT2J2 + + w9o9
9fCuoRHQO0QLlG5 / peu1W1 + + 3aXxkPXmHfam6KyERpdVrPu5pnGHOVOc3WcQgcPaNzxtyaPPLKTht
7DHvt9q0ekL9 + + WEluHldE34YQEFrKwd2PY1dpTRXuZAWFY9L8MOodeuGD91x19mmWSdmA8DDQYZZ
5SVe / U4Qz7cGvBwR8Onst + + nLN9d2yVrySLwjTfAE4XUSWoakBBkcOFRabcn6x4dkVtBu09nsG / ফো
wdk6w5YLFCjQzPZd + + qZ4boVhDVya8A7t177LqyDwxCN9cd / dHbnJ2kHEG98rUjEIxg / tEQELsG7s
tqXWlZrCZSxIFvdDZLtMjK6ImxEd4V5IVb9VfKb8uV7WcqBdXMRWI5b3cd1RMN + + AaYsFEbMJQzzW
0XjyZ4ZZynCyOGN3s / একটি + Ol1WQ7nVrJenDHnqQW5ZGFw0AZC6unfWLmJswO21wZFFdXzE9drW2XeL
+ + 3x9rupyyfQLsDCg4vv7e7Ddm + + jm4Yr3Z4xjwXE3jxBxEOqB6X0HU9SRUtBRRLHUtShCEBAQgIV2
HnL8NMveS9WDDgYzXXahUuBzXMAgkaFrxPU7dAIQCKmanmTNUEd + + POeU5vi9BQ8F8dwczygPKPI3
k97ou + + 81vojxP1F0z14zxt15v0sO7fY7PDVVUDAwMDAwMDAwMDAwMDAykpl56wiDx + + X7nyOu / w87
VVRUM1U1BcIYqqpYjnFAdIO8 ++, 9Z + + 18123c9z4ncBB5KCebkR / F9t93ke68F4N5YPxPrNOXzAgqK
IkgOyEIQgoQ4 + + Ecqf7fxiQMzG4Dzq + + Tc15Pv8WfiwVYdh2AY / Eu3ZEEQREMFlDDBEEctvdqXny + H
7vHA3fh4vt8xfP8ePyd5LynAFJ + + 3Ptf8e9 + + S53hiKGmeFogi4N7lelx3fFP1fQXfeclgOhp + + L3qf
LPR3UIgwiDUtmDYZbbuXRBlskgmkgpuAigqeg4x79wc76P5f1Hq / bPZHv5zz9fu + + 0yY8N0fTgekP
CPCnCegGfRS + + NOdThqp4QiqIh5MkgA2srhW8DlKNBIAOIHLdehZ1rhPaf86uqfIIdkjao ++, JGo9T
w86Q0VNwuIOHhUB8Ry / M9Z + + aes / J1 + + UjkpzxyapKT / XCGk + + p38OyE46gPHBKFWigCuPMZT2NyOQo
D0g + + i0R + + w6YMHnJez6v2mTvUkcfAHuwFa1AQEhvRgwP0cDQZiTyfuZR0ZzJazX8HT + O + + d2HEQEHl
dD8wgg + + V8C8JhMUV5CznBU0kSTFERRQVZcOJiimqZrOcll0AQfTfyZ77AIPSgg752NKA73Ve41QQ
c7pv0hiRG0RBwq9jnAxxrY9SzghQwKEKGOIiDhEcojKLDJUWG9PbyPgpTThagHYQEaUAgG1dSTs + +
oXMbdx8Plo4sCrEWA8F9QQO8geXGDtv7l0hCCEIQuceSfAsjITnK8GtEtmNfDVrtswvLoA3oggGy
AEAtnDgBAPbysjLWUGRMP39lpcPFNubLXsAjCseDiKeGPHtSnG1B02A3FnzXY27bkRFwFyfBj8 + আর
fuwrJsqIOYmIgzgQZgIOB + + LqPDsew8DsvYy3 / tWhPG1B6P59leYICPhlNfSOMAw5u1vbjyqOPIdq
Grwf9m8LwA7VLERweIe1VIJJJppJpHBWoW / uFtYQofc580Z / baLY / rcbfloWBaeQgga0RwJdh2h2
kh2hJMJ9BuuswPpY6f9sJKTg + + dtQrAXANw5QCE95VQbSHDlyhDlJCaSSSYSQhdfEO0R + + 71MVS0H1
fr0Iq8eT7dnneHUdxet // 3FjLpVfxuPA5vK6V66FHLYm / EAkgC9y12MngqL8pCfqfWqrN7gVMopA
Ktl7KyD + + VWq1XQkhAq6E00wkEk0ZQ4WN8 + + x7qsxHnhJ3HOftGUU00FkFk7wUhCp38yurSK + + vlliX
KTHkDTt6gAHL4zVXzzuAZrZdF3fi7g8wAOq0IcQchff83wLVvY7OEtFGVkx / y73fCdEl8lkllliG
X5vZ / cKi932 + + qA47TNANYKwHsxv1 / CrdJ4GU84VkMQH6ZRfkAiuqXpKo2B8E0LUFD + + ECeVAMfd2U
lGnUr1SN96bNl2RIKsi5Vv8qKk65ZaTEWYHdMJz8GQMADTIBsOtgYFCAEF / wFR2NE1YzWGjZvIYm
JmwN3tt9sgI1 + + CA93wQhG316TjKJdbFQD1QruumCcXb / 1T89JcWGYUqGC1vWFPOY2VNL + + VnGUaxe
qU1ZldElC24hK / Zlr / kn68N99aonkCAc5kIDFRg / u3y5Ca0lAKQEBg0EjitScs3s9UWFaODgGFoQ
SoAYAUyD60EK6hyVeJV2nXubIAQC2rcrXMJgO7Wrzp2jpMkUEn21JIUvACkOwhpC + + Cj37Cr7ndLb
VyHWC2rebx97BJWkOSHJFzQTpnLpSN1uL3qpGRkJvFEgA6 / 0UlFtKy9MbwFF9Dch6Cgh4PkCgEJH
নম্বর / 8mNdfaF3vfr7au3g2e9QY / ZvaEXsTXoqrr6Ki8AKcZQefTZ7cbZoAF30kOXAyCmFuIwF4UdLz
0wdAG + + BTCHux7Zn0gDjB2MdwuKkEwkFDm7BQVG9SwqBBobKAEIC2 / qAkLTiVLH2CGVhR6w7 / zz2G
4qJvs / 4A8vRolTkZVBMIEHk / 0DY7B9m1HviOXEWHb1g0gDX9c4k1IQgnCpZb7goDH + + EsATHHfW5r
LbGMAWAUPpdrgI6VRESgUKyE5IhMCUSAXF0OPutXyU / nldne719lra1OAJrDNoAcxAbsbiGwnR87
b212K + + 23VUvGA31TynD + + GeTAQd57WVlBBwfMfH2G9vVKnFU8bad5XlBJJEkiFq7dOqXbc5 + + hUgkk
Yaa9Fz1zAwu94 + + Q99j5oAB5qtyAfmp7WcjfbM6KL1gjHoSxkv5u99UuF6vpKFrj1olNXufcCSOvh
fd2xlKG / 7XF43ZAvvtmmwMSQEIN5zZVXBSEhR0z6p1kwQQIlMXAxuO6 + + Sz0KSzlMz5WwmOP + + 5Kui
qyT4ndILsW9CQYQcAodKQlQArUr + + ssfHwtTCpILqqo / RgAn + + lIAD9mt / zGlUfQ + + JjFIiPvA + + ZQBp
NWASGpwEHoHCMCERNb2spMiGGdf5lPB2LP76yDuSA / RcQA3CtAvgCE0AXFBfnEx / JLzDNpVN + + Oeh
RDKQomGH8ZM0NuzZmn79Hfc4YPup93UHasgv4QggaJHOn1EwiDfAQG9PJ / HYVl1QopWPXywz / U9S
rhfVhWVmAAfiHRe7oEgno + + nUBx0EdXoiDg64EG / DBBsgg9aCDM6Oqmz0QfL8dEG6FBrs0iDwuvBB
7bTyRdep5XiYJve8Jn9x2GM6qbeJfw0cfXRFa2WDuk8 / cby9fjROB5FpqFykYm1PLvHxr9qmCrlQ
3MSgOa1zfHbyfH4DKpqUvbDard1K03Worpp08ulIiD8kBJ + + xixlpbofFrr5GvR995mAmIg7LlEQa
3spgCDg7 + + সিডি + + JEG9DhQQdgIPiwQfIQIPnbrfHZznOc5znOc5znOcg5ByDkHIOQcg5ByDkHIOQcg5
ByDkHIOQcg5ByDkHIOQcg5ByDKpKpKpKpKpogBBm6P8NdyPJefd6HrvsfT2 / rcLO5bK + + FD / 6 + + LKK
KpzXN8vf85ofW7rtf77ynFU + + GBH + + cLn4VHj6WRcDVAg1NyoDLWqA / xzf0dnh9zw9DlqpVTZe1pvE
mKqfhKA + + ঘষা + + LOQedMIYxhoxjAYgxJdnGCsYxiMlmDFioJrGMFNUUZYxeY8t57CYorx1nOCppIkm
KIiigqy4cTFFNUzWc5LLuin9UAB + + PfrIJy6Pr + + eJnNDmJ6W2MzCjO6nVR5IAKGIFqf5QCt0NykAp
yABANmbqCWA9SHG3q / fyKs8ArifkXP + + VZ0r6UUrSp1SWcynqM3JfGGb + + TCzdL5gKXUGufguANt9v
Ggo1uIp7qnq8YPU1TcaHnc60 / WXABx + + o3NBl6vpnESB7Qe3arD7KR7GaKE0 / 6fCWKsuwc + + gHKXeR
4VsFtjLcunY8sAnADS2SRNmAretAvcMkVr2Schn81VtvUD / snTAHjMfR7ALTtdjoLsSwiQDcVyUB
AkPgLWrSIdgKC8A5oVqH / dhxxcHj2dYznw2OcwKpyAXkyo8wkxm6GWybIiwjlYlJ8WGtsjSTLmfQ
YoltFrJy4WhtlrPd0fJ + + 5RV7zyAmXXmQBz0Eb4IGo4j + + HFyuxC5hmA + + Lp7XGM6VBwKRtqmGZKoL8
প্রশ্নঃ + + g1DSBrpMd / IFp + + MvHBZ + + JBE6kC6ANXFK2cfW8wgD0q5KxwFQVFWgB / mQaMAd56DKEBg3yHHvMD
hOJemYWGWffGSSokFQhNBj6gfMGpzy9QO7zQ5a8CFA98Mv0CgfzfuHIKdPp6gAPD8ABDIPxPP997
00/1 + + 7Vf0M + + oxq9jy5ThAnvnJmTj + + 2OYOg5CZyJE8f + + 3uXucXvDP9T + + SDeO + + ISnbL4bpVUABUYVL
7gXNX / LoTNp / Ym9nFudlNVYiRURymZRUkQUSLMrFBnwVWIkVPTq / 8u5U7jm / + + IbMP2rfw3WSe55f
07XWWsziJFRHqfxqHNvwzZRVf3qVwc5C51vnWzfqnmasiQUz + + জি / fJRxMwp65aQcziraVQVB51ABt
gNsB7zG2DaA2gNsBtoG1BtQehOlzvA22DsB7TaByDxgdwHdyDsB1BgdQZoNUDbjTAzwZwM8GQG8A
zwaIN4Bmg6g7AcA4B0B1B0B0B2gdQcg5BwDug6g4B0B0BgdA25O0tgO3vA7gNEGgDRBkBogzwZ4N
MDNBmg + + zPBlByDqDsB0B0B2wdNQdAdAcA7oPY7QOQfqNgOwGB2G9IbAd8HdB2wdgO0DgGeDOBxBT
g1IMp86u6Alr2mBsKcGoBlBpzpeXoGzgiImdM8ryUktMDWAzweZw + + DqgayrvFO1YNiDUA7QPJ0Bg
yDv8AM8aHdnQHV2gddbaBtNAdm1zITAPADug7oOwHcBwDtA7AeODwA6g6g7AcA4B0B1B0B0B2gdQ
cg5BwDuA6g4B0B0BgdAdAdwHYDmyeDOBngyA0wM8GiDTA + + / OBnAzwZAcA6g7AdAdAdwHUHIOQcA7
wOoOAdAdAYHQHQHeB2A7AdQdgOAd0HYD6HcB3gdgOwHaBwDgHQHYDoDoDtg6g5ByDgHdB1BwDoDo
DA6A6A8xTqUKCmvoqUFKKkilQpRUnqU6k1SapOUkUkUmKTVNpNUmqUVJyl / mKT5qminEU21MKaqd
tqphT + + HYG / FV2rh21OMpUKUylBSipIpOUnKU6F9B / UDkrP6SW8gOEGEPQ6gHrR4h7AexQYQd3VOQ
Q5kCey9eYBCoBYBqCcoNtZ7 + + lYPlQ5EZ0fwSB / St4j013Mj796pDwCEQBm0CAgEgpnKuxT6CMeKs
kFMsHy8JQdwgqxELgrIaSywjHJLQubX1C7AyKXGirdk5H946pfTw / XYoSR63vmvLksL76P1OwACB
hBDWusoCggvyACoQSAQYV7Cw4CBAImcuMkZG4aSZTgFkAAn5LcC + + a1Wyqo9CCRnc + + rc3 + + qLLLcNC
uZhQbgEGoxHOdhRL8F8 / liQxLf5kmp4qe / 33a2Ifbq / iyvacKwD3hAA7GIHX6MvCCKFUwFNBw1zw
cTvqiTlOP9KfzgEArnQBgcS4FPROW2ZdJoXbJGrzV5UeSjVBoAUD6v679RAg7XKhiQOmHHRc / VE2
HDegnENsOjHiz4yDYdb3eNY + + IESh7XQgJDIrVA86uvicQoRfF0tFcwWrKLp7OoFr1ihsAblmMh4p
uIrW8exXq82p07OUnfw07QdCJDy2FaHZNmQRhcreIP2XUqHdfXen8krrwwQP9yOMxwVANQC / z1vJ
IEQQGcJdetX5q2ftJ2wM9Kj + + rngQmC3PhSSAEmj874BadAqcp0TGT0FW1eKpIrD1rh6p / IJJG101
lx8bL5xf6gL89IEAI4IBCSWG3OiOaUqTo3bqCg7zKA73qrQ7zbC8hH + + 97gcnxYaafW7KAkLqugCA
AOkUapcHf2jLhgHHedVmxgdas8utk5eurnq4DLQm5q9Zq9R4uy5ME3AwoQJ + + 6RGRCECRkJYCAgIZ
WWAkJaBBhQamA5 / H9TiredrDtvtaCZhRb2knhxvtzJ8wLQHVS5nbSXjlMCAwURQ84JAOtPEFc5vL
tA3y2anUm4 + + KCWSD6Ao8fRFuTr9 + + d7V1SYFXxsFzbPofblVbcAo21b3u / UfU2qy6y6f54Hk0IOq6
ঠ + + 722ZguAaRAOw7vtUyqOshz1I8bzS2O29n0Xe2YHPQYcXgIPAQAGt7kG8x7K5JoQiaRM7VI0tLv
IzZtYzZutjNm1jMDkGByGtFc9ZAdQYHUGB2bNSpoyA6gwOoMDl0JIwA6AwOgMDnQoiKwA6AwOgMD
nSCrY5AdQYHUGB1dZijADoDA6AwOmjVMYVNFIUmKQpLMidOlIlZgpOU + + XtLcv + + Ro9X10bv9O23QX
7SXom0IIf3783F4pv39Hd5mApYbSLiSSEgXwO2Bh / X9Klcmc4s7ur8hIODmidLHN8l2Dzm17p770
NM / V / ZeD8VVVfAxiMRiMRiMRiMSOAYBwDAOAYBwDAOAYBwDAOAYBwDAOAYBwDAOAYBwDAOAYBwDC
mFIUwpEiHp5hzUO9MUV + + evADDkP70VrEkDS4YAtctpD1 / JLDtsPG0gb / UlKiuB6Lor3bc4AayABK
2H6AIMv5AEGw2nTf19GskBAMPpNPm79DmTgiArc9l7a8F5Pn0kKRAg6tAEEgJwcU0AofWwmlBCog
aSYorSvhH0eTViKn + + EVEcUjVghr6SMacICSGQegFn + + errwXxHkzS2eAFY + + kDmfhyVYaAHfOIWsON
2vIUbiBJz4GGp7J7ZmrAl + + 8znekOADQSzQMmnd2djdZ2M42gxyWkpoS0Z / vz6iraIOyH / wgFImr9
HwOFslabdTMuJGdceuFXIz3k / HiqW5CEEzz + + / 68Cx84flyhY57tPmrL3W6XTk + + HBMuD4dNfyseDx
IEUgAJiBFRbZ6Ya4GTBJCu3aIgUNlzPNZMwD7e3doqIb0FU5NKLU36M1UcrY9Zasd000667DsA9O
2fezKtc0ACZ96QKVVd38AfCG + + lH95C0jZTjIjz6LPCndEesoM8EAfJwBU3FtBf8LbLAs7jxvq8Tv
qoHj1Pae3itldbEtbHIcaQtA / T2gM7Xy / l2IIPrHIq0YFyTSFAEghN6EW32UGufZb2p5n770BUPd
gGLMAfmgBuHBIQ6QPrac9eHQrlo346lJmu412dxLYjEIJa27hVHQ5WBrsGxeZ6EW1JTf / Ds66sUn
LNwD3st9HUGCOrbltE3rSsVdTqt / 46l9lVHB9IcEhNC5jmbvWBY8 + + rEt2c + + Jz1c0fcK2A9FcYwTA
A33hM4C9W90n4jy9xX2gHpQRxa1Z1rQoRoUACz3TvKeTcgKk2UWvmRgkhruhdfJB1LFUmlBvONB + +
ogvCBXwgvXE9OtwY00kuCfLAeAC2cHo3Sc7Wnhg3AN3 + + ejuKl274 + + XOx8kGQLf5 / PZW4YNShBAzn
ZvPOAUxyGtz0Xw7uwfqxzoni0IADC8UZcAGqKHfASyl0YOKxbQqmJ6qXPBKbgCBkbvJZe38D4TnS
EnhPRyyWUAAZhmLoo0RIFrpIKAeTvE4ZGApO7IHx8pmW4B0cIyysrDK9RK7ldiJ2xH + + ZDOqZwrV5
IWgGf7BHacj / zjs8ZbVBy9AUjrtH9JP5V7NZBeS4AMLFxmnU / 8Pc5vhAGd2F5ye7J4uNqoBwjEtg
DyjMXm4fg1m / FN2ThVG0YUeHwfbViOzBSZFVGnmIt6cOggOX3cQ / XPHXWqW8EBV1hQYuqCtAef2q
5lDUA / HV + + a4U ++, br2PUbhM0H3qP0gPAmWccEEjwi1 / j3N8RrT61o7DlIYADnWrl2vfanPXD + + wVxc
AHX9CiUM7sTo7RMmFosktmAOVS900leEdROCR9iM7Zs50p6PyHffleg / IdqBEVdI78gAIEBcqbA6
FAMB + + eJr253U7kbWK / Do + + z3uLlW3WIGwx / + + / 6px9fuOCCh + + AL6daPfFXSr5Wvz2rr / c2cTW1uwRt
Gc7N2jfXIEC6LC8JHoQxn8UlslTC12NnCT7 / p84AcFqB74ViQ2B / NAOGsjL7wADq1Y1idU0gXzgJ
z88WoQzkNP8l1JN28Y0ueW4fW + + 9OnI4BN1nsGYrVnP0EK0Du4DLYPxZ6 + + H5IAbEsqbE / AAaflq3m
9v0nPc5TZKryWWwAqe0CQEPCBjwEFLClfLzMRDf7YJDSfdpIGNKxkMtxQz5mVUuH8nmz7sA7IKm3
q3zz6tTuHKxCLJjIbhWPoQw7RfzxvrXlyRV0ErIXEc3z5Nu142U1ZEhrdds99MbUNgDHyT3MIDTc
WTHq8NW7x1yYLqK2g5n2gCWIAVQkoB9Sd9R8ml0EHnCQpfuAgkVF7p + + hcu2sGhA7UHFb / K54c7kH
JT2rtbgiECCaa7y7a3AtQ8x / YnegM1rOa3AEgILxcTuc8NXIGxKAcmgcqncSKFm0 + + GVh34Ks4Ca6
mLKrDRkAdJE7fvjlTdyZd6IZeFjoMBUr0Oss8GZIEA8JAX15gXYBSulrshIayPQtWZJwK94rAkiA
Nvf3mmAvGj + + 2mK + + I1rAkorUZmznVe7sM7WTagTq8TvPdsJyJVh2sWSQmeunSj + + i4dOY2YDXzsRBY
H6cxvacIkQXGZKDpUABP8UcNslpUMFyWYINks4Ais3c7LfRktkuLU0SAM + + ghrSZPZanGAPMBE + + উচ্চ
QzPqo1s6rtlvFSGZlBGUAXB2B60DBoBjeP / vQgJa5eDI + + 1T62TF / 7V0mY39eHq8fr17sAovGM3EV
p22sGHrTr8poMFo9rlh / ekPpVtgDqcIkmx4AD647TveT4tgtIJd2RoIIYliGIUPWwPloB9vIeqgf
cw8 / AHwYBCsMtKPj4Q3YA1nsoFDkynvLIdBCq + + 3j8iPGQAUCPgQqQBEVeYvbBQQdaLoAUiXpA06D
iU1wwBubeq + + awjNNYAf656ARWVRVg2yabvpLxuu8n / 0m6PRdwus5QSfuMQDn9jvw8JQthjErS5AO
4 + + lodu6lZ9t1fwXjTfZTx855NErDYAuLtSqJlQ2sWDiuttyP8zoxnrf4xtV + + XlA / dKJXjYjA0q2t
41b0lD9 + + Qk0 / iefL3GlEkAqkJFBsxOdndROfSLc5CczexkbfYo / qReS1WrbuyAHQB / Cr72MFRKrK
eZ21Cj22nfpw27rIBTJaAHU8e3azXR3SvGMvWvcZcAgHNdyu2shZN4zZOf3h6 / rlEPSuSEw + + IEog
pci7XfcxtvD2oORT / ট / YLQ / Cq7nu1pvh4xIZNAdgG0H0ubtGvpfo8bOEPr72fBeuzS4G7jMAcwWF
27ALsMvbKdiYk758z1fhZ2tpE582oakBCDQpYLb2f9aaIVde2s07g / YmQ7K / 4hMXjjv / vydgAAHQ
so9Qndo / gHfAMfN4bq559ZJvb9uXqspwG9t85m88P5 + + Rr4aOSdOAgVlikVHyd2Ti3HmKBi / MqaDV
sL1wnAE / ugR4gKqO / JC8W22Jze5spAZvgZQABAHIQmjKk5GtKIji7fxd1TQdaKuPNiFUFWJS65ED
L8z9yBQjcAwxBBYEEAsH4A2Pyua7maKaRlLL19G3fKeTethH7eWqznAFAdIQSJG4csaHOYnnS / বলদ
OOHLz8lZFKrC0uU3JBd6GNU6sAhYHhEwgm3AHBDEV3azVaxnDsmWxXKeZ66gYHfVOQvAAfnmKdAA
BIEPC8QQIyeprt8vV1H5c5vaVWRPLOCM3l6atqSeFYOWBegAvIdAGgntK2Uj5vwFD4VlJKRlVC0J
z7nP3MFqAVT7rRek8F / ZY / 7AZCE1Mrg2UBFgb3MwWGPk5njynv4mSpr8zgQJVAA5f2WelIGtynR4
eJZ7SHrvi9vVrAGyAhaHV1CaAlNhwXdaqGcgCRBIub9r50A4P453oWfa3 / f1novK3rrL0cO4g3SK
AF + + J5ll / sWAnU9Qg + + 7GsMugb1ndCCCgnUIOCxgAps78HV6c2X8Pd5fpr99Tvf99P7ZH36B82eSfM
zPMVDxYTi4TULbd9 + + HWsQBk0FnkMj7sKQBqbHS8W2fZvLjn9dn2ne1C8G8udbkfmv4OO1Hv / zKzf
ওয়াট / 4AYYDnjbtA5BuaCPj + + 2deggY + + 4fpvWkp / 7SWnnYjYdHgsPzmsdvs2BQGr3 / iVIjIZqXj5dxXoc
QxEggGx2rMV7F88Te7m62r2tH5M7Oqu1 / VivenvOV7fciH0WjqZr5PVHvRXfy / olOD8Vzpv8KmJJ
GVj2z9btv797opNtz / ++, ljzO6sve + + 7v7PIf3X + + zwH / 490QCcPwaLh2wUq6aAI15GitK8xY / VBAmD
Y4wECM2NzkWYHL1PCtuLlm + + KZ0fN2uW2X8QbS7RlG / 1hWL7ZKPCigVz + + ow7W1exUYkkdhiNj1rhS
6aPGP03 + + 8vp81Tydlr9vBVV3dtdNQeC9a7swGT7LHEKLnz6TbcjF6 + + sEDIrebWc6 + + symQJF8 + + 0DA
KIQE9316H0UJ3jfRil5W0zvf / m96XYOGW5m + + RA8DZsIaS1NVa8 / qbc03xlIbFgaf8czo6TwZy4Qq
6oXJBwkckTuv3j + + TEAfx2s2lorR9max28vusi + X + + UFAWnWPsdzOw5p6pTVKjx + + FrlFxff + + 0 / W8Z2
Pfx + + lo5 / jvwnM3Ej6fonL / tG9Jb5lthrAMgMbgqyDfUELd7f73lQZ + + kBSgP + + 5d58WT9mRlNjT2vN
/ K96yv + + uCy2PxPsoZa1Qdn4X + + deSU7Mn1VyW9ymSQKfkeYaeSFbQQKvLHS8ezgjOE31LchHRplOT
7nwrrfv / VQ6Cevfo + + 9LEdvZfx0PjiVPWsMq3S0cR9sC5ulgk4 / NXKv4aNFQ8 + + z6Wja74nE4aVJGN
hax + + pB0f8 / CranGLVF51Dbk9HG / bYcCo2Yk9bMrOGN6uh7hZNvCgkCJAEdUbMrNL3sh / YGOpv5I5
RL6cXmOAqaCWoDU7jrXfDDSWkkHmkoPI2H0TFz3N + + ooK6ez89y49HZqWWzn / prn7z29WzUMpP87P
dR1vh97fLrzLn8QJe + + FggQcJyeQOqBBoH5zrPAnmGE3UVGwbVa6 / যবের / wImAcgKDCXq4 / vZJLZ8C
হে / 7L3zaNrYvjeRX7FlrJVvRe46TEw9oJm92C15gE5MLfFg4MgSJIqsL85CjaswBXvKP6gf8DQjpb
7bohufI7 / Lfve / V68Rt59Vw6Ccwklrdt3fWv4U9Ieqm + + 6TBAt4H6i12qZuCaoPl01QZoD7VYqZSO
qqsZxhuB14YOQ2TqJDxrIupeT4ezp / e96svnMfH4HSdX3WTqPRTyrIkgdE / xfn3mdk3FEiamcZz + +
aN4bEDzY8kLcViBKY0ADNEfO0FMDk3s + + lVIqehPUL9zsT + + 7fOu / szXSwUQiJiwSF6XxxN + + zGIqIh
বি / 2eZF1JSQHRInCCL8Kx0wCBSFH4kIOVRkINIwSrZp9MLEur90Z / lHg + + FIfX25SLhuiTEUsxgSBC
W8u7Vyoa5oyOt47 / 9LW1jCRvAt9QHWIFoA4hPiHxKjYD4RKsZYYCEix / 7v4jmv / BoJ + + w73wg17ei
UfWmS9Gym1Mvk6DIVAAA2dVFlODLKZ7CKFV2XZd8JfU3aSJdOX / 7CXC82dxOaGh4 / t2OkzHr1feY
3uchvA0E3hbXh / e9xL5f1NrmhDcAdYFaN3xjnWcGtPmboVrR + + 425TFUK90qF50vGqFIQ8vB23tgr
HK + + BmYDp8XppnmIAFVtly8H9CdxfBVdKDAfpCHsxgOg8r + + s7TmgnFB4khuezp8eGRNAbDeBYM3k + +
S0tX6iPW1vuU6PkPBhiN6ZbuWqEi5r8EgQxRdSMDrm2C2wJ35ItBOIAwgNYAwhzwCnjFYaYLe4zo
hUtVOw + + SabSJGRo5RqKoG1ur7sug33u7uA6fT6D2EgmX863NQOqpYgC7iC1XuSDmQ8ejtoHUz7Xj
+ + WAwK2VU4shsdl8KjrAD3Ec / x4iIhh6cfC / Ux8CaDwWCCEZNWAhBRwF2aHZQhCA / mrFo + + VN / Qvbg
cEblqZlCXbDMb60IqgnNJUAjFwAQhCHd9gYGJYuGvqlApR6hSmG4n1IQIfSXftZLPZhCwOdMJARs
b2u4hFb2ggZGvjM / hJSUNI / 3 / f6ycRymgi4X / ক / HWKpUDqAw / ঞ / jx7eXc76q1P2DLJI8S / A / nV6
S5Ud56prWfrixl + + o6wtGlyvkOqos1oPAECxSyM5KaMCjlLFIDx + + ej59Fkdf8jAjUZvw / yBT6ygvL
oeLO214jL3sfoifigCAfaz2OsowBeZ + + rf2 + + 6nkyfF09j90 + + bpttxO3Hx14I5ct4Q9jH93j + + nVR2g
hEAxAMQqkMKV / kWXwzc77t52KJz2q1zmq1S4G1x69Kz + + OA / QU4AB / 2y1xh6PhsZtoWaHyDu0S5IQ
aSh8LeP31 + + wIGbyOZVPkM2n / YjAUNv2bEHXhYHIFvQT9yf8RCXZd4vl6ASrnKLI + + d2qYnNrUW1Ng
NlAj0rf5VkhJxFSCanG + + iIcyyqL4qX9xHgAA + + mluM1rrwAtLkkd1ofd87lZem + + qk1KEb5dpDbi7q
hgDK2LduIJ5owSR57uIuyP6wkaW2JAprdq9w9EpFoUeSbl7a7F9PjWsiBmAgY3r3ePVBlVEoMPe3
O9cQdd6PWGEBoO37at + + 5dF + + QAGt09ODv53V / e5D1ECNjYVlx / সেকেন্ড + + fB3 + + yrXxFKOWJJzXMe / Qtqhjg
IljLH0OeH6nbW3U5Tf78Q0uY6rxzGXG + + F8C0K4a + + E4nmxVxbwit7QEFOk2lfszEG + + ggIIlbcPP6G
S / 84Fp8AMwakQn2JjdgACpWYA7bjIRrLGtDkL0EC / wzdu + + ttg9GUvl3BuQv7OJHS9NQBw + + YEEKV0
BXkDbI36AKvsHLP1g1 / iP8aSBr8podjCY2fuLHnOOX4sthQSSyUwlC97ntxmDg28dRtbzRuQ0wP8
3V62hO9nc7X9fb9fznzhRBNYF5IFEEjJQBIKIJmK7I8Xh5Pn9xywJX7HKInI9jqQQbwACgmCD1RR
BPBFEE // F3JFOFCQsfyJNg ==
'' '
মুদ্রণ ([ '', 'আপ', 'নিচে'] [INT (pickle.loads (bz2.decompress (base64.b64decode (গুলি)))। ভবিষ্যদ্বাণী করা (numpy.array ([skimage.transform.resize (skimage.io .imread (sys.argv [1], as_grey = true), (24,12), মোড = 'ধ্রুবক')। চেপ্টা ()])) [0])] + 'ছাগল')

আপডেট: প্রতি অনুরোধ অনুসারে এখানে প্রশিক্ষণ ডেটা, 24x12 এ আকার পরিবর্তন করা হয়েছে এবং আপলোড / উপস্থাপনার স্বাচ্ছন্দ্যের জন্য একক চিত্রের সাথে মিলিত। এটি একটি শতাধিক চিত্র। http: // প্রদীপ.নি.নি. / ডেটাসেটস / , http://www.vision.caltech.edu/ ইমেজ_ড্যাটসেটস / ক্যালটেক 256 / , ডাকাকডকগো চিত্র অনুসন্ধান, গুগল চিত্র অনুসন্ধান, ইত্যাদি

24x12 পিক্সেল প্রশিক্ষণ ডেটা


আপনি কি আপনার প্রশিক্ষণ ডেটা পোস্ট করতে পারেন?
qwr

আমি ব্যবহৃত আসল সঠিক চিত্রগুলির কিছু হ'ল কপিরাইট, সুতরাং আমি সেগুলি পোস্ট করতে পারি না, তবে আমি সেগুলির একটি গুচ্ছটিকে সিস্টেমের আকারে 24x12 আকারে সঙ্কুচিত করে উপরের একক মনসেটে পোস্ট করেছি, যা যোগ্য হিসাবে যোগ্য হওয়া উচিত ' ন্যায্য ব্যবহার'.
উজ্জ্বল

6

100% র্যান্ডম অরণ্যের সাথে বিজ্ঞান-শিখুন

চেষ্টা করা-ও-সত্য পদ্ধতিটি আসামি, তবে এলোমেলো অরণ্যগুলি বাক্সের বাইরে খুব ভাল পারফরম্যান্স করতে পারে (সুর করার কয়েকটি প্যারামিটার)। এখানে আমি চিত্র শ্রেণিবদ্ধকরণের কিছু সাধারণ কৌশল দেখাই।

প্রশিক্ষণের জন্য আমি 100 টি ছাগলের ছবি দিয়ে শুরু করেছি গুগল চিত্রগুলির মাধ্যমে (এএফআইএকে প্রশিক্ষণের ডেটা টেস্টের ডেটার সাথে মেলে না)। প্রতিটি চিত্র গ্রেস্কেলে 20x16 এ পুনরুদ্ধার করা হয়, তারপরে অ্যারে 2D অ্যারেতে একটি সারি তৈরি করার জন্য চ্যাপ্ট করা হয়। চিত্রটির একটি উল্টানো সংস্করণ প্রশিক্ষণ ডেটার সারি হিসাবে যুক্ত করা হয়েছে। আমার কোনও ডেটা বৃদ্ধির কৌশল ব্যবহার করার দরকার নেই ।

ছাগলের গ্রিড

তারপরে আমি এলোমেলো বন শ্রেণিবদ্ধে 2 ডি অ্যারে ফিড করি এবং 50 টি সিদ্ধান্ত গাছ উত্পাদন করার পূর্বাভাস কল করি। এখানে (অগোছালো) কোডটি রয়েছে:

RESIZE_WIDTH = 20
RESIZE_HEIGHT = 16

def preprocess_img(path):
    img = cv2.imread(path, 0)  # Grayscale
    resized_img = cv2.resize(img, (RESIZE_WIDTH, RESIZE_HEIGHT))
    return resized_img


def train_random_forest(downgoat_paths, upgoat_paths, data_paths):
    assert len(data_paths) == 100
    # Create blank image grid
    img_grid = np.zeros((10*RESIZE_HEIGHT, 10*RESIZE_WIDTH), np.uint8)

    # Training data
    TRAINING_EXAMPLES = 2*len(data_paths)
    train_X = np.zeros((TRAINING_EXAMPLES, RESIZE_WIDTH*RESIZE_HEIGHT), np.uint8)
    train_y = np.zeros(TRAINING_EXAMPLES, np.uint8)

    TEST_EXAMPLES = len(downgoat_paths) + len(upgoat_paths)
    test_X = np.zeros((TEST_EXAMPLES, RESIZE_WIDTH*RESIZE_HEIGHT), np.uint8)
    test_y = np.zeros(TEST_EXAMPLES, np.uint8)


    for i, data_path in enumerate(data_paths):
        img = preprocess_img(data_path)

        # Paste to grid
        ph = (i//10) * RESIZE_HEIGHT
        pw = (i%10) * RESIZE_WIDTH
        img_grid[ph:ph+RESIZE_HEIGHT, pw:pw+RESIZE_WIDTH] = img
        flipped_img = np.flip(img, 0)

        # Add to train array
        train_X[2*i,], train_y[2*i] = img.flatten(), 1
        train_X[2*i+1,], train_y[2*i+1] = flipped_img.flatten(), 0

    cv2.imwrite("grid.jpg", img_grid)

    clf = RandomForestClassifier(n_estimators=50, verbose=1)
    clf.fit(train_X, train_y)
    joblib.dump(clf, 'clf.pkl')

    for i, img_path in enumerate(downgoat_paths + upgoat_paths):
        test_X[i,] = preprocess_img(img_path).flatten()
        test_y[i] = (i >= len(downgoat_paths))


    predict_y = clf.predict(test_X)
    print(predict_y)
    print(test_y)
    print(accuracy_score(predict_y, test_y))

    # Draw tree 0
    tree.export_graphviz(clf.estimators_[0], out_file="tree.dot", filled=True)
    os.system('dot -Tpng tree.dot -o tree.png')


def main():
    downgoat_paths = ["downgoat" + str(i) + ".jpg" for i in range(1, 10)]
    upgoat_paths = ["upgoat" + str(i) + ".jpg" for i in range(1, 10)]
    data_paths = ["data/" + file for file in os.listdir("data")]

    train_random_forest(downgoat_paths, upgoat_paths, data_paths)

এখানে প্রথম সিদ্ধান্ত গাছ রয়েছে (যেহেতু মডেলটি একটি টীকাগুলিতে রয়েছে, তবে এটি বিশেষভাবে কার্যকর নয় )

সিদ্ধান্ত গাছ # 0


এটি অত্যন্ত আকর্ষণীয় .... আপনার প্রশিক্ষণের ডেটা আমার চেয়ে অনেক বেশি বিভিন্ন ধরণের ছবি বলে মনে হচ্ছে।
উজ্জ্বল ডন

@ ডনব্রাইট আমি আমার প্রশিক্ষণের ডেটা পোস্ট করব তবে আমার সমস্ত ছবি সহ ফোল্ডারটি একটি হার্ড ড্রাইভে মারা গিয়েছিল। যদি কেউ যথেষ্ট উচ্চাভিলাষী হয় তবে তারা বিপরীত গুগল চিত্র অনুসন্ধান ব্যবহার করতে পারে এবং আমার ব্যবহৃত ছবিগুলি খুঁজে পেতে পারে।
কিউউআর

চমৎকার. আমি একগুচ্ছ চিত্র ডাউনলোড করেছি তবে আমি "পরিষ্কার" চিত্রগুলির জন্য তাদের প্রচুর পরিমাণে বাছাই করে ব্যয় করেছি। এটি দেখতে আকর্ষণীয় যে কীভাবে আরও বেশি সময় নষ্ট না করে আরও 'নোংরা' চিত্রের উপর ভিত্তি করে প্রশিক্ষণ দেওয়া সম্ভব।
উজ্জ্বল

@ ডনব্রাইট আমি বিশ্বাস করি যে আরও প্রশিক্ষণের ডেটা এবং বৈচিত্র্য আরও ভাল। "পরিষ্কার" এবং "নোংরা" এর জন্য আমরা "আরও ডেটা" তৈরি করতে ডেটা অগমেন্টেশন ব্যবহার করতে পারি।
Qwr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.