ํฐ๋ฏธ๋์์ ์ถ๋ก ๊ฒฐ๊ณผ ๋ณด๊ธฐ
libsixel ์น์ฌ์ดํธ์ ์ด๋ฏธ์ง์ ๋๋ค.
๋๊ธฐ ๋ถ์ฌ
์๊ฒฉ ๋จธ์ ์ ์ฐ๊ฒฐํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ ์ ์๊ฑฐ๋ GUI๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ์ฅ์น๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํด์ผ ํฉ๋๋ค. VSCode ํตํฉ ํฐ๋ฏธ๋์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋ค์์ ์ด๋ฅผ ๋ค์๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์งง์ ๋ฐ๋ชจ์
๋๋ค. ultralytics
์ ํจ๊ป ์์ธก ๊ฒฐ๊ณผ.
๊ฒฝ๊ณ
Linux ๋ฐ MacOS์๋ง ํธํ๋ฉ๋๋ค. VSCode ํ์ธ ์ ์ฅ์ํ์ธ ์ด์ ์ํ๋๋ ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ธฐ ์ํ Windows ์ง์์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ์ธํ์ญ์์ค. sixel
.
ํตํฉ ํฐ๋ฏธ๋์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ธฐ ์ํ VSCode ํธํ ํ๋กํ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. sixel
๊ทธ๋ฆฌ๊ณ iTerm
. ์ด ๊ฐ์ด๋์์๋ sixel
ํ๋กํ ์ฝ์ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ธ์ค
-
๋จผ์ ์ค์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
terminal.integrated.enableImages
๊ทธ๋ฆฌ๊ณterminal.integrated.gpuAcceleration
๋ฅผ ์ ๋ ฅํฉ๋๋ค.
-
์ค์น
python-sixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๊ฒ์ ํฌํฌ ์PySixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์ด์ ์ ์ง ๊ด๋ฆฌํ์ง ์์ต๋๋ค. -
๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ
-
๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ถ๋ก ์ ์คํํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋กํ ํ๊ณ ๋ณ์์ ์ ์ฅํฉ๋๋ค. ์์ธก ๋ชจ๋ ํ์ด์ง์์ ์ถ๋ก ์ธ์ ๋ฐ ๊ฒฐ๊ณผ ์์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
from ultralytics import YOLO # Load a model model = YOLO("yolov8n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() #(1)!
- ์ฌ์ฉํ ์ ์๋ ์ธ์๋ฅผ ํ์ธํ๋ ค๋ฉด ํ๋กฏ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฐธ์กฐํ์ธ์.
-
์ด์ OpenCV๋ฅผ ์ฌ์ฉํ์ฌ
numpy.ndarray
์bytes
๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์io.BytesIO
๋ฅผ ์ฌ์ฉํ์ฌ "ํ์ผ๊ณผ ๊ฐ์" ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.# Results image as bytes im_bytes = cv.imencode( ".png", #(1)! plot, )[1].tobytes() #(2)! # Image bytes as a file-like object mem_file = io.BytesIO(im_bytes)
- ๋ค๋ฅธ ์ด๋ฏธ์ง ํ์ฅ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ฒด๋ง
1
๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
-
๋ง๋ค๊ธฐ
SixelWriter
์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ๋ค์.draw()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํฐ๋ฏธ๋์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
์ถ๋ก ๊ฒฐ๊ณผ ์์
์ํ
์ด ์์๋ฅผ ๋์์ ๋๋ ์ ๋๋ฉ์ด์ GIF ํ๋ ์๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ํ ์คํธ๋์ง ์์์ต๋๋ค. ์์ ์ ์ฑ ์ ํ์ ์๋ํ์ธ์.
์ ์ฒด ์ฝ๋ ์์
import io
import cv2 as cv
from ultralytics import YOLO
from sixel import SixelWriter
# Load a model
model = YOLO("yolov8n.pt")
# Run inference on an image
results = model.predict(source="ultralytics/assets/bus.jpg")
# Plot inference results
plot = results[0].plot() #(3)!
# Results image as bytes
im_bytes = cv.imencode(
".png", #(1)!
plot,
)[1].tobytes() #(2)!
mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
- ๋ค๋ฅธ ์ด๋ฏธ์ง ํ์ฅ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ฒด๋ง
1
๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. - ์ฌ์ฉํ ์ ์๋ ์ธ์๋ฅผ ํ์ธํ๋ ค๋ฉด ํ๋กฏ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ
๋ค์์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. clear
์ ๋๋ฌ ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง ๋ณด๊ธฐ๋ฅผ "์ง์ฐ์ธ์".