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

news2024/11/16 5:52:31

在这里插入图片描述

众所周知,苹果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.coloradmin.cn/o/2073555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

90. UE5 RPG 实现技能的装配

在上一篇里,我们实现了在技能面板,点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。 在这一篇里,我们实现一下技能的装配。 在之前,我们实现了点击按钮时,在技能面板控制器里存储了当前选中的技能的相关…

企业高性能web服务器(nginx)

目录 Web服务器基础介绍 正常情况下的单次web服务器访问流程 Apache 经典的 Web服务端 Apache prefork 模型 Apache work模型 Apache event模型 服务端的I/O流程 服务器的I/O 磁盘I/O 网络I/O 网络I/O处理过程 I/O模型 I/O模型相关概念 同步/异步 阻塞/非阻塞 网…

Ant-Design-Vue快速入门+排坑全攻略:打造炫酷Vue应用的s实用指南!

Ant-Design-Vue 是一个基于 Vue.js 的高质量 UI 组件库,适用于企业级后台产品的快速开发。下面将提供一份快速上手指南,并分享一些常见的“坑”和解决方案。 一、Ant-Design-Vue 快速上手指南 1. 安装与引入 确保安装了 Node.js(推荐使用最新…

数据结构基础详解(C语言): 栈与队列的详解附完整代码

数据结构 栈 栈的核心重点: 栈是只能从表尾插入和删除的数据结构。 栈的顺序存储结构由两部分组成,top指针和数组。 链栈其实本质就是单链表头插法 文章目录 数据结构 栈1.栈的基本概念1.1 栈的常用操作 2.栈的存储结构2.1 栈的顺序存储结构2.1.1 栈的定…

环境配置1-MobaXterm服务器中Anaconda、Pytorch的安装

①登录 Login as 输入密码时密码不显示,正常输入即可 ②进入指定的下载目录 出现类似界面后,键盘操作Ctrlc即可进行输入 cd / …….(要下载到的目录名称)/ Anaconda的安装 ①输入wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux…

如何M3U8视频切片保存到本地,见过视频被别人拿走了吗?

一、数据来源分析 1.明确需求 网址:https://v.qq.com/x/cover/mzc002006n62s11/e0045s2g2eg.html 数据:视频 2.抓包分析 F12 刷新网站 搜索关键字找到对应的数据位置 M3U8 https://vd6.l.qq.com/proxyhttp 二、代码实现步骤 发送请求 …

Linux磁盘操作之df命令

Linux使用df命令,可以查看系统中每个文件系统的总容量、已使用空间、可用空间和使用率。这对于了解磁盘空间的使用情况以及判断是否需要清理或扩展磁盘空间非常有用。 参数说明 df是一个用于显示磁盘空间使用情况的命令,df是disk free的缩写&#xff0…

Kafka事件(消息、数据、日志)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

穿越时光的经典:从LeNet到ResNet,机器学习中的CNN架构进化史

在机器学习的浩瀚星空中,卷积神经网络(Convolutional Neural Networks, CNNs)无疑是最为耀眼的星辰之一,它们以其卓越的图像处理能力,在计算机视觉领域书写了无数辉煌篇章。从最初的简单架构到如今复杂而高效的模型&am…

嵌入式UI开发-lvgl+wsl2+vscode系列:9、控件(Widgets)(二)

一、前言 接下来我们总结第二部分的控件。 二、示例 1、image(图像) 1.1、示例1 #include "../../lv_examples.h" #if LV_USE_IMAGE && LV_BUILD_EXAMPLESvoid lv_example_image_1(void) {LV_IMAGE_DECLARE(img_cogwheel_argb);lv…

【算法进阶2-动态规划】最长公共子序列、欧几里得算法-分数、RSA算法-密码于加密

1 最长公共子序列 2 欧几里得算法 2.1 欧几里得算法-分数 3 RSA算法-密码于加密 1 最长公共子序列 -个序列的子序列是在该序列中删去若干元素后得 到的序列。 例:“ABCD”和“BDF”都是“ABCDEFG”的子序列最长公共子序列(LCS)问题:给定两个序列X和Y,求X和Y长度最大…

请你谈谈:async与await是如何控制异步操作的执行顺序

async/await 是 JavaScript 中用于处理异步操作的一种语法糖,它使得异步代码的编写、阅读和维护变得更加容易和直观。async 和 await 关键字是在 ES2017(ES8)中引入的,旨在简化基于 Promise 的异步操作。 1 async async 是一个函…

Pytorch如何指定device(cuda or cpu)例子解析

代码示例: 在PyTorch中,指定设备(CPU或CUDA)是一个非常重要的步骤,特别是当你在进行深度学习训练时。以下是一些指定设备的详细例子: 检查CUDA是否可用: 首先,你需要检查你的机器是否支持CUDA&…

【C++ Primer Plus习题】5.9

问题: 解答: #include <iostream> #include <cstring> using namespace std;#define SIZE 20int main() {string words[SIZE];string done "done";int count 0;while (true){cout << "请输入单词:" << endl;cin >> words…

2054. 骑马修栅栏

代码 #include<bits/stdc.h> using namespace std; int mp[505][505]; queue<int> ans; int du[505]; int n0,m,u,v;void dfs(int i) {for(int j1;j<n;j){if(mp[i][j]>1){mp[i][j]--;mp[j][i]--;dfs(j);}}ans.push(i); } int main() {cin>>m;for(int …

javaSpringBootmysql的大学生心理健康管理系统39182-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;高校当然也不例外。大学生心理健康管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c…

一文搞懂不确定性原理

在讲这个之前&#xff0c;我们先要搞清楚&#xff0c;什么是不确定性原理&#xff1f;然后再解释它为什么就是不确定的呢&#xff1f; 我还模糊记得我第一次接触这个东西的时候&#xff0c;是在高中物理教材上面提了一下。其中印象最深的就是&#xff1a;动量确定&#xff0c;…

记录|Steam登录不上,打开速度慢等问题

目录 前言一、方法1二、方法2&#xff1a;cmd指令三、steam账号可以多台电脑一起用吗&#xff1f;更新时间 前言 参考视频&#xff1a; Steam登不上&#xff1f;商店打不开&#xff1f;多种方案助你解决问题&#xff01; 一、方法1 打开Steam的快捷方式的“属性”&#xff0c;…

[ICLR-24] LRM: Large Reconstruction Model for Single Image to 3D

[pdf | proj | code] 本文首次提出大型重建模型&#xff08;Large Reconstruction Model, LRM&#xff09;&#xff0c;实现5s内对单图物体的3D重建。在128张A100&#xff08;40G&#xff09;上训练30 epochs。 LRM包含三个部分&#xff0c;具体框架如下&#xff1a; 图片编码…

[C++] 初识 智能指针

标题&#xff1a;[C] 初识 智能指针 水墨不写bug 目录 一、前言 二、智能指针 1. 什么是RAII&#xff1f; 2.智能指针分类 三、智能指针简介 1.std::auto_ptr 2.std::unique_ptr 3.std::shared_ptr 正文开始&#xff1a; 一、前言 C智能指针的出现是有一定的背景的&am…