【无标题】

人脸识别(爬虫技术)

import pygame
from sys import exit
import os
def canvasInit():

pygame初始化

pygame.init()
global canvas
canvas = pygame.display.set_mode((1050, 660), 0, 32)
pygame.display.set_caption(‘寻找嫌疑人’)

主界面(一级界面)

while True:
canvasInit()
path = ‘images/bg.jpg’

一级界面背景

bg = pygame.image.load(path)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
判断鼠标是否按下
if event.type == pygame.MOUSEBUTTONDOWN:

判断是否是鼠标左键被按下

if event.button == 1:
print(“鼠标左键被点击”)

获取鼠标坐标位置

pos = pygame.mouse.get_pos()
mouseX = pos[0]
mouseY = pos[1]

判断设定好的点击区域

if 860

import pygame
from sys import exit
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import base64
import requests

def canvasInit():

pygame初始化

pygame.init()
global canvas
canvas = pygame.display.set_mode((1050, 660), 0, 32)
pygame.display.set_caption(‘寻找嫌疑人’)

图片缩放尺寸方法
def resize( w, h, new_w, new_h, pil_image):
f1 = 1.0 * new_w / w
f2 = 1.0 * new_h / h
factor = min([f1, f2])
width = int(w * factor)
height = int(h * factor)
return pil_image.resize((width, height), Image.ANTIALIAS)

fileList = [] # 图片路径列表
totalList = [] # 图片分数列表

选择图片函数

def selectPhoto():
file = filedialog.askopenfilename(initialdir=”C:/”, title=’Choose an image.’) # 图片路径
if len(file) > 0: #判断是否选择图片”0″为取消
fileList.append(file) # 将选中图片添加到列表中
length = len(fileList)
当图片选择超过6张时
if length > 6:

使用消息对话框警告提示

msg = messagebox.showwarning(title=’请注意’, message=’最多选择6张照片’)
if length == 1:

调用显示嫌疑人函数

showPhoto(fileList[0],198,160)
elif length == 2:
showPhoto(fileList[1],448,160)
elif length == 3:
showPhoto(fileList[2],694,160)
elif length == 4:
showPhoto(fileList[3],198,390)
elif length == 5:
showPhoto(fileList[4],448,390)
elif length == 6:
showPhoto(fileList[5],694,390)

显示嫌疑犯图片

route 原图片

xPos,yPos 显示的位置坐标

def showPhoto(route,xPos,yPos):

获取图片

image = Image.open(route)

获取原图片尺寸

w, h = image.size

重置尺寸

resized = resize(w, h, 150, 150, image)

展示图片

photo = ImageTk.PhotoImage(resized)
photoLabel = tk.Label(window, image=photo, width=145, height=145)
photoLabel.place(x=xPos, y=yPos)
window.mainloop()

调用百度人脸识别接口,获取token值
def getToken():
host = ‘https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials’ \
‘&client_id=T1KUrVlob1vUuLpQ0sOYrfoB&client_secret=obx6I60FomQIHqRwlx3mp1GXTGKOkHPu’
response = requests.get(host)
content = response.json()
content = content[‘access_token’]
return content

获取人脸识别数据

def getData():

1.网络请求地址

requestUrl = ‘https://aip.baidubce.com/rest/2.0/face/v3/detect’

2.获取token

token = getToken()
params = {‘access_token’: token}

3.加密图片

for imgUrl in fileList:
f = open(imgUrl, ‘rb’)
temp = f.read()
image = base64.b64encode(temp)
请求的数据
data = {
‘image’:image,
‘image_type’:’BASE64′,
‘face_field’:’age,gender,face_shape’
}

4.post网络请求

response = requests.post(requestUrl, params=params, data=data)
print(‘响应结果:’, response)
content = response.json()
print(‘解析结果:’, content)
age = content[‘result’][‘face_list’][0][‘age’] # 人脸得分
print(‘年龄:’, age)
gender = content[‘result’][‘face_list’][0][‘gender’][‘type’]
print(‘性别:’, gender)
shape = content[‘result’][‘face_list’][0][‘face_shape’][‘type’]
print(‘脸型:’, shape)

if gender == ‘male’:
gender=’男’
else:
gender=’女’
print(‘转化后性别:’,gender)

if shape == ‘square’:
shape = ‘国字脸’
elif shape == ‘triangle’:
shape = ‘瓜子脸’
elif shape == ‘oval’:
shape = ‘鹅蛋脸’
elif shape == ‘heart’:
shape = ‘心形脸’
else:
shape = ‘圆形脸’
print(‘转化后脸型:’,shape)

存储数据

tempDict = {‘image’: imgUrl, ‘age’: age,’gender’:gender,’shape’:shape} # 以key-value的形式存储

追加在列表里,为之后显示嫌疑人界面使用

totalList.append(tempDict)
print(totalList)
window.destroy() # 退出
showResult()

显示结果界面(三级界面)

def showResult():
canvasInit()
path = “images/suspectInfo.png”
background = pygame.image.load(path)
绘制背景
canvas.blit(background, (0, 0))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
调用绘制结果函数

请在下方书写你的代码

if len(totalList)==1:
drawResult(0,(162,112),(375,155),(370,190),(397,225))
elif len(totalList)==2:
drawResult(0,(162,112),(375,155),(370,190),(397,225))
drawResult(1,(162,267),(375,310),(370,345),(397,379))
elif len(totalList)==3:
drawResult(0,(162,112),(375,155),(370,190),(397,225))
drawResult(1,(162,267),(375,310),(370,345),(397,379))
drawResult(2,(162,422),(375,465),(370,500),(397,535))
pygame.display.update()

绘制结果数据(图片索引,图片位置坐标,年龄文本坐标,性别文本坐标,脸型文本坐标)

def drawResult(index,imagePos,agePos,genderPos,shapePos):
绘制图片
image = totalList[index][‘image’]
photo = pygame.image.load(image)
file = pygame.transform.scale(photo, (115, 115))
canvas.blit(file, imagePos)
绘制文字
age = str(totalList[index][‘age’])
fillText(age, agePos)
gender = totalList[index][‘gender’]
fillText(gender,genderPos)
shape = totalList[index][‘shape’]
fillText(shape,shapePos)

绘制文本函数
def fillText(text, center):
设置字体样式和大小
my_font = pygame.font.Font(“font/simhei.ttf”, 22)
渲染文字
text = my_font.render(text, True, (109, 49, 9))
textRectObj = text.get_rect() # 获得要显示的对象的rect
textRectObj.center = center # 设置显示对象的坐标
画图片的方法
canvas.blit(text, textRectObj)

二级界面
window = tk.Tk()
设置窗口不可变
window.resizable(0, 0)
window.title(‘寻找嫌疑人’)

bg = ImageTk.PhotoImage(file=”images/picShow.png”)
bgLabel = tk.Label(window, width=1050, height=660, image=bg) #label组件用于显示文本或图像
bgLabel.pack() #将组件放置在窗口中

图片选择键
choose = ImageTk.PhotoImage(file=”images/choose.png”)
chooseBtn = tk.Button(window, command=selectPhoto,bd=0, image=choose, width=88, height=84)
chooseBtn.place(x=917, y=51) # 按钮位置及对齐方式

完成选择键
ok = ImageTk.PhotoImage(file=”images/ok.png”)
okBtn = tk.Button(window, command=getData,bd=0, image=ok, width=96, height=42)
okBtn.place(x=34, y=556)
window.mainloop()

Original: https://blog.csdn.net/base64spidel/article/details/128197429
Author: base64spidel
Title: 【无标题】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782008/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球