最近我们有个大胆的想法,我们尝试使用chatGPT搭建另一个人工智能的方法是否可行,于是我们使用chatGPT做了以下实验,在一个chatGPT的指导下成功搭建一个人脸识别算法模型出来,这在以前的谷歌和百度等搜索引擎里面是想都不敢想的事情,但是他却完成了
以下是整个搭建流程和步骤
1.首先我们询问chatGPT有什么开源免费并且已部署的人脸识别比对项目,chatGPT给我的回复是这样的
2.通过询问我们可知以上几个可能可以使用的人脸识别训练模型,那我们直接使用他推荐的第一个训练模型OpenFace,因为我们只想要一个识别比对并且易部署的效果,所以我们继续询问他使用docker应该如何部署OpenFace
image.png
3.我们按照chatGPT的指导下载好对应的镜像后,并且进入镜像启动 start-servers.sh后服务正常启动起来了,但是经过我们使用postman测试,发现http和websocket都是不通的,并且容器内的启动日志是报错的,所以需要我们进一步询问AI是什么原因造成的?
image.png
很显然,以上的回答截图没有给到我满意的答案,基于我以前曾经在人工智能相关公司的工作经验,他镜像内应该是缺少了最重要的训练模型,所以我就询问他OpenFace的模型文件没有和docker镜像一起吗?结果不出我所料还真的缺失了(按照他以下的步骤下载好对应的模型文件即可)
image.png
image.png
4.模型文件下载好了以后基于我们以前的开发经验,这种情况下docker是需要挂载训练模型运行的
image.png
5.挂载好他的存储目录后重新启动OpenFace的docker容器后程序成功启动后,我们就需要询问它人脸录入对应的接口文档是哪些?他的回复是这样的
image.png
6.依据他的回复,我们请求了一下他的接口,得到以下数值(这个数值就是人脸的特征值)
7.拿到特征值后,依据我以前在人工智能公司的工作经验,人脸比对的原理就是提取特征值然后对比整个库里的特征值获取偏移量最低的人脸(当偏移量低于额定的参数即可判断此人与库里的某个人相似度最高从而确定是这个人)通常最简单的做法是使用欧式距离(也就是我们高中时候学的两个向量的模长)
8.然后我们拿其他人脸继续测试,得到另一组特征值
image.png
9.我们使用欧式距离的计算公式计算两个人脸的距离
public double euclideanDistance(List<Double> A, List<Double> B) {
double sum = 0.0;
for (int i = 0; i < A.size(); i++) {
double diff = A.get(i) - B.get(i);
sum += diff * diff;
}
return Math.sqrt(sum);
}
10.经过测试两张不同的人脸大部分情况下欧式距离会大于1
11.接着我们拿两张一样的人脸但拍摄角度不一样进行测试,发现大部分情况下欧式距离是小于0.5的
image.png
12.根据我们反复测试,在该训练模型下,判断是否为同一个人只需要判断欧式距离是否小0.5即可(假设有多个小于0.5的人脸则顺序排序拿欧式距离最小的人脸即可)
13.在实际工程应用中,我们在比对时候,提前将库里人脸的特征值提前加载到内存中然后提取完当前采集的人脸特征值一个一个接着欧式距离比对即可完成人脸识别1:N的业务
14.经过测试我们可以使用chatGPT搭建另一个人工智能的训练模型的方案是可行的,但是需要程序员有大量的相关业务知识才能成功
网友评论