- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 医疗协议书模板合集6篇.doc
- 【中考英语复习 知识清单】专题22-任务型阅读技巧(原卷版).docx
- 2022-2023年志愿服务竞赛仿真测试卷(含答案).docx
- 2023高效的无人机电力电网线路巡检实训解决方案.docx
- BVR2128CN_煤粉仓设计指南.docx
- JJG_162-2019 饮用冷水水表 检定规程.docx
- 步入式高低温环境仓技术方案.docx
- 多旋翼无人机输电线路巡检方案.docx
- 方案市政道路工程施工环保方案.docx
- 婚姻继承法学教学大纲.docx
- 2024-2025学年安徽省亳州市涡阳县高二下学期2月开学考试政治试题(解析版).docx
- 2024-2025学年江西省赣州市上犹县高二下学期开学考试政治试题(解析版).docx
- 2024-2025学年山东省济宁市高二下学期开学考试政治试题(解析版).docx
- 2024-2025学年山西省卓越联盟高三下学期2月开学质量检测政治试题(解析版).docx
- 2024-2025学年新疆乌鲁木齐市高二下学期2月开学考试政治试题(解析版).docx
- 2024-2025学年新疆维吾尔自治区乌鲁木齐地区高三2月大联考文科综合政治试题(解析版).docx
- 2024-2025学年安徽省蚌埠市固镇县高一上学期1月期末考试政治试题 (解析版).docx
- 2024-2025学年江苏省扬州市高三上学期期末检测政治试卷(解析版).docx
- 2024-2025学年江西省吉安市高三上学期期末教学质量检测政治试题(解析版).docx
- 2024-2025学年山东省济宁市高二上学期1月期末考试政治试题(解析版).docx
文档评论(0)