OpenAI 成近期顶流团队?如何使用 OpenAI 和 Node.js 构建 AI 图像生成器?

摘要: 12月7号,知名人工智能研究机构 Open AI 在Youtub上发布视频介绍使用OpenAI 和 DALL-E 模型创建一个网络应用程序,该应用程序将根据输入的文本从头开始生成图像。https://www.youtube.com/watch?v=fU4o_BKaUZE

前言💖

大家好,这里是opentiny-official小助手前沿技术文章分享,用最通俗易懂的话分享业界前沿WEB技术是我们的座右铭~

介绍📖

OpenAI API 几乎可以应用于任何涉及理解或生成自然语言或代码的任务。他们提供一系列适用于不同的任务模型,并且还能够根据自己的需求微调自定义模型。这些模型可用于从内容生成到语义搜索和分类的所有领域,例如文本补充、代码编写、SQL翻译、JS助手聊天机器人等。OpenAI官网文档

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

12月7号视频发布他们介绍了使用DALL·E 模型生成并处理图像,并将作为API使用,这意味着开发者可以将该系统构建到他们的应用程序、网站和服务中。

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

opentiny-official小助手也跟着他们一起体验了一些这款广为热捧的AI艺术生成的体验工具~ 大家也快来试试吧
Youtube指导视频

看看效果👀

这次他们使用了nodejs作为后端,并输入文本描述“frog on a computer drinking coffee” (一只在电脑旁喝咖啡的青蛙),选择图片大小“Medium”,点击“Generate”,接下来静待片刻,就出现了如下的图片~ 是不是还挺 cool 的! 下面咱们就可以跟着作者一步一步的实现下。

实现🚀

第一步 设置和安装依赖

打开vscode编辑器,安装node.js依赖
我们需要安装Express 去创建路由,dotenv用于环境变量的设置

npm init -y
npm i express openai dotev
npm i -D nodemon

接着打开package.json文件,分别创建start和dev命令

第二步 引入Express服务端和ENV变量

创建index.js文件作为入口文件,分别引入express和detenv

const express = require('express');
const dotenv = require('dotenv').config();
const port = process.env.PORT || 5000;const app = express();app.listen(port, () => console.log(`Server started on port ${port}`));

新建.env文件,设置端口号为5000

PORT=5000
OPENAI_API_KEY=''

其中OPENAI_API_KEY需要从OPENAI网站上申请

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

第三步 新增 Route 和 Controller

接下来我们创建一个route文件 openaiRoutes.js, 并在index.js新增使用openai的路径

const express = require('express');
const dotenv = require('dotenv').config();
const port = process.env.PORT || 5000;const app = express();
// 新增路由
app.use('/openai', require('./routes/openaiRoutes'));app.listen(port, () => console.log(`Server started on port ${port}`));

openaiRoutes.js文件中新增

const express = require('express');
const router = express.Router();router.post('/generateimage', (req, res) => {res.status(200).json({success: true,});
});module.exports = router;

可以使用Postman工具测试接口,发送POST请求

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

接下来我们新建一个controller, controller里新建文件openaiController.js,在这个文件里我们定义一个生成图像的函数

const generateImage = async (req, res) => {res.status(200).json({success: true,});
});module.exports = { generateImage };

并在openaiRoutes.js文件里引入

const express = require('express');
// 从controller中引入
const { generateImage } = require('../controllers/openaiController');
const router = express.Router();router.post('/generateimage', generateImage);module.exports = router;

同样也可以用Postman测试接口,可以看到同上图一样的json返回。

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

第四步 OpenAI 库的请求和响应

接下来我们在openaiController.js文件中引入openai的API接口creatImage, 具体使用方法可以查看OpenAI API

creatImage函数中定义prompt为Ploar bear on ice skates(一只溜冰的北极熊),n数量为1,大小size为 512x512。

