Shapeworks: shapworkspy ํŒจํ‚ค์ง• ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์žฌ๊ตฌ์„ฑ

์— ๋งŒ๋“  2020๋…„ 12์›” 14์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: SCIInstitute/ShapeWorks

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ตฌ์กฐ์กฐ์ • ๋‹จ๊ณ„:

  1. Jupyter ๋…ธํŠธ๋ถ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ์„ ShapeWorks python ๋ชจ๋“ˆ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. python ๋ชจ๋“ˆ์˜ ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋…ธํŠธ๋ถ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  3. GroomUtils๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  python ๋ชจ๋“ˆ ๋ฐ python API ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ Python ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  13 ๋Œ“๊ธ€

#818์—์„œ

๋ฐฐ์น˜ ๋ฐฉ์‹์ด ์•„๋‹Œ ๋Œ€ํ™”์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์žฌ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ค‘๊ฐ„ ์ •๋ฆฌ ํŒŒ์ผ์„ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๊ณ (๋ฌธ์ œ #598) ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌธ์ œ #507).

์ด ๋ฌธ์ œ๋ฅผ shapeworks python ํŒจํ‚ค์ง• ๋ฐ ๊ด€๋ จ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋””์ž์ธ์— ๋Œ€ํ•œ ์ƒ์œ„/๊ตฌ๋™ ๋ฌธ์ œ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋” ์ง‘์ค‘๋œ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด ๋ฌธ์ œ์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋งˆ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@jadie1 @iyerkrithika21 ํŒŒ์ด์ฌ API์˜ ์ผ๋ถ€๋กœ ์ด๊ฒƒ์„ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด GC ์Šฌ๋กฏ์— ์ฐธ์—ฌํ•˜์‹ญ์‹œ์˜ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ์ผ์ฐ ๋– ๋‚  ์ˆ˜ ์žˆ๋„๋ก ์˜์ œ์—์„œ ์ด๋ฅผ ์œ„๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ง€๊ธˆ Python ๋ชจ๋“ˆ ํŒจํ‚ค์ง•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ์ด๋‚˜ ์ƒ๊ฐ์ด ์žˆ์œผ๋ฉด ์ €์—๊ฒŒ ping์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.

๋‚ด๊ฐ€ ์ฐพ์€ ๋ช‡ ๊ฐ€์ง€ ์ง€์นจ:

์ง€๊ธˆ๊นŒ์ง€ ๋‚˜๋Š” ํ‰ํŒ์ด ๋” ๋‚˜์€ ์ข…์†์„ฑ ์‚ฌ์–‘์„ ์œ„ํ•ด conda์— ๊ฐ€์žฅ ๊ด€์‹ฌ์ด ์žˆ์ง€๋งŒ ๋ฌด์—‡์ด๋“  ๊ฐ–๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.
conda๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ด ํŒจํ‚ค์ง€๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค: ๋ช…๋ น์ค„, python ๋ชจ๋“ˆ ๋ฐ ์ŠคํŠœ๋””์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ํŒŒ์ด์ฌ ๋ชจ๋“ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์žฅ ๋‘๋ ค์›Œํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋ฌธ์ œ๊ฐ€ ์šฐ๋ฆฌ์˜ ์‚ถ์„ ๋นจ์•„๋“ค์ด๋Š” ๊ฒƒ์ด๋ฏ€๋กœ OSX๋ฅผ ๋จผ์ € ์ž‘๋™์‹œํ‚ค๊ณ  ๊ฑฐ๊ธฐ์—์„œ ๋ฒ—์–ด๋‚˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Ubuntu 18.04์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. RunUseCase.py์—์„œ sys.path.append('../../build/cmake-build-release/bin/') ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ LD_LIBRARY_PATH=../../dependencies/install/lib/ (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "libvcl.so" ๋ˆ„๋ฝ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•จ)

์ค‘๊ฐ„ ์ถœ๋ ฅ์„ ์ €์žฅํ•˜๋Š” ์˜ต์…˜์„ ๊ฐ€์ง€๋ ค๋ฉด ๋ณ„๋„์˜ ์“ฐ๊ธฐ/์ €์žฅ ๊ธฐ๋Šฅ ๋Œ€์‹  ๊ฐ ์ž‘์—…์— ์“ฐ๊ธฐ ์˜ต์…˜์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚ด๊ฐ€ ์ƒ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

๋Œ€์‹ ์—

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

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์ž…๋ ฅ ์ธ์ˆ˜๋กœ ํŒŒ์ผ ์ด๋ฆ„์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค
์˜ˆ: img.binarize(write=True, ํŒŒ์ผ ์ด๋ฆ„='blabla')

@archanasri @cchriste ์ƒ๊ฐ?

์ค‘๊ฐ„ ์ถœ๋ ฅ์„ ์ €์žฅํ•˜๋Š” ์˜ต์…˜์„ ๊ฐ€์ง€๋ ค๋ฉด ๋ณ„๋„์˜ ์“ฐ๊ธฐ/์ €์žฅ ๊ธฐ๋Šฅ ๋Œ€์‹  ๊ฐ ์ž‘์—…์— ์“ฐ๊ธฐ ์˜ต์…˜์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚ด๊ฐ€ ์ƒ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

๋Œ€์‹ ์—

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

Image.write๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ฒด์ธ์— ๋„ฃ์–ด๋‘๋ฉด
๋‹น์‹ ์ด ์›ํ•˜๋Š”.

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

2021๋…„ 1์›” 19์ผ ํ™”์š”์ผ ์˜คํ›„ 4:58 Shireen Elhabian [email protected]
์ผ๋‹ค:

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์ž…๋ ฅ ์ธ์ˆ˜๋กœ ํŒŒ์ผ ์ด๋ฆ„์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค
์˜ˆ: img.binarize(write=True, ํŒŒ์ผ ์ด๋ฆ„='blabla')

@archanasri https://github.com/archanasri @cchriste
https://github.com/cchriste ์ƒ๊ฐ?

์ค‘๊ฐ„ ์ถœ๋ ฅ์„ ์ €์žฅํ•˜๋Š” ์˜ต์…˜์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋ณ„๋„์˜ ์“ฐ๊ธฐ/์ €์žฅ์ด ์•„๋‹Œ ๊ฐ ์ž‘์—… ๋‚ด ์“ฐ๊ธฐ ์˜ต์…˜
๊ธฐ๋Šฅ?
๋‚ด๊ฐ€ ์ƒ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

img.binarize(์“ฐ๊ธฐ=๊ฑฐ์ง“)
img.resample(์“ฐ๊ธฐ=์ฐธ).binarize(์“ฐ๊ธฐ=์ฐธ)

๋Œ€์‹ ์—

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

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-763221837 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJT3EP3HDOHQGC54NMWSJDS2YMA7ANCNFSM4U3KV45Q
.

Image.write๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜์‹œ๋ฉด ์ฒด์ธ์— ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. img.binarize().write(<path>) img.resample().write(<path>).binarize()
โ€ฆ

์“ฐ๊ธฐ ๊ธฐ๋Šฅ๋„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—… ๋‚ด์—์„œ ์“ฐ๊ธฐ ์˜ต์…˜์„ ์ œ์•ˆํ•œ ์ €์˜ ์š”์ ์€ ์ค‘๊ฐ„ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ• ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ ๊ฐ–๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
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)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•„์ด๋””์–ด์˜ ์‹คํ˜„ ๊ฐ€๋Šฅ์„ฑ์„ ์•Œ๊ณ  ์‹ถ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

