193|6

4771

帖子

12

TA的资源

版主

楼主
 

【2024 DigiKey 创意大赛】基于树莓派的“相面算命”神器 [复制链接]

  本帖最后由 吾妻思萌 于 2024-10-31 22:21 编辑

一、作品简介

本设计是使用树莓派搭配摄像头(活动)和内存卡(活动)屏幕(活动)一同搭建的一个设备,用于在体验人脸识别的同时兼具“算命”的神奇功能。

清单:

  • 树莓派3B----可用德捷电子的Pi400代替
  • 内存卡32G----用于烧录镜像
  • 摄像头----图像识别必备
  • 显示屏----可选,可用电脑显示器和小的显示屏

核心思路:树莓派捕捉图像传到百度智能云API,并在API中设置好识别的面部区域和特征,然后返回模型识别结果,最后输出。

二、系统框图

大体基本和常见的智能家居项目相似,捕捉图像-传输数据-远程识别-返回结果等。

 

模型采用百度智能云,可以自定义配置人脸关键点的属性。

 

三、功能说明

采用opencv的人脸识别方式

import cv2

#选择此代码目录下的某个图片文件
img = cv2.imread('image2.jpg',1)

# 导入人脸级联分类器,'.xml'文件里包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_frontalface_default.xml')

# 检测设置,将图片放大1.1倍(一般设1.1倍,看效果而定)
# 重复检测的次数为5次(检测次数越多,速度越慢,检测也越严格,准确率可能有所提升)
faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)

# 对图片进行人脸检测,之后得到人脸的坐标(一个矩形框),再用蓝色框框出,线宽为2
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)  # (255,0,0)=(B,G,R)

# 显示图片
cv2.imshow('img',img)

# 检测是否有按键按下
cv2.waitKey(0)
# 关闭窗口,释放占用的资源
cv2.destroyAllWindows()

--------------------------------------------------------------------
--------------------------------------------------------------------
--------------------------------------------------------------------
import cv2

# 导入人脸级联分类器,'.xml'文件里包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_frontalface_default.xml')

# 导入人眼级联分类器,'.xml'文件里包含训练出来的人眼特征
eye_cascade = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_eye.xml')

# 调用摄像头摄像头
cap = cv2.VideoCapture(0)

while(True):
    # 获取摄像头拍摄到的画面
    # 会得到两个参数,一个为存放是否捕捉到图像(True/False),另一个为存放每帧的图像
    ret, frame = cap.read()
    # 每帧图像放大1.1倍,重复检测10次
    faces = face_engine.detectMultiScale(frame,1.1, 10)
    img = frame
    for (x,y,w,h) in faces:
        # 画出人脸框,蓝色,画笔宽度为2
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        # 框选出人脸区域,在人脸区域而不是全图中进行人眼检测,节省计算资源
        face_area = img[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(face_area,1.1,5)
        # 用人眼级联分类器在人脸区域进行人眼识别,返回的eyes为眼睛坐标列表
        for (ex,ey,ew,eh) in eyes:
            #画出人眼框,绿色,画笔宽度为1
            cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
        
    # 实时展示效果画面
    cv2.imshow('frame2',img)
    # 每5毫秒监听一次键盘动作
    if cv2.waitKey(5) & 0xFF == ord('a'):  #当按下“a”键时退出人脸检测
        break

# 最后,关闭所有窗口
cap.release()
cv2.destroyAllWindows()

识别结果

 

采用API识别并返回描述

import requests
import base64
from picamera import PiCamera
import time

# 初始化摄像头
camera = PiCamera()
camera.resolution = (1024, 768)

# 让相机预热
time.sleep(2)

# 捕获图片
image_path = 'image.jpg'
camera.capture(image_path)

# 图片转base64编码
with open(image_path, 'rb') as f:
    image_data = f.read()
    image_base64 = base64.b64encode(image_data).decode()

# 获取百度AI的Access Token
def get_access_token(api_key, secret_key):
    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}".format(api_key, secret_key)
    response = requests.get(url)
    return response.json().get('access_token')

