人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程

人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程

文章目录

引言

前几篇博客中我们介绍了用gemini3搭建了几个非常有意思的app,但是只在网页上运行肯定是满足不了我们的需求的,这篇博客讲教大家如何把app部署到自己的电脑上(依托于浏览器),可以随时随地打开并且不用担心随时找不到自己做好的应用

准备工作:环境搭建

在开始部署前,我们需要确保本地计算机具备必要的运行环境:

  1. Node.js环境
    • 这是运行现代JavaScript应用的基础,推荐安装v16及以上版本
    • 下载地址:https://nodejs.org/

安装完成后,打开终端验证:

node -v # 应显示v16.x.x或更高版本npm -v # 应显示7.x.x或更高版本
在这里插入图片描述
  1. 现代浏览器(大部分电脑都有的不用担心)
    • 推荐Chrome或Edge浏览器,对WebGL和摄像头API支持更好

步骤一:获取应用代码

  1. AI Studio的界面下载代码压缩包(通常是ZIP格式)
  2. 解压到本地任意目录

通过终端进入解压后的项目目录:

cd /path/to/particle-hand-3d # 替换为实际的项目路径
在这里插入图片描述

步骤二:安装项目依赖

该应用使用了多个现代前端库,包括React、Three.js和MediaPipe等,需要通过包管理器安装:

  1. 等待安装完成(首次安装可能需要几分钟)
    • 安装过程中会显示依赖包的下载和安装进度

成功完成后,项目目录会新增node_modules文件夹(存放所有依赖)

在这里插入图片描述

在项目根目录下运行安装命令:

npminstall
常见问题解决:若安装失败,尝试使用管理员权限运行终端网络问题可尝试切换网络或使用npm镜像:npm install --registry=https://registry.npm.taobao.org依赖冲突可删除node_modulespackage-lock.json后重新安装

步骤三:启动开发服务器

完成上述准备后,即可启动本地开发服务器:

等待服务器启动,成功后会显示类似信息:

VITE v6.2.0 ready in 300ms ➜ Local: http://localhost:3000/ ➜ Network: http://192.168.1.100:3000/ 

运行启动命令:

npm run dev 
在这里插入图片描述

打开浏览器,访问终端显示的本地地址(通常是http://localhost:3000

在这里插入图片描述

步骤四:授权与使用

首次访问应用时,需要完成摄像头授权:

  1. 浏览器会弹出摄像头权限请求,点击"允许"
  2. 稍等片刻(首次加载需要下载MediaPipe模型)
  3. 应用启动后会显示:
    • 全屏的3D粒子场景
    • 左下角的摄像头实时画面(带手部关键点标记)
    • 当你将手放在摄像头前时,粒子会跟随手部动作形成3D效果
注意:如果摄像头无法启动,检查:浏览器权限是否已授予其他应用是否占用了摄像头防火墙设置是否阻止了浏览器访问摄像头
在这里插入图片描述

项目结构解析

了解项目结构有助于你更好地理解和定制应用:

particle-hand-3d/ ├── components/ # React组件 │ ├── HandParticles.tsx # 3D粒子效果组件 │ └── VideoOverlay.tsx # 摄像头画面与手部标记组件 ├── node_modules/ # 项目依赖 ├── dist/ # 生产构建产物(构建后生成) ├── .env.local # 环境变量(需手动创建) ├── index.html # 入口HTML文件 ├── App.tsx # 应用主组件 ├── package.json # 项目配置与依赖 └── vite.config.ts # 构建工具配置 

核心功能模块:

  • MediaPipe:处理手部检测与关键点识别
  • Three.js:创建3D场景和粒子效果
  • React + React Three Fiber:UI框架与3D渲染集成

常见问题与解决方案

  1. 应用启动后白屏
    • 检查浏览器控制台(F12)是否有错误
    • 确认Three.js相关依赖是否安装成功
    • 尝试清除浏览器缓存
  2. 手部追踪不灵敏
    • 确保光线充足
    • 保持手部在摄像头可见范围内
    • 避免背景过于复杂
  3. 端口被占用
    • 更改vite配置中的端口:修改vite.config.ts中的server.port
    • 或终止占用端口的进程后重新启动
  4. 依赖安装错误
    • 升级Node.js到最新稳定版
    • 尝试使用yarn替代npm安装依赖

总结

通过以上步骤,你已经成功将Gemini生成的3D手部粒子追踪应用部署到了本地计算机。这个过程涵盖了从环境准备到应用运行的完整流程,适用于大多数基于Vite和React的现代Web应用部署。

这类AI生成的应用不仅展示了大语言模型在代码生成方面的能力,也为开发者提供了快速实现创意的新思路。你可以在此基础上进一步定制粒子效果、调整交互方式,甚至结合Gemini API添加更智能的交互功能。

希望本文能帮助你顺利运行和探索这个有趣的3D交互应用,开启更多创意开发的可能性!

Read more

《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表

《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 2. 合并两个有序链表 算法原理(递归): 思路: 解法代码(C++): 博主手记(字体还请见谅哈): 3. 反转链表 算法原理(递归): 思路: 解法代码(C++): 博主手记(字体还请见谅哈): 结尾: 前言: 聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力 2.

By Ne0inhk
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 上期回顾:在上一篇文章中,我们对C++进行了初步的认识,学习了C++的发展历史,第一个C++程序以及命名空间,我们知道,C++的出现就是为了改进和完善C语言的不足,使得程序更加高效,程序员编写起来更加方便快捷,那么本篇文章我们继续往下认识C++的入门相关知识 目录 一、C++的输入&输出 1.1、核心载体:头文件 1.2、核心的IO对象:cin与cout 1.2.1、std::cin 标准输入流 1.

By Ne0inhk
C++ 多线程同步之条件变量(condition_variable)实战

C++ 多线程同步之条件变量(condition_variable)实战

C++ 多线程同步之条件变量(condition_variable)实战 💡 学习目标:掌握 C++ 标准库中条件变量的使用方法,理解条件变量与互斥锁的协同工作机制,能够解决多线程间的等待-通知问题。 💡 学习重点:std::condition_variable 的核心接口、wait() 与 notify_one()/notify_all() 的配合使用、生产者-消费者模型的实现。 49.1 条件变量的引入场景 在多线程编程中,我们经常会遇到线程需要等待某个条件满足后再执行的场景。 比如生产者线程生产数据后,消费者线程才能消费;队列不为空时,消费者才能从中取数据。 如果仅用互斥锁实现,消费者线程只能不断轮询检查条件,这会造成 CPU 资源的浪费。 ⚠️ 注意事项:单纯的轮询会导致 CPU 空转,降低程序运行效率,条件变量就是为解决这类问题而生的。 举个简单的轮询反例,消费者不断检查队列是否有数据: #include<iostream>

By Ne0inhk
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统

JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统

Jsp技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统 * 前言 * 一、什么是JSP * 1.1 JSP是干什么的? * 1.2 JSP与Servlet的关系是什么? * 二、在Idea中创建第一个JSP系统 * 三、JSP和HTML的差别 * 3.1 格式区别 * 3.2 注释区别 前言 * 在前面的内容中,我们已经系统学习了 Web 开发的基础技术:从构建网页骨架的 HTML、美化页面的 CSS,到实现服务器端逻辑的 Java Servlet。 * 这些知识为我们打开了动态 Web 开发的大门,让我们能够通过 Servlet 处理客户端请求、操作数据库并返回动态数据。 * 然而,在 Servlet 中直接拼接 HTML 代码实现页面渲染时,代码往往显得繁琐且难以维护 —— 有没有一种更简洁、更直观的方式,

By Ne0inhk