কিউজিআইএস মডেলার যদি / অন্য শর্ত থাকে তবে মডেলারের জন্য কাস্টম স্ক্রিপ্ট


10

আমি আমার মডেলের অভ্যন্তরে / অন্য কোনও ক্রিয়াকলাপটি সহজ করতে চাই এবং আমি এটি জানতে পেরেছি কিনা এটি সম্ভব কিনা।

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

আমি এই জিনিসটি করতে চাই যদি 'সেগমেন্ট লেয়ার' এর জন্য কোনও ইনপুট নির্বাচন করা হয় যে এটি 'সেগমেন্টেশন (মিডিশিফ্ট)' চালিত করতে হবে না এবং পরবর্তী প্রক্রিয়ার ইনপুট হিসাবে পরিবর্তে 'সেগমেন্ট স্তর' ব্যবহার করবে।

'বিভাজন (মধ্যবর্তী স্থান)' এর ইনপুটগুলি নিম্নরূপ

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

জোসেফের উত্তরটি প্রয়োগ করার চেষ্টা করার পরে আপডেট করুন: আমি নিম্নলিখিত কোডটি ব্যবহার করেছি এবং এই ত্রুটি পেয়েছি এখানে চিত্র বর্ণনা লিখুন

আপডেট 2, পরামিতিগুলি প্রতিস্থাপনের পরে আমি 28 লাইনটিতে একটি ত্রুটি পেয়েছি এটি ছিল 'অন্যথায়:' স্ট্যান্ড

##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector

if BGREN is not None:
    processing.runalg('otb:segmentationmeanshift', \
    -BGREN\
    -0\
    -70\
    -70\
    -0.1\
    -100\
    -100\
    -0\
    -0\
    -0\
    -'True'\
    -'False'\
    -1\
    -0.1\
    -'Layer'\
    -'DN'\
    -1024\
    -1\
    -0\
    -output)
else:
    output=Segment_Layer

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

আপডেট করুন এটি কার্যকর হয় :) কয়েকবার চেষ্টা করার পরে এবং জোসেফের সাহায্যে এই কোডটি এখন একটি কবজির মতো কাজ করে, চূড়ান্ত কৌশলটি ছিল দুটি 'বিকল্প নয়' দিয়ে দুটি alচ্ছিক মানগুলি প্রতিস্থাপন করা।

##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector

if BGREN is not None:
    processing.runalg('otb:segmentationmeanshift', \
    BGREN, \
    0, \
    70, \
    70, \
    0.1, \
    100, \
    100, \
    0, \
    0, \
    None, \
    True, \
    False, \
    1, \
    0.1, \
    'Layer', \
    'DN', \
    1024, \
    1, \
    None, \
    output)
else:
    output=Segment_Layer

3
আমি মনে করি / / অন্য বিবৃতি সঠিকভাবে ব্যবহার করার জন্য আপনাকে আপনার মডেলের অভ্যন্তরে একটি কাস্টম স্ক্রিপ্ট ব্যবহার করতে হবে ।
জোসেফ

1
@ জোসেফ এটিই আমি ভেবেছিলাম, সমস্যাটি হ'ল আমি যে চিত্রনাট্য তৈরি করতে চাই তেমন ভাল নই, আমার খুব বেশিই অভিজ্ঞতা নেই ...
অ্যান্ড্রেস

1
@ আন্দ্রেয়াস আমি জোসেফ তার মন্তব্যে যা লিখেছি তা নিশ্চিত করি। তবে আমি মনে করি আপনি যদি নিজের প্রশ্নটি সম্পাদনা করেন এবং পাইথনের সাথে কিছু ইঙ্গিত পাওয়ার সম্ভাবনা দেন (একটি যথাযথ ট্যাগ
যুক্তও করে থাকেন

1
@ আন্দ্রেয়াস - আমার পোস্টটি সম্পাদনা করেছে এছাড়াও, তারা আপনার সমস্যার সমাধান করার পরে উত্তরগুলি গ্রহণ করতে হবে ;)
জোসেফ

1
@ জোসেফ আমি এখনকার কার্যকরী কোডের সাথে আমার পোস্টটি সম্পাদনা করেছি, আপনার সাহায্যের খুব প্রয়োজন ছিল এবং আমি এটির সাহায্যে আপনার মূল্যবান সময় নিয়েছি বলে আমি সত্যিই আনন্দিত :) ঠিক এখনই এটি অ্যালগরিদম কার্যকর করছে এবং আমাকে অপেক্ষা করতে হবে ফলাফলের জন্য তবে এটি সত্যিই আশাব্যঞ্জক বলে মনে হচ্ছে, আপনাকে আবারও ধন্যবাদ :)
Andreas

উত্তর:


8

আমার মন্তব্যে উল্লিখিত হিসাবে, একটি কাস্টম স্ক্রিপ্ট এই পরিস্থিতিতে যাওয়ার উপায় হতে পারে। আপনি এটি থেকে একটি তৈরি করতে পারেন:

Processing Toolbox > Scripts > Tools > Create new script

নিম্নলিখিত স্ক্রিপ্ট হিসাবে ইনপুট প্যারামিটার সেট করে ঐচ্ছিক একটি সহ যদি / অন্যথায় নির্ভর করে বিবৃতি যার উপর পরামিতি একটি স্তর রয়েছে। সুতরাং যদি কোনও স্তরটি নির্বাচিত করা হয় তবে BGRENএটি সেগমেন্টেশন সরঞ্জাম সম্পাদন করবে এবং ফলাফল নির্ধারণ করবে; অন্যথায় আউটপুটটি স্তর থেকে নির্বাচিত হবে Segment_Layer

