国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

五分鐘 實現(xiàn)chatgpt+Midjourney工具 出圖ai 變現(xiàn)

這篇具有很好參考價值的文章主要介紹了五分鐘 實現(xiàn)chatgpt+Midjourney工具 出圖ai 變現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

首先感謝laf提供免費使用Midjourney API接口和云函數(shù),需要詳細(xì)了解的可以訪問他們的官網(wǎng)論壇。
感謝論壇前面幾位的分享,我做了參考。都有參考就不列啦哈?。?!

直接開始:

第一步

復(fù)制MJ-SEND云函數(shù)到laf云平臺,并發(fā)布獲得云函數(shù)訪問地址“https://xxx.laf.dev/mj-sent”

import cloud from '@lafjs/cloud'
import { Midjourney, MidjourneyMessage } from 'midjourney'
const SERVER_ID = '' // Midjourney 服務(wù) ID
const CHANNEL_ID = '' // Midjourney 頻道 ID
const SALAI_TOKEN = '' // Midjourney 服務(wù) Token
 
const Limit = 100
const MaxWait = 3
 
const client = new Midjourney({
  ServerId: SERVER_ID,
  ChannelId: CHANNEL_ID,
  SalaiToken: SALAI_TOKEN,
  Debug: true,
  SessionId: SALAI_TOKEN,
  Limit: Limit,
  MaxWait: MaxWait
});
 
export default async function (ctx: FunctionContext) {
  const { type, param } = ctx.body
  switch (type) {
    case 'RetrieveMessages':
      return await RetrieveMessages(param)
    case 'imagine':
      return await imagine(param)
    case 'upscale':
      return await upscale(param)
    case 'variation':
      return await variation(param)
  }
 
}
 
// 查詢最近消息
async function RetrieveMessages(param) {
  console.log("RetrieveMessages")
  const client = new MidjourneyMessage({
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
  });
  const msg = await client.RetrieveMessages();
  console.log("RetrieveMessages success ", msg)
  return msg
}
 
