Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

在这里插入图片描述

众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程序打包为MacOS可以直接运行的DMG安装包,可以苹果系统中一键运行AI项目。

MacOs本地部署AI项目

首先确保本地已经安装好 arm 内核的Python3.11程序,可以在Python官网进行下载和安装:python.org

这里以快手团队著名的表情迁移项目 LivePortrait 为例子,首先克隆快手团队官方的项目:

git clone https://github.com/KwaiVGI/LivePortrait.git

进入项目的目录:

cd LivePortrait

安装基于Mac系统的相关依赖:

# for macOS with Apple Silicon users  
pip install -r requirements_macOS.txt

随后修改app.py文件,在代码上方加入环境变量的设置:

# coding: utf-8  """  
The entrance of the gradio for human  
"""  import os  
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

PYTORCH_ENABLE_MPS_FALLBACK=1 这个环境变量用于 PyTorch 中的 MPS(Metal Performance Shaders)加速功能。

MPS 是苹果公司为 macOS 和 iOS 设备提供的图形处理单元 (GPU) 框架,可以加速机器学习模型的训练和推理。

PYTORCH_ENABLE_MPS_FALLBACK=1 表示启用 MPS 回退功能。当 PyTorch 检测到设备支持 MPS 时,它会优先使用 MPS 进行加速。如果 MPS 无法使用,它会回退到 CPU 上运行。
简而言之,设置这个环境变量可以帮助 PyTorch 在支持 MPS 的设备上利用 GPU 加速,并在不支持 MPS 的设备上正常运行。

如果不单独设置这个变量,启用推理的时候会报错。

随后,启动推理页面进行测试:

python3 app.py

注意,由于xpose暂不支持mps推理,所以mac版本不支持动物表情驱动,只支持人物的表情驱动。

如果推理没有问题,那么可以开始进行打包操作了。

MacOs本地打包AI项目

首先,安装pyinstaller库:

pip3 install -U pyinstaller

随后,创建 app.spec 项目配置文件:

# -*- mode: python ; coding: utf-8 -*-  
import sys  
sys.setrecursionlimit(5000)  
from PyInstaller.utils.hooks import collect_data_files  datas = []  
datas += collect_data_files('gradio_client')  
datas += collect_data_files('gradio')  a = Analysis(  ['app.py',  ],  pathex=['/Users/liuyue/Downloads/LivePortrait_For_Mac'],  binaries=[],  datas=datas,  hiddenimports=[],  hookspath=[],  hooksconfig={},  runtime_hooks=[],  excludes=[],  noarchive=False,  optimize=0,  module_collection_mode={ 'gradio': 'py'}  
)  
pyz = PYZ(a.pure)  exe = EXE(  pyz,  a.scripts,  [],  exclude_binaries=True,  name='LivePortrait',  icon='AnyConv.com__paints_logo.icns',  debug=False,  bootloader_ignore_signals=False,  strip=False,  upx=True,  console=True,  disable_windowed_traceback=False,  argv_emulation=False,  target_arch=None,  codesign_identity=None,  entitlements_file=None,  
)  a.datas += Tree('./pretrained_weights', prefix='pretrained_weights')  coll = COLLECT(  exe,  a.binaries,  a.datas,  strip=False,  upx=True,  upx_exclude=[],  name='LivePortrait',  
)

这里按照 pyinstaller 官方文档对项目的入口文件,依赖文件,三方目录等进行声明。

接着运行打包命令:

pyinstaller webui.spec

程序返回:

98124 INFO: Rewriting the executable's macOS SDK version (13.1.0) to match the SDK version of the Python library (12.1.0) in order to avoid inconsistent behavior and potential UI issues in the frozen application.  
98125 INFO: Re-signing the EXE  
98243 INFO: Building EXE from EXE-00.toc completed successfully.  
98244 INFO: checking Tree  
98244 INFO: Building Tree because Tree-00.toc is non existent  
98244 INFO: Building Tree Tree-00.toc  
98265 INFO: checking COLLECT  
98266 INFO: Building COLLECT because COLLECT-00.toc is non existent  
98266 INFO: Building COLLECT COLLECT-00.toc  
108930 INFO: Building COLLECT COLLECT-00.toc completed successfully.

代表打包成功,在项目的 dist 目录下会生成可执行程序:

双击 LivePortrait 图标进行测试即可。

至此,程序就打包好了。

MacOs本地构建DMG安装包

随后,运行磁盘工具,新建一个磁盘文件:

注意格式必须是 mac os 扩展(日志式),体积需要大于2G

接着把刚才打包好的项目文件拷贝到新建的磁盘中即可。

随后推出磁盘,点击映像-》转换,对磁盘文件进行压缩。

最后我们得到一个压缩好的DMG安装文件:

➜  mac ll  
total 5328720  
-rw-r--r--@ 1 liuyue  staff   2.5G  8 20 19:49 LivePortrait(已转换).dmg

在别的Mac电脑中双击安装包打开运行即可。

至此我们就走完了整个MacOS的AI项目程序制作流程,最后,奉上打包好的程序文件,与众乡亲同飨:

新版LivePortrait整合包(苹果MacOsAppleSilicon)图片引擎 https://pan.quark.cn/s/53c24cd845b9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409987.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python(R)均方根误差平均绝对误差导图

🎯要点 回归模型评估指标评估薪水预测模型评估员工倦怠率模型评估大气分析生成式对抗模型目标对象缺失下,性能估算法追踪模型误差指标降尺度大气学模拟模型准确性评估蛋白染色质相互作用模型评估 Python回归误差指标 平均绝对误差表示数据集中实际值和…

【flask框架搭建服务器demo】Python 使用轻量级 Flask 框架搭建 Web 服务器可视化数据库数据demo

本文适合刚入门flask框架用来熟悉项目的开发人员,关于flask框架的组成概念一些用法请参考下面的文章 https://blog.csdn.net/qq_47452807/article/details/122289200 本文主要给出一个可视化sqlite数据库数据的demo,先展示一下效果: 主要的…

【uniapp/uview1.x】u-collapse 高度随内容自适应

当 u-collapse-items 中的内容为动态的时候&#xff0c;会发生这种情况&#xff1a; 在 uview 官网中有一个方法可以解决&#xff1a; 具体方法&#xff1a; 在 u-collapse 标签中配置 ref"collapse"&#xff1a; <u-collapse ref"collapse" :item-…

Golang | Leetcode Golang题解之第376摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

使用notepad++将shell脚本转为UNIX格式方法(主要差别在换行符)

sh文件尽量在linux上改&#xff0c;因windows和linux换行符不同&#xff0c;在windows上改后&#xff0c;在linux上改可能会出现换行符错误。 windows换行符 linux换行符 windows环境改换行符方法 使用notepad点 编辑–》文档格式转换–》转换未unix格式。 注&#xff1a;tx…

C# 泛型类型的约束详解与示例

文章目录 一、泛型约束概述二、泛型约束详解与示例1. 类约束2. 接口约束3. 引用类型约束4. 值类型约束5. 无参数构造函数约束6、多重约束7、默认构造函数约束8、基类和接口的组合约束 三、总结 在C#编程语言中&#xff0c;泛型是一种非常强大的特性&#xff0c;它允许我们编写可…

鸿蒙卡片服务开发

首先先创建一个项目 在该项目下创建一个卡片服务 在module.json5文件下配置 {"module": {..."extensionAbilities": [{"name": "EntryFormAbility","srcEntry": "./ets/entryformability/EntryFormAbility.ets",…

Apache Tomcat与反向代理

Apache Tomcat 是一个开源的 Java Servlet 容器&#xff0c;主要用于部署和运行基于 Java 的 Web 应用程序。Tomcat 提供了一个环境&#xff0c;让开发者能够使用 Java 编写的 Web 应用程序在 Web 服务器上运行。下面是对 Tomcat 的详细介绍&#xff1a; Tomcat 的历史 Tomca…

Unity 中使用SQLite数据库

文章目录 0.参考文章1.Presentation —— 介绍2.&#xff08;SQLite4Unity3d&#xff09;Unity中直接使用SQLite的插件3.创建数据库4.创建表5.Navicat Premium&#xff08;数据库可视化&#xff09;6.增删改查6.1 增6.2 删6.3 改6.4 查 0.参考文章 https://blog.csdn.net/Chin…

干货 | 关于Armv7m异常进入的经验分享

一、 概述 这里主要介绍异常的进入行为&#xff08;不包括复位异常&#xff09;。&#xff08;这里主要参考 armv7m&#xff09;。 二、异常进入 在发生抢占的时候&#xff08;异常发生且开始执行&#xff09;&#xff0c;硬件将上下文状态保存到一个 SP 寄存器指向的栈中&a…

优化|贝叶斯优化系列(二):大规模贝叶斯优化算法

原文&#xff1a;When Gaussian Process Meets Big Data: A Reviewof Scalable GPs 原文作者&#xff1a;Haitao Liu , Yew-Soon Ong 论文解读者&#xff1a;赵进 编者按 高斯过程模型因其出色的预测性能在仿真建模中得到了广泛应用&#xff0c;然而在当今大数据时代&#xf…

百度翻译与TOP3在线翻译伙伴:2024年的黄金组合

在这个信息丰富的时代&#xff0c;语言帮助人们跨越地域界限进行交流。随着全球化的发展&#xff0c;高效的在线翻译工具变得越来越重要&#xff0c;它能帮我们更好地了解世界和不同的文化。今天&#xff0c;我们就来看看百度翻译和它的三个新对手之间的比较&#xff0c;一起找…

Codeforces Round 916 (Div. 3) E1. Game with Marbles(博弈论*1400)

感觉很难想。 如果你直接想的话&#xff0c;你就会发现有很多做法可以选择&#xff0c;而你根本不知道应该选哪个。 这时候可以先假设鲍勃已经取走了爱丽丝的所有的颜色的弹珠&#xff0c;&#xff08;并且以每个颜色一个弹珠的代价&#xff09;。 这时候每一项得分就是 S i …

Dubbo 内置容器:Spring Container

Dubbo 内置容器&#xff1a;Spring Container 1、核心点2、误解澄清 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Dubbo本身并不直接提供容器服务&#xff0c;而是深度集成了Spring框架&#xff0c;实现了对Spring Container的全面支持。…

游戏开发设计模式之原型模式

目录 原型模式的实现步骤 原型模式的优点 原型模式的应用场景 总结 原型模式在游戏开发中的具体应用案例是什么&#xff1f; 如何在不同编程语言中实现原型模式&#xff1f; Java C# Python C JavaScript 原型模式与其他创建型设计模式&#xff08;如建造者模式、适…

Modern restaurant - building and interior (餐厅场景)

餐厅是模块化的,因此您可以使用提供的构造元素(如墙壁模块、地板模块、窗户、吧台、厨房模块、门、天花板模块等)进一步设计自己的餐厅。 图像和视频中显示的完整场景包含在此资源包中,可以用作游戏和3D项目的起点! ★ 主要特点 ★ 全模块化内饰和外观 全模块化厨房和餐厅…

PTA统计一行文本的单词个数

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出单词个数。 输入样例: Lets go to room 209.输出样例: 5解题…

【惠农网-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Backtrader 实现和理解海龟交易法

Backtrader 实现和理解海龟交易法 1. 海龟交易的理解 &#xff08;1&#xff09;资金管理 海龟将总资金分为N个交易单位&#xff0c;每个单位即称为头寸&#xff0c;划分的标准主要是参考标的的波动性。 波动性用一个指标量化即真实波动幅度均值&#xff08;ATR&#xff09;…

C_05_编译4阶段

c语言编译的4个阶段&#xff1a;预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令&#xff0c;其中主要是头文件展开&#xff08;include)&#xff0c;宏定义&#xff08;defind&#xff09;&#xff0c;选择性编译&#xff08;ifdef&#xff09;三种指令 预…