본문 바로가기
[잡지식]

VSCode Terminal에서 이미지 보기

by 하우론 2024. 1. 17.

개요

몇 달 전에 VSCode에 터미널에서 이미지를 출력하는 기능이 업데이트 됐다. 원래 리눅스나 맥 유저면 기본 쉘에서도 출력이 가능하기 때문에 그렇게 크게 감흥은 없겠으나, 윈도우에서는 마땅한 대체 기능이 없기에 아주 획기적이라 할 수 있다. (WSL이 있으나 램을 많이 먹어 선호하진 않는다.) 그리고 원격 환경이라면 workspace 바깥의 이미지를 보는 방법이 제한적이기에 더더욱 얻는 이득이 크다.

 

설치

1. pip install imgcat

2. 아래 설정 체크

 

3. 샘플 이미지 다운

wget https://raw.githubusercontent.com/EliSchwartz/imagenet-sample-images/master/n02012849_crane.JPEG

4. imgcat n02012849_crane.JPEG

 

데이터셋 등 VSCode GUI 탐색기 내에서 확인하기 부담스러운 폴더 안의 이미지를 탐색 할 때 유용하다.

 

잡기술

나는 급한 코드 작성이 필요할 떈 환경 로드/연결 등 오버헤드가 큰 주피터 대신 IPython을 활용한다. 굉장히 compact 하다는 장점이 있지만 간단한 plot을 찍어보고 싶을 때 이미지를 볼 수가 없어 조금 아쉽다. 하지만 이 기능으로 볼 수 있다.

 

원리는 이미지를 버퍼에 입력하고 subprocess로 imgcat을 실행해 버퍼를 읽어오는 것이다. (버퍼는 RAM에 올라가있는 가상의 파일 객체 같은 개념으로 생각하면 된다.) imgcat은 piping을 지원하기 때문에 stdin으로까지만 넣어줘도 된다. 

 

import seaborn as sns
iris = sns.load_dataset('iris')
sns.heatmap(iris.corr(), annot=True, fmt='.2f')

간단한 데이터 통계 잠깐 찍어보고 싶을 때 조금 아쉽다.

 

import matplotlib.pyplot as plt
import io, subprocess

buf = io.BytesIO()				# 버퍼를 정의한다
plt.savefig(buf, format='png')			# 버퍼에 이미지를 바이너리로 저장한다
buf.seek(0)					# 커서를 버퍼 첫 부분으로 보낸다
subprocess.run(['imgcat'], input=buf.read())	# imgcat을 실행시키고 버퍼를 stdin으로 넣어준다

buf.close()					# 버퍼를 닫아준다