// 創(chuàng)建生圖任務(wù)
async function imagine(param) {
  console.log("imagine", param)
  const { question, msg_Id } = param
  const msg = await client.Imagine(
    `[${msg_Id}] ${question}`,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("imagine success ", msg)
  return true
}
 
// upscale 放大圖片
async function upscale(param) {
  console.log("upscale", param)
  const { question, index, id, url } = param
  const hash = url.split("_").pop()?.split(".")[0] ?? ""
  console.log(hash)
  const msg = await client.Upscale(
    question,
    index,
    id,
    hash,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("upscale success ", msg)
  return msg
}
 
// variation 變換圖片
async function variation(param) {
  console.log("variation", param)
  const client = new Midjourney({
    ServerId: SERVER_ID,
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
    Debug: true,
    SessionId: SALAI_TOKEN,
    Limit: Limit,
    MaxWait: 100
  });
  const { question, index, id, url } = param
  const hash = url.split("_").pop()?.split(".")[0] ?? ""
  const msg = await client.Variation(
    question,
    index,
    id,
    hash,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("variation success ", msg)
  return msg
}

第二步 寫一個前端渲染效果

 <html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <script type="module" src="https://gradio.s3-us-west-2.amazonaws.com/3.19.1/gradio.js"></script>
    <!-- import vue -->
    <script src="https://unpkg.com/vue@next"></script>
    <!-- import Elm CSS -->
    <link rel="stylesheet" >
    <!-- import Elm JavaScript -->
    <script src="https://unpkg.com/element-plus"></script>
    <!-- import axios -->
    <script src="https://unpkg.com/axios@1.1.2/dist/axios.min.js"></script>
    <title>mj</title>
    <style>
      body {
        display: flex;
        justify-content: center;
        background-color: #f5f5f5;
      }
      #app {
        width: 1000px;
      }
      .task {
        border: 1px solid #ddd;
        background-color: #fff;
        border-radius: 10px;
        margin-bottom: 20px;
        padding: 20px;
      }
      image {
        border-radius: 10px;
      }
    </style>
  </head>
  <body>
 
    <div id="app">
      <el-form>
        <el-form-item>
          <el-input type="textarea" v-model="question" placeholder="請輸入要生成的圖片內(nèi)容,盡量使用英文"></el-input>
          <el-button style="margin-top: 10px;" type="primary" @click="submit" :loading="loading">提交</el-button>
        </el-form-item>
      </el-form>
      <div class="result" style="margin-top: 10px;">
        <h1>我的作品</h1>
        <div v-for="(item, index) in tasks" class="task" :key="item.msg_Id">
          <p>任務(wù)id: <el-button link type="primary">{{item.msg_Id}}</el-button> </p>
          <p>{{item.question}}</p>
          <p>
            <el-button type="primary" @click="getResult(item.msg_Id)">刷新</el-button>
          </p>
          <template v-if="item.result">
            <el-image fit="scale-down" lazy :src="item.result.url" :alt="item.question"></el-image>
            <p>
              <el-button type="primary" plain @click="variation(item, 1)">V1</el-button>
              <el-button type="primary" plain @click="variation(item, 2)">V2</el-button>
              <el-button type="primary" plain @click="variation(item, 3)">V3</el-button>
              <el-button type="primary" plain @click="variation(item, 4)">V4</el-button>
            </p>
            <p>
              <el-button type="primary" plain @click="upscale(item, 1)">U1</el-button>
              <el-button type="primary" plain @click="upscale(item, 2)">U2</el-button>
              <el-button type="primary" plain @click="upscale(item, 3)">U3</el-button>
              <el-button type="primary" plain @click="upscale(item, 4)">U4</el-button>
            </p>
            <template v-if="item.result.upscaleUrl">
              <h5>大圖</h5>
              <el-image fit="scale-down" lazy :src="item.result.upscaleUrl" :alt="item.question"></el-image>
            </template>
          </template>
        </div>
        <h2>其他人的作品</h2>
        <div v-for="item in otherCase" :key="item.id" class="task">
          <h3>prompt:{{ formatPrompt(item.content) }}</h3>
          <h3>time:{{ formatDate(item.timestamp) }}</h3>
          <div v-for="attachment in item.attachments" :key="attachment.id">
            <el-image fit="scale-down" lazy :src="attachment.url" :alt="formatPrompt(item.content)"></el-image>
          </div>
        </div>
      </div>
    </div>
    <script>
      const App = {
        data() {
          return {
            question: "",
            msg_Id: "",
            loading: false,
            tasks: [],
            otherCase: []
          };
        },
        mounted() {
          this.initTask()
          this.getOtherCase()
        },
        methods: {
          initTask() {
            this.tasks = JSON.parse(window.localStorage.getItem('task') || JSON.stringify([]))
          },
          submit() {
            this.msg_Id = grs()
            this.loading = true
            axios({
              method: 'post',
              url: 'https://rpcqmo.laf.dev/mj-service',
              data: {
                type: 'imagine',
                param: {
                  msg_Id: this.msg_Id,
                  question: this.question
                }
              }
            }).then(res => {
              console.log('[ res ] >', res)
              this.$message.success("上傳成功,正在畫圖,請稍后...")
              window.localStorage.setItem('task', JSON.stringify([
                { msg_Id: this.msg_Id, question: this.question, result: null },
                ...this.tasks
              ]))
              this.initTask()
              this.getResult(this.msg_Id)
            }).catch(err => {
              console.log('[ err ] >', err)
            }).finally(() => {
              this.loading = false
            })
          },
          getResult(msg_Id) {
            axios({
              method: 'post',
              url: 'https://rpcqmo.laf.dev/mj-service',
              data: {
                type: 'RetrieveMessages'
              }
            }).then(res => {
              console.log('[ res ] >', res)
              const { data } = res
              const resIndex = data.findIndex(item => item.content.includes(msg_Id))
              if (resIndex < 0) {
                this.$message.success('正在努力生成,請耐心等待')
                return
              }
              const { id, attachments } = data[resIndex]
              if (!attachments.length) {
                this.$message.success('正在努力生成,請耐心等待')
                return
              }
              const { url, width } = attachments[0]
              if (width >= 2048) {
                const myIndex = this.tasks.findIndex(item => item.msg_Id == msg_Id)
                this.tasks[myIndex].result = {
                  id,
                  url
                }
                window.localStorage.setItem('task', JSON.stringify(this.tasks))
              } else {
                this.$message.success('正在努力生成,請耐心等待')
                return
              }
            }).catch(err => {
              console.log('[ err ] >', err)
            }).finally(() => {
            })
          },
          variation({ result, question, msg_Id }, index) {
            console.log(result, question, index);
            this.$message.warning('努力開發(fā)中')
            return
            axios({
              method: 'post',
              url: 'https://rpcqmo.laf.dev/mj-service',
              data: {
                type: 'variation',
                param: {
                  id: result.id,
                  url: result.url,
                  question,
                  index
                }
              }
            }).then(res => {
            }).catch(err => {
              console.log('[ err ] >', err)
            }).finally(() => {
            })
          },
          upscale({ result, question, msg_Id }, index) {
            console.log(result, question, index);
            // this.$loading('正在生成大圖')
            const loadingInstance = this.$loading({
              lock: true,
              text: '正在生成大圖...',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
            });
            axios({
              method: 'post',
              url: 'https://rpcqmo.laf.dev/mj-service',
              data: {
                type: 'upscale',
                param: {
                  id: result.id,
                  url: result.url,
                  question,
                  index
                }
              }
            }).then(res => {
              const { data } = res
              console.log('[ upscale data ] >', data)
              const taskIndex = this.tasks.findIndex(item => item.msg_Id == msg_Id)
              this.tasks[taskIndex].result.upscaleUrl = data.uri
              window.localStorage.setItem('task', JSON.stringify(this.tasks))
            }).catch(err => {
              console.log('[ err ] >', err)
            }).finally(() => {
              loadingInstance.close();
            })
          },
          getOtherCase() {
            axios({
              method: 'post',
              url: 'https://rpcqmo.laf.dev/mj-service',
              data: {
                type: 'RetrieveMessages'
              }
            }).then(res => {
              const { data } = res
              this.otherCase = data.filter(item => item.attachments.length)
            })
          },
          formatPrompt(str) {
            return str.substring(str.indexOf(']') + 1, str.indexOf('--seed')) + `(${str.substring(str.indexOf('[') + 1, str.indexOf(']'))})`
          },
          // 格式化日期時間
          padLeftZero(str) {
            return ('00' + str).substr(str.length);
          },
          formatDate(date, fmt = "yyyy-MM-dd hh:mm:ss") {
            if (/(y+)/.test(fmt)) {
              fmt = fmt.replace(RegExp.$1, (new Date(date).getFullYear() + '').substr(4 - RegExp.$1.length));
            }
            const o = {
              'M+': new Date(date).getMonth() + 1,
              'd+': new Date(date).getDate(),
              'h+': new Date(date).getHours(),
              'm+': new Date(date).getMinutes(),
              's+': new Date(date).getSeconds()
            }
            for (const k in o) {
              if (new RegExp(`(${k})`).test(fmt)) {
                const str = o[k] + '';
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : this.padLeftZero(str));
              }
            }
            return fmt;
          },
        }
      };
      const app = Vue.createApp(App);
      app.use(ElementPlus);
      app.mount("#app");
      function grs() {
        return 'Charlie-' + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
          var r = Math.random() * 16 | 0,
              v = c == 'x' ? r : (r & 0x3 | 0x8);
          return v.toString(16);
        });
      }
    </script>
  </body>
