图片转word/excel | 极简AI工具箱 网站现在也算是正常上线了。回顾整个过程我都做了些什么。
开发过程简介
看了下代码提交记录,第一次提交代码是23年的2月10号,这都已经快一年半了。不过仔细看了下记录,中间断了好长时间。算下来,整个开发过程大概持续了9个月。因为我是下班和周末有空时才搞。所以时间并不多,我估摸着平均一天工作两小时吧。所以按8小时工作制和21.75的工作月来计算,这项目实际花费代价是:9302/8/21.75=3.1 个月/人。包含的模块是后端(go),前端(nuxt3)、H5(nuxt3)。
我估摸着肯定很多人觉得我做的太慢了,这么一个小破站搞了3个月。我也觉得慢。这也和我的个人习惯有很大关系。
我写代码是会仔细思考有多少种情况需要考虑到,有没有遗漏,未来可能会拓展什么功能。代码如何解耦,如何复用等等,所以我的代码,不敢说品质多高,但是我的追求却是很高的!我也很不怕折腾,我项目框架,都大改了好多次。经过这次项目,我才将go和vue的自用框架搭建起来。
PS:这里的时间,包含了项目的构思,设计,部署,申请各种流程资源。
项目里有开发都有哪些工作
懂图像处理的一看,应该能猜到里面的具体实现,很多不可能是我自己完成的,毕竟涉及不少很专业的AI技术。是的。AI相关的技术我是调用的第三方接口来实现。自己做是不现实的。
第一项工作,自然是前端上传文件到后端保存
这个没啥难度,纯属是我没做过,不太会。也是这个项目的一个基础,所以这里提一笔。功能实现预计:1人天
第二步,自然是调通第三方接口
这里其实挺多麻烦事的,因为要怎么设计接口调用,其实也是需要思考的。这里预计:2人天
第三步,前后端打通第一个功能
其实我设计的第一个功能是证件照换底色,原理是人像分割后替换背景色。这里涉及的技术还真不少,花了不少时间。
第三方接口返回的数据有:人像前景抠图(其实就是将背景透明度设置为0),灰度图,二值图。
有了图像源,你会用什么来做图像处理呢?是的,你第一时间肯定也是想到opencv吧!我也是
所以这里的第一步工作:适配go语言版本的OpenCV
好在也有现成的方案:gocv库。但是opencv还是要自己编译的,光是琢磨这个库怎么用以及编译opencv,我预计花了:2人天。我还写了一篇文章:gocv Windows10下编译和安装(opencv4.8)
有了opencv,怎么实现换底色这个功能
这里就不说细节了,我预计花了:3人天琢磨这个算法(你网上一搜,都是交易循环遍历每一个像素点的,我肯定不会采用这种方式!)
接下来调通前后端,这里预计:1人天
这么算下来,打通第一个功能花费6人天。不知算不算慢。
第四步,我做了个加水印防盗功能
加水印这个这个常见的功能,opencv网上按理说有很多方案才对,但是实际上没有拿来即用的。就这个功能,做出第一版我就花了:2人天琢磨算法。而实际上很久之后我觉得第一版效果不好,我有花了一点时间改进第二版。所以总计可能还得加:1人天
接下来我花了很多时间改进代码
代码架构全面优化
bug和细节优化
前端交互体验改进
最重要的用户标识方案的实现(不登录,无任何用户信息,如何标识用户)
这些工作其实很花时间,估计在公司是不太可能给你时间去做的。都得加班搞,这里预计花了:5人天
接下来新增图片下载功能
这个倒不难,主要是考虑方案如何设计花时间,预计是花了: 1人天
接下来做了图像质量压缩功能
这里包含png无损压缩和图片有损压缩。想不到这个不值钱的功能也很难吧?我也没想到。但实际真的很难。png无损压缩没啥好说的,opencv直接可以实现。这里难的是png的有损压缩方案。这个非常专业,我不会,但是为了寻找解决方案,我花了很长时间,估计得有:3人天。且方案拙劣,就不方便细说了。
接下来新增图片格式转换
这个没啥难度,就是流程和界面,1人天吧
然后是几个功能,他们的实现几乎一致
文档图片去底纹/水印、去除文档手写字、图片无损方法两倍、图片清晰度增强、黑白图片上色、去除摩尔纹等(还有几个没用就下架了)几个功能具有相同的逻辑,相似的界面,所以做起来都比较快,所以这里加起来只需要:2人天。
汇总一下上面的工作量
上面累计21人天。但是其实这并没结束。还有很多其余工作。接下来继续。
看很多人说公网服务器很容易被攻击,于是我设计了IP管理模块
由于我的网站无需登录,ip是我标识用户的最有效方法。因为我的服务器带宽非常有限。虽然说ddos攻击在软件设计层面没有有效的技术手段可以防御,但是我也还是希望系统不要那么脆弱。不被高手攻击我无话可说,但是总不能被一些菜鸟控制几个肉鸡把我打倒。
具体的细节这里不展开,我写了专门的文章介绍。这个是我纯自己想出来的方案。网上没有资料可查:go语言实现高性能自定义ip管理模块(ip黑名单)。这个模块花了我起码:7人天
为了SEO,重新将前端框架从传统的单页面组件(SPA)切换为Nuxt.js(SSG)
之前我还没这个概念,没聊结果浏览器搜索原理。后面知道后前端必须得切换框架。经过一天的选型,最后确定使用nuxt.js。了解框架,切换框架,这里又是:3人天。
为了节约服务器资源,自己实现静态资源代理proxy
我前端页面使用纯静态的构建方式。nuxt自带代理功能。所以这一步如果不折腾,直接在服务器装nuxt就可以跑起来。然后在搞个nginx做反向代理。反向代理、前端、后端,数据库,redis 五块组成的业务系统。这是最常见的系统上线部署方式吧。
但是呢,我一想,又得装个nodejs,nginx,那不得很耗费系统资源吗?我不甘心。于是查资料自己实现了静态资源代理,也专门写了文章:使用gin 代理 web网页。这样,前端、后端都在一个微服务里运行。只占用一个端口,也不需要反向代理。省事!
是的,我只有一个微服务。
这里,起码琢磨了:5人天
既然只有一个微服务,那要redis搞什么鬼
是的,然后微服务内用map替代redis,不但节省资源,还提升性能!1人天
带宽太拉跨了,得琢磨下如何压缩静态资源
包括nuxt构建时如何压缩,如何代理压缩的文件,如何对接浏览器缓存,其实,也是proxy的事。琢磨这个又是:2人天。
再接着,就是还有一堆定时任务
什么常量更新,token更新,数据迁移和备份,订单轮询。使用量统计。杂七杂八的功能。又是:5人天
最后还有一个大头:支付功能
这个头疼,各种资质申请,流程审批。不算等待的时间,对接微信和支付宝,加上申请填资料啥的,又是:7人天
前端改造成H5
H5的改造还算没啥新东西,就是重新排版设计。这里花了:两人天
剩余的就是持续不断的代码优化,bug修复,功能测试
这里算他个:7人天吧
汇总一下
上面的算下来:累计58人天。换算成自然月应是:60/21.75=2.8个月。和上面说的3.1个月基本接近。毕竟不只有开发的工作。
总结自己
这个过程中,我存在哪些不足:
前端基础不好,特别是css,界面设计真是太痛苦了
老是折腾一下项目初期不需要考虑的东西,没有以产品为核心,在公司里早被骂了
个人开发就容易陷到技术的思维里面去,这个我也看过不少文章这么说,但是思维这东西,不是轻易能改变的,而我又是更严重的那个。
后续计划
说实话,没啥动力计划了,因为没什么用呀。两个多月了百度也只收录了首页。效果不好我还折腾个啥呢,上班已经够累了!
虽然这么说,后续还是打算上小程序的。
这么个网站,肯定得定制开发,找人干,得多少钱呢?