网站大量收购独家精品文档,联系QQ:2885784924

facefusion服务化改造_facefusion 修改端口.docx

facefusion服务化改造_facefusion 修改端口.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

facefusion服务化改造

facefusion服务化改造

代码:\h/hzlxf/facefusion-http-api

facefusion有两种使用方式,一种是官方文档上面写的,安装好后直接运行pythonrun.py,这会提供一个web的交互界面,相当友好。另一种是在这基础上,添加--headless的参数,同时,指定如source,input,output等其它一大堆参数,命令行运行。参数表可以--help显示,也可以阅读facefusion/core.py中的cli()函数查阅。

但是如果我们要把它作为我们的服务,对外提供接口,就都不太合适了。首先headless的方式是肯定不行的,每次运行都要加载模型,多耗时啊。

而web的方式呢?通过F12查看其接口,发现其\h请求体、接口十分不规则,不符合常见的http接口的形式,很难推断出接口参数是什么。(除了upload,就全TM是/run/predict这个接口)

针对性的研究facefusion关于代码逻辑后发现,这是由于facefusion的前端并不是通过常见的前端框架开发的,而是通过一个叫gradio的库。这个库是专门给研究员们进行算法可视化,展示demo用的。(看了一下文档,还确实挺方便的,前后端都不用写,声明一下就行了。专属算法人员的“低代码”框架无疑了)

不得已,简单的研究一下源码,看它是怎么调用算法的,然后我们自己用fastapi手撸一个服务接口得了。

首先还是在入口函数,facefusion/core.py这里。cli()这个函数是命令行的入口。在这里定义了所有的参数,也设了默认值。

defcli()-None:

signal.signal(signal.SIGINT,lambdasignal_number,frame:destroy())

program=ArgumentParser(formatter_class=lambdaprog:HelpFormatter(prog,max_help_position=130),add_help=False)

#general

program.add_argument(-s,--source,help=wording.get(help.source),action=append,dest=source_paths,default=c

program.add_argument(-t,--target,help=wording.get(help.target),dest=target_path,default=config.get_str_value(

program.add_argument(-o,--output,help=wording.get(help.output),dest=output_path,default=config.get_str_value(

program.add_argument(-v,--version,version=metadata.get(name)++metadata.get(version),action=version)

9

10 #省略若干行

11

12 run(program)

最后一个run的函数,就是执行算法的真正入口了。跟踪进去看看。

defrun(program:ArgumentParser)-None:

apply_args(program)

logger.init(facefusion.globals.log_level)

iffacefusion.globals.system_memory_limit0:

limit_system_memory(facefusion.globals.system_memory_limit)

ifnotpre_check()ornotcontent_analyser.pre_check()ornotface_analyser.pre_check()ornotface_masker.pre_check():

return

forframe_processor_moduleinget_frame_processors_modules(facefusion.globals.frame_processors):

ifnotframe_processor_module.pre_check():

return

iffacefusion.globals.headless:

conditional_process

您可能关注的文档

文档评论(0)

暗伤 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档