当前位置: 首页 > news >正文

Python中大名鼎鼎的face_recognition使用

为什么80%的码农都做不了架构师?>>>   hot3.png

背景

face_recognition是号称世界上最简单的人脸识别工具和Python库。虽然,是国外开源的项目(良心的MIT开源协议),竟然有官方的中文文档支持,从未见过如此亲近天朝人民的开源项目了。

问题

手里有一张目标人物图,需要从一堆图片文件中,找出这个人是谁?这一堆的图片文件时,按人的姓名分类的。本来想直接使用face_recognition命令行解决,如下:

face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

然而,我的unknown_pictures文件下面是按人姓名做为文件夹划分的,face_recognition不支持递归文件夹来找文件,所以,就只能编写python程序来解决了。

Python3

from __future__ import division
from tqdm import tqdm

import os
import face_recognition
import imghdr
import sys


def get_all_files(path_dir):
    all_file = []
    for dir_path, dir_names, filenames in os.walk(path_dir):
        for dir_ in dir_names:
            all_file.append(os.path.join(dir_path, dir_))
        for name in filenames:
            all_file.append(os.path.join(dir_path, name))
    return all_file


def get_image_file(file_check):
    if os.path.isfile(file_check):
        if imghdr.what(file_check) == 'jpeg':
            unknown_picture = face_recognition.load_image_file(file_check)
            unknown_face_encoding_list = face_recognition.face_encodings(unknown_picture)
            if len(unknown_face_encoding_list) > 0:
                unknown_face_encoding = unknown_face_encoding_list[0]
                results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding, tolerance=0.2)
                if results[0]:
                    return file_check


if __name__ == '__main__':
    picture_of_me = face_recognition.load_image_file(
        "/Users/zhangyalin/Downloads/images/pictures_of_people_i_know/zyl.jpg")
    my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

    resultList = []

    path = "/Users/zhangyalin/Downloads/images/unknown_pictures/"
    files = get_all_files(path)
    num_tasks = len(files)
    for file in tqdm(files):
        fileTarget = get_image_file(file)
        if fileTarget is not None:
            resultList.append(file)
            break
    print("定位:")
    print(resultList)
    sys.exit()

这里就是递归unknown_pictures文件夹,然后不断将获得的图像中人脸与pictures_of_people_i_know/zyl.jpg图像中人脸进行对比,而zyl.jpg中人叫zyl。具体可以去看Face Recognition 人脸识别,说的很清楚的。

Note:tolerance=0.2,容错率需要设置为0.2,这样人脸识别更加准确。熟悉Python线程池的朋友,可以补充完善一下上面的代码。

参考

  • face_recognition
  • Face Recognition 人脸识别

转载于:https://my.oschina.net/fxtxz2/blog/2967570

相关文章:

  • Spark 触发Job提交
  • 【bzoj1013】[JSOI2008]球形空间产生器sphere
  • 与众不同 windows phone (44) - 8.0 位置和地图
  • 小程序开发之获取小程序二维码
  • Android Contextual Menus之二:contextual action mode
  • 基本类型和引用类型的值 动态的属性
  • JVM启动参数小结
  • java B2B2C源码电子商务平台 -----客户端负载均衡策略
  • 八年技术加持,性能提升10倍,阿里云HBase 2.0首发商用
  • 构建基于WCF Restful Service的服务
  • Python基础10_动态传参,名称空间和作用域,函数嵌套,关键字global和nonlocal
  • Log4j.properties配置详解
  • Linux环境搭建 | 使用WinSCP远程连接虚拟机
  • Spring boot JPA 用自定义主键策略 生成自定义主键ID
  • java 环境 eclipse 配置
  • (三)从jvm层面了解线程的启动和停止
  • [LeetCode] Wiggle Sort
  • 【面试系列】之二:关于js原型
  • Java 内存分配及垃圾回收机制初探
  • Lsb图片隐写
  • Solarized Scheme
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue 重置组件到初始状态
  • 分类模型——Logistics Regression
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 日剧·日综资源集合(建议收藏)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信开源mars源码分析1—上层samples分析
  • 正则学习笔记
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Linux·i2c驱动架构​
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (java)关于Thread的挂起和恢复
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Sublime Text3配置Lua运行环境
  • (转)树状数组
  • ... 是什么 ?... 有什么用处?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net中我喜欢的两种验证码
  • @ResponseBody
  • @Valid和@NotNull字段校验使用
  • [C++]模板与STL简介
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [echarts] y轴不显示0
  • [Gym-102091E] How Many Groups
  • [Machine Learning] Learning with Noisy Labels
  • [office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记
  • [poj] 3974 Palindrome
  • [Pytorch]:PyTorch中张量乘法大全
  • [Spring Boot 2]整合持久层技术