const { Configuration, OpenAIApi } = require('openai');const configuration = new Configuration({apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);const generateImage = async (req, res) => {try {const response = await openai.createImage({prompt: 'Ploar bear on ice skates',n: 1,size: '512x512',});const imageUrl = response.data.data[0].url;res.status(200).json({success: true,data: imageUrl,});} catch (error) {if (error.response) {console.log(error.response.status);console.log(error.response.data);} else {console.log(error.message);}res.status(400).json({success: false,error: 'The image could not be generated',});}
};module.exports = { generateImage };

同样,我们使用Postman测试接口,返回结果为imageUrl

点开url地址,可以看到如下图片~ 哈哈,真的有一只在滑冰的北极熊~

第五步 请求body数据

接下来我们启用body解析,在index.js文件中添加Enable body parser部分内容

const express = require('express');
const dotenv = require('dotenv').config();
const port = process.env.PORT || 5000;const app = express();// Enable body parser
app.use(express.json());
app.use(express.urlencoded({ extended: false }));app.use('/openai', require('./routes/openaiRoutes'));app.listen(port, () => console.log(`Server started on port ${port}`));

并在openaiController.js中获取到body解析的数据

const { Configuration, OpenAIApi } = require('openai');const configuration = new Configuration({apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);const generateImage = async (req, res) => {// 获取body中的数据const { prompt, size } = req.body;const imageSize =size === 'small' ? '256x256' : size === 'medium' ? '512x512' : '1024x1024';try {const response = await openai.createImage({prompt,n: 1,size: imageSize,});const imageUrl = response.data.data[0].url;res.status(200).json({success: true,data: imageUrl,});} catch (error) {if (error.response) {console.log(error.response.status);console.log(error.response.data);} else {console.log(error.message);}res.status(400).json({success: false,error: 'The image could not be generated',});}
};module.exports = { generateImage };

同样,我们用Postman测试接口,并在body中增加参数,这次我们设置的prompt为“man on the moon”(月球上的人),size选择为“mudium”

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

打开imageUrl查看结果, 有没有一种奇幻的感觉~

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

第六步 前端设置 Frontend Setup

接下来我们新建一个public文件夹去放置静态资源文件,并在index.js文件中设置静态文件。

const path = require('path');
const express = require('express');
const dotenv = require('dotenv').config();
const port = process.env.PORT || 5000;const app = express();app.use(express.json());
app.use(express.urlencoded({ extended: false }));// Set static folder
app.use(express.static(path.join(__dirname, 'public')));app.use('/openai', require('./routes/openaiRoutes'));app.listen(port, () => console.log(`Server started on port ${port}`));

public文件夹里我们新建index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="stylesheet" href="css/style.css" /><link rel="stylesheet" href="css/spinner.css" /><script src="js/main.js" defer></script><title>OpenAI Image Genrator</title></head><body><header><div class="navbar"><div class="logo"><h2>OpenAI Image Genrator</h2></div><div class="nav-links"><ul><li><a href="https://beta.openai.com/docs" target="_blank">OpenAI API Docs</a></li></ul></div></div></header><main><section class="showcase"><form id="image-form"><h1>Describe An Image</h1><div class="form-control"><input type="text" id="prompt" placeholder="Enter Text" /></div><!-- size --><div class="form-control"><select name="size" id="size"><option value="small">Small</option><option value="medium" selected>Medium</option><option value="large">Large</option></select></div><button type="submit" class="btn">Generate</button></form></section><section class="image"><div class="image-container"><h2 class="msg"></h2><img style="max-width:100%" src="" alt="" id="image" /></div></section></main><div class="spinner"></div></body>
</html>

并新增css文件夹用于存放css样式 ,css样式可查看github地址 public文件夹下。

第七步 表单事件监听

接下来我们需要为第六步创建的表单增加事件监听,在public文件夹下新建js文件夹并新增main.js文件。

function onSubmit(e) {e.preventDefault();document.querySelector('.msg').textContent = '';document.querySelector('#image').src = '';const prompt = document.querySelector('#prompt').value;const size = document.querySelector('#size').value;if (prompt === '') {alert('Please add some text');return;}console.log(prompt, size);
}document.querySelector('#image-form').addEventListener('submit', onSubmit);

此时我们点击generate按钮会在控制台打印prompt, size的信息。

第八步 新增GenerateImageRequest()函数

同样是main.js文件里,我们补充GenerateImageRequest()函数去调用/openai/generateimage接口,并设置DOM中显示图像。

function onSubmit(e) {e.preventDefault();document.querySelector('.msg').textContent = '';document.querySelector('#image').src = '';const prompt = document.querySelector('#prompt').value;const size = document.querySelector('#size').value;if (prompt === '') {alert('Please add some text');return;}generateImageRequest(prompt, size);
}// 新增GenerateImageRequest()函数
async function generateImageRequest(prompt, size) {try {showSpinner();const response = await fetch('/openai/generateimage', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({prompt,size,}),});if (!response.ok) {removeSpinner();throw new Error('That image could not be generated');}const data = await response.json();// console.log(data);const imageUrl = data.data;// DOM中显示图像document.querySelector('#image').src = imageUrl;removeSpinner();} catch (error) {document.querySelector('.msg').textContent = error;}
}function showSpinner() {document.querySelector('.spinner').classList.add('show');
}function removeSpinner() {document.querySelector('.spinner').classList.remove('show');
}document.querySelector('#image-form').addEventListener('submit', onSubmit);

以上步骤补充完成之后我们就可以看看最终效果啦。

演示💻

输入框中输入“brad traversy person web development”,大小输入“Medium”,显示效果如下:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=

输入框中输入“cow dancing on a rainbow while juggling”,大小输入“Medium”,显示效果如下:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

最后⭐

以上就是 opentiny-official小助手 本周的前沿WEB技术分享了,也欢迎各位爱好WEB的小伙伴一起互助交流~🤪欢迎关注我们接下来的开源项目—OpenTiny, 微信搜索我们的微信小助手: opentiny-official,拉你进群,了解它最新的动态。

💻 Code: GitHub - bradtraversy/nodejs-openai-image: Web app that uses Node.js and OpenAI to generate images

📄OpenAI Docs: OpenAI API

⭐ All Courses: https://traversymedia.com

💖 Show Support Patreon: https://www.patreon.com/traversymedia PayPal: PayPal.Me

👇 Follow Traversy Media On Social Media: Twitter: https://twitter.com/traversymedia
Instagram: https://www.instagram.com/traversymedia
Linkedin: LinkedIn Login, Sign in | LinkedIn

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

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

相关文章

AI 自动写代码插件 Copilot(副驾驶员)

AI 自动写代码插件 Copilot 提示&#xff1a;Copilot单词直译过来就是副驾驶员的意思。 介绍&#xff1a;本质上就是基于GitHub开源的亿级别的代码&#xff0c;训练AI模型&#xff0c;自动生成代码。 就是数据量(GitHub的数据量就很大&#xff01;)能够决定你AI模型精度的上…

软件测试中的AI——运用AI编写测试用例

文章目录 一、现状二、测试技术可结合AI的几个方向三、尝试使用AI编写测试用例&#xff08;实验过程&#xff09;1、AI联系上下文的能力弱2、回答的内容类似于能在网上搜索到的内容3、需要有一个明确的指令4、输出内容有限5、无法想象到需求描述之外的内容 四、总结&#xff1a…

AI热度降温?揭秘加德纳技术成熟度曲线与AI发展阶段

一文解决你所有对 AI 的焦虑 近期&#xff0c;我们发现ChatGPT的热度似乎不如前几个月。许多人尝试了这个技术&#xff0c;觉得它非常强大&#xff0c;但似乎与自己的日常生活和工作关系不大&#xff0c;因此逐渐失去了兴趣。 然而&#xff0c;这实际上是技术发展的正常周期&…

王炸赚钱组合!!ChatGPT + AI大模型

“ 你近期有体验过哪些大模型产品呢&#xff1f; 你有使用大模型API做过一些实际开发吗&#xff1f; 在你日常开发中&#xff0c;可以与大模型相关应用结合来完成工作吗&#xff1f; ” 从去年底开始&#xff0c;大模型的发展趋势就非常迅猛&#xff0c;这也代表着人工智能进入…

ChatGPT + AI大模型 = 王炸!!!

“ 你近期有体验过哪些大模型产品呢&#xff1f; 你有使用大模型API做过一些实际开发吗&#xff1f; 在你日常开发中&#xff0c;可以与大模型相关应用结合来完成工作吗&#xff1f; ” 从去年底开始&#xff0c;大模型的发展趋势就非常迅猛&#xff0c;这也代表着人工智能进入…

ChatGPT+低代码,好用到飞起?

ChatGPT 凭借短短 2 个月&#xff0c;月活用户突破 1 亿&#xff0c;成为史上用户增长速度最快的消费级应用程序。ChatGPT 的爆火&#xff0c;在全球范围内掀起了一场关于 AI 技术革命的狂潮&#xff0c;AIGC 也迅速成为科技圈最火赛道。 更有国际咨询机构预测&#xff0c;203…

信用卡兴趣人群洞察报告.pdf

男性用户对信用卡的关注度显著高于女性 信用卡兴趣人群年龄集中在24-40岁,与主流消费人群相吻合。41岁以上人群信用卡关注度明显滑落 深广信用卡关注度最高,占据前四名知州、西安等中西部城市占据前十名中半数名额 信用卡兴趣人群高度集中于iPhone手机,其次分别为三星、魅族…

关于程序员的调查报告

最近Stack Overflow发布一份开发者调查报告&#xff0c;内容涵盖了开发人员最喜欢的技术到工作偏好等等各种问题。下面小编就带大家一起来看一看。 NO.1 最常用的的编程语言&#xff1a; 我们发现Python的使用度今年超过了Java&#xff0c;Python的势头有点猛啊&#xff01;&am…

c语言进行数据统计分析的研究报告,统计分析报告范文

统计分析报告范文 大家都知道&#xff0c;统计分析的写作是为了制作统计分析文章。在统计部门&#xff0c;统计分析文章则称为统计分析报告。下面是一篇统计分析报告范文&#xff0c;欢迎阅读! 统计分析报告范文 【目录】 一.引言 二.研究目的 三.数据分析 I.对能源生产及构成的…

论文阅读报告

0 2022/6/23-2022/6/25 1. FLAME: Taming Backdoors in Federated Learning 1.1 本文的贡献 我们提出了FLAME&#xff0c;这是一种针对FL中后门攻击的防御框架&#xff0c;能够消除后门而不影响聚合模型的良性性能。与早期的后门防御相反&#xff0c;FLAME适用于一般对手模型…

「市场调研」简说

1. 外部因素评价矩阵EFE EFE矩阵可以帮助战略制定者归纳和评价经济、社会、文化、人口、环境、政治、政府、法律、技术以及竞争等方面的信息。 建立EFE矩阵的五个步骤如下&#xff1a;  1&#xff09; 列出在外部分析过程中所确认的外部因素&#xff0c;包括影响企业和其所…

《用图表说话》读后感

《用图表说话&#xff1a;麦肯锡商务沟通完全工具箱&#xff08;珍藏版&#xff09;》在我的必读清单里&#xff0c;推荐过很多次&#xff0c;也是之前送书活动中的书目&#xff0c;今天就来总结一下这本书到底讲了个啥。&#xff08;知识图谱在文末&#xff0c;想要高清图片可…

微信读书产品调研报告

在信息爆炸时代,还是有一些人通过阅读书籍的方式静下心思考,静心提升自己的。而电子阅读产品也是互联网时代下的特色与产物,在竞争激励的电子阅读产品市场中,微信读书也正凭借着高质量的产品设计赢取用户的称赞与信赖。 微信读书产品调研报告 产品名称:微信读书 产品版…

哪里下载全部股票历史数据?下载全部股票历史数据怎么下?

4000只个股所有股票的历史数据&#xff0c;500个指数的全部历史数据&#xff0c;已经打包好了&#xff0c;而且可以随时下载最近一个交易日的全部股票历史数据&#xff0c;一个在线下载的工具 只要两步就能下载&#xff1a; 填股市代码、邮箱5分钟后收到股市历史数据Excel 放…

如何下载股票历史数据?

如何下载股票历史数据?发现一个可以在线批量下载股票历史数据的的工具&#xff0c;相比那些套路收费的&#xff0c;起码批量在线下载历史数据的Excel是真的&#xff0c;免费很关键… 只要两步就能下载&#xff1a; 填股市代码、邮箱5分钟后收到股市历史数据Excel 放在公主号…

股票历史走势的比较及显示

本文总结一下以前参加的一个股票分析软件的子项目&#xff08;仅放了部分代码&#xff09;&#xff0c;项目用QT实现的&#xff0c;股票历史数据存储在excel文件中。 子项目的目标是根据提供的股票历史数据查找与近期股票数据相似的时间段&#xff0c;并根据历史数据对走势进行…

股票数据下载-如何下载股票历史行情数据?

股票数据是研究和分析行情的基础&#xff0c;不管是量化分析还是数据对比&#xff0c;股票数据都是最基础的部分。之前各个炒股软件基本都有下载股票数据的功能&#xff0c;但是后来就取消或者加了限制了。 只要两步就能下载&#xff1a; 填股票代码、邮箱收到股票历史数据…

股票历史数据-股票历史数据下载

股票历史数据-股票历史数据下载 共享一个股票历史数据下载系统工具&#xff0c;可以在线下载股票历史数据&#xff0c;下载股票历史数据是&#xff1a;A股所有股票从成立到最近一天的所有股票历史数据&#xff0c;亲测手机在线就能下载a股股票历史数据 亲测获取步骤&#xf…

A股全市场股票历史行情低频日频EOD数据

A股市场全部历史日频数据每日盘后更新 数据源 本文中的日频数据源来自恒生&#xff0c;包括前后复权和无复权行情&#xff0c;数据分股票代码压缩&#xff0c;每日盘后更新上传网盘 共享网盘链接与详情 全A股票前复权历史行情数据&#xff1a; 链接&#xff1a;https://pa…

中国上市公司2001-2020年历史股票数据下载(获得方式见网页 http://yanzw.cn )

中国上市公司2001-2020年历史股票数据下载 中国上市公司2001-2020年历史股票数据下载中国上海交易所上市公司和深圳交易所上市公司股票数据历史数据详细信息下载方式(获得方式) 中国上市公司2001-2020年历史股票数据下载 中国上海交易所上市公司和深圳交易所上市公司股票数据 …