এখানে একটি সম্ভাব্য স্ক্রিপ্ট:

##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector

if BGREN is not None:
    processing.runalg('otb:segmentationmeanshift', \
    -BGREN, \
    -filter, \
    -filter.meanshift.spatialr, \
    -filter.meanshift.ranger, \
    -filter.meanshift.thres, \
    -filter.meanshift.maxiter, \
    -filter.meanshift.minsize, \
    -mode, \
    -mode.vector.outmode, \
    -mode.vector.inmask, \
    -mode.vector.neighbor, \
    -mode.vector.stitch, \
    -mode.vector.minsize, \
    -mode.vector.simplify, \
    -mode.vector.layername, \
    -mode.vector.fieldname, \
    -mode.vector.tilesize, \
    -mode.vector.startlabel, \
    -mode.vector.ogroptions, \
    -output)
else:
    output=Segment_Layer

otb:segmentationmeanshiftচেহারা ভয়ঙ্কর জন্য পরামিতি ! দুর্ভাগ্যক্রমে, আমার অরফিও ইনস্টল করা নেই তাই এই সরঞ্জামটি পরীক্ষা করতে পারে না। তবে প্যারামিটারগুলি এখানে দেখানো হয়েছে , আপনাকে কেবল জিইউআই ব্যবহার করার পরিবর্তে এগুলি টাইপ করতে হবে। একবার সম্পন্ন, আপনার modeler ব্যবহার মধ্যে স্ক্রিপ্ট যোগ BGRENএবং Segment_Layerইনপুট স্তর হিসাবে:

স্ক্রিপ্ট পরামিতি

এছাড়াও, আপনার মডেলারে আপনার প্রয়োজনীয় প্যারামিটার সংজ্ঞা BGRENএবং এর পরিবর্তনের প্রয়োজন হতে পারে Segment_Layer:

পরামিতি সংজ্ঞা

তারপরে স্ক্রিপ্টের আউটপুটটিকে আপনার এনডিভিআই সরঞ্জামের সাথে সংযুক্ত করুন।


কোন ইনপুট স্তরটি নির্বাচন করা হয়েছিল তার উপর নির্ভর করে কাজ করেছে এমন অন্যান্য সরঞ্জামগুলি ব্যবহার করে আমি কিছুটা হলেও এটি পরীক্ষা করেছি আশা করি এটি আপনার মডেলারের পক্ষে কাজ করবে!



সম্পাদনা করুন:

আপনি কিছুটা সংশোধিত কোডটি এখানে ব্যবহার করেছেন (প্যারামিটারগুলি পৃথক করার জন্য আপনার কমা প্রয়োজন, Trueএবং Falseবিবৃতিগুলির চারপাশে উদ্ধৃতিগুলির প্রয়োজন হয় না, পশ্চাদপট স্ল্যাশ কেবল পঠনযোগ্যতার জন্য তবে এটি ওয়ান-লাইনার হিসাবে অন্তর্ভুক্ত করবে):

##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector

if BGREN is not None:
    processing.runalg('otb:segmentationmeanshift', \
    BGREN, \
    0, \
    70, \
    70, \
    0.1, \
    100, \
    100, \
    0, \
    0, \
    0, \
    True, \
    False, \
    1, \
    0.1, \
    'Layer', \
    'DN', \
    1024, \
    1, \
    0, \
    output)
else:
    output=Segment_Layer

বা ওয়ান-লাইনার হিসাবে:

##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector

if BGREN is not None:
    processing.runalg('otb:segmentationmeanshift',BGREN,0,70,70,0.1,100,100,0,0,0,True,False,1,0.1,'Layer','DN',1024,1,0,output)
else:
    output=Segment_Layer

1
আমি @ আন্দ্রেয়াসকে এর প্রশ্নটি সম্পাদন করতে উত্সাহিত করার জন্য আরও একটি মন্তব্য যুক্ত করছি এবং আরও সহায়তা পাওয়ার জন্য পাইথনের সাথে কিছু ইঙ্গিত পাওয়ার সম্ভাবনা দিচ্ছি, তবে আপনি দ্রুত ছিলেন!
এমগ্রি

1
@ এমগ্রি - আমি আপনাকে মন্তব্যটি পোস্ট করতে উত্সাহিত করব কারণ ওপি কিছু বিশদ বিবরণ সম্পাদনা করতে চায় এবং আশা করি অন্যদের সম্ভাব্য সমাধান পোস্ট করতে উত্সাহিত করবে :)
জোসেফ

1
@ জোসেফ অভিশাপ যে এটি আমি ভেবেছিলাম তার চেয়ে অনেক বেশি: ও যাইহোক আমি এটি পুনরায় তৈরি করার চেষ্টা করব এবং যদি এটির কাজটি পাওয়া যায় তবে একটি প্রতিক্রিয়া রেখে যাব, আগাম ধন্যবাদ :)
Andreas

1
সর্বাধিক স্বাগতম! আমি সম্ভবত এটি উচ্ছেদ করেছিলাম সুতরাং @ এমগ্রির পরামর্শ অনুসারে আপনার প্রশ্নটি সম্পাদনা করা ভাল ধারণা হতে পারে যাতে আরও উপযুক্ত অজগর সমাধান বা এরকম পোস্ট করা যায় =)
জোসেফ

1
@ আন্দ্রেয়াস - মোটেও বোকা নয়, প্রত্যেককে শুরু থেকেই শিখতে হবে =)
জোসেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.