সুচিপত্র:

পাইথন, ইলেক্ট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম: 8 টি ধাপ
পাইথন, ইলেক্ট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম: 8 টি ধাপ

ভিডিও: পাইথন, ইলেক্ট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম: 8 টি ধাপ

ভিডিও: পাইথন, ইলেক্ট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম: 8 টি ধাপ
ভিডিও: পাইথন 🐍 কী,কেন এবং কীভাবে?[স্টেপ বাই স্টেপ] 📚 What is Python in Bangla? 2024, নভেম্বর
Anonim
পাইথন, ইলেকট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম
পাইথন, ইলেকট্রন এবং কেরাস ব্যবহার করে নিউরাল নেটওয়ার্ক চালিত প্ল্যানেটারিয়াম

এই নির্দেশনায়, আমি আপনাকে দেখাব কিভাবে আমি পাইথন এবং ইলেকট্রন ব্যবহার করে একটি স্বয়ংক্রিয় 3D প্ল্যানেটারিয়াম জেনারেটর লিখেছি।

উপরের ভিডিওটি র্যান্ডম প্ল্যানেটারিয়ামগুলির মধ্যে একটি তৈরি করে যা প্রোগ্রামটি তৈরি করে।

** দ্রষ্টব্য: এই প্রোগ্রামটি কোনভাবেই নিখুঁত নয়, এবং কিছু জায়গায় খুব পাইথনিক নয়। নিউরাল নেট বৈষম্যমূলক শুধুমাত্র ~ 89% সঠিক, তাই কিছু অদ্ভুত ছবি এটিকে প্ল্যানেটারিয়ামে পরিণত করবে **

সুনির্দিষ্ট

প্ল্যানেটারিয়াম মহাকাশ সম্পর্কিত ছবিগুলির জন্য একটি নাসা এপিআই জিজ্ঞাসা করে এবং ছবিটি প্রক্রিয়াকরণের জন্য উপযুক্ত কিনা তা নির্ধারণের জন্য একটি কনভোলিউশনাল নিউরাল নেটওয়ার্ক ব্যবহার করে। প্রোগ্রাম তারপর ইমেজ থেকে পটভূমি অপসারণ করতে OpenCV ব্যবহার করে, এবং অবশেষে ছবিগুলি একসঙ্গে একটি বড় সমকোণীয় ছবিতে সেলাই করা হয়। এই ছবিটি তখন সংরক্ষিত হয়, এবং একটি ইলেক্ট্রন নোড.জেএস অ্যাপ্লিকেশন ছবিটি খুলে দেয়, এবং ছবিটিকে প্ল্যানেটারিয়াম স্টাইলের 3D বিন্যাসে দেখার জন্য PhotoSphere.js প্যাকেজ ব্যবহার করে।

নির্ভরতা

পাইথন:

  • কেরাস
  • বালিশ
  • cv2
  • অসম্পূর্ণ
  • অনুরোধ
  • urllib
  • এলোমেলো
  • সময়
  • io

ইলেকট্রন:

ফটোস্ফিয়ার

ধাপ 1: আপনার পরিবেশ স্থাপন করা

ইলেকট্রন এবং পাইথন ইনস্টল করা

প্রথমে, নিশ্চিত করুন যে আপনার node.js এবং npm ইনস্টল আছে (যদি না হয়, আপনি এখানে ডাউনলোড করতে পারেন)

এরপরে, আপনাকে ইলেক্ট্রন ইনস্টল করতে হবে। একটি কমান্ড প্রম্পট খুলুন এবং নিম্নলিখিত কমান্ডটি প্রবেশ করুন:

npm ইলেকট্রন -জি ইনস্টল করুন

এরপরে, আপনার অজগর দরকার, যা এখানে ডাউনলোড করা যায়

একটি ভার্চুয়াল পরিবেশ স্থাপন

একটি কমান্ড প্রম্পট খুলুন, তারপরে আপনার ভার্চুয়াল পরিবেশ সেট আপ করতে নিম্নলিখিত কমান্ডগুলি প্রবেশ করুন:

পাইপ ভার্চুয়ালেনভ ইনস্টল করুন

virtualenv স্থান

সিডি স্পেস

স্ক্রিপ্ট / সক্রিয়

