Image Inpainting এবং Outpainting হলো ইমেজ এডিটিংয়ের দুটি কৌশল, যা ডিজিটাল আর্ট এবং রিস্টোরেশনের ক্ষেত্রে খুবই গুরুত্বপূর্ণ। Stable Diffusion-এর মতো মডেল ব্যবহার করে এগুলোর মাধ্যমে ইমেজের নির্দিষ্ট অংশ সম্পাদনা করা বা সম্প্রসারণ করা যায়। নিচে Image Inpainting এবং Outpainting-এর ধারণা, তাদের কাজের প্রক্রিয়া, এবং PyTorch-এ কিভাবে এগুলো ব্যবহার করা যায় তা বিস্তারিতভাবে আলোচনা করা হলো।
Image Inpainting এমন একটি প্রক্রিয়া যেখানে একটি ইমেজের নির্দিষ্ট অংশ মুছে বা সরিয়ে সেটি পুনরায় পূরণ করা হয়, যাতে সেটি আসল ইমেজের সাথে মিল রেখে স্বাভাবিক দেখায়। এটি এমন সমস্যাগুলির জন্য ব্যবহার করা হয় যেখানে ইমেজের একটি অংশ নষ্ট হয়ে গেছে বা সেটিকে পরিবর্তন করতে হবে।
Image Outpainting হলো একটি পদ্ধতি যেখানে একটি ইমেজের সীমানা বা প্রান্ত সম্প্রসারণ করে নতুন উপাদান যোগ করা হয়। এটি মূলত একটি ইমেজের বাইরের অংশকে প্রসারিত করে যাতে ইমেজটির ভিউ বা প্রসার বড় হয়।
Stable Diffusion-এর ইনপেইন্টিং সংস্করণ ব্যবহার করে আমরা সহজেই একটি ইমেজের নির্দিষ্ট অংশ পুনরুদ্ধার করতে পারি। নিচে একটি উদাহরণ দেওয়া হলো:
import torch
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
# মডেল লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting").to("cuda")
# ইনপুট ইমেজ এবং মাস্ক লোড করা
image = Image.open("damaged_image.png")
mask = Image.open("mask_image.png") # যেখানে পুনরুদ্ধার প্রয়োজন সেখানে মাস্ক
# প্রম্পট সেট করা
prompt = "A beautiful landscape with a clear sky"
# ইনপেইন্টিং করা
output = pipe(prompt=prompt, image=image, mask_image=mask).images[0]
# আউটপুট সেভ করা
output.save("restored_image.png")
Outpainting করার জন্য ইমেজের বাইরের অংশে একটি ব্যাকগ্রাউন্ড বা পরিবেশ যোগ করতে হয়, যা মূল ইমেজের সাথে সামঞ্জস্যপূর্ণ হয়। Outpainting সাধারণত একটি প্রম্পটের মাধ্যমে পরিচালনা করা হয় যেখানে আপনি মডেলকে নির্দেশ দেন কিভাবে এবং কী ধরনের এলিমেন্ট আউটপুট ইমেজের বাইরের অংশে যোগ করতে হবে।
from diffusers import StableDiffusionOutpaintingPipeline
# মডেল লোড করা
pipe = StableDiffusionOutpaintingPipeline.from_pretrained("stabilityai/stable-diffusion-2-1").to("cuda")
# ইমেজ এবং প্রম্পট সেট করা
image = Image.open("image_to_expand.png")
prompt = "Extend the forest and mountains with a clear blue sky"
# আউটপেইন্টিং করা
output = pipe(prompt=prompt, image=image).images[0]
# আউটপুট সেভ করা
output.save("expanded_image.png")
Image Inpainting এবং Outpainting ডিজিটাল ইমেজ প্রসেসিং এবং সৃজনশীল কাজে ব্যবহৃত দুটি শক্তিশালী কৌশল। PyTorch এবং Stable Diffusion ব্যবহার করে সহজেই এই কাজগুলো সম্পন্ন করা যায়। ইনপেইন্টিংয়ের মাধ্যমে একটি ইমেজের ক্ষতিগ্রস্ত বা অবাঞ্ছিত অংশ পুনরায় তৈরি করা হয়, আর আউটপেইন্টিংয়ের মাধ্যমে একটি ইমেজের সীমানা সম্প্রসারণ করা হয়। এ দুটি পদ্ধতি ডিজিটাল আর্ট, রিস্টোরেশন, এবং ক্রিয়েটিভ ডিজাইনে খুবই কার্যকর।
Inpainting হলো একটি কৃত্রিম বুদ্ধিমত্তা (AI) এবং কম্পিউটার ভিশন প্রযুক্তি, যা একটি ইমেজের ক্ষতিগ্রস্থ, অনুপস্থিত, বা অবাঞ্ছিত অংশ পুনর্গঠন বা পুনর্নির্মাণ করতে ব্যবহৃত হয়। মূলত, Inpainting-এর মাধ্যমে ইমেজের যেকোনো অংশ মুছে ফেলে বা লুকিয়ে রেখে সেই অংশে একটি বাস্তবসম্মত এবং সামঞ্জস্যপূর্ণ ফিলিং তৈরি করা যায়। এটি ছবি পুনর্গঠন, রেস্টোরেশন, এবং সম্পাদনার ক্ষেত্রে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
Inpainting মডেলগুলো ইমেজের চারপাশের পিক্সেলের তথ্য এবং টেক্সচার বিশ্লেষণ করে এবং সেই অনুযায়ী অনুপস্থিত বা মুছে ফেলা অংশে সঠিক ফিলিং তৈরি করে। মডেলগুলো সাধারণত ডিপ লার্নিং এবং নিউরাল নেটওয়ার্ক ব্যবহার করে এই কাজটি করে থাকে। Diffusion মডেল এবং GAN (Generative Adversarial Networks) Inpainting-এর ক্ষেত্রে ব্যবহৃত অন্যতম প্রযুক্তি।
ইমেজ ইনপুট এবং মার্কিং:
মডেলটি প্রেডিকশন তৈরি করা:
পুনর্নির্মাণ এবং সম্পাদনা:
Inpainting-এর ব্যবহার এবং প্রয়োজনীয়তা বিভিন্ন ক্ষেত্রে দেখা যায়:
ইমেজ রেস্টোরেশন:
অবজেক্ট রিমুভাল:
কনটেন্ট ফিলিং এবং এক্সটেনশন:
ভার্চুয়াল রিয়েলিটি (VR) এবং গেমিং:
Stable Diffusion এবং অন্যান্য Diffusion মডেল ব্যবহার করে Inpainting করা যায়। Stable Diffusion মডেল ব্যবহার করে Inpainting-এর উদাহরণ নিচে দেখানো হলো:
python scripts/inpaint.py --input_image "damaged_image.png" --mask_image "mask.png" --output_image "repaired_image.png" --prompt "Fill the damaged part with natural scenery"
এই উদাহরণে:
Inpainting হলো একটি অত্যন্ত কার্যকর প্রযুক্তি যা ইমেজ পুনর্গঠন, রেস্টোরেশন, এবং অবজেক্ট রিমুভালের ক্ষেত্রে বিপ্লব ঘটাচ্ছে। এটি ডিজিটাল ইমেজ প্রসেসিং, গেমিং, VR, এবং অন্যান্য শিল্পে ব্যাপকভাবে ব্যবহৃত হচ্ছে। ভবিষ্যতে, Inpainting প্রযুক্তি আরও বাস্তবসম্মত এবং দ্রুততর হবে, যা ইমেজ সম্পাদনা এবং পুনর্গঠনের ক্ষেত্রে আরও উন্নতি আনবে।
Outpainting হলো Stable Diffusion-এর একটি ফিচার যা ইমেজের সীমানা বা সীমা বাড়িয়ে ইমেজকে এক্সটেন্ড করার জন্য ব্যবহৃত হয়। এটি একটি বিদ্যমান ইমেজের চারপাশে অতিরিক্ত কন্টেন্ট জেনারেট করতে সাহায্য করে, যার ফলে ইমেজের সীমানা প্রসারিত হয় এবং তা একটি নতুন ফর্ম বা কম্পোজিশন নিতে পারে। PyTorch এবং diffusers
লাইব্রেরি ব্যবহার করে Outpainting করার প্রক্রিয়া নিচে ধাপে ধাপে দেখানো হলো।
pip install diffusers transformers accelerate scipy pillow
import torch
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import requests
from io import BytesIO
# ডিভাইস সেট করা (GPU থাকলে CUDA ব্যবহার করা হবে)
device = "cuda" if torch.cuda.is_available() else "cpu"
# Stable Diffusion Inpainting Pipeline লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-inpainting"
).to(device)
# একটি ইমেজ লোড করা (URL থেকে উদাহরণস্বরূপ)
url = "https://path_to_your_image.jpg"
response = requests.get(url)
image = Image.open(BytesIO(response.content)).convert("RGB")
# ইমেজের নতুন সীমানা নির্ধারণ করা
new_width = image.width + 256 # নতুন প্রস্থ
new_height = image.height + 256 # নতুন উচ্চতা
# নতুন ক্যানভাস তৈরি করা
canvas = Image.new("RGB", (new_width, new_height), (255, 255, 255))
canvas.paste(image, (128, 128)) # মূল ইমেজ সেন্টারে পেস্ট করা
# Outpainting এর প্রম্পট ডিফাইন করা
prompt = "A beautiful fantasy landscape extending beyond the current borders"
# Outpainting করে ইমেজ তৈরি করা
with torch.autocast("cuda"):
result = pipe(prompt=prompt, image=canvas).images[0]
# আউটপেইন্টেড ইমেজ প্রদর্শন এবং সংরক্ষণ করা
result.show()
result.save("outpainted_image.png")
ইনপুট ইমেজ লোড:
PIL
লাইব্রেরি ব্যবহার করে ইমেজটি RGB ফরম্যাটে কনভার্ট করা হয়েছে।নতুন ক্যানভাস তৈরি:
প্রম্পট ডিফাইন করা:
"A beautiful fantasy landscape extending beyond the current borders"
। এই প্রম্পটটি ইমেজের সীমানায় নতুন কন্টেন্ট তৈরি করতে সাহায্য করে।Stable Diffusion Inpainting Pipeline:
StableDiffusionInpaintPipeline
PyTorch এবং diffusers
লাইব্রেরি ব্যবহার করে মডেল লোড করা হয়েছে। এটি GPU তে (যদি উপস্থিত থাকে) মুভ করা হয়েছে।আউটপেইন্টেড ইমেজ প্রদর্শন এবং সংরক্ষণ:
.show()
ফাংশন দিয়ে প্রদর্শন করা হয়েছে এবং .save("outpainted_image.png")
ফাংশন দিয়ে সেভ করা হয়েছে।stable-diffusion-2-inpainting
, যা উন্নত মানের আউটপুট প্রদান করে। সঠিক মডেল সিলেক্ট করা গুরুত্বপূর্ণ।Outpainting এর মাধ্যমে ইমেজের সীমানা প্রসারিত করে একটি নতুন এবং বিস্তারিত কন্টেন্ট জেনারেট করা যায়। এটি ডিজিটাল আর্ট, কনসেপ্ট আর্ট, বা ফ্যান্টাসি ল্যান্ডস্কেপ তৈরি করার জন্য অত্যন্ত কার্যকরী। PyTorch এবং diffusers
ব্যবহার করে সহজেই Outpainting সেটআপ করা এবং ব্যবহার করা সম্ভব।
Inpainting এবং Outpainting হলো ইমেজ এডিটিং-এর দুটি জনপ্রিয় টেকনিক যা ডিফিউশন মডেল, যেমন Stable Diffusion, ব্যবহার করে করা যায়। এই টেকনিকগুলো বিশেষভাবে ইমেজের নির্দিষ্ট অংশ পরিবর্তন করতে বা ইমেজের বাইরে নতুন কন্টেন্ট যোগ করতে ব্যবহৃত হয়। নিচে উদাহরণসহ এই পদ্ধতিগুলোর ব্যাখ্যা দেওয়া হলো।
Inpainting হলো এমন একটি টেকনিক যেখানে একটি ইমেজের নির্দিষ্ট অংশ পরিবর্তন বা পুনর্নির্মাণ করা হয়। এটি ক্ষতিগ্রস্ত বা অনাকাঙ্ক্ষিত অংশ মেরামত বা পরিবর্তন করার জন্য ব্যবহৃত হয়।
প্রম্পট: "Remove the old logo from the wall and replace it with a modern one."
কিভাবে কাজ করে:
from diffusers import StableDiffusionInpaintPipeline
import torch
from PIL import Image
# Inpainting pipeline লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained("CompVis/stable-diffusion-inpainting", torch_dtype=torch.float16).to("cuda")
# মূল ইমেজ এবং মাস্ক ইমেজ লোড করা
image = Image.open("original_image.jpg")
mask_image = Image.open("mask_image.jpg")
# Inpainting প্রম্পট
prompt = "Replace the old logo with a modern logo"
# Inpainting করা
result = pipe(prompt=prompt, image=image, mask_image=mask_image).images[0]
# ফলাফল দেখানো বা সংরক্ষণ করা
result.save("inpainted_image.jpg")
এখানে:
Outpainting হলো এমন একটি টেকনিক যেখানে ইমেজের বাইরের অংশে নতুন কন্টেন্ট যোগ করা হয়, যা ইমেজের কন্টেক্সট এবং স্টাইলের সাথে সামঞ্জস্যপূর্ণ। এটি ইমেজকে প্রসারিত করার জন্য ব্যবহৃত হয়।
প্রম্পট: "Extend the beach scene to the right with more palm trees and a sunset."
কিভাবে কাজ করে:
from diffusers import StableDiffusionInpaintPipeline
import torch
from PIL import Image
# Outpainting pipeline লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained("CompVis/stable-diffusion-inpainting", torch_dtype=torch.float16).to("cuda")
# মূল ইমেজ লোড করা
image = Image.open("beach_scene.jpg")
# একটি mask ইমেজ তৈরি করা যেখানে নতুন কন্টেন্ট যুক্ত হবে
mask_image = Image.new("RGB", image.size, (0, 0, 0))
# মাস্কের একটি অংশ হোয়াইট করা হবে যেখানে নতুন কন্টেন্ট যোগ হবে (ব্যাসিক উদাহরণ)
# প্রম্পট
prompt = "Extend the beach with more palm trees and a sunset on the right side."
# Outpainting করা
result = pipe(prompt=prompt, image=image, mask_image=mask_image).images[0]
# ফলাফল দেখানো বা সংরক্ষণ করা
result.save("outpainted_image.jpg")
এখানে:
এভাবে Inpainting এবং Outpainting ব্যবহার করে মডেলের সাহায্যে ইমেজ এডিটিং করা যায় এবং ইমেজকে আরও বাস্তবসম্মত এবং বিস্তারিতভাবে কাস্টমাইজ করা যায়।
Stable Diffusion-এর মাধ্যমে Creative Image Editing করা যায়, যেখানে মডেলটি প্রি-এক্সিস্টিং ইমেজকে পরিবর্তন, উন্নতি, বা সম্পূর্ণ নতুনভাবে পুনর্গঠন করতে ব্যবহার করা হয়। এটি মূলত Inpainting, Outpainting, এবং Image-to-Image Diffusion এর মাধ্যমে করা যায়। এই পদ্ধতিগুলো ব্যবহার করে ইমেজের নির্দিষ্ট অংশ পরিবর্তন বা ইমেজের প্রান্ত প্রসারণ করে ক্রিয়েটিভ এবং ইউনিক ইমেজ তৈরি করা যায়। নিচে এর প্রয়োগের কৌশল এবং উদাহরণ দেখানো হলো।
ইমেজ ইনপেইন্টিং হল ইমেজের একটি নির্দিষ্ট অংশ মুছে সেই অংশে নতুন কিছু যোগ করা বা পরিবর্তন করা। এটি ক্রিয়েটিভ ইমেজ এডিটিংয়ের জন্য খুবই কার্যকরী। উদাহরণস্বরূপ, একটি প্রি-এক্সিস্টিং ইমেজে একটি নির্দিষ্ট অবজেক্ট পরিবর্তন করা বা নতুন কিছু যোগ করা।
ধরা যাক আমাদের একটি ইমেজ আছে যেখানে একজন ব্যক্তি দাঁড়িয়ে আছে, এবং আমরা চাই তার পোশাক পরিবর্তন করতে।
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import torch
# ইনপেইন্ট মডেল লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting").to("cuda")
# ইমেজ এবং মাস্ক লোড করা
original_image = Image.open("person_image.png")
mask_image = Image.open("mask.png") # যেখানে পরিবর্তন হবে সেই অংশের মাস্ক
# প্রম্পট সেট করা
prompt = "a person wearing a futuristic suit"
# ইনপেইন্ট করে ইমেজ তৈরি করা
edited_image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
edited_image.save("edited_person_image.png")
কোড ব্যাখ্যা:
Outpainting হলো একটি ইমেজের প্রান্তে নতুন কিছু যোগ করে ইমেজটি বড় করা। এটি বিশেষত ইমেজের কল্পনাপ্রবণ প্রসারণের জন্য ব্যবহৃত হয়, যেমন একটি পোর্ট্রেটের পটভূমি বৃদ্ধি করা বা একটি ল্যান্ডস্কেপ ইমেজে নতুন এলিমেন্ট যোগ করা।
একটি পোর্ট্রেট ইমেজে পিছনের পটভূমি বাড়ানো এবং একটি প্রাকৃতিক দৃশ্য যোগ করা।
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
# আউটপেইন্ট মডেল লোড করা
pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting").to("cuda")
# ইমেজ এবং মাস্ক লোড করা
portrait_image = Image.open("portrait.png")
mask_image = Image.open("outpaint_mask.png") # আউটপেইন্ট করার জন্য নির্দিষ্ট মাস্ক
# প্রম্পট সেট করা
prompt = "a beautiful forest with mountains in the background"
# আউটপেইন্ট করে ইমেজ তৈরি করা
outpainted_image = pipe(prompt=prompt, image=portrait_image, mask_image=mask_image).images[0]
outpainted_image.save("outpainted_portrait.png")
কোড ব্যাখ্যা:
Image-to-Image Diffusion পদ্ধতিতে একটি প্রি-এক্সিস্টিং ইমেজের উপর ভিত্তি করে নতুন ইমেজ তৈরি করা যায়। এটি ইমেজের স্টাইল পরিবর্তন বা নতুন ডিজাইন অ্যাপ্লাই করতে ব্যবহার করা যায়।
একটি সাধারণ ল্যান্ডস্কেপ ইমেজকে একটি ফ্যান্টাসি ল্যান্ডস্কেপে পরিবর্তন করা।
from diffusers import StableDiffusionImg2ImgPipeline
# ইমেজ-টু-ইমেজ ডিফিউশন মডেল লোড করা
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("CompVis/stable-diffusion-v1-4").to("cuda")
# প্রাথমিক ইমেজ লোড করা
init_image = Image.open("landscape.png")
# প্রম্পট সেট করা
prompt = "a fantasy landscape with glowing trees, magical creatures, and a river flowing through"
# ইমেজ পরিবর্তন করা
edited_image = pipe(prompt=prompt, image=init_image, strength=0.75).images[0]
edited_image.save("fantasy_landscape.png")
কোড ব্যাখ্যা:
strength
বেশি হলে ইমেজের পরিবর্তন বেশি হবে, এবং কম হলে প্রাথমিক ইমেজের বৈশিষ্ট্যগুলো বজায় থাকবে।Stable Diffusion-এর মাধ্যমে ইমেজের স্টাইল সম্পূর্ণভাবে পরিবর্তন করা যায়, যেমন একটি সাধারণ পোর্ট্রেট ইমেজকে আঁকা (artistic style) বা অন্য কোনও নির্দিষ্ট স্টাইলে পরিবর্তন করা।
prompt = "a portrait of a woman, painted in watercolor with soft pastel colors"
edited_image = pipe(prompt=prompt, image=init_image, strength=0.8).images[0]
edited_image.save("watercolor_portrait.png")
Stable Diffusion-এর মাধ্যমে Creative Image Editing করতে Inpainting, Outpainting, এবং Image-to-Image Diffusion-এর মতো পদ্ধতি ব্যবহার করা হয়। এই পদ্ধতিগুলো ব্যবহার করে ইমেজের নির্দিষ্ট অংশ পরিবর্তন, প্রসারণ, বা সম্পূর্ণ নতুন করে স্টাইলাইজেশন করা সম্ভব, যা ডিজাইনার, আর্টিস্ট এবং কনটেন্ট ক্রিয়েটরদের জন্য একটি শক্তিশালী টুল।
Read more