基于python设计登录界面和主界面,按钮“打开照片”:打开照片,选择要处理的原图,按钮"检测”:进行人脸检测。并保存检测结果到txt文档。格式要求:文件名时间,人脸数量等。
时间: 2024-03-07 14:49:47 浏览: 25
人脸检测,准确简单,初学者可以用用,文件内带图片和源代码,代码通过确认大致脸部区域,然后画出一个框来标志出来脸部
好的,这个问题涉及到图形界面编程、人脸检测和文件操作等多个方面,需要用到Python的一些常用库,比如Tkinter、OpenCV和datetime等。下面是一个简单的实现,供参考:
```python
import tkinter as tk
from tkinter import filedialog
import cv2
import datetime
# 人脸检测器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 创建主窗口
root = tk.Tk()
root.title('人脸检测')
root.geometry('400x300')
# 创建显示图片的画布
canvas = tk.Canvas(root, width=300, height=200, bg='white')
canvas.pack(pady=10)
# 打开照片按钮的回调函数
def open_file():
# 弹出文件选择对话框
file_path = filedialog.askopenfilename(filetypes=[('Image Files', '*.jpg;*.jpeg;*.png')])
# 加载图片并显示在画布上
img = cv2.imread(file_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w, _ = img.shape
if h > 200 or w > 300:
img = cv2.resize(img, (300, 200))
canvas.image = img
canvas.create_image(0, 0, anchor='nw', image=tk.PhotoImage(data=cv2.imencode('.png', img)[1].tobytes()))
# 检测按钮的回调函数
def detect_faces():
# 读取当前画布上显示的图片
img = cv2.imdecode(cv2.imencode('.png', canvas.image)[1], cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 显示检测结果
result = f'{datetime.datetime.now().strftime("%Y%m%d-%H%M%S")},检测到{len(faces)}个人脸\n'
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
canvas.image = img
canvas.create_image(0, 0, anchor='nw', image=tk.PhotoImage(data=cv2.imencode('.png', img)[1].tobytes()))
# 保存检测结果到txt文档
with open('result.txt', 'a') as f:
f.write(result)
# 创建打开照片按钮
open_button = tk.Button(root, text='打开照片', command=open_file)
open_button.pack()
# 创建检测按钮
detect_button = tk.Button(root, text='检测', command=detect_faces)
detect_button.pack(pady=10)
root.mainloop()
```
这个程序界面比较简单,只有一个画布和两个按钮,点击打开照片按钮可以选择要处理的原图,点击检测按钮会进行人脸检测,并在画布上显示检测结果。同时,程序会将检测结果保存到当前目录下的result.txt文件中。需要注意的是,为了方便起见,这里的人脸检测器使用的是OpenCV自带的级联分类器,也可以使用其他更先进的算法进行人脸检测。
阅读全文