ํฐ๋ฏธ๋์์ ์ถ๋ก ๊ฒฐ๊ณผ ๋ณด๊ธฐ
libsixel ์น์ฌ์ดํธ์ ์ด๋ฏธ์ง์ ๋๋ค.
๋๊ธฐ ๋ถ์ฌ
์๊ฒฉ ๋จธ์ ์ ์ฐ๊ฒฐํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ ์ ์๊ฑฐ๋ GUI๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ์ฅ์น๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํด์ผ ํฉ๋๋ค. VSCode ํตํฉ ํฐ๋ฏธ๋์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋ค์์ ์ด๋ฅผ ๋ค์๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์งง์ ๋ฐ๋ชจ์
๋๋ค. ultralytics
์ ํจ๊ป ์์ธก ๊ฒฐ๊ณผ.
๊ฒฝ๊ณ
Linux ๋ฐ MacOS์๋ง ํธํ๋ฉ๋๋ค. ์๋์์ VSCode ๋ฆฌํฌ์งํ ๋ฆฌํ์ธ ์ด์ ์ํ๋๋ ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ธฐ ์ํ Windows ์ง์์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ์ธํ์ญ์์ค. sixel
.
ํตํฉ ํฐ๋ฏธ๋์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ธฐ ์ํ VSCode ํธํ ํ๋กํ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. sixel
๊ทธ๋ฆฌ๊ณ iTerm
. ์ด ๊ฐ์ด๋์์๋ sixel
ํ๋กํ ์ฝ์ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ธ์ค
-
๋จผ์ ์ค์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
terminal.integrated.enableImages
๊ทธ๋ฆฌ๊ณterminal.integrated.gpuAcceleration
๋ฅผ ์ ๋ ฅํฉ๋๋ค."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": false
-
์ค์น
python-sixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๊ฒ์ ํฌํฌ ์PySixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์ด์ ์ ์ง ๊ด๋ฆฌํ์ง ์์ต๋๋ค. -
๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ถ๋ก ์ ์คํํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋กํ ํ๊ณ ๋ณ์์ ์ ์ฅํฉ๋๋ค. ์์ธก ๋ชจ๋ ํ์ด์ง์์ ์ถ๋ก ์ธ์ ๋ฐ ๊ฒฐ๊ณผ ์์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
from ultralytics import YOLO # Load a model model = YOLO("yolo11n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() # (1)!
- ์ฌ์ฉํ ์ ์๋ ์ธ์๋ฅผ ํ์ธํ๋ ค๋ฉด ํ๋กฏ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฐธ์กฐํ์ธ์.
-
Now, use OpenCV to convert the
numpy.ndarray
์bytes
๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์io.BytesIO
๋ฅผ ์ฌ์ฉํ์ฌ "ํ์ผ๊ณผ ๊ฐ์" ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.import io import cv2 # Results image as bytes im_bytes = cv2.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
from sixel import SixelWriter
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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 = cv2.imencode(
".png", # (1)!
plot,
)[1].tobytes() # (2)!
mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
- ๋ค๋ฅธ ์ด๋ฏธ์ง ํ์ฅ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ฒด๋ง
1
๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. - ์ฌ์ฉํ ์ ์๋ ์ธ์๋ฅผ ํ์ธํ๋ ค๋ฉด ํ๋กฏ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ
๋ค์์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. clear
์ ๋๋ฌ ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง ๋ณด๊ธฐ๋ฅผ "์ง์ฐ์ธ์".
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
macOS ๋๋ Linux์ VSCode ํฐ๋ฏธ๋์์ YOLO ์ถ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
macOS ๋๋ Linux์ VSCode ํฐ๋ฏธ๋์์ YOLO ์ถ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
-
ํ์ํ VSCode ์ค์ ์ ํ์ฑํํฉ๋๋ค:
-
์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค:
-
YOLO ๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ถ๋ก ์ ์คํํฉ๋๋ค:
-
์ถ๋ก ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ณํํ์ฌ ํฐ๋ฏธ๋์ ํ์ํฉ๋๋ค:
์์ธํ ๋ด์ฉ์ ์์ธก ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ ํ๋กํ ์ฝ์ด Linux์ macOS์์๋ง ์๋ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
์ด๋ฌํ ํ๋ซํผ์๋ ์์ ๊ทธ๋ํฝ๊ณผ ํธํ๋๋ ๊ธฐ๋ณธ ํฐ๋ฏธ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์์ ํ๋กํ ์ฝ์ ํ์ฌ Linux์ macOS์์๋ง ์ง์๋ฉ๋๋ค. ์์ ์ ์ฌ์ฉํ๋ ํฐ๋ฏธ๋ ๊ทธ๋ํฝ์ ๋ํ Windows ์ง์์ ์์ง ๊ฐ๋ฐ ์ค์ ๋๋ค. Windows ํธํ์ฑ์ ๋ํ ์ ๋ฐ์ดํธ๋ VSCode ์ด์ ์ํ ๋ฐ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
VSCode ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ํ๋์?
6์ ์ ์ฌ์ฉํ์ฌ VSCode ํฐ๋ฏธ๋์์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ:
-
VSCode์์ ํ์ํ ์ค์ ์ด ํ์ฑํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค:
-
์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค:
-
์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ณํ ๋ฐ ํ๋กํ ์ฝ๋์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ์ธ์. ์๋ฅผ ๋ค์ด
๋ฌธ์ ๊ฐ ์ง์๋๋ฉด VSCode ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ณ ํ๋กฏ ๋ฉ์๋ ๋งค๊ฐ๋ณ์ ์น์ ์์ ์ถ๊ฐ ์ง์นจ์ ํ์ธํ์ธ์.
YOLO ์์ 6์ ์ ์ฌ์ฉํ์ฌ ๋จ๋ง๊ธฐ์ ๋น๋์ค ์ถ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์ ์๋์?
๋จ๋ง๊ธฐ์์ 6์ ์ ์ฌ์ฉํ์ฌ ๋์์ ์ถ๋ก ๊ฒฐ๊ณผ ๋๋ ์ ๋๋ฉ์ด์ GIF ํ๋ ์์ ํ์ํ๋ ๊ฒ์ ํ์ฌ ํ ์คํธ๋์ง ์์์ผ๋ฉฐ ์ง์๋์ง ์์ ์ ์์ต๋๋ค. ์ ์ ์ด๋ฏธ์ง๋ก ์์ํ์ฌ ํธํ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฑ๋ฅ ์ ์ฝ์ ์ผ๋์ ๋๊ณ ๋์์ ๊ฒฐ๊ณผ๋ ์ฌ์ฉ์ ์ฑ ์ํ์ ์๋ํ์ธ์. ์ถ๋ก ๊ฒฐ๊ณผ ํ๋กํ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ธก ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ด๋ จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์? python-sixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ?
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด python-sixel
๋ผ์ด๋ธ๋ฌ๋ฆฌ:
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฐ์ ํ๊ฒฝ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค:
-
ํ์ํ Python ๋ฐ ์์คํ ์ข ์์ฑ์ด ์๋์ง ํ์ธํฉ๋๋ค.
-
์ถ๊ฐ ๋ฌธ์ ๋ฐ ์ปค๋ฎค๋ํฐ ์ง์์ python-sixel GitHub ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
-
์ฝ๋์ ์ ์ฌ์ ์ธ ์ค๋ฅ๊ฐ ์๋์ง ๋ค์ ํ ๋ฒ ํ์ธํ์ธ์.
SixelWriter
๋ฐ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ณํ ๋จ๊ณ.
YOLO ๋ชจ๋ธ ๋ฐ ์์ ํตํฉ ์์ ์ ๋ํ ์ถ๊ฐ ์ง์์ ๋ด๋ณด๋ด๊ธฐ ๋ฐ ์์ธก ๋ชจ๋ ๋ฌธ์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.