人脸门禁介绍

门禁系统

单机门禁

门禁功能

  1. 图像采集,图像显示
  2. 人脸注册:当前摄像头单张注册,目录图像文件批量注册
  3. 人脸删除:批量删除姓名列表
  4. 人脸识别:多线程,多进程调用识别算法

多线程,多进程介绍

介绍

  1. 进程(Process)是系统进行资源分配和调度的基本单位.每个进程都有都有独立的代码和数据空间(程序上下文),因此它们之间的资源分配和调度也相互独立。同时运行多个进程,能够最大话利用多核CPU的资源,提升运行速度。

  2. 线程(Thread)是操作系统能够进行运算调度的最小单位。但对于python来说,存在GIL 全局解释器锁,它的存在使得一个CPU同一个时刻只能执行一个线程,python的多线程就更像是伪多线程,一个线程运行时,其他线程阻塞,多线程代码不是同时执行,而是交替执行。

最重要的区别是,多线程的内存是共享的,多进程的内存是独立的。

多线程

一般情况下 UI 线程作为主线程用于流畅的人机交互,其他需要消耗时间的线程作为后台线程,处理结束后通知主线程即可,或者主线程轮询也行。

import threading

thread = threading.Thread(target = func)
thread.start()
thread.join()

在主线程中一般可以通过改变某个变量的值,在其他线程中检测这个变量值,如果是约定的线程退出的值,那就退出线程,在主线程中使用 join 来等待线程退出完成。

多进程

在 python 中多进程主要是为了多核并行计算,防止主进程有卡顿的现象。

多进程因为内存非共享,所以进程间通讯主要使用 Queue 和 Pipe。在 python 中少量的状态信息用于多进程共享,可以使用 Manager。

from multiprocessing import Process, Queue, Manager

manager = Manager()
stop = manager.Value('i’, 0)

queue = Queue()
queue.put(“test”)
dump = queue.get()

process = Process(target = func, args = (queue, stop))
process.start()
process.join()

多进程退出,同样是主进程对共享变量设置为退出信号,其他进程检测到退出信号后自动退出,主进程 join 等待退出完成即可。

门禁功能实践

人脸识别使用 face_recognition 来实现

功能实现步骤:

  • 人脸检测
  • 当前摄像头人脸注册
  • 人脸识别
  • 多进程,多线程人脸识别
  • 目录图片批量人脸注册
  • 人脸删除

要求:

  1. 识别出的人脸使用独立的小窗口显示
  2. 注册时能够方便判断是否注册成功
  3. 单张注册,目录注册,删除,识别等功能分别给出易于调用函数接口,便于和人机界面之间的交互。

参考

https://www.sikale.com/news_Info-3-99.html
https://zhuanlan.zhihu.com/p/67797683
https://www.jiminate.cn/news/detail/797.html
http://www.telpouc.com.cn/Article-ndetail-id-1357.html
https://docs.python.org/zh-cn/3/library/multiprocessing.html#:~:text=multiprocessing%20is%20a%20package%20that%20supports%20spawning%20processes,Interpreter%20Lock%20by%20using%20subprocesses%20instead%20of%20threads.
https://docs.python.org/zh-cn/3/library/multiprocessing.html#multiprocessing.Value
https://docs.python.org/zh-cn/3/library/array.html#module-array
https://docs.python.org/zh-cn/3/library/multiprocessing.html#multiprocessing.Queue

标签: deep_learning

添加新评论