제퍼넷 로고

Python을 사용하여 사진에 새로운 차원 추가

시간

Python을 사용하여 사진에 새로운 차원 추가

3D Ken Burns 효과로 사진에 새로운 생명을 불어 넣는 방법을 알아 보려면이 문서를 읽으십시오.


By 딜런 로이, 엔지니어 및 사이드 프로젝트 중독자



작성자 별 이미지

일부 배경 이야기

 
몇 주 전에 찍은 최근 캠핑 여행에서 몇 장의 사진을 살펴본 후. 나는 나의 오래된 휴가 사진을 몇 장 찍어 파이썬으로 슬라이드 쇼로 만들기로 결정했다. 걱정하지 마십시오. 저는 Google 포토와 Apple에 상응하는 제품이 이미이 작업을 잘 수행하고 있다는 것을 이해하고이 작업을 수행했습니다. 이것은 실제로 부수적 인 프로젝트를 만드는 것에 대한 나의 집착을 먹이기위한 것이었다.

사용 가능한 옵션을 살펴보면서 사진을 찍을 코드가있는 종이를 우연히 발견하고 사진에 3D Ken Burns 효과를 적용하는 전환을 추가했습니다. Ken Burns 효과는 분명히 비디오와 함께 3D 측면을 무료로 얻지 만 누락 된 차원으로 인해 사진에서는 덜 매력적입니다. 그래서 다음 글에서 나는 당신이 시도 할 수 있도록 설정하고 내가 할 수 있었던 것처럼 당신의 사진에이 추가적인 차원을 추가하기를 희망하고 있습니다.

개념

 
다음은 우리가 달성하고자하는 것의 관련성으로 인해 알 가치가있는 몇 가지 개념입니다. 이 사실을 인식 할 필요는 없지만 AI 모델은 깊이 추정을 통해 사진의 개체 크기를 올바르게 조정하여 원근감을 추가하여 Ken Burns 효과에 3D 차원을 적용하고 있습니다. 효과가 사진을 통해 이동함에 따라 모델은 누락 된 개체와 인 페인팅을 통해 2D 이미지에 나타나지 않는 텍스처를 재구성해야합니다.

Ken Burns 효과 - 사진을 확대 / 축소하고 이동하면 움직이는 느낌이 생깁니다. 이 효과를 자주 사용한 미국 다큐멘터리의 이름을 따서 명명되었습니다. 이 논문의 작가들은 일반적으로 사진에서 누락되는 XNUMX 차원을 이것에 추가했습니다.



CC BY-SA 3.0Wikimedia Commons를 통해

 

깊이 추정 — 장면에서 객체의 거리 측정 값을 얻는 방법을 설명합니다. 이 작업을 효과적으로 수행하면 시차를 사용하여 각 개체의 크기를 조정하는 설득력있는 전환이 생성됩니다.

그림 그리기 —이 전환의 관점이 변경되어 존재하지 않는 이미지 부분을 재구성하는 방법을 설명합니다. 이미지 및 비디오에서이 기술은 아트 워크의 손상, 성능 저하 또는 누락 된 부분을 채워 완전한 이미지를 표현하는 수리를 의미하기도합니다.

DIY

 
다행히이 논문의 저자들은 사이먼 니클라우스롱 마이지 메이 양펭 리우, 우리에게 코드베이스 이를 통해 사전 훈련 된 모델을 사용하여 사진에이 효과를 적용 할 수 있습니다. 나는 전경에 날카로운 모서리가 많은 사진에는 잘 작동하지 않지만 테스트 한 많은 사진에서 매우 인상적인 결과를 산출한다는 것을 알았습니다.

저자가 논문, Github Repo 및 Youtube 비디오에서이를 수행하기 때문에 이것이 어떻게 달성되는지에 대해서는 자세히 설명하지 않겠습니다.

저는 이러한 3D 장면을 만들기 위해 취하는 접근 방식을 단계별로 안내 할 것입니다.하지만이 섹션의 끝에서 맹목적으로 직접 시도하고 싶다면 Google Colab에 통과 할 모든 코드를 추가했습니다. 즉시 복사하여 사용할 수 있습니다.

이 단계를 직접 수행하기 전에 새 Google Colab을 여는 것이 좋습니다. 코드 샘플에서는 사용 편의성을 위해 Colab 특정 기능을 사용하기 때문입니다.

설정 환경 및 설치 요구 사항

 
이 작업을 직접 수행하기위한 첫 번째 단계는이 구현과 미리 포함 된 모델을 포함하는 저장소를 가져 오는 것입니다. 그래서 아래에서 일어나는 일은 리포지토리를 복제하고, 여기로 이동하고, 출력 디렉토리를 만들고, 필요한 라이브러리를 설치하는 것입니다. Google Colab에는 새 런타임을 시작할 때 이미 많은 요구 사항이 미리로드되어 있으므로 누락 된 항목이 두 개뿐이었습니다.

!git clone https://github.com/sniklaus/3d-ken-burns.git# Move into the downloaded repository
%cd 3d-ken-burns# Make a directory for the videos
!mkdir videos
video_dir = "./videos/"# Install dependencies
!pip install moviepy gevent


사진 업로드

 
이 단계에서는 소스 / 이미지 디렉토리에 사진을 쉽게 업로드 할 수있는 방법 만 있으면됩니다. Colab 인터페이스를 사용하여 파일을 해당 폴더로 드래그 할 수 있기 때문에 앞으로 나아갈 수 있도록 노트북에 이것을 포함 할 필요는 없지만 꽤 좋은 connivence 셀입니다.