পাইথন নির্ভরতা ইনস্টল করা

আপনার পাইথন নির্ভরতা ইনস্টল করার জন্য কমান্ড প্রম্পটে এই কমান্ডগুলি চালান:

পিপ ইনস্টল keras

পিপ ইনস্টল বালিশ

pip ইনস্টল numpy

pip ইনস্টল করার অনুরোধ

pip opencv-python ইনস্টল করুনআপনি যদি নিজেই নেটওয়ার্ককে প্রশিক্ষণ দিতে চান, তবে কেরাসের জন্য জিপিইউ ত্বরণ সেট করতে ভুলবেন না

ধাপ 2: নাসা অনুসন্ধান API- এর জিজ্ঞাসা করা

ওভারভিউ

নাসার অনেকগুলি কার্যকর API রয়েছে যা আপনি আপনার প্রকল্পগুলির সাথে ব্যবহার করতে পারেন। এই প্রকল্পের জন্য, আমরা অনুসন্ধান API ব্যবহার করব, যা আমাদের স্থান-সম্পর্কিত চিত্রগুলির জন্য নাসার ইমেজ ডাটাবেস অনুসন্ধান করতে দেয়।

কোড

প্রথমে, একটি যুক্তি গ্রহণ করার জন্য আমাদের একটি পাইথন ফাংশন সংজ্ঞায়িত করতে হবে যা অনুসন্ধান শব্দ হিসাবে কাজ করবে:

def get_image_search (ফ্রেজ):

পাস

এরপরে, আমরা অনুসন্ধানের শব্দটিকে ইউআরএল ফর্ম্যাটে রূপান্তর করব, তারপরে এপিআই জিজ্ঞাসা করতে অনুরোধ লাইব্রেরি ব্যবহার করুন:

def get_image_search (ফ্রেজ):

params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = request.get ("https://images-api.nasa.gov/search", params = params)

অবশেষে, আমরা সংগ্রহটি+JSON স্ট্রিং ডিকোড করব যা API আমাদের কাছে ফিরিয়ে দিয়েছে এবং অনুসন্ধান শব্দ সম্পর্কিত চিত্রগুলির লিঙ্কগুলির একটি তালিকা বের করবে:

def get_image_search (ফ্রেজ):

params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = request.get ("https://images-api.nasa.gov/search", params = params) data = [result ['href'] results.json () ["সংগ্রহ"] ["আইটেম"] এর ফলাফলের জন্য

আমরা শুরু করছি! আমাদের কাছে এখন একটি কোড স্নিপেট আছে যা NASA ইমেজ সার্চ API কে জিজ্ঞাসা করতে পারে, এবং আমাদের অনুসন্ধান শব্দ সম্পর্কিত চিত্রগুলির লিঙ্কগুলির একটি তালিকা ফেরত দিতে পারে।

ধাপ 3: কনভোলিউশনাল নিউরাল নেটওয়ার্ক

ওভারভিউ

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

কোড

প্রথমত, আমাদের আমাদের নির্ভরতা আমদানি করতে হবে:

আমদানি ওএস

#ট্রেন চলাকালীন ইস্যুর জন্য সমাধান করুন GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "tsorflow আমদানি করুন tf হিসাবে যদি tf.test.gpu_device_name (): মুদ্রণ ('GPU পাওয়া যায়') অন্য: মুদ্রণ (" কোন GPU পাওয়া যায়নি ") keras.preprocessing.image আমদানি থেকে ImageDataGenerator keras.predes থেকে আমদানি চিত্র keras.models আমদানি keras.layers থেকে ক্রমানুসারে আমদানি Conv2D, MaxPooling2D থেকে keras.layers আমদানি অ্যাক্টিভেশন, ড্রপআউট, ফ্ল্যাটেন, ঘন থেকে কেরাস আমদানি ব্যাকএন্ড থেকে পিআইএল আমদানি চিত্র np হিসাবে numpy আমদানি করুন

পরবর্তী আমরা আমাদের মডেল সংজ্ঞায়িত করতে হবে:

img_width, img_height = 1000, 500

train_data_dir = 'v_data/train' validation_data_dir = 'v_data/test' nb_train_samples = 203 nb_validation_samples = 203 epochs = 10 batch_size = 8 K.image_data_format যদি = (img_width, img_height, 3) মডেল = ক্রমিক () model.add (Conv2D (32, (2, 2), input_shape = input_shape)) model। = (2, 2))) model.add (Conv2D (32, (2, 2))) model.add (সক্রিয়করণ ('relu')) model.add (MaxPooling2D (পুল_সাইজ = (2, 2))) মডেল.add (Conv2D (64, (2, 2))) model.add (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Flatten ()) মডেল add (Dense (64)) model.add (Activation ('relu')) model.add (Dropout (0.5)) model.add (Dense (1)) model.add (Activation ('sigmoid')) model.compile (ক্ষতি = 'বাইনারি_ক্রোসেন্ট্রপি', অপটিমাইজার = 'আরএমএসপ্রপ', মেট্রিক্স = ['নির্ভুলতা'])

