- Synolgoy Nas에 설치된 MongoDB에 이미지를 저장하기 위해서 GridFs를 활용
- Jupyter Notebook을 활용하여 MongoDB에 연결하고, gridfs로 이미지를 저장하는 코드 작성
1-1. Nas의 Container Manager에서 Python 환경 설정
1. Synology Nas의 Container Manager를 실행한 후,
(1) Registry 탭에서,
(2) python으로 검색하고,
(3) python 레지스트리를 선택하고, Download 버튼을 클릭해서 설치
2. python 컨테이너 실행
(1) Container 탭에서
(2) 설치한 python을 선택하고,
(3) Action - Start를 클릭해서 이미지를 시작하고,
(4) Action - Open terminal을 클릭해서 터미널을 연다.
3. Python 실행
(1) Create 버튼을 클릭하고,
(2) 생성된 터미널 창에서
(3) 아래의 명령어로 pymongo를 설치한다. (gridfs는 pymongo 패키지에 포함되어 있으므로, gridfs를 별도로 설치할 필요는 없음)
pip install pymongo
1-2. 로컬 PC에 Python 환경 설정
1. 로컬 컴퓨터에 python과 pip가 설치되어 있는지 확인한다. 설치되어 있지 않다면 Python 공식 웹사이트(https://www.python.org/)에서 다운로드하여 설치한다.
2. 로컬 컴퓨터의 터미널(또는 파워쉘)에서 pymongo 설치
pip install pymongo
2. MongoDB에 접속하여 이미지 저장
1. 로컬에서 NAS의 MongoDB에 접속하는 Python 스크립트 작성
(Jupyter notebook을 사용하여, 이미지가 저장된 폴더가 있는 위치에 .ipynb 생성)
from pymongo import MongoClient
import gridfs
import os
# NAS에 설치된 MongoDB에 연결 (사용자 이름과 비밀번호 포함)
client = MongoClient('mongodb://username:password@localhost:27017/')
db = client['your_database_name']
# GridFS 인스턴스 생성
fs = gridfs.GridFS(db)
# 이미지 파일이 저장된 디렉토리 경로 (절대 경로 또는 상대 경로)
image_directory = 'C:/absolute/path/to/your/images/' # 예: 절대 경로
# image_directory = 'relative/path/to/your/images/' # 예: 상대 경로
# 디렉토리 경로 확인
if not os.path.exists(image_directory):
raise FileNotFoundError(f"The directory {image_directory} does not exist.")
# 디렉토리 내의 모든 파일을 반복
for filename in os.listdir(image_directory):
if filename.endswith(('.png', '.jpg', '.jpeg', '.gif')): # 이미지 파일 확장자 확인
file_path = os.path.join(image_directory, filename)
with open(file_path, 'rb') as f:
contents = f.read()
# GridFS에 파일 저장
file_id = fs.put(contents, filename=filename)
print(f"Image {filename} stored with file_id: {file_id}")
2. 이미지 파일이 저장되어 있는 디렉토리의 모든 이미지 파일이 mongodb에 저장이 되고, 아래와 같이 file_id가 생성된다.
3. 각 이미지의 file_id를 mongodb의 메타데이터에 추가한다.
(1) gridfs에 의해 생성된 두개의 collection: fs.chucks는 이미지를 청크로 쪼개서 저장한 collection, fs.files은 각 이미지에 해당하는 메타데이터가 저장된 collection
(2) 이미지의 file_id를 각 예술품의 메타데이터에 추가한 모습
'Gigapixel' 카테고리의 다른 글
Synology NAS에 Container Manager(도커)를 활용하여 MongoDB 설치하기 (0) | 2024.06.08 |
---|
댓글