如何兩天時(shí)間上線一款A(yù)I應(yīng)用?
大家好,我卡頌。
最近幾個(gè)月,??AI?
??相關(guān)新聞不斷搶占大家的注意力。逞著這波熱度,各路開發(fā)者都投入到??AI?
?應(yīng)用的開發(fā)。
比如,15歲的開發(fā)者saviomartin7[1]開發(fā)的IconifyAI[2]可以根據(jù)文字描述生成應(yīng)用??Logo?
?。網(wǎng)頁上線5天就賺到了接近1.5k刀。
這波機(jī)遇對(duì)前端同學(xué)有很大利好,因?yàn)楦鞣N基礎(chǔ)服務(wù)(比如各種存儲(chǔ)服務(wù)、AI服務(wù)、部署)都有成熟的解決方案可以直接使用,前端同學(xué)只需專注業(yè)務(wù)邏輯的實(shí)現(xiàn)即可。
本文讓我們看看一位國(guó)外老哥是如何用一個(gè)周末時(shí)間開發(fā)一款A(yù)I應(yīng)用。該應(yīng)用上線僅40天,就獲得了20wUV。
應(yīng)用架構(gòu)
首先介紹下這款應(yīng)用,應(yīng)用名叫restorephotos[3],用戶上傳模糊的老照片后,??AI?
?會(huì)修復(fù)照片,并返回更清晰的版本。應(yīng)用的完整代碼已開源。
應(yīng)用開源代碼地址[4]?
整個(gè)應(yīng)用的架構(gòu)分為4部分:
- 前端(Next.js)
- 圖片存儲(chǔ)服務(wù)
- Next.js服務(wù)端
- AI API
完整工作流程如下:
- 用戶在前端上傳老照片
- 前端調(diào)用圖片存儲(chǔ)服務(wù),返回圖片存儲(chǔ)地址給前端
- 前端將圖片存儲(chǔ)地址發(fā)送給后端
- 后端調(diào)用AI API處理圖片
- AI API返回處理后的圖片給后端,后端返回給前端
- 前端展示處理后的效果
前端部分
整個(gè)前后端的實(shí)現(xiàn)使用Next.js,前端主要包括兩部分:
- 圖片上傳
- AI處理后的圖片展示
所有主要功能均使用開源庫實(shí)現(xiàn)。其中,圖片上傳功能使用react-uploader[5]實(shí)現(xiàn):
處理后的圖片展示效果使用react-compare-slider[6]:
PS:這里用的是我祖父的老照片 ?ˉ?ˉ?
后端部分
后端核心邏輯包括兩部分:
- 用Redis做接口調(diào)用頻率限制。
Redis?使用@upstash-redis[7],這是一款基于HTTP?的Redis?客戶端。在線創(chuàng)建Redis?數(shù)據(jù)庫后,我們可以在服務(wù)端通過HTTP請(qǐng)求的方式調(diào)用它。
- 用replicate提供的swinir模型處理圖片。
replicate是一家機(jī)器學(xué)習(xí)的云服務(wù)商,我們可以根據(jù)業(yè)務(wù)需要選擇不同機(jī)器學(xué)習(xí)模型,比如:
- 處理圖片清晰度
- 破碎照片修復(fù)
- 文字轉(zhuǎn)圖片
- ...
在Next.js服務(wù)端,我們通過HTTP的形式調(diào)用模型API:
值得注意的是,模型計(jì)算需要時(shí)間,所以在服務(wù)端,我們每秒輪詢一次結(jié)果,如果模型返回處理后的圖片,我們就將圖片返回給前端:
總結(jié)
可以發(fā)現(xiàn),所有基礎(chǔ)服務(wù)均有現(xiàn)成產(chǎn)品可供使用,這極大加快了前端的開發(fā)效率,降低了開發(fā)成本。
作者運(yùn)行這個(gè)應(yīng)用的成本是多少呢?其中:
- 圖片存儲(chǔ)使用的是upload.io[8]提供的存儲(chǔ)服務(wù)。這里作者使用的是35刀/月的基礎(chǔ)付費(fèi)版本,每月有50GB的上傳空間。
- Redis云服務(wù)考慮到僅用來做接口調(diào)用頻率限制,使用免費(fèi)版就好。
- 整個(gè)應(yīng)用使用Vercel部署,Vercel Pro每月20刀。
- 20wUV的模型API調(diào)用費(fèi)用,大概是900刀。
對(duì)于想構(gòu)建自己的AI應(yīng)用的朋友,可以參考本文的實(shí)現(xiàn)與成本,行動(dòng)起來吧。
參考資料
[1]saviomartin7:https://twitter.com/saviomartin7
[2]IconifyAI:http://IconifyAI.com
[3]restorephotos:https://www.restorephotos.io/
[4]應(yīng)用開源代碼地址:https://github.com/Nutlope/restorePhotos
[5]react-uploader:https://www.npmjs.com/package/react-uploader
[6]react-compare-slider:https://www.npmjs.com/package/react-compare-slider
[7]@upstash-redis:https://docs.upstash.com/redis/overall/pricing
[8]upload.io:https://upload.io/pricing