# 使用百度AI API识别图片
def recognize_image(access_token, image_base64):
    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/general"
    params = {"image": image_base64}
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    return response.json()

# 设置API Key和Secret Key
api_key = 'xxx'
secret_key = 'xxx'

# 获取Access Token
access_token = get_access_token(api_key, secret_key)

# 调用API识别图片
result = recognize_image(access_token, image_base64)

# 打印识别结果
print(result)


结果展示

   

四、演示图

 第一版本的部分演示图

 

 

五、总结

简单尝试了树莓派的图像识别,由于代码和硬件配置原因,图像捕捉大帧率始终上不去,后来经过优化帧率提升到15帧左右,摄像头识别较为清楚,调用API可以自主搭配,通过本次搭建了一套识别和调用API的方法,寓教于乐。

六、演示视频

1
七、附件
【DigiKey“智造万物,快乐不停”创意大赛】+《基于树莓派的人脸算命》.7z (138 Bytes, 下载次数: 0)

 

DigiKey_contest_2024_word.doc (1.11 MB, 下载次数: 0)

 

最新回复

彦祖附体。。。。。。。。。厉害呀,。。。。。   详情 回复 发表于 2024-10-30 20:17
点赞 关注
 
 

回复
举报

6773

帖子

2

TA的资源

版主

沙发
 

面相结果是怎么出来的。

点评

识别到了我返回一句假话,本来是想用识别额头点位,眼睛点位等参数,然后写些逻辑判断,后来发现图像太糊了。。。。  详情 回复 发表于 2024-10-30 10:07
 
 
 

回复

4771

帖子

12

TA的资源

版主

板凳
 
面相结果是怎么出来的。

识别到了我返回一句假话,本来是想用识别额头点位,眼睛点位等参数,然后写些逻辑判断,后来发现图像太糊了。。。。

点评

看来还需要增加了一个模块,做图像增强功能,解决图像太糊状况  详情 回复 发表于 2024-10-30 13:53
像素不高呗,那确实不好识别。而且这个面向要AI识别,还得训练不少人脸吧  详情 回复 发表于 2024-10-30 11:56
 
 
 

回复

6773

帖子

2

TA的资源

版主

4
 
吾妻思萌 发表于 2024-10-30 10:07 识别到了我返回一句假话,本来是想用识别额头点位,眼睛点位等参数,然后写些逻辑判断,后来发现图像太糊 ...

像素不高呗,那确实不好识别。而且这个面向要AI识别,还得训练不少人脸吧

 
 
 

回复

1123

帖子

1

TA的资源

五彩晶圆(初级)

5
 
吾妻思萌 发表于 2024-10-30 10:07 识别到了我返回一句假话,本来是想用识别额头点位,眼睛点位等参数,然后写些逻辑判断,后来发现图像太糊 ...

看来还需要增加了一个模块,做图像增强功能,解决图像太糊状况

点评

彦祖附体。。。。。。。。。厉害呀,。。。。。  详情 回复 发表于 2024-10-30 20:17
试了下 增强的话变成了本来的我了 皮一下很开心.jpg [attachimg]856518[/attachimg]    详情 回复 发表于 2024-10-30 14:42
 
 
 

回复

4771

帖子

12

TA的资源

版主

6
 
hellokitty_bean 发表于 2024-10-30 13:53 看来还需要增加了一个模块,做图像增强功能,解决图像太糊状况

试了下 增强的话变成了本来的我了

皮一下很开心.jpg

 

 
 
 

回复

1123

帖子

1

TA的资源

五彩晶圆(初级)

7
 
hellokitty_bean 发表于 2024-10-30 13:53 看来还需要增加了一个模块,做图像增强功能,解决图像太糊状况

彦祖附体。。。。。。。。。厉害呀,。。。。。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表