Windows 10+dlib19.17+face_recognition:使用人脸识别对家庭照片进行分类,2.43秒/张,速度提高40%以上(三)多进程+健壮性

在Windows 10环境下,通过Python多进程技术,使用dlib19.17+face_recognition进行人脸识别分类,将速度从4-6秒/张提升到2.43秒/张,提高了40%以上的效率。文章探讨了多进程并行加速的实现以及如何在应用层增强程序健壮性以应对内存限制和错误处理。
摘要由CSDN通过智能技术生成

在Windows 10环境中,我们使用dlib19.17+face_recognition对家庭照片进行分类,速度可以达到4-6秒/张,相关内容请参考:

Windows 10+dlib19.17+face_recognition:使用人脸识别对家庭照片进行分类,4-6秒/张(一)单线程

我们对这样的速度不太满意,打算提高它的运行速度(或者说:缩短整个任务的运行时间),在上一篇文章中我们发现Python的多线程不能提高并行效率,但可以用同时运行多个程序来缩短任务运行时间:

Windows 10+dlib19.17+face_recognition:使用人脸识别对家庭照片进行分类,4-6秒/张(二)并行加速

(1)多进程并行加速

在本文中,我们尝试用Python多进程来提高任务执行效率,代码如下:

# -*- coding: UTF-8 -*-

import dlib
import face_recognition
import numpy as np
from multiprocessing import Process
from multiprocessing import Pool
from datetime import datetime
import os
import shutil

#全局变量
number_process = 3

#人脸检测进程,将文件名转化为整数,按整除的余数分类待处理文件,若命中则复制文件到指定目录
def face_check_and_copy(num):

    # 从图片中加载已知的人脸并获得编码
    steve_image = face_recognition.load_image_file("f:/images/steve.jpg")
    steve_face_encoding = face_recognition.face_encodings(steve_image)[0]

    lucy_image = face_recognition.load_image_file("f:/images/lucy.jpg")
    lucy_face_encoding = face_recognition.face_encodings(lucy_image)[0]

    known_face_encodings = [
        steve_face_encoding,
        lucy_face_encoding,
    ]

    known_face_names = [
        "Steve",
        "Lucy",
    ]
    count_checked, count_copied, count_failed = 0, 0, 0

    # 遍历目录下的所有.jpg文件
    f = os.walk("f:\images")
    for path, d, filelist in f:
        for filename in filelist:
            if filename.endswith('jpg'):
                #将文件名的字符转化为ASCII码,累计得到一个整数
                only_name = os.path.splitext(filename)[0]
                int_filename = 0
                for every_char in only_name:
                    int_filename += ord(every_char)

                if int_filename % number_process == num:
                    image_path = os.path.join(path, filename)

                    # 加载图片
                    try:
                        unknown_image = face_recognition.load_image_file(image_path)
                    except:
                        print('%s.jpg load_image_file() failed.' %only_name)
                        count_failed += 1
                        continue

                    # 找到图中所有人脸的位置
                    try:
                        face_locations = face_recognition.face_locations(unknown_image)
                    except:
                        print('%s.jpg face_location() failed.' %only_name)
                        count_failed += 1
                        continue

                    # face
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值