from google.colab import filesuploads = files.upload()for filename in uploads.keys(): !mv ./$filename ./images/$filename


사진 변환

 
따라서 우리가 제공하는 모든 사진을 두 개의 디렉토리로 변환하고 싶지 않은 경우 간단한 라이너는 다음과 같습니다. autozoom.py 하나의 사진을 변환하는 인터페이스.

python autozoom.py --in {input_image}.jpg --out {output_video}.mp4


우리가 할 수있는 것을 자동화하고 싶기 때문에 bash를 활용하고 디렉토리를 반복 한 다음 각 사진에서 실행할 수 있습니다.

!for image in ./images/*; do python autozoom.py --in $image --out ./videos/$(basename $image | cut -f1 -d '.').mp4; done


비디오보기

 
사진이 변환되면 먼저 출력을보고 싶을 수 있습니다. IPython의 기능을 사용하여 비디오를 볼 수있는 기능을 만든 다음 디렉토리에있는 비디오 중에서 볼 비디오를 선택할 수있는 선택기를 제공합니다.

import os
from base64 import b64encodefrom IPython.display import HTML
import ipywidgets as widgetsdef video(path): mp4 = open(path,'rb').read() data_url = "data:video/mp4;base64," + b64encode(mp4).decode() return HTML(f'<video width=600 controls loop> <source src="{data_url}" type="video/mp4"></video>')files_list = os.listdir(video_dir)
video_list = widgets.Dropdown( options=files_list, value="" if not files_list else files_list[0], description='Video:', disabled=False,
)
display(video_list)


Mp4를 애니메이션 GIF로 변환

 
업로드를 원해서이 단계를 추가하고이 적용 효과의 출력을이 게시물에 임베드하므로 모든 노력을 다해이 지식을 활용하고 원하는대로 mp4를 애니메이션 GIF로 변환하십시오. 보너스로 우리는 이미 수입했습니다 imageio 의존성이 있으므로 설치할 필요가 없습니다. 아래에서는이 함수를 사용하고 변환 할 mp4를 찾는 대상 디렉토리를 반복합니다.

import imageio
import os, sysclass TargetFormat(object): GIF = ".gif" MP4 = ".mp4" AVI = ".avi"def convertFile(inputpath, targetFormat): """Reference: https://gist.github.com/michaelosthege/cd3e0c3c556b70a79deba6855deb2cc8""" outputpath = os.path.splitext(inputpath)[0] + targetFormat print("convertingrnt{0}rntornt{1}".format(inputpath, outputpath))reader = imageio.get_reader(inputpath) fps = reader.get_meta_data()['fps']writer = imageio.get_writer(outputpath, fps=fps) for i,im in enumerate(reader): sys.stdout.write("rframe {0}".format(i)) sys.stdout.flush() writer.append_data(im) print("rnFinalizing...") writer.close() print("Done.")for file in [x for x in os.listdir(video_dir) if x.endswith(".mp4")]: convertFile(f"{video_dir}{file}", TargetFormat.GIF)


모든 비디오 다운로드

 
파일 탐색기를 사용하여 출력을 다운로드하지 않으려는 경우. 마지막 단계는 대상 폴더를 반복하고 각 비디오를 다운로드하는 것입니다. 이는 이전에 bash를 사용하여 반복하고 효과를 적용 할 때했던 것처럼 수행 할 수도 있습니다.

for file in os.listdir(video_dir): files.download(f"{video_dir}{file}")


모든 것이 잘되면 우리가 다른 때 볼 롱가를 즐길 때 여기에서 찍은 사진 중 하나로 올바르게 변환되었습니다.



작성자 별 이미지

 

Colab 노트북을 직접 모으고 싶지 않은 사람들을 위해 다음은 사본을 만들 수있는 완전한 구현입니다.을 클릭하고 사진 앨범 변환을 시작하십시오.

주요 요점

 
거인의 어깨에 서서 우리는 최첨단 AI 기술을 활용하여 일반적으로 특정 지식을 가진 사람이 필요한 일을 할 수있는 시대에 살고 있습니다. 이 경우 정교한 편집 기술을 배우는 대신 Simon Niklaus와 팀이 개발 한 AI 기술을 사용할 수 있습니다.

Dylan의 다른 게시물

 
Python으로 아름다운 아키텍처 다이어그램 만들기
정렬되지 않은 화살표를 수동으로 조정하는 데 시간을 소비하지 마십시오.

 
Github 작업을 사용하여 Google Cloud Run에 배포
작업 및 클라우드 실행으로 XNUMX으로 확장되는 CI / CD 솔루션

 
Python으로 Github 프로필 자동 업데이트
추가 정보 프로필 자동화를 통해 기술 보여주기

자료

 
바이오 : 딜런 로이 엔지니어 및 사이드 프로젝트 마약 중독자는 자신이 작업중인 내용을 공유하여 귀하와 같은 독자가 그의 경험을 활용할 수 있도록합니다. 여기에서 더 많은 것을 구독하십시오 (dylanroy.com)

실물. 허가를 받아 다시 게시했습니다.

관련 :


PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.

액세스하려면 여기를 클릭하십시오.

출처 : https://www.kdnuggets.com/2021/06/new-dimension-photos-python.html

spot_img

최신 인텔리전스

spot_img