人脸门禁
人脸门禁介绍
门禁系统
单机门禁
门禁功能
- 图像采集,图像显示
- 人脸注册:当前摄像头单张注册,目录图像文件批量注册
- 人脸删除:批量删除姓名列表
- 人脸识别:多线程,多进程调用识别算法
多线程,多进程介绍
介绍
-
进程(Process)是系统进行资源分配和调度的基本单位.每个进程都有都有独立的代码和数据空间(程序上下文),因此它们之间的资源分配和调度也相互独立。同时运行多个进程,能够最大话利用多核CPU的资源,提升运行速度。
- 线程(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 来实现
功能实现步骤:
- 人脸检测
- 当前摄像头人脸注册
- 人脸识别
- 多进程,多线程人脸识别
- 目录图片批量人脸注册
- 人脸删除
要求:
- 识别出的人脸使用独立的小窗口显示
- 注册时能够方便判断是否注册成功
- 单张注册,目录注册,删除,识别等功能分别给出易于调用函数接口,便于和人机界面之间的交互。
参考
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