mirror of
https://github.com/facefusion/facefusion.git
synced 2026-08-08 10:08:37 +02:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37c3548466 | ||
|
|
9612d5391f |
@@ -7,6 +7,8 @@ from starlette.datastructures import UploadFile
|
|||||||
|
|
||||||
import facefusion.choices
|
import facefusion.choices
|
||||||
from facefusion import ffmpeg, process_manager, state_manager
|
from facefusion import ffmpeg, process_manager, state_manager
|
||||||
|
from facefusion.face_creator import get_many_faces
|
||||||
|
from facefusion.face_helper import warp_face_by_bounding_box
|
||||||
from facefusion.filesystem import create_directory, get_file_extension, get_file_format, is_audio, is_image, is_video
|
from facefusion.filesystem import create_directory, get_file_extension, get_file_format, is_audio, is_image, is_video
|
||||||
from facefusion.types import ImageAsset, ImageMetadata, MediaType, VideoAsset, VisionFrame
|
from facefusion.types import ImageAsset, ImageMetadata, MediaType, VideoAsset, VisionFrame
|
||||||
from facefusion.vision import detect_image_resolution, fit_contain_frame, is_vision_frame, read_static_image, read_static_video_frame, unpack_resolution
|
from facefusion.vision import detect_image_resolution, fit_contain_frame, is_vision_frame, read_static_image, read_static_video_frame, unpack_resolution
|
||||||
@@ -120,3 +122,18 @@ def capture_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[s
|
|||||||
capture_vision_frames.append(capture_vision_frame)
|
capture_vision_frames.append(capture_vision_frame)
|
||||||
|
|
||||||
return capture_vision_frames
|
return capture_vision_frames
|
||||||
|
|
||||||
|
|
||||||
|
def capture_asset_faces(asset : ImageAsset | VideoAsset, frame_numbers : List[str], resolution : str) -> List[VisionFrame]:
|
||||||
|
capture_vision_frames = []
|
||||||
|
temp_vision_frames = read_asset_frames(asset, frame_numbers)
|
||||||
|
crop_size = unpack_resolution(resolution)
|
||||||
|
|
||||||
|
for temp_vision_frame in temp_vision_frames:
|
||||||
|
faces = get_many_faces([ temp_vision_frame ])
|
||||||
|
|
||||||
|
for face in faces:
|
||||||
|
capture_vision_frame, _ = warp_face_by_bounding_box(temp_vision_frame, face.bounding_box, crop_size)
|
||||||
|
capture_vision_frames.append(capture_vision_frame)
|
||||||
|
|
||||||
|
return capture_vision_frames
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from starlette.status import HTTP_200_OK, HTTP_201_CREATED, HTTP_400_BAD_REQUEST
|
|||||||
|
|
||||||
from facefusion import session_context, session_manager
|
from facefusion import session_context, session_manager
|
||||||
from facefusion.apis import asset_store
|
from facefusion.apis import asset_store
|
||||||
from facefusion.apis.asset_helper import capture_asset_frames, save_asset_files, validate_asset_files
|
from facefusion.apis.asset_helper import capture_asset_faces, capture_asset_frames, save_asset_files, validate_asset_files
|
||||||
from facefusion.apis.session_helper import extract_access_token
|
from facefusion.apis.session_helper import extract_access_token
|
||||||
from facefusion.filesystem import remove_file
|
from facefusion.filesystem import remove_file
|
||||||
from facefusion.vision import is_vision_frames, to_strip_buffer
|
from facefusion.vision import is_vision_frames, to_strip_buffer
|
||||||
@@ -90,12 +90,18 @@ async def get_asset(request : Request) -> Response:
|
|||||||
asset = asset_store.get_asset(session_id, asset_id)
|
asset = asset_store.get_asset(session_id, asset_id)
|
||||||
|
|
||||||
if asset:
|
if asset:
|
||||||
if asset.get('media') in [ 'image', 'video' ] and request.query_params.get('action') == 'capture' and request.query_params.get('subject') == 'frame':
|
if asset.get('media') in [ 'image', 'video' ] and request.query_params.get('action') == 'capture':
|
||||||
resolution = request.query_params.get('resolution')
|
resolution = request.query_params.get('resolution')
|
||||||
frame_numbers = request.query_params.getlist('frame_number')
|
frame_numbers = request.query_params.getlist('frame_number')
|
||||||
vision_frames = capture_asset_frames(asset, frame_numbers, resolution) #type:ignore[arg-type]
|
vision_frames = []
|
||||||
|
|
||||||
if is_vision_frames(vision_frames):
|
if request.query_params.get('subject') == 'frame':
|
||||||
|
vision_frames = capture_asset_frames(asset, frame_numbers, resolution) #type:ignore[arg-type]
|
||||||
|
|
||||||
|
if request.query_params.get('subject') == 'face':
|
||||||
|
vision_frames = capture_asset_faces(asset, frame_numbers, resolution) #type:ignore[arg-type]
|
||||||
|
|
||||||
|
if vision_frames and is_vision_frames(vision_frames):
|
||||||
return Response(content = to_strip_buffer(vision_frames), media_type = 'image/jpeg')
|
return Response(content = to_strip_buffer(vision_frames), media_type = 'image/jpeg')
|
||||||
|
|
||||||
return Response(status_code = HTTP_400_BAD_REQUEST)
|
return Response(status_code = HTTP_400_BAD_REQUEST)
|
||||||
|
|||||||
+1
-1
@@ -315,7 +315,7 @@ AssetSet : TypeAlias = Dict[AssetId, AudioAsset | ImageAsset | VideoAsset]
|
|||||||
AssetStore : TypeAlias = Dict[SessionId, AssetSet]
|
AssetStore : TypeAlias = Dict[SessionId, AssetSet]
|
||||||
|
|
||||||
AssetAction = Literal['capture']
|
AssetAction = Literal['capture']
|
||||||
AssetSubject = Literal['frame']
|
AssetSubject = Literal['frame', 'face']
|
||||||
|
|
||||||
BenchmarkMode = Literal['warm', 'cold']
|
BenchmarkMode = Literal['warm', 'cold']
|
||||||
BenchmarkResolution = Literal['240p', '360p', '540p', '720p', '1080p', '1440p', '2160p']
|
BenchmarkResolution = Literal['240p', '360p', '540p', '720p', '1080p', '1440p', '2160p']
|
||||||
|
|||||||
Reference in New Issue
Block a user