前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大象机械臂mechArm pi人脸识别项目

大象机械臂mechArm pi人脸识别项目

原创
作者头像
大象机器人
发布2023-01-10 14:39:06
6180
发布2023-01-10 14:39:06
举报
文章被收录于专栏:移动机器人

看过钢铁侠的人都知道里面的贾维斯在帮助托尼斯塔克制作装备的时候,有许多械臂提供帮助制作装备,让装备的制作提高了效率。贾维斯是一个超级强大的人工智能系统,有了它的帮助如鱼的水。我脑海中浮现出来一个想法,让机械臂末端实现人脸识别和跟踪的功能,也有看到有人实现了机械臂末端物体的动态跟踪,看着这个项目好像很容易实现,让我来试一试吧!

项目设备

本次项目需要的设备在下表格里。

mechArm 270-Pi

这是一款大象机器人生产的小六轴机械臂,以树莓派4B为微处理器,ESP32为辅助控制,结构是中心对称结构(仿工业结构)。mechArm 270-Pi本体重量1kg, 负载250g,工作半径270mm,设计紧凑便携,小巧但功能强大,操作简单,能与人协同、安全工作。

mechArm 的资料丰富,提供了许多python的api接口可以方便提供给我来进行使用。它的末端的接口规格都可以从官网获取到资料,可以使用3d打印技术设计一款合适的设备。

计算机视觉

USB无畸变镜头

这里是摄像头的参数,主要是用于人脸识别。

项目流程介绍

整体项目的流程图

这个项目的流程如下图所示,最主要的是解决OpenCV的人脸识别功能和机械臂手眼标定是选择eye in hand 还是eye to hand。

接下来我将简单介绍一下这两个功能有什么作用在项目当中。

OpenCV-人脸识别

OpenCV的全名是Open Source Computer Vision Library,是一个跨平台的电脑视觉库。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

人脸识别即程序对输入的图像进行判别是否有人脸,并识别出有人脸的图像所对应的人。我们常说的人脸识别一般包含了人脸检测人脸识别两部分。

人脸检测中,其主要任务是构造能够区分包含人脸实例和不包含人脸实例的分类器。

opencv中提供了三种训练好的级联分类器。级联分类器顾名思义即通过不同的特征进行一步步筛选,最终得出所属的分类,它将一个复杂的分类问题拆解为一个个简单的分类问题,随着级联条件的判断,能够一步步筛出大量的负样本,极大的提升了后面分类的速度。

opencv人脸识别库是开源的,还能够支持python的接口,可以直接进行调用。

这里是分类器的下载地址:http://face-rec.org/databases/

手眼标定

手眼标定实际上就是为了让机械臂知道相机拍出来的物体相对于机械臂在什么位置,换一种说法就是建立相机坐标系与机械臂坐标系的映射关系。

有两种方式

一种是eye to hand,眼在手外面,就是将相机固定在机械臂外面。

由于眼在手外标定时,Base坐标系和Cam坐标系的位置是固定的,因此眼在手外主要是求这两个坐标系的关系。

另一种是eye in hand,眼在手上,就是将相机固定在机械臂末端。

相机坐标系和工具坐标系的位置是相对不变的。因此,标定的就是cam坐标系和tool坐标系的关系。

项目开始

python对mechArm的控制

pymycobot 是用python控制mechArm的库,可以直接调用里面的方法。

介绍几个主要的方法:

release_all_servos()

release all robot arms

get_angles()

get the degree of all joints.

send_angle(id, degree, speed)

Send one degree of joint to robot arm.

send_angles(degrees, speed)

Send the degrees of all joints to robot arm.

degrees: a list of degree value(List[float]), length 6 or 4.

speed: (int) 0 ~ 100

from pymycobot.mycobot import MyCobot import time mc = MyCobot('/dev/ttyAMA0',1000000) time.sleep(4) for count in range(2): mc.send_angles([0,0,0,0,0,0],70) time.sleep(2) mc.send_angles([0,38.32,(-6.76),10.01,99.22,(-19.77)],70) time.sleep(2) mc.send_angles([(-13.18),(-22.14),17.66,147.12,99.22,(-19.77)],70) time.sleep(2) mc.send_angles([98.43,(-2.98),(-95.88),161.01,(-1.23),(-19.77)],70) time.sleep(2) print(mc.get_angles()) print(mc.get_coords()) mc.send_angles([0,0,0,0,0,0],70)

视频演示

https://www.bilibili.com/video/BV1VW4y1M7Gv/?vd_source=dd6f4a47482e4e14e33125a26c155808

mechArm Pi还是可以很轻易上手的一款机械臂操控性很强。

接下来我们来研究一下如何实现人脸识别功能。

openCV 人脸识别的代码

在前面我介绍到了分类器,让我来演示一下大概的流程是怎么样的。

执行一下代码来看一下效果

import cv2 import matplotlib.pyplot as plt import time def video_info(): # Loading classifiers face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # Input video stream cap = cv2.VideoCapture(0) # To use a video file as input #cap = cv2.VideoCapture('demo.mp4') while True: _, img = cap.read() # Conversion to greyscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detecting faces faces = face_cascade.detectMultiScale(gray, 1.1, 4) # Drawing the outline for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) center_x = (x+w-x)//2+x center_y = (y+h-y)//2+y cv2.circle(img,(center_x,center_y),10,(0,255,255),2) # Display effects cv2.imshow('img', img) k = cv2.waitKey(30) & 0xff if k==27: break cap.release()

不得不说,opencv锻炼的分类器是十分强大的!很快速的就识别出来了人脸。

就这样我完成了前两项技术的问题:机械臂的基础操作人脸识别功能的复现。手眼标定在查询资料的时候遇到了困难,在eye in hand 当中换算坐标的时候出现了一些问题,短时间没有办法能够解决,决定去查询更多的资料再来跟大家分享。

总结

这次记录的项目到这里就结束了,因为一些技术上的原因,手眼标定涉及的知识面比较广,需要查询许多资料和寻求多方面的帮助。待我归来之时,我的项目必将成功!

我们下次再见,很快就会回来的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 看过钢铁侠的人都知道里面的贾维斯在帮助托尼斯塔克制作装备的时候,有许多械臂提供帮助制作装备,让装备的制作提高了效率。贾维斯是一个超级强大的人工智能系统,有了它的帮助如鱼的水。我脑海中浮现出来一个想法,让机械臂末端实现人脸识别和跟踪的功能,也有看到有人实现了机械臂末端物体的动态跟踪,看着这个项目好像很容易实现,让我来试一试吧!
  • 项目设备
    • mechArm 270-Pi
      • 计算机视觉
      • 项目流程介绍
        • 整体项目的流程图
          • OpenCV-人脸识别
            • 手眼标定
            • 项目开始
              • python对mechArm的控制
                • openCV 人脸识别的代码
                • 总结
                相关产品与服务
                人脸识别
                腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档