</html>

第三步 上傳服務(wù)器或者找個空間也可以本地訪問文章來源地址http://www.zghlxwxcb.cn/news/detail-511031.html

到了這里,關(guān)于五分鐘 實現(xiàn)chatgpt+Midjourney工具 出圖ai 變現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • AI繪畫新的變現(xiàn)機會來了,Midjourney角色一致性重磅更新

    AI繪畫新的變現(xiàn)機會來了,Midjourney角色一致性重磅更新

    文章底部準(zhǔn)備了變現(xiàn)方法和粉絲福利,看完后可免費領(lǐng)?。?一、功能更新介紹 昨天Midjourney發(fā)布了“角色一致性”算法,就是根據(jù)參考圖,生成一致的面孔、發(fā)型甚至跨風(fēng)格和場景的服裝圖像。\\\"cref\\\"簡直可以說是換裝不換臉,類似于換臉插件。而且原圖面部可以是多角度,與

    2024年04月17日
    瀏覽(25)
  • 國內(nèi)免費ChatGPT+AI繪畫創(chuàng)作網(wǎng)站工具+支持GPT-4+Midjourney繪畫

    國內(nèi)免費ChatGPT+AI繪畫創(chuàng)作網(wǎng)站工具+支持GPT-4+Midjourney繪畫

    GPT4.0 相信對大家應(yīng)該不感到陌生吧?簡單來說,GPT-4技術(shù)比之前的GPT-3.5相對來說更加智能,會根據(jù)用戶的要求生成多種內(nèi)容甚至也可以和用戶進行創(chuàng)作交流。 然而,GPT-4對普通用戶來說都是需要額外付費才可以使用。所以今天小編就整理一個真正免費的公益GPT4網(wǎng)站。不是只

    2024年02月05日
    瀏覽(24)
  • ChatGPT、Midjourney 5大AI工具組合技,生成AI 文字、圖片及影片,開啟AI 創(chuàng)作新局面!

    ChatGPT、Midjourney 5大AI工具組合技,生成AI 文字、圖片及影片,開啟AI 創(chuàng)作新局面!

    AIGC 的意思是生成式人工智慧,全名為「Artificial Intelligence Generated Content」,是透過機器學(xué)習(xí)、自然語言處理和大數(shù)據(jù)等技術(shù),讓電腦自動產(chǎn)生出符合人類需求的文字、圖片、影音等,并能夠根據(jù)不同的需求進行客制化。 AIGC 可以應(yīng)用于多種產(chǎn)業(yè)領(lǐng)域,如網(wǎng)絡(luò)營銷、影視作品、

    2024年04月26日
    瀏覽(44)
  • 最新ChatGPT4.0工具使用教程:GPTs使用,Midjourney繪畫,AI換臉,Suno-AI音樂生成大模型一站式系統(tǒng)使用教程

    最新ChatGPT4.0工具使用教程:GPTs使用,Midjourney繪畫,AI換臉,Suno-AI音樂生成大模型一站式系統(tǒng)使用教程

    ChatGPT3.5、GPT4.0、相信對大家應(yīng)該不感到陌生吧?簡單來說,GPT-4技術(shù)比之前的GPT-3.5相對來說更加智能,會根據(jù)用戶的要求生成多種內(nèi)容甚至也可以和用戶進行創(chuàng)作交流。 然而,GPT-4對普通用戶來說都是需要額外付費才可以使用。所以今天小編就整理一個真正可免費的AI工具,

    2024年04月14日
    瀏覽(28)
  • 分享6款A(yù)I繪畫工具,能出圖質(zhì)量圖片,值得使用

    分享6款A(yù)I繪畫工具,能出圖質(zhì)量圖片,值得使用

    之前用過很多的AI繪畫工具,最近都網(wǎng)址丟失或是停用維護中,好多都用不了,不過好在還有一些“幸存下來”,并非全部免費,但是繪畫的效果還是很不錯的,出圖的速度也比較快,大家感興趣的話可以去試試! 這款電腦軟件的功能可以說是非常豐富了!不僅支持文字識別

    2024年01月18日
    瀏覽(54)
  • Midjourney小白上手教程,3分鐘學(xué)會AI繪畫!

    Midjourney小白上手教程,3分鐘學(xué)會AI繪畫!

    2023年可以成為“AI元年”,隨著人工智能飛躍發(fā)展,各行各業(yè)開始擁抱AI,其中設(shè)計、傳媒、游戲行業(yè)與AI最好的結(jié)合方式便是AI繪畫,以Midjourney為代表的AI繪畫不僅能提升設(shè)計者的工作效率,還間接降低了設(shè)計師的技能門檻,因此在未來與設(shè)計相關(guān)的任何工作,最需要的,也

    2024年02月20日
    瀏覽(28)
  • AI根據(jù)文本語義實現(xiàn)AI繪畫出圖

    當(dāng)談到人工智能(AI)和藝術(shù)的結(jié)合時,我們經(jīng)常會想到生成對抗網(wǎng)絡(luò)(GANs)和圖像生成。然而,很少有人了解到AI也可以通過文本語義生成繪畫作品。在本文中,我將詳細(xì)介紹如何使用深度學(xué)習(xí)和自然語言處理技術(shù),使AI能夠根據(jù)給定的文本語義生成繪畫作品。 首先,我們

    2024年03月26日
    瀏覽(25)
  • 用ChatGPT+Midjourney 5分鐘生成30條爆款小紅書圖文(內(nèi)有詳細(xì)教程)

    用ChatGPT+Midjourney 5分鐘生成30條爆款小紅書圖文(內(nèi)有詳細(xì)教程)

    本期是赤辰第35期AI項目教程,文章底部準(zhǔn)備了粉絲福利,看完后可免費領(lǐng)?。?今天給大家講一下如何5分鐘生成30條爆款小紅書圖文 先說個賬號,這個應(yīng)該有同學(xué)也看過,前幾個月在小紅書有個漲粉很快的AI繪畫項目,就是分享貓咪時尚走秀就能輕松獲得1W+的點贊,三個月就

    2024年02月03日
    瀏覽(24)
  • AI繪圖實戰(zhàn)(三):手繪出圖機甲狂暴男 | Stable Diffusion成為設(shè)計師生產(chǎn)力工具

    AI繪圖實戰(zhàn)(三):手繪出圖機甲狂暴男 | Stable Diffusion成為設(shè)計師生產(chǎn)力工具

    S:你安裝stable diffusion就是為了看小姐姐么? I :當(dāng)然不是,當(dāng)然是為了公司的發(fā)展謀出路~~ 預(yù)先學(xué)習(xí) : 安裝及其問題解決參考:《Windows安裝Stable Diffusion WebUI及問題解決記錄》; 運行使用時問題《Windows使用Stable Diffusion時遇到的各種問題整理》; 模型運用及參數(shù)《Stable D

    2024年02月10日
    瀏覽(23)
  • 【元壤教育AI提示工程】Midjourney神器助力,設(shè)計小白3分鐘輕松打造炫酷海報!

    【元壤教育AI提示工程】Midjourney神器助力,設(shè)計小白3分鐘輕松打造炫酷海報!

    前言 關(guān)注「元壤教育」公眾號,系統(tǒng)學(xué)習(xí)更多AIGC課程。 看完這篇實操教程,設(shè)計師該領(lǐng)盒飯了,哈哈,開個玩笑,各位老板看著辦。 本教程針對完全沒有設(shè)計基礎(chǔ)的老板們,手把手教你3分鐘利用Midjourney輕松打造炫酷海報。 這里有兩種方法,不過本教程我們先講解第二種。

    2024年02月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包