আমি আপনার জন্য মডেলটি প্রশিক্ষণ দিয়েছি, কিন্তু আপনি যদি মডেলটিকে নিজে, নিজের ডেটাসেটে প্রশিক্ষণ দিতে চান, তাহলে আমি প্রশিক্ষণ কোড সংযুক্ত করেছি। অন্যথায়, আপনি প্রশিক্ষিত মডেলের HDF5 ফাইলটি ডাউনলোড করতে পারেন। ইন্সট্রাকটেবল ফাইল সীমাবদ্ধতার কারণে, আমাকে ".txt" এক্সটেনশান দিয়ে এটির নাম পরিবর্তন করতে হয়েছে। এটি ব্যবহার করতে, ফাইলের নাম ".h5" এক্সটেনশনে দিন এবং এই কোডটি দিয়ে লোড করুন:

model.load_weights ("model_saved.h5")

একটি ইমেজ স্পেস-ওয়াই কেমন তা অনুমান করতে নেটওয়ার্ক ব্যবহার করতে, আমরা এই ফাংশনটি সংজ্ঞায়িত করব:

def পূর্বাভাস (image_path):

img = image.load_img (image_path, target_size = (1000, 500)) img = np.expand_dims (img, axis = 0) result = model.predict_classes (img) return result [0] [0]

ধাপ 4: ছবিটি প্রসেস করা হচ্ছে

ওভারভিউ

ইমেজ প্রসেসিংয়ের জন্য, আমি OpenCV (cv2) লাইব্রেরি ব্যবহার করছি। প্রথমে, আমরা ছবির প্রান্তগুলিকে অস্পষ্ট করব, এবং তারপর আমরা একটি মুখোশ তৈরি করে এবং গাer় রঙের আলফা মান পরিবর্তন করে পটভূমি সরিয়ে ফেলব

কোড

এটি ফাংশনের অংশ যা প্রান্তগুলিকে ঝাপসা করে:

def processImage (img):

RADIUS = 20 # একটি ছবি খুলুন im = Image.open ("pilbuffer.png") # সাদা পটভূমিতে ছবি আটকান diam = 2 * RADIUS back = Image.new ('RGB', (im.size [0] + diam, im.size [1] + diam), (0, 0, 0)) back.paste (im, (RADIUS, RADIUS)) # ব্লার মাস্ক মাস্ক তৈরি করুন = Image.new ('L', (im.size [0] + diam, im.size [1] + diam), 255) blck = Image.new ('L', (im.size [0] - diam, im.size [1] - diam), 0) মুখোশ। আটকান transition-p.webp

এর পরে, আমরা গাer় রংগুলিকে স্বচ্ছ করে সেট করব, এবং ছবিটি সাময়িকভাবে সংরক্ষণ করব:

#মাস্ক তৈরি করুন এবং ফিল্টার কালোকে আলফা দিয়ে প্রতিস্থাপন করুন

image = cv2.imread ("transition.png") hMin = 0 sMin = 0 vMin = 20 hMax = 180 sMax = 255 vMax = 255 low = np.array ([hMin, sMin, vMin]) উপরের = np.array ([hMax, sMax, vMax]) hsv = cv2.cvtColor (image, cv2. COLOR_BGR2HSV) mask = cv2.inRange (hsv, lower, upper) output = cv2.bitwise_and (image, image, mask = mask) *_, alpha = cv2.split (output) dst = cv2.merge ((output, alpha)) output = dst with open ("buffer.png", "w+") as file: pass cv2.imwrite ("buffer.png", output)

