InsightFace-Paddle实现人脸比对 | 不用建立索引的那种 (一)

        需要任意两张同一个人的照片能够准确分辨出是不是同一个人,尽量简化识别过程,不需要知道是谁,也最好不用建立索引文件。

        现在这个版本的insughtface很奇怪,不知道为什么自己建立索引的时候需要每个人2张照片以上才能识别成功,不然就会报一个莫名其妙的错误。

        首先上项目地址:

https://github.com/littletomatodonkey/insight-face-paddlehttps://github.com/littletomatodonkey/insight-face-paddle        按照里面的要求装一些依赖就好了

        然后测试一下官方自带的数据:

# 建立索引
insightfacepaddle --build_index ./demo/friends/index.bin --img_dir ./demo/friends/gallery --label ./demo/friends/gallery/label.txt
# 检测人脸
insightfacepaddle --det --input ./demo/friends/query/friends1.jpg --output ./output
# 检测+识别
insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends2.jpg --output ./output

        如果这个能跑通的话至少说明环境没问题了。

        注意项目目录里面有一个 insightface_paddle.py 文件,绝大部分的逻辑都在这个里面,我们的修改也主要在这个里面进行。

        首先找到InsightFace类,

        在里面加一个函数:

  # 人脸比对
  def build_embedding(self,pic_1,pic_2):
        img_1 = cv2.imread(pic_1)
        img_2 = cv2.imread(pic_2)
        box_list_1, np_feature_1 = self.predict_np_img(img_1)
        box_list_2, np_feature_2 = self.predict_np_img(img_2)
        # print("Embedding1",np_feature_1[0],"Embedding2",np_feature_2[0])
        similarity = np.abs(cosine_similarity(np_feature_1[0], np_feature_2[0]).squeeze())
        print(similarity)

        然后这个代码很简单,难点就在看懂源代码是怎么一步一步建立索引、完成识别的过程,然后抽取出来我们需要的部分。

        思路也很简单,需要它的rec权重得到人脸embedding,然后看看他是怎么确定哪个人是谁的,把余弦函数抄过来就行可。

        调用部分:

import insightface_paddle as face
import logging
logging.basicConfig(level=logging.INFO)
parser = face.parser()
args = parser.parse_args()
args.det = True
args.rec = True
args.index = "/home/nvidia/insight-face-paddle-main/demo/img/index.bin"
# args.output = "/home/nvidia/insight-face-paddle-main/output"
# input_path = "/home/nvidia/me"
predictor = face.InsightFace(args)
# res = predictor.predict(input_path, print_info=False)
predictor.build_embedding("morning_10_45.jpg","morning_10_47.jpg")

        至于那个index.bin索引文件其实并没有用到,但还是需要把它放进去,不然需要改的东西就破坏了源代码的结构,可能会引发什么异常错误。随便拿一个,可以用上面跑官方示例的时候做出来那个index。

-------------------------------------------------------------------------------------
                                      PaddleFace                                     
+----------------+------------------------------------------------------------------+
|     Param      |                              Value                               |
+----------------+------------------------------------------------------------------+
|   det_model    |                            BlazeFace                             |
|   rec_model    |                            MobileFace                            |
|    use_gpu     |                               True                               |
| enable_mkldnn  |                              False                               |
|  cpu_threads   |                                1                                 |
|     input      |                               None                               |
|     output     |                            ./output/                             |
|      det       |                               True                               |
|   det_thresh   |                               0.8                                |
|      rec       |                               True                               |
|     index      | /home/nvidia/insight-face-paddle-main/demo/predixr_img/index.bin |
|    cdd_num     |                                5                                 |
|   rec_thresh   |                               0.45                               |
| max_batch_size |                                1                                 |
|  build_index   |                               None                               |
|    img_dir     |                               None                               |
|     label      |                               None                               |
+----------------+------------------------------------------------------------------+
                               Powered by PaddlePaddle!                              
-------------------------------------------------------------------------------------
0.7750918

        最后就可以打印出相似度了。

        顺便说一句,原始的阈值是0.45,意味着0.45以下的绝对不是同一个人,0.45以上要看具体使用场景自己调节。

        还有就是默认的rec权重是MobileFace,可以自己换成精度更加的ArcFace

        下载地址:

https://paddle-model-ecology.bj.bcebos.com/model/insight-face/arcface_iresnet50_v1.0_infer.tarhttps://paddle-model-ecology.bj.bcebos.com/model/insight-face/arcface_iresnet50_v1.0_infer.tar        然后把它放在~/.insightface/ppmodels/ArcFace/下面 要新建一个文件夹叫ArcFace

        记得--rec_model那块默认值也改为ArcFace"

-------------------------------------------------------------------------------------
                                      PaddleFace                                     
+----------------+------------------------------------------------------------------+
|     Param      |                              Value                               |
+----------------+------------------------------------------------------------------+
|   det_model    |                            BlazeFace                             |
|   rec_model    |                             ArcFace                              |
|    use_gpu     |                               True                               |
| enable_mkldnn  |                              False                               |
|  cpu_threads   |                                1                                 |
|     input      |                               None                               |
|     output     |                            ./output/                             |
|      det       |                               True                               |
|   det_thresh   |                               0.8                                |
|      rec       |                               True                               |
|     index      | /home/nvidia/insight-face-paddle-main/demo/predixr_img/index.bin |
|    cdd_num     |                                5                                 |
|   rec_thresh   |                               0.45                               |
| max_batch_size |                                1                                 |
|  build_index   |                               None                               |
|    img_dir     |                               None                               |
|     label      |                               None                               |
+----------------+------------------------------------------------------------------+
                               Powered by PaddlePaddle!                              
-------------------------------------------------------------------------------------
0.86437297

        可见效果好了一点

你可能感兴趣的:(深度学习CV方向,人工智能,paddle,人脸识别,人脸比对)