Shapeworks: Pengemasan shapworkspy dan restrukturisasi use case

Dibuat pada 14 Des 2020  ·  13Komentar  ·  Sumber: SCIInstitute/ShapeWorks

Komentar yang paling membantu

Langkah-langkah restrukturisasi:

  1. Sertakan semua fungsi pembantu yang digunakan di notebook Jupyter ke modul python ShapeWorks.
  2. Perbarui buku catatan untuk menggunakan fungsi pembantu dari modul python.
  3. Tulis ulang kasus penggunaan python menggunakan modul python dan perintah python API tanpa menggunakan GroomUtils.

Semua 13 komentar

Dari #818

Mendesain ulang utilitas pengantin pria sehingga dapat dijalankan secara interaktif daripada secara batch.
Ini akan membuatnya jadi file perawatan menengah tidak harus disimpan (masalah #598) dan langkah-langkah dapat dilewati (masalah #507)

Mari kita gunakan masalah ini sebagai masalah induk/penggerak untuk kemasan python shapeworks dan desain kasus penggunaan terkait. Kami dapat menambahkan masalah yang lebih terfokus nanti dan menghubungkannya dengan yang satu ini. Saya telah menutup masalah terkait.

@jadie1 @iyerkrithika21 silakan bergabung dengan slot GC untuk membahas ini sebagai bagian dari python API. Memindahkan ini ke dalam agenda untuk memungkinkan Anda pergi lebih awal jika diperlukan.

Saya sedang mencari paket modul Python sekarang. Silakan ping saya jika Anda memiliki saran atau pemikiran.

Beberapa instruksi yang saya temukan:

Sejauh ini saya paling tertarik pada conda untuk spesifikasi ketergantungan yang konon lebih baik, tetapi saya akan senang memiliki apa pun.
Alasan conda adalah kita harus dapat menginstal semuanya dengan paket ini: baris perintah, modul python, dan studio. Tapi kita akan mulai dengan modul python kita.

Ketakutan terbesar saya adalah masalah multi-platform menyedot hidup kita, jadi saya akan mencoba untuk membuat OSX bekerja terlebih dahulu dan pergi dari sana.

Kasing penggunaan tidak berfungsi untuk saya di Ubuntu 18.04, saya harus:

  1. di RunUseCase.py, saya menambahkan di atas sys.path.append('../../build/cmake-build-release/bin/')
  2. atur variabel lingkungan LD_LIBRARY_PATH=../../dependencies/install/lib/ (jika tidak, ia mengeluh tentang "libvcl.so" yang hilang)

Untuk memiliki opsi untuk menyimpan keluaran antara, dapatkah kita menyertakan opsi tulis dalam setiap operasi daripada fungsi tulis/simpan yang terpisah?
Yang saya bayangkan adalah:

img.binarize(write=False)
img.resample(write=True).binarize(write=True)

Dari pada

img.binarize()
img.write()
img.resample()
img.write()

Ini mungkin membutuhkan nama file sebagai argumen input
misalnya, img.binarize(write=True, namafile='blabla')

@archanasri @cchriste pikiran?

Untuk memiliki opsi untuk menyimpan keluaran antara, dapatkah kita menyertakan opsi tulis dalam setiap operasi daripada fungsi tulis/simpan yang terpisah?
Yang saya bayangkan adalah:

img.binarize(write=False)
img.resample(write=True).binarize(write=True)

Dari pada

img.binarize()
img.write()
img.resample()
img.write()

Image.write dapat dirantai seperti yang lainnya. Masukkan saja ke dalam rantai jika
Anda ingin.

img.binarize().write(<path>)
img.resample().write(<path>).binarize()

Pada Sel, 19 Jan 2021 jam 16:58 Shireen Elhabian [email protected]
menulis:

Ini mungkin membutuhkan nama file sebagai argumen input
misalnya, img.binarize(write=True, namafile='blabla')

@archanasri https://github.com/archanasri @cchriste
https://github.com/cchriste pemikiran?

Untuk memiliki opsi untuk menyimpan output antara, dapatkah kita menyertakan:
opsi tulis dalam setiap operasi daripada tulis/simpan terpisah
fungsi?
Yang saya bayangkan adalah:

img.binarize(tulis=Salah)
img.resample(write=True).binarize(write=True)

Dari pada

img.binarize()
img.tulis()
img.contoh ulang()
img.tulis()


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-763221837 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAJT3EP3HDOHQGC54NMWSJDS2YMA7ANCNFSM4U3KV45Q
.

Image.write dapat dirantai seperti yang lainnya. Masukkan saja ke dalam rantai jika Anda menginginkannya. img.binarize().write(<path>) img.resample().write(<path>).binarize()

Saya mengerti bahwa fungsi tulis juga dapat dirantai; maksud saya dengan menyarankan opsi tulis dalam setiap operasi adalah hanya memiliki satu fungsi dan meneruskan tanda apakah kita ingin menyimpan gambar perantara atau tidak dan menyederhanakan kasus penggunaan.
Contoh kode sudo:

function groom(write_flag):
    img.binarize(write = write_flag).resize(write = write_flag).crop(write=write_flag)
groom(write_flag = True)
groom(write_flag = False)

Dengan cara ini, kita dapat menghindari pengulangan potongan kode yang sama. Hanya ingin tahu kelayakan ide ini.

Salah satu alasan kami mencoba membongkar kumpulan GroomUtils.py
Fungsi "helper" adalah untuk membuat operasi perawatan kami lebih transparan.
Tanpa mengemas operasi ini ke dalam fungsi monolitik, dibuat fleksibel
hanya dengan melewati parameter, jauh lebih mudah untuk membuatnya secara langsung,
demonstrasi kasus penggunaan yang dapat dimengerti. Jika kita tidak menggunakan (banyak) chaining di
contoh kami, akan sangat mudah untuk menyampaikan kemampuan menulis
hasil antara bila dianggap perlu. Saat ini mereka semua tampak
diperlukan karena kami memiliki kasus penggunaan yang memerlukan hasil ini sejak
satu fungsi GroomUtils melakukan beberapa (mungkin sewenang-wenang) set
operasi, menyimpan hasilnya, kemudian fungsi berikutnya membaca hasil tersebut
dan melanjutkan pemrosesan.

Saya sarankan meratakan semuanya untuk memulai, dan untuk semua kasus penggunaan, bukan
ellipsoid saja. Saya percaya apa yang akan kita lihat adalah relatif
serangkaian operasi langsung yang sangat berbeda untuk kasus-kasus tertentu
(mis: ketika gambar asli "bersama untuk perjalanan"). Apa yang akan dilakukan pengguna
dapatkan dari contoh kami adalah pemahaman yang lebih jelas tentang apa yang bisa dan/atau
harus dilakukan untuk dataset mereka sendiri.

Berikut ini contoh apa yang ingin saya tiru jika saya adalah pengguna:

for img in images:

# since we're starting with fuzzy data, we first need to ensure it's a
binary (black and white) image in order to <explain>
img.binarize()

# next, we must ensure images all have the same logical dimensions since
<explain>
img.resize()

# now we'll crop these images using the bounds we computed earlier so they
all encompass the data without leftover space (since it can be costly and
pointless to compute)
img.crop(bounds)

Kami dapat memberikan contoh penulisan rantai ke salah satu dari operasi ini, seperti:
seperti dengan menambahkan .write(<path> setelah salah satunya. Yang tidak kita inginkan adalah beberapa
fungsi yang "lakukan saja" karena "itu" tidak sama untuk setiap
Himpunan data. Sebagai gantinya,
kami akan memberdayakan pengguna dengan menunjukkan kepada mereka bahwa apa yang sedang dilakukan bukanlah segalanya
yang rumit dan sangat mudah diubah. Daripada memberi mereka
antarmuka kotak hitam dengan miliaran parameter, beri mereka kunci dan biarkan
mereka mengemudi. Saya harap ini membantu memperjelas seluruh ide di balik menyingkirkan
dari GroomUtils.

Pada Senin, 25 Januari 2021 jam 09:49 Krithika Iyer [email protected]
menulis:

Image.write dapat dirantai seperti yang lainnya. Masukkan saja ke dalam rantai jika
Anda ingin. img.binarize().tulis()
img.resample().tulis().binarisasi()
… <#m_-7433729883366947300_>

Saya mengerti bahwa fungsi tulis juga dapat dirantai; poin saya dengan
menyarankan opsi tulis dalam setiap operasi adalah hanya memiliki satu
berfungsi dan meneruskan tanda apakah kita ingin menyimpan gambar perantara
atau tidak dan menyederhanakan kasus penggunaan.
Contoh kode sudo:

fungsi pengantin pria(write_flag):

img.binarize(write = write_flag).resize(write = write_flag).crop(write=write_flag)

pengantin pria(write_flag = Benar)

pengantin pria(tulis_flag = Salah)

Dengan cara ini, kita dapat menghindari pengulangan potongan kode yang sama.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766952032 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAJT3EJND2F3EDVU75NB6ITS3WOIPANCNFSM4U3KV45Q
.

@iyerkrithika21 @jadie1

Saya setuju dengan @ccriste. Mari kita tidak menggunakan chaining kecuali secara semantik masuk akal (misalnya, resampling gambar biner), bahkan untuk kasus ini kita tidak harus menulis setiap output perantara dari langkah resampling (combo) ini. Mari kita buat kasus penggunaan mudah diikuti, didokumentasikan sendiri, dan mudah bagi pengguna untuk beradaptasi dan menyesuaikan.

Menulis (terutama sementara untuk debugging) gambar adalah contoh yang bagus dari
ketika chaining masuk akal.

# let's see what happened
img.operation(...) -> img.operation(...).write(<path>)

Padahal, ketika itu adalah langkah penting, mungkin lebih baik untuk meletakkannya di
baris sendiri dengan komentar.

...
# now let's write the results
img.write(<path>)

Pada Senin, 25 Januari 2021 pukul 10:34 Shireen Elhabian [email protected]
menulis:

@iyerkrithika21 https://github.com/iyerkrithika21 @jadie1
https://github.com/jadie1

Saya setuju dengan @cchriste https://github.com/cchriste . Mari kita tidak menggunakan
chaining kecuali secara semantik masuk akal (misalnya, resampling
gambar biner), bahkan untuk kasus ini kita tidak perlu menulis setiap
keluaran antara dari langkah resampling (kombo) ini. Mari kita membuat kasus penggunaan
mudah diikuti, didokumentasikan sendiri, dan mudah bagi pengguna untuk beradaptasi dan menyesuaikan.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766983878 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAJT3EKKARLKY4VKBRPHJWLS3WTSNANCNFSM4U3KV45Q
.

Langkah-langkah restrukturisasi:

  1. Sertakan semua fungsi pembantu yang digunakan di notebook Jupyter ke modul python ShapeWorks.
  2. Perbarui buku catatan untuk menggunakan fungsi pembantu dari modul python.
  3. Tulis ulang kasus penggunaan python menggunakan modul python dan perintah python API tanpa menggunakan GroomUtils.

Ingat, kami memiliki cabang python_module di mana ini sudah dimulai. Ini belum digabung selama satu menit, tetapi tetap beri tahu kami jika seseorang menangani ini. Ini tinggi pada daftar prioritas saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat