首页 > 编程语言 >python利用opencv实现本地图片的识别与结果存储

python利用opencv实现本地图片的识别与结果存储

时间:2023-03-04 13:31:39浏览次数:47  
标签:存储 img python face opencv encodings known path cv

准备阶段

  1. 准备三个目录 一个放 识别好的人脸标本,一个放需要识别的照片,一个放识别后的结果

比如:

python利用opencv实现本地图片的识别与结果存储_opencv

  1. 需要安装opencv包、dlib包,以及下载人脸数据,参照:​​python利用opencv读取摄像头数据​
  2. 另外还需要安装人脸比对的包

实现步骤

  1. 读取识别好的人脸标本,并解析
  2. 读取需要检测的人脸图片,解析并与标本比对
  3. 比对成功则绘制绿框,标出姓名

代码实现

# This is a sample Python script.
import os.path

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
import cv2 as cv
import dlib
import numpy as np
import face_recognition

# 加载人脸检测器和关键点检测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# 已知人脸存储路径
known_face_path = 'faces/gugu/'
# 需要检测的人脸存储路径
unknown_face_path = 'faces/gys/'
# 记录结果
record_face_path = 'faces/record/'


def recognize_image():
# 读取已知人脸,并解析
known_face_encodings = []
known_face_names = []
print('开始加载已知人脸数据...')
for root, dirs, files in os.walk(known_face_path):
total_process = len(files)
process = 0
for f, file in enumerate(files):
img = face_recognition.load_image_file(known_face_path + file)
face_encodings = face_recognition.face_encodings(img, model='cnn')
if len(face_encodings) > 0:
known_face_encodings.append(face_encodings[0])
known_face_names.append(file[0:file.index('.')])
process += 1
print('----> 已加载' + str(process / total_process * 100 // 1) + '%')
print('数据加载完成!')

# 识别人脸数据
if not os.path.exists(record_face_path):
os.makedirs(record_face_path)

for root, dirs, files in os.walk(unknown_face_path):
total_process = len(files)
process = 0
for f, file in enumerate(files):
cv_img = cv.imdecode(np.fromfile(unknown_face_path + file, dtype=np.uint8), cv.IMREAD_COLOR)

# img = face_recognition.load_image_file(unknown_face_path + file)
img = cv.cvtColor(cv_img, cv.COLOR_BGR2RGB)
locations = face_recognition.face_locations(img)
face_encodings = face_recognition.face_encodings(img, locations, model='cnn')
for (top, right, bottom, left), face_encoding in zip(locations, face_encodings):
matches = face_recognition.compare_faces(known_face_encodings, face_encoding, .5)
if True in matches:
index = matches.index(True)
name = known_face_names[index]
# 绘制矩形框
cv.rectangle(cv_img, (left, top, right - left, bottom - top), (0, 255, 0), 2)
cv.putText(cv_img, name, (left + 10, bottom - 10), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv.imencode('.jpg', cv_img, [cv.IMWRITE_JPEG_QUALITY, 100])[1].tofile(record_face_path + '副本_' + file)

process += 1
print('----> 已识别' + str(process / total_process * 100 // 1) + '%')


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('PyCharm')
recognize_image()

已知问题:如果姓名是中文,绘制到图片上,会以问号的形式打印


注意:matches = face_recognition.compare_faces(known_face_encodings, face_encoding, .5) 中需要调整比较距离tolerance的值,以达到需要的效果


输出结果

python利用opencv实现本地图片的识别与结果存储_opencv_02




标签:存储,img,python,face,opencv,encodings,known,path,cv
From: https://blog.51cto.com/gugu/6100028

相关文章

  • python 读写stata
    importpandasaspdfrompandas.io.stataimportStataReader,StataWriterfile="cfps2020famconf_202301.dta"stata_data=StataReader(file,convert_categoricals......
  • 关于目录问题的总结-Python
    关于目录问题的总结os.makedirsos.makedirs(name,mode=0o777,exist_ok=False)作用用来创建多层目录(单层请用os.mkdir)参数说明name:你想创建的目录名mode:要......
  • MySQL存储引擎
    1.InnoDB逻辑存储结构:TableSpece:表空间Segment:段Extent:区(1M)Page:页(16K)Row:行2.存储引擎特点:特点InnoDBMYISAMMemory存储限制64TB有有事务安......
  • python 递归创建文件夹os.makedirs(转载)
    os.makedirs(name,mode=0o777,exist_ok=False)作用用来创建多层目录(单层请用os.mkdir)参数说明 name:你想创建的目录名mode:要为目录设置的权限数字模式,默认的模式为......
  • python中argsort()
    由于想使用python用训练好的caffemodel来对很多图片进行批处理分类,学习过程中,碰到了argsort函数,因此去查了相关文献,也自己在python环境下进行了测试,大概了解了其相关的用处,......
  • 使用Python调用新版ChatGPT接口
    OpenAI推出了基于“gpt-3.5-turbo”模型的全新API,其基础是支持ChatGPT的GPT3.5模型,取代了此前的“text-davinci-003.”。全文介绍如何使用python调用openAI的新版API。......
  • 摘录一下Python列表和元组的学习笔记
    1基础概念列表一个值,列表值指的是列表本身,而不是列表中的内容列表用[]表示列表中的内容称为表项len()函数可以显示列表中表项的个数,比如下面这个例子spam=['cat'......
  • [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
    雅达利大崩溃回忆上次内容个人计算机浪潮已经来临苹果公司迅速发展微软公司脱离mits准备做纯软件公司IBM用大型机思路制作的5100惨败Commodore64既做......
  • 只用13行Python代码,实现给抖音APP自动点赞,非常简单!
    哈喽兄弟们,今天我们来试试,如何只用13行代码,给抖音APP视频自动点赞!前因后果事情是这样的,昨晚表弟晚上一两点了,房间灯还亮着,原来是还在用手机刷某音视频,我抢过手机一......
  • 图像处理之OpenCV用户界面
    1概述在OpenCV中,HighGUI模块为高层GUI图形用户界面模块,包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容。本章旨在为大家展开讲解OpenCV中......