CvPipeline - Helsparrow/OpenpnpDocs_KR GitHub Wiki

์†Œ๊ฐœ

CvPipeline์€ Computer Vision Pipeline์˜ ์•ฝ์ž์ด๋ฉฐ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋ณต์žกํ•œ ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ, ์ž‘๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ OpenPnP์ƒ์˜ ํด๋ž˜์Šค ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. CvPipeline์€ ์ฃผ๋กœ ํ•˜๋‹จ ๋น„์ „์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์œ„ํ•ด ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ์ ์  ๋” ๋งŽ์ด ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CvPipeline์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ์งง์€ ๋น„๋””์˜ค๋Š” ๋‹ค์Œ ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://www.youtube.com/watch?v=iUEP0bILAU0

์ด ์ž‘์—…๋ฌผ์€ ์ฃผ๋กœ Karl Lew์™€ ล imon Fojtลฏ์˜ FireSight์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค: https://github.com/firepick1/FireSight.

๊ตฌ์„ฑ์š”์†Œ

CvPipeline ๋ฌถ์Œ ์€ CvPipeline ๋ฐ CvStage ํด๋ž˜์Šค, CvPipeline Editor GUI ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์‹ค์ œ ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ CvStage ๊ตฌํ˜„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด CvPipeline์œผ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝํ˜• ํŽธ์ง‘๊ธฐ ํด๋ž˜์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…

CvPipeline์€ ์ด๋ฏธ์ง€์—์„œ ์ˆ˜ํ–‰ํ•  ์ž‘์—… ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ž‘์—…์€ ๊ธฐ๋ณธ ๋ฐ ๊ณ ๊ธ‰ ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ ์ด๋ฏธ์ง€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ "์Šคํ…Œ์ด์ง€"๋ผ๊ณ  ํ•˜๋ฉฐ "์Šคํ…Œ์ด์ง€" ๋ชฉ๋ก์ด ๋ชจ์—ฌ "ํŒŒ์ดํ”„๋ผ์ธ"์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์Šคํ…Œ์ด์ง€๋Š” ๋˜ํ•œ ๋น„์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ์Šคํ…Œ์ด์ง€ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ˜ธ์ถœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

UI

ํŒŒ์ดํ”„๋ผ์ธ ํŽธ์ง‘๊ธฐ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ํ‘œ์‹œ๋˜๋Š” ์™ผ์ชฝ๊ณผ ์„ ํƒํ•œ ์Šคํ…Œ์ด์ง€์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค.

screen shot 2017-04-30 at 11 54 21 am

ํŒŒ์ดํ”„๋ผ์ธ

ํŒŒ์ดํ”„๋ผ์ธ ํŽธ์ง‘๊ธฐ์˜ ์™ผ์ชฝ์€ ์œ„์ชฝ(ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„)๊ณผ ์•„๋ž˜์ชฝ(์„ ํƒํ•œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์˜ ์†์„ฑ) ๋ฐ˜์œผ๋กœ ๋‹ค์‹œํ•œ๋ฒˆ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ์œ„์ชฝ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ์Šคํ…Œ์ด์ง€ ์ถ”๊ฐ€/์ œ๊ฑฐ/์ˆœ์„œ ์žฌ์ง€์ •์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ์•„๋ž˜์ชฝ ์ ˆ๋ฐ˜์—์„œ ์„ ํƒํ•œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์†์„ฑ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์—๋Š” ๊ฐ CvPipeline์— ๋Œ€ํ•ด ๊ณ ์œ ํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์žˆ์œผ๋ฏ€๋กœ ์ดํ›„ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์—์„œ ์ด์ „ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ ์ถœ๋ ฅ

ํŒŒ์ดํ”„๋ผ์ธ ํŽธ์ง‘๊ธฐ ์˜ค๋ฅธ์ชฝ์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์™€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ๋†“์œผ๋ฉด ๋งˆ์šฐ์Šค ์ปค์„œ์˜ ํ”ฝ์…€ ์ขŒํ‘œ์™€ ํ”ฝ์…€ ์ƒ‰์ƒ์ด RGB ๋ฐ HSB๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘๊ธฐ ์‹คํ–‰

ํŒŒ์ดํ”„๋ผ์ธ "Edit Pipeline" ๋ฒ„ํŠผ์„ ๋ณผ ๋•Œ๋งˆ๋‹ค OpenPnP ๋‚ด์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ OpenPnP ์™ธ๋ถ€์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…๋ฆฝ ์‹คํ–‰ํ˜•์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” Java๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ฝ˜์†”์—์„œ OpenPnP๊ฐ€ ์„ค์น˜๋œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. java -cp openpnp-gui-0.0.1-alpha-SNAPSHOT.jar org.openpnp.vision.pipeline.ui.StandaloneEditor๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”

๋…๋ฆฝ ์‹คํ–‰ํ˜• ํŒŒ์ดํ”„๋ผ์ธ ํŽธ์ง‘๊ธฐ์—๋Š” ๋งˆ์šฐ์Šค๋ฅผ ํ•œ ๋ฒˆ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ '์œ„' ๋˜๋Š” '์•„๋ž˜' ํ‚ค ์ž…๋ ฅ์œผ๋กœ imageRead ์Šคํ…Œ์ด์ง€์˜ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์™ผ์ชฝ ํŒจ๋„์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ…Œ์ด์ง€ ๋ฌธ์„œ

๊ธฐ์—ฌ์ž์— ๋Œ€ํ•œ ์ฐธ๊ณ ์‚ฌํ•ญ

์—ฌ๊ธฐ์— ๊ธฐ๋ณธ ์„ค๋ช…์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์†Œ์Šค ์ฝ”๋“œ์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๊ณ  pull request๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŽธ์ง‘๊ธฐ์—์„œ ๋ฌธ์„œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Blur Gaussian, Stage, Property ์ฃผ์„๋ฌธ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์— ์žˆ๋˜ ๊ธฐ์กด ๋ฌธ์„œ๋Š” ๊ฐ ์Šคํ…Œ์ด์ง€ ๊ฐœ๋ณ„ ๋ฌธ์„œ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๊ทœํ™”

์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€์—์„œ ์ •๊ทœํ™”๋Š” RGB Max ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ทธ๋ฆผ์ž๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ ์ƒ‰์ƒ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

R = R/(R+G+B)
G = G/(R+G+B)
B = B/(R+G+B)

SimpleBlobDetector

์‹ค์ œ๋กœ ๊ฒ€์€์ƒ‰ ์›ํ˜•์„ ๊ฐ์ง€ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ScriptRun

Example:

var Result = Packages.org.openpnp.vision.pipeline.CvStage.Result;
var result = new Result(pipeline.getWorkingImage(), "I am a model object");
result;

FAQ