ধাপ 5: একটি সমতুল্য প্রক্ষেপণে একসঙ্গে ছবি সেলাই করা

ওভারভিউ

এই ফাংশনটি একাধিক ছবি নেয় এবং সেগুলিকে একটি বিন্যাসে সেলাই করে যা PIL (বালিশ) লাইব্রেরি ব্যবহার করে PhotoSphere.js প্যাকেজ দ্বারা ব্যাখ্যা করা যায়

কোড

প্রথমত, আমাদের এমন একটি চিত্র তৈরি করতে হবে যা অন্যান্য ছবির জন্য হোস্ট হিসাবে কাজ করতে পারে:

new = Image.new ("RGBA", (8000, 4000), রঙ = (0, 0, 0))

এরপরে, আমাদের চিত্রগুলির অ্যারের মাধ্যমে পুনরাবৃত্তি করতে হবে (যা সবগুলি 1000x500 এ পুনরায় আকার দেওয়া হয়েছে) এবং সেগুলিকে ছবিতে রাখুন:

h = 0

w = 0 i = 0 img for img_arr: new.paste (img, (w, h), img) w += 1000 যদি w == 8000: h += 500 w = 0 i += 1

এখন আমরা এটিকে এমন একটি ফাংশনে মোড়ানো করি যা চিত্রের একটি অ্যারেকে তার যুক্তি হিসাবে নেয় এবং নতুন চিত্রটি ফেরত দেয়:

def stitch_beta (img_arr):

img_arr: new.paste (img, (w, h), img) w += 1000 যদি w == 8000: h += 500 w = 0 i += 1 নতুন ফেরত আসে

ধাপ 6: সম্পূর্ণ পাইথন স্ক্রিপ্ট

এটি সম্পূর্ণ পাইথন নিউরাল নেটওয়ার্ক স্ক্রিপ্ট, যা net.py হিসাবে সংরক্ষণ করা হয় এবং মূল স্ক্রিপ্টে আমদানি করা হয়:

# লাইব্রেরি আমদানি করা

আমদানি করুন #ট্রেন চলাকালীন ইস্যুর জন্য ফিক্স করুন oN GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "tensorflow হিসাবে tf আমদানি করুন যদি tf.test.gpu_device_name (): মুদ্রণ ('GPU পাওয়া যায়') অন্য: মুদ্রণ (" কোন GPU পাওয়া যায় নি ") keras.preprocessing.image আমদানি করুন keras থেকে। np img_width, img_height = 1000, 500 train_data_dir = 'v_data/train' validation_data_dir = 'v_data/test' nb_train_samples = 203 nb_validation_samples = 203 যুগ: input_shape = (3, img_width, img_height) else: input_shape = (img_width, img_height, 3) model = Sequential () model.add (Conv2D (32, (2, 2), input_shape = input_shape)) model.add (সক্রিয়করণ ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (32, (2, 2))) মডেল add (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (64, (2, 2))) model.add (অ্যাক্টিভেশন ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Flatten ()) model.add (Dense (64)) model.add (Activation ('relu')) model.add (ড্রপআউট (0.5))) model.add (ঘন (1)) মডেল "model_saved.h5") def predict (image_path): img = image.load_img (image_path, target_size = (1000, 500)) img = np.expand_dims (img, axis = 0) result = model.predict_classes (img) return result [0] [0]

এটি প্রধান পাইথন ফাইল, api.py:

আমদানি অনুরোধ, sys, এলোমেলো, urllib.parse, cv2

