AI-реставрація старих та пошкоджених фотографій
AI-реставрація усуває пошкодження старих фотографій: подряпини, плями, потертості, піксельність, артефакти стиснення, розмитість, шум. Комбінує кілька спеціалізованих моделей у пайплайні.
Пайплайн повної реставрації
from PIL import Image
import cv2
import numpy as np
import io
class PhotoRestorationPipeline:
def restore(self, damaged_photo: bytes) -> bytes:
# 1. Видалення подряпин та плям (GFPGAN + інпейтинг)
# 2. Апскейлинг (Real-ESRGAN)
# 3. Відновлення осіб (GFPGAN)
# 4. Деноізинг
image = Image.open(io.BytesIO(damaged_photo)).convert("RGB")
img_np = np.array(image)
img_np = self.remove_scratches(img_np)
img_np = self.upscale(img_np)
img_np = self.restore_faces(img_np)
result = Image.fromarray(img_np)
buf = io.BytesIO()
result.save(buf, format="PNG")
return buf.getvalue()
Real-ESRGAN апскейлинг
from basicsr.archs.rrdbnet_arch import RRDBNet
from realesrgan import RealESRGANer
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
upsampler = RealESRGANer(
scale=4,
model_path="RealESRGAN_x4plus.pth",
model=model,
tile=512, # тайлинг для великих зображень
tile_pad=10,
pre_pad=0,
half=True # fp16
)
def upscale_image(img_np: np.ndarray, scale: int = 4) -> np.ndarray:
output, _ = upsampler.enhance(img_np, outscale=scale)
return output
GFPGAN відновлення осіб
from gfpgan import GFPGANer
gfpgan = GFPGANer(
model_path="GFPGANv1.4.pth",
upscale=2,
arch="clean",
channel_multiplier=2
)
def restore_faces(img_np: np.ndarray) -> np.ndarray:
_, _, restored_img = gfpgan.enhance(
img_np,
has_aligned=False,
only_center_face=False,
paste_back=True,
weight=0.5 # 0 = GFPGAN, 1 = оригінал (баланс)
)
return restored_img
REST API
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
pipeline = PhotoRestorationPipeline()
@app.post("/restore")
async def restore_photo(file: UploadFile = File(...)):
original_bytes = await file.read()
restored_bytes = pipeline.restore(original_bytes)
return Response(content=restored_bytes, media_type="image/png")
Real-ESRGAN дає апскейлинг ×4 з відновленням деталей. GFPGAN спеціалізується на особах — критично для сімейних фотоархівів. Комбінація обох покриває 90% завдань реставрації. Терміни: деплой пайплайну — 1–2 дні. Сервіс з веб-інтерфейсом завантаження та порівнянням до/після — 1 тиждень.







