Download docs/presentation/add_sensor_data_slide.py from kimjunhan/vkgs-sim: direct link, hf CLI and curl.
- Browser
- Download file 4.68 kB
-
https://huggingface.co/kimjunhan/vkgs-sim/resolve/main/docs/presentation/add_sensor_data_slide.py
- Command line
-
hf download hf://kimjunhan/vkgs-sim/docs/presentation/add_sensor_data_slide.py
-
curl -L -o add_sensor_data_slide.py https://huggingface.co/kimjunhan/vkgs-sim/resolve/main/docs/presentation/add_sensor_data_slide.py
4.68 kB
| """์นด๋ฉ๋ผ ๋ชจ๋ ์ฅ ('์นด๋ฉ๋ผ ์ผ์ ์ข ๋ฅ โ RGB ยท ๊น์ด ยท โฆ') ๋ฐ๋ก ๋ค์ ๋ผ์ด๋ค ยท ๋ ์ด๋ ์ผ์ ๋ฐ์ดํฐ ์ฅ์ ๋ฃ๋๋ค. | |
| ๊ฐ์ ํ ยท ๊ฐ์ ๋ฐฐ์น (์ผ์ชฝ 2ร2 ๊ทธ๋ฆผ + ์ค๋ฅธ์ชฝ ์ค๋ช ์์ 4๊ฐ) โ ์์๋ ์นด๋ฉ๋ผ ๋ชจ๋ ์ฅ์ ๊ฒ์ ๋ณต์ฌํด ๊ธ๋ง ๋ฐ๊พผ๋ค. | |
| ๊ทธ๋ฆผ: figures/out/sensors_data.jpg (figures/sensors/ ์ sdump ยท run.py ยท viz.py). | |
| ์คํ: python docs/presentation/add_sensor_data_slide.py [์ ๋ ฅ.pptx] [์ถ๋ ฅ.pptx] (๊ธฐ๋ณธ: vkgs_sim_merged.pptx ๋ฅผ ์ ์๋ฆฌ์์) | |
| """ | |
| import copy | |
| import sys | |
| from pathlib import Path | |
| from PIL import Image | |
| from pptx import Presentation | |
| from pptx.oxml.ns import qn | |
| HERE = Path(__file__).resolve().parent | |
| SRC = Path(sys.argv[1]) if len(sys.argv) > 1 else HERE / "vkgs_sim_merged.pptx" | |
| OUT = Path(sys.argv[2]) if len(sys.argv) > 2 else SRC | |
| FIG = HERE / "figures/out/sensors_data.jpg" | |
| ANCHOR = "์นด๋ฉ๋ผ ์ผ์ ์ข ๋ฅ" | |
| HEADING = "๋ผ์ด๋ค ยท ๋ ์ด๋ ์ผ์ ๋ฐ์ดํฐ โ ๊ฐ์ ์๊ฐ์ 4๊ฐ์ง ๋ณด๊ธฐ" | |
| BULLET = "scene-0402 ๊ธฐ๋ก ์ฃผํ์ ํ ์๊ฐ (11.9 m/s) โ ๋ผ์ด๋ค ํ ๋ฐํด 3.4๋ง ์ ยท ๋ ์ด๋ 5๋ ๊ฒ์ถ 605๊ฐ, ๋ค๋ฅธ ์ฐจ๋์ nuScenes ๋ฐ์ค" | |
| BOXES = [("๋ผ์ด๋ค โ ์นด๋ฉ๋ผ ํฌ์", "๊ฐ์ ์๊ฐ์ ์ค์ nuScenes ์ ๋ฉด ์ฌ์ง์ ์๋ฎฌ ๋ผ์ด๋ค ์ ์ ํฌ์ โ ๋ ธ๋ฉด ๋ง ยท ๊ธธ๊ฐ ๋๋ฌด ยท ์ ์ฐจ๋ ์๋ฆฌ๊ฐ ์ฌ์ง๊ณผ ๊ฒน์นจ"), | |
| ("๊ฑฐ๋ฆฌ ์์ ยท BEV", "HDL-32E ๊ทผ์ฌ: 32๋น (+10.7ยฐ ~ โ30.7ยฐ) ร 0.33ยฐ ๋ฐฉ์, 70 m, 20 Hz โ ๋ณต์ ์๋ (0.2 m) ์ ๊ด์ ์ ์จ"), | |
| ("๋ ์ด๋ 5๋", "ARS 408 ๊ทผ์ฌ: ์์ผ 120ยฐ ยท 120 m ยท 13 Hz ยท ๋๋น ์ต๋ 125์ , ๋ ธ๋ฉด ๋ฐ์ฌ ์ ๊ฑฐ โ ์ ์ง๋ฌผ ๋ํ๋ฌ vr = โvยทcosฮธ"), | |
| ("์ถ๋ ฅ ํ์", "O ํค ยท closed-loop (--serve) ๊ด์ธก์ ํจ๊ป ์ ์ฅ โ LIDAR_TOP.bin (nuScenes .pcd.bin) ยท RADAR_*.txt (vr ยท ๋ณด์ ์๋ ยท RCS)")] | |
| NOTE = ("๊ทธ๋ฆผ 1: ์ค์ ์ฌ์ง ์ ํฌ์ โ ์๋ฎฌ ๋ผ์ด๋ค ๊ธฐํ๊ฐ ์ค์ ์ฅ๋ฉด๊ณผ ๋ง๋์ง ๋ณด๋ ๊ทธ๋ฆผ. ๊ทธ๋ฆผ 2: ๋ผ์ด๋ค ์์ ๋ฐ์ดํฐ ํ์ (๋น ร ๋ฐฉ์ ๊ฑฐ๋ฆฌ ์์). " | |
| "๊ทธ๋ฆผ 3: ์์์ ๋ณธ ํ ๋ฐํด, ์์ ์ง๋ฉด ์ ๋์ด. ๊ทธ๋ฆผ 4: ๋ ์ด๋ 5๋ ์์ผ์ ๊ฒ์ถ, ์์ ๋ํ๋ฌ โ ์์ฐจ๊ฐ ์์ง์ด๋ฏ๋ก ์ ์ง๋ฌผ๋ ์์ ๋ค๊ฐ์ด, ๋ค๋ ๋ฉ์ด์ง. " | |
| "๋ค๋ฅธ ์ฐจ๋์ nuScenes ์ด๋ ธํ ์ด์ ๋ฐ์ค๋ก ๋ฃ์๊ณ ์ ์ง๋ก ๋ณธ๋ค (์๋ ยท ๋ํ๋ฌ๋ ๊ตํต ์ฐธ๊ฐ์ ์์ ๋ค). ๋ง๋๋ ๋ฒ: figures/sensors/README.txt.") | |
| def heading(s): | |
| """์์ ๋ชฉ ๋ง๋ (๊ทธ๋ฃน ๋ํ) ์ ๊ธ.""" | |
| return "".join(c.text_frame.text for sh in s.shapes if sh.shape_type == 6 for c in sh.shapes if c.has_text_frame) | |
| prs = Presentation(SRC) | |
| slides = list(prs.slides) | |
| if any(HEADING in heading(s) for s in slides): | |
| sys.exit(f"์ด๋ฏธ ๋ค์ด ์๋ค: {SRC}") | |
| src = next(s for s in slides if ANCHOR in heading(s)) | |
| sl = prs.slides.add_slide(src.slide_layout) | |
| tree = sl.shapes._spTree | |
| for sh in list(sl.shapes): | |
| tree.remove(sh._element) | |
| pic_box = None | |
| for sh in src.shapes: | |
| if sh.shape_type == 13: # ๊ทธ๋ฆผ ์๋ฆฌ๋ง ๊ธฐ์ตํ๊ณ ๊ทธ๋ฆผ์ ์๋ก ๋ฃ๋๋ค | |
| pic_box = (sh.left, sh.top, sh.width, sh.height) | |
| continue | |
| el = copy.deepcopy(sh._element) | |
| for node in el.iter(): | |
| for attr in (qn("r:embed"), qn("r:link"), qn("r:id")): | |
| rid = node.get(attr) | |
| if rid: | |
| node.set(attr, sl.part.relate_to(src.part.related_part(rid), src.part.rels[rid].reltype)) | |
| tree.append(el) | |
| def set_text(p, text): | |
| rs = p.runs | |
| rs[0].text = text | |
| for r in rs[1:]: | |
| r._r.getparent().remove(r._r) | |
| boxes = [sh for sh in sl.shapes if sh.name.startswith("Rounded Rectangle")] | |
| assert len(boxes) == len(BOXES), len(boxes) | |
| for sh, (t, d) in zip(sorted(boxes, key=lambda s: s.top), BOXES): | |
| ps = sh.text_frame.paragraphs | |
| set_text(ps[0], t) | |
| set_text(ps[1], d) | |
| for sh in sl.shapes: | |
| if sh.shape_type == 6: | |
| for c in sh.shapes: | |
| if c.has_text_frame and c.text_frame.text.strip(): | |
| set_text(c.text_frame.paragraphs[0], HEADING) | |
| elif sh.name == "TextBox 9": | |
| tf = sh.text_frame | |
| for p in tf.paragraphs[1:]: | |
| p._p.getparent().remove(p._p) | |
| set_text(tf.paragraphs[0], BULLET) | |
| x, y, w, h = pic_box | |
| im = Image.open(FIG) | |
| s_ = min(w / im.width, h / im.height) | |
| sl.shapes.add_picture(str(FIG), x + int((w - im.width * s_) / 2), y, int(im.width * s_), int(im.height * s_)) | |
| sl.notes_slide.notes_text_frame.text = NOTE | |
| lst = prs.slides._sldIdLst | |
| new = list(lst)[-1] | |
| lst.remove(new) | |
| list(lst)[slides.index(src)].addnext(new) | |
| prs.save(OUT) | |
| print("saved", OUT, len(prs.slides), "slides โ ์ ์ฅ", slides.index(src) + 2, "์ชฝ") | |