0. 포스팅 목록 & GitHub
(깃허브 스타 버튼 눌러주시면 글 작성에 큰 도움이 됩니다!)
https://github.com/Seokii/Chatbot4Univ
https://seokii.tistory.com/146
1. 이미지 용량 문제?
프로젝트내에 이미지를 저장하다가 생각한 점이,
1.png ~ 44.png와 같은 인터넷에서 크롤링 혹은 수집한 데이터들은 이미지의 용량이 적지만
실제로 학교 건물 사진, 주변 편의 시설에 대한 사진을 찍어서 파일로 저장을 하니 사진 파일의 용량이 꽤 크다는 생각이 들었습니다.
이렇게 서버에 축적되는 용량도 문제지만,
사용자가 어플이나 웹 서비스를 통해서 이미지를 안내 받을 경우 용량이 커지게 된다면,
사용자 서비스 기기의 용량, 전송 속도 등 어느 하나 좋을 것이 없을 것이라 생각했습니다.
그래서 서버 내에서 모아진 이미지를 순차적으로 조회하며 용량을 줄이는 코드를 작성했습니다.
2. 코드 작성
utils폴더에 imageResize.py라는 코드로 작성했습니다.
# /utils/imageResize.py
from PIL import Image
from io import BytesIO
import glob
import os
# 현재 경로와 저장 경로 설정
path = os.path.dirname(os.path.realpath(__file__))
save_path = "chatbot_api/static/resize_images/"
os.chdir(path)
print("path is : " + path)
# 세이브 경로의 모든 jpg 파일 삭제
[os.remove(f) for f in glob.glob(save_path+"*.jpg")]
# 배열 선언
image_list_png = []
image_list_jpg = []
# png 파일 불러오기 + jpg 변환
read_files_png = glob.glob("chatbot_api/static/images/*.png")
read_files_png.sort()
print(read_files_png)
print(len(read_files_png))
# .png 뺀 파일명 추출
image_list = os.listdir("chatbot_api/static/images")
image_list.sort()
print(image_list)
print(len(image_list))
search = '.png'
for i, word in enumerate(image_list):
if search in word:
image_list_png.append(word.strip(search))
search = '.jpg'
print(image_list_png)
print(len(image_list_png))
print(image_list)
print(len(image_list))
# png to jpg
cnt2 = 0
for f in read_files_png:
img = Image.open(f).convert('RGB')
img.save("chatbot_api/static/images/"+image_list_png[cnt2]+".jpg", 'jpeg')
cnt2 += 1
# jpg 파일 resizing
read_files_jpg = glob.glob("chatbot_api/static/images/*.jpg")
read_files_jpg.sort()
# .jpg 뺀 파일명 추출
image_list = os.listdir("chatbot_api/static/images")
image_list.sort()
print(image_list)
print(len(image_list))
for i, word in enumerate(image_list):
if search in word:
image_list_jpg.append(word.strip(search))
print(image_list_jpg)
print(len(image_list_jpg))
cnt=0
for f in read_files_jpg:
print(f)
img = Image.open(f)
buffer = BytesIO()
img.save(buffer, 'jpeg', quality=70)
buffer.seek(0)
with open(save_path + image_list_jpg[cnt] + '_resize.jpg', 'wb') as nfile:
nfile.write(buffer.getvalue())
cnt += 1
파이썬 이미지 처리 라이브러리인 Pillow(=PIL)를 사용해 작업을 진행했습니다.
os로 기본적인 경로를 지정해주고, 용량이 조절된 사진들을 저장할 폴더에 있는 모든 파일을 삭제했습니다.
(주기적으로 해당 작업을 수행하기 위해서, 삭제하고 생성하고 반복할 수 있도록..)
(엄청 예전에 작성한 코드인데, 생각해보니 원본 폴더와 해당 폴더의 파일을 비교해 없는 사진 파일에 대해서만 jpg변환 및 크기 조정을 수행하는 것이 더 효율적일 것이라는 생각이드네요ㅠㅠ)
먼저, 모든 사진 파일 확장자명을 통일하기 위해서 png를 jpg로 변환후 원본 파일 폴더에 저장했습니다.
그 후, 원본 폴더에서 jpg 이미지를 불러와 quality라는 파라미터로 용량 변경을 진행 후
resize_images라는 용량이 바뀐 파일들이 저장될 폴더에 모든 사진을 저장했습니다.
3. 실행 결과
위의 사진은 실행 결과 모습입니다.
작업 완료한 파일명에 대해서 출력하도록 코드를 작성했습니다.
폴더의 총 용량을 살펴보니, 137MB에서 39.2MB로 줄어든 모습입니다.
물론 원본 폴더에는 44개의 png파일이 jpg로 변환되어 저장된 파일이 존재하지만,
그것을 감안하더라도 용량이 엄청 줄었다는 것을 확인할 수 있었습니다.
'머신러닝 & 딥러닝 > 자연어처리' 카테고리의 다른 글
대학교 AI 질의응답 챗봇 만들기 - 16. 프로젝트 마무리 (0) | 2022.11.17 |
---|---|
대학교 AI 질의응답 챗봇 만들기 - 14. 챗봇 API 개선하기(3) (0) | 2022.11.16 |
대학교 AI 질의응답 챗봇 만들기 - 13. 챗봇 API 개선하기(2) (0) | 2022.11.16 |
대학교 AI 질의응답 챗봇 만들기 - 12. 챗봇 API 개선하기(1) (0) | 2022.08.11 |
대학교 AI 질의응답 챗봇 만들기 - 11. 챗봇 API 만들기(Flask API) (0) | 2022.07.31 |
댓글