1. 준비물
- AWS Lightsail에서 제일 저렴한 서버(512MB RAM, Amazon Linux 2023)
- 컴퓨터와 인터넷
- 동영상 파일 (테스트용)
2. 서버 만들기
- AWS Lightsail 홈페이지에 들어가서 회원가입 또는 로그인해요.
- 인스턴스 생성 버튼을 눌러요.
- OS는 “Amazon Linux 2023″을 선택해요.
- 플랜은 제일 저렴한 512MB RAM짜리를 골라요.
- 생성 버튼을 눌러 서버가 만들어질 때까지 기다려요.
3. 서버에 접속하기
- Lightsail 관리 화면에서 SSH 연결 버튼을 눌러요.
- 까만 창(터미널)이 뜨면, 아래 명령어를 한 줄씩 복사해서 붙여넣어요.
4. 프로그램 설치하기
4-1. 시스템 업데이트
Bash
sudo dnf update -y
4-2. 필요한 프로그램 설치
Bash
sudo dnf install -y python3-pip gcc gcc-c++ cmake git
pip3 install numpy flask
4-3. OpenCV 설치(얼굴 찾기용)
- 메모리가 부족할 수 있으니 swap 파일을 만들어요:
Bash
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- OpenCV 소스코드 다운로드하고 설치해요: (cd ~ 로 홈 디렉토리로 가서 하자)
Bash
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build && cd build
cmake ..
make -j2
sudo make install
cd ~/opencv/build
make -j2
sudo make install
-> 계속 서버 뻗음
5. 얼굴 블러 프로그램 만들기
5-1. 얼굴 블러 코드 저장하기
- 아래 코드를 복사해서
face_blur.py
라는 이름으로 저장해요.
Python
import cv2
def blur_faces(input_path, output_path):
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(input_path)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fps = cap.get(cv2.CAP_PROP_FPS)
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(output_path, fourcc, fps, (w, h))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
faces = face_cascade.detectMultiScale(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), 1.3, 5)
for (x, y, w, h) in faces:
frame[y:y+h, x:x+w] = cv2.GaussianBlur(frame[y:y+h, x:x+w], (15, 15), 0)
out.write(frame)
del frame
cap.release()
out.release()
5-2. 동영상 파일로 테스트하기
- 동영상 파일을 서버에 올려요(예:
input.mp4
). - 아래 명령어로 얼굴 블러 처리해요.
Bash
python3
(파이썬 창이 뜨면 아래처럼 입력)
Python
from face_blur import blur_faces
blur_faces('input.mp4', 'output.mp4')
exit()
output.mp4
파일이 생기면 성공!
6. 웹사이트로 만들기
6-1. 웹 서버 코드 저장하기
- 아래 코드를
app.py
로 저장해요.
Python
from flask import Flask, request, send_file
from face_blur import blur_faces
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
f = request.files['file']
f.save('input.mp4')
blur_faces('input.mp4', 'output.mp4')
return send_file('output.mp4')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
6-2. 웹 서버 실행하기
Bash
python3 app.py
6-3. 웹사이트에 접속해서 동영상 올리기
- 서버의 공인 IP주소를 확인해요.
- 인터넷 브라우저에서
http://서버IP:5000/upload
로 접속해요. - 동영상 파일을 업로드하면, 얼굴이 블러 처리된 동영상을 받을 수 있어요.
7. OOM(메모리 부족) 방지 꿀팁
- 한 번에 한 명만 사용하게 해요(동시에 여러 명이 쓰면 안 돼요).
- 너무 큰 동영상은 올리지 않게 안내해요.
- swap 파일을 꼭 만들어서 메모리 부족을 막아요.
- 동영상은 한 프레임씩만 처리해서 메모리를 아껴요.
8. 체크리스트
단계 | 할 일 | 체크 |
---|---|---|
1 | 서버 만들고 접속하기 | |
2 | 프로그램 설치하기 | |
3 | OpenCV 설치하기 | |
4 | 얼굴 블러 코드 저장하기 | |
5 | 동영상 테스트 해보기 | |
6 | 웹 서버 코드 저장하기 | |
7 | 웹사이트로 동영상 올리기 |
이대로 따라하면 초등학생도 얼굴 블러 서비스를 만들 수 있어요!
궁금한 점이 있으면 언제든 질문해 주세요.