GroomUtils.py ์„ธํŠธ๋ฅผ ํ•ด์ฒดํ•˜๋ ค๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š”
"helper" ๊ธฐ๋Šฅ์€ ๊ทธ๋ฃจ๋ฐ ์ž‘์—…์„ ๋ณด๋‹ค ํˆฌ๋ช…ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋ชจ๋†€๋ฆฌ์‹ ๊ธฐ๋Šฅ์œผ๋กœ ํŒจํ‚ค์ง•ํ•˜์ง€ ์•Š๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ๋ชจ. ์šฐ๋ฆฌ๊ฐ€ (๋งŽ์ด) ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
์šฐ๋ฆฌ์˜ ์˜ˆ, ๊ทธ๊ฒƒ์€ ์“ฐ๊ธฐ ๋Šฅ๋ ฅ์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค
ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ. ์ง€๊ธˆ ๊ทธ๋“ค์€ ๋ชจ๋‘ ๋ณด์ธ๋‹ค
์ด ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
ํ•˜๋‚˜์˜ GroomUtils ํ•จ์ˆ˜๋Š” ๋‹ค์Œ ์ค‘ ์ผ๋ถ€(์•„๋งˆ๋„ ์ž„์˜) ์ง‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ํ‰๋ฉดํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด
๊ทธ๋ƒฅ ํƒ€์›์ฒด. ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ฒŒ ๋  ๊ฒƒ์€ ์ƒ๋Œ€์ ์œผ๋กœ
ํŠน์ • ๊ฒฝ์šฐ์— ํ˜„์ €ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์ž‘์—… ์ง‘ํ•ฉ
(์˜ˆ: ์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ "along the ride"์ธ ๊ฒฝ์šฐ). ์‚ฌ์šฉ์ž๋Š” ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ๊ฐ€
์šฐ๋ฆฌ์˜ ์˜ˆ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ/๋˜๋Š”
์ž์ฒด ๋ฐ์ดํ„ฐ์„ธํŠธ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉ์ž๋ผ๋ฉด ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

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)

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋Ÿฌํ•œ ์ž‘์—…์— ์“ฐ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ์ค‘ ํ•˜๋‚˜ ๋’ค์— .write(<path> ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค
"๊ทธ๊ฒƒ"์ด ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋™์ผํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— "๊ทธ๋ƒฅ ์ˆ˜ํ–‰"ํ•˜๋Š” ๊ธฐ๋Šฅ
๋ฐ์ดํ„ฐ์„ธํŠธ. ๋Œ€์‹ ์—,
์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ์ผ์ด ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์คŒ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํž˜์„ ์‹ค์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ณต์žกํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์—๊ฒŒ ์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค
์ˆ˜๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ธ”๋ž™๋ฐ•์Šค ์ธํ„ฐํŽ˜์ด์Šค์— ํ‚ค๋ฅผ ์ œ๊ณตํ•˜๊ณ 
๊ทธ๋“ค์€ ์šด์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฑฐ ๋’ค์—์žˆ๋Š” ์ „์ฒด ์•„์ด๋””์–ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
GroomUtils์˜.

2021๋…„ 1์›” 25์ผ ์›”์š”์ผ ์˜ค์ „ 9:49 Krithika Iyer [email protected]
์ผ๋‹ค:

Image.write๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ฒด์ธ์— ๋„ฃ์–ด๋‘๋ฉด
๋‹น์‹ ์ด ์›ํ•˜๋Š”. img.binarize().write()
img.resample().write().์ด์ง„ํ™”()
โ€ฆ <#m_7433729883366947300_>

์“ฐ๊ธฐ ๊ธฐ๋Šฅ๋„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์˜ ์š”์ 
๊ฐ ์ž‘์—… ๋‚ด์—์„œ ์“ฐ๊ธฐ ์˜ต์…˜์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€
์ค‘๊ฐ„ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
๋˜๋Š” ์•„๋‹ˆ์˜ค๋ฅผ ์„ ํƒํ•˜๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
sudo ์ฝ”๋“œ์˜ ์˜ˆ:

๊ธฐ๋Šฅ ์‹ ๋ž‘(write_flag):

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

์‹ ๋ž‘(write_flag = ์ฐธ)

์‹ ๋ž‘(write_flag = ๊ฑฐ์ง“)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766952032 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJT3EJND2F3EDVU75NB6ITS3WOIPANNCNFSM4U3KV45Q
.

@iyerkrithika21 @jadie1

@cchrist์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ์ ์œผ๋กœ ํ•ฉ๋ฆฌ์ ์ธ ๊ฒฝ์šฐ(์˜ˆ: ์ด์ง„ ์ด๋ฏธ์ง€ ์žฌ์ƒ˜ํ”Œ๋ง)๊ฐ€ ์•„๋‹ˆ๋ฉด ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ์ด ์žฌ์ƒ˜ํ”Œ๋ง(์ฝค๋ณด) ๋‹จ๊ณ„์˜ ๋ชจ๋“  ์ค‘๊ฐ„ ์ถœ๋ ฅ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๊ธฐ ์‰ฝ๊ณ  ์ž์ฒด ๋ฌธ์„œํ™”ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ ์‘ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ์‹œ๋‹ค.

์ด๋ฏธ์ง€ ์ž‘์„ฑ(ํŠนํžˆ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์ผ์‹œ์ ์œผ๋กœ)์€ ๋‹ค์Œ์˜ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.
์ฒด์ด๋‹์ด ํ•ฉ๋ฆฌ์ ์ผ ๋•Œ.

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

๊ทธ๋Ÿฌ๋‚˜ ์ค‘์š”ํ•œ ๋‹จ๊ณ„์ผ ๋•Œ๋Š” ์ œ์ž๋ฆฌ์— ๋‘๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์žˆ๋Š” ์ž์‹ ์˜ ๋ผ์ธ.

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

2021๋…„ 1์›” 25์ผ ์›”์š”์ผ ์˜ค์ „ 10์‹œ 34๋ถ„ Shireen Elhabian [email protected]
์ผ๋‹ค:

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

@cchriste https://github.com/cchriste ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž
์˜๋ฏธ์ ์œผ๋กœ ํ•ฉ๋‹นํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์˜ˆ: ๋ฆฌ์ƒ˜ํ”Œ๋ง
๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฏธ์ง€), ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“ 
์ด ๋ฆฌ์ƒ˜ํ”Œ๋ง(์ฝค๋ณด) ๋‹จ๊ณ„์˜ ์ค‘๊ฐ„ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค. ์œ ์Šค์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž
๋”ฐ๋ผํ•˜๊ธฐ ์‰ฝ๊ณ  ์ž์ฒด ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ ์‘ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766983878 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJT3EKKARLKY4VKBRPHJWLS3WTSNANCNFSM4U3KV45Q
.

๊ตฌ์กฐ์กฐ์ • ๋‹จ๊ณ„:

  1. Jupyter ๋…ธํŠธ๋ถ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ์„ ShapeWorks python ๋ชจ๋“ˆ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. python ๋ชจ๋“ˆ์˜ ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋…ธํŠธ๋ถ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  3. GroomUtils๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  python ๋ชจ๋“ˆ ๋ฐ python API ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ Python ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด๋ฏธ ์‹œ์ž‘๋œ python_module ๋ถ„๊ธฐ๊ฐ€ ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. 1๋ถ„ ๋™์•ˆ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๊ณ„์† ์•Œ๋ ค์ฃผ์„ธ์š”. ๋‚ด ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