পিআইএল আমদানি ইমেজ থেকে, ImageFilter থেকে io আমদানি বাইটস আইও আমদানি numpy হিসাবে np আমদানি নেট def get_image_search (num, phrase): count = 0 img_arr = বাক্যে আর্গের জন্য: print (arg) print (f "current image count: {count } ") i = 0 params = {" q ": urllib.parse.quote (arg)," media_type ":" image "} results = request.get (" https://images-api.nasa.gov/search ", params = params) data = [result ['href'] for results.json () [" collection "] [" items "] print (len (data)) if num> len (data): num = len (তথ্য) গণনা করার সময় = num: break print (f "\ n {count} images retreived") img_arr def stitch_beta (img_arr): new = Image.new ("RGBA", (8000, 4000), color = (0, 0, 0) img_arr- এ img- এর জন্য h = 0 w = 0 i = 0 w == 8000: h += 500 w = 0 i += 1 রিটার্ন নতুন ডিফ প্রক্রিয়া = 2 * RADIUS back = Image.new ('RGB', (im.size [0] + diam, im.size [1] + diam), (0, 0, 0)) back.paste (im, (RADIUS), রেডিয়াস)) # ব্লার মাস্ক মাস্ক তৈরি করুন = Image.new ('L', (im.size [0] + diam, im.size [1] + diam), 255) blck = Image.new ('L', - ImageFilter. GaussianBlur (RADIUS / 2)) back.paste (অস্পষ্টতা, মুখোশ = মুখোশ) back.save ("transition.png") back.close () #Create মাস্ক এবং ফিল্টার কালোকে আলফা ইমেজ = cv2.imread (" ট্রানজিট ion.png ") hMin = 0 sMin = 0 vMin = 20 hMax = 180 sMax = 255 vMax = 255 low = np.array ([hMin, sMin, vMin]) উপরের = np.array ([hMax, sMax, vMax]) hsv = cv2। dst = cv2.merge ((output, alpha)) output = dst with open ("buffer.png", "w+") as file: pass cv2.imwrite ("buffer.png", output) #Edge detection and blurring if _name_ == "_main_": search_terms = ["supernova", "planet", "galaxy", "milky way", "nebula", "stars"] #সার্চের শর্তাবলী পরিবর্তন করা যেতে পারে যা আপনি প্ল্যানেটারিয়াম অন্তর্ভুক্ত করতে চান img_arr = get_image_search (64, search_terms) প্রিন্ট ("ছবি উদ্ধার এবং নিউরাল ফিল্টার করা") img = stitch_beta (img_arr) প্রিন্ট ("ছবি সেলাই করা") img.save ("stitched.png")

ধাপ 7: ইলেকট্রন অ্যাপ

ওভারভিউ

আমরা একটি সাধারণ ইলেকট্রন অ্যাপ তৈরি করব যা শুধুমাত্র ফটোস্পিয়ার এলিমেন্টের অবস্থান এবং লোড করে। Main.js এবং package.json ফাইলগুলি সরাসরি ইলেক্ট্রন ওয়েবসাইট থেকে, এবং এইচটিএমএল হল ফটোস্পিয়ার ওয়েবসাইটে প্রদত্ত এইচটিএমএল -এর সামান্য পরিবর্তিত সংস্করণ। আমি ফাইলগুলি অন্তর্ভুক্ত করেছি, কিন্তু সবগুলিকে.txt এ নামকরণ করেছি, কারণ Instructables এই ফাইলের ধরনগুলিকে অনুমতি দেয় না। ফাইলগুলি ব্যবহার করতে, যথাযথ এক্সটেনশন দিয়ে তাদের নাম পরিবর্তন করুন।

কোড

main.js

const {app, BrowserWindow} = প্রয়োজন ('ইলেক্ট্রন')

ফাংশন createWindow () {const win = new BrowserWindow ({width: 800, height: 600, webPreferences: {nodeIntegration: true}}) win.loadFile ('index.html')} app.whenReady () তারপর (createWindow) app.on ('window-all-close', () => {if (process.platform! == 'darwin') {app.quit ()}}) app.on ('activate', () => {যদি (BrowserWindow.getAllWindows ()। length === 0) {createWindow ()}})

package.json

{

"name": "space", "version": "0.1.0", "main": "main.js", "scripts": {"start": "electron।" }}

index.html

ধাপ 8: কার্যকর করা

সমকোণী চিত্র তৈরি করা

চিত্রটি তৈরি করতে, কমান্ড প্রম্পটে api.py স্ক্রিপ্টটি চালান, তার ভার্চুয়াল পরিবেশ সক্রিয় করে:

api.py

স্ক্রিপ্টগুলি কার্যকর করা শেষ হওয়ার পরে, ইলেকট্রন অ্যাপ্লিকেশনটি ব্যবহার করুন:

npm শুরুভয়েলা! আপনার প্ল্যানেটারিয়াম সক্রিয়! পড়ার জন্য ধন্যবাদ:)

প্রস্তাবিত: