越疆魔术师如何加入机器视觉功能


#36

搞定了,用的像素坐标与水平坐标的转换 ,


#37

没毛病的,坐标转换不是难点,转换方式网上也有,还很详细


#38

大哥 你好呀 我才开始学 请问要怎样 给定dobot一个坐标 然后让它指定该坐标啊? 需要编程吗 需要什么样的编译环境呢 还是怎么样?


#39

大家这个东西做出来了么?可以一起讨论下啊,我现在想做个移动的物件,机械臂抓取的实现。


#40

您好。可以交流下么?我也是做这方面的。1294109495


#42

你好 可以加下qq吗 qq 2291335301


#43

统一留下我的联系方式, QQ:312386252 e-Mail:you30l@126.com
问题与答案,她是谁?你大爷

可以给各位一些帮助,提供一些思路,我不是大神,也只是菜鸟


#44

链上形状分拣的视频


#45

然后这是颜色分拣的视频


#46

我这也做出来了

Dobot分拣货架商品


#47

二值图已经出来了,坐标不知道如何找,下一步转换到机械手臂怎么弄,知道的可以告诉我一下吗,或者把代码发给我


#48

你好~ 能交流一下吗?我也想 实现一下这个功能 但不知道从哪做起需要什么传感器~~
能否交流一下呢? 谢谢了~


#49

唯一会用到的传感器就是摄像头了,如果要加上传送带的话可能还会用到一个超声波或者红外之内的传感器


#50

我的全部代码可出售了,有兴趣的朋友可以邮箱联系。 you30l@126.com
总共两个程序,一个形状分拣,一个颜色分拣。形状分拣程序已经规整完成。


#51

使用OpenCV获取零件位置的学习笔记
曹开.元
曹开.元
8 个月前
最近公司接到一个案子,使用移动机械臂抓取圆盘上下料,目前我们的移动机器人定位精度在两厘米左右,因此需要视觉辅助定位来提高夹取的精度。

这个项目本身不是我做,出于对是视觉的兴趣,学习了一下如何使用OpenCv提取零件的坐标。

臂大概是这样的,平台是我司开发的300kg负载全向轮系列,臂为ABB的IRB1200(话说n年前我也参与了这款臂的研发…):

实际使用的时候,应该是按以下流程操作:

移动机器人先到目标位置
然后使用视觉拍摄标定点位置,获得机器人当前准确坐标
然后根据标定点计算处目标零件位置
使用移动平台上的机械臂进行夹取
下面是学习过程 :

环境:

我自己做学习用所以拍照用的是手机拍照:iPhone5S深空灰国行移动定制版

软件:python2.7,OpenCv2

OpenCv的安装:

1.1安装Python2.7

1.2安装numpy: pip install numpy

1.3下载安装opencv2.4x

1.4把OpenCV安装目录下的 “\OpenCV\opencv\build\python\2.7”的 cv2.pyd复制到Python目录 ".\Program Files\Python27\Lib\site-packages"下

具体思路如下:

获取图片
提取黑色的区域
将黑色区域进行二值化处理
获取中心区域轮廓及坐标
获取坐标中心点位置
绘制矩形及中心点 输出图片,黑色区域图,二值化图,轮廓及中心点图片。

coding:UTF-8

import cv2
import numpy as np

class Findposition:
def init(self,path):
#获取图片
self.img=cv2.imread(path)
self.gray=cv2.cvtColor(self.img,cv2.COLOR_BGR2GRAY)
self.hsv=cv2.cvtColor(self.img,cv2.COLOR_BGR2HSV)

#提取黑色的区域 
def Get_black(self):
    #get black area
    low_black=np.array([0,0,0])
    high_black=np.array([100,100,100])
    mask=cv2.inRange(self.img,low_black,high_black)
    black=cv2.bitwise_and(self.hsv,self.hsv,mask=mask)
    return black

#将黑色区域进行二值化处理 
def Get_contour(self):
    #change to gray
    black=self.Get_black()
    black_gray=cv2.cvtColor(black,cv2.COLOR_HSV2BGR)
    black_gray=cv2.cvtColor(black_gray,cv2.COLOR_BGR2GRAY)
    
    #binaryzation
    _, thresh=cv2.threshold(black_gray,10,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    img_morph=cv2.morphologyEx(thresh,cv2.MORPH_OPEN,(3,3))
    cv2.erode(img_morph,(3,3),img_morph,iterations=2)
    cv2.dilate(img_morph,(3,3),img_morph,iterations=2)
    return img_morph


#获取中心区域轮廓及坐标 
def Find_contour(self,img):
    img_cp=img.copy()
    cnts,_=cv2.findContours(img_cp,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    cnt_second=sorted(cnts,key=cv2.contourArea,reverse=True)[1]
    box =cv2.minAreaRect(cnt_second)
    return np.int0(cv2.cv.BoxPoints(box))

#绘制轮廓
def Draw_contour(self,points):
    mask=np.zeros(self.gray.shape,np.uint8)
    cv2.drawContours(mask,[points],-1,255,2)
    return mask

#获取中心位置
def Get_center(self,points):
    p1x,p1y=points[0,0],points[0,1]
    p3x,p3y=points[2,0],points[2,1]
    center_x,center_y=(p1x+p3x)/2,(p1y+p3y)/2
    center=(center_x,center_y)
    return center

#绘制中心点
def Draw_center(self,center,mask):
    cv2.circle( mask,center,1,(255,255,255),2)
    return mask

#主函数
def main_process(self):
    morph=self.Get_contour()
    black=self.Get_black()
    points=self.Find_contour(morph)
    mask=self.Draw_contour(points)
    center=self.Get_center(points)
    draw_center=self.Draw_center(center,mask)
    center_x,center_y=self.Get_center(points)

    print(center_x,center_y)
    cv2.imshow('black',black)
    cv2.imshow('morph',morph)
    cv2.imshow('img',self.img)
    cv2.imshow('contour',draw_center)
    cv2.waitKey(0)

if name== ‘main’ :
path=‘C:\Users\KaiyuanCao\Desktop\sample.jpg’
d = Findposition(path)
d.main_process()
输出图片这个其实没啥用,主要是看看效果,目标是得到中心点的位置。

实际运行效果如下:

原始图片:
圆盘的边沿太薄了,不太好提取轮廓,因此希望用中间的圆柱区域来定位

黑色区域:
这个时候白色的背景和支撑盒已经被滤掉了

二值化:

提取出中间的轮廓就可以啦,然后绘制出矩形和中心点:

运行程序,中心点的坐标输出:

#学习到此结束
While True:
end learning
break
万事开头易,而后难,然后很难很难,最后难的不行了,凡事浅尝辄止。


#52

评论不能删除,没办法,然后说明下,程序没卖的,只是当时特气愤,所有才有此一贴。然后各位有什么疑问都可以邮箱联系,尽我最大能力回答大家,帮大家答疑吧,毕竟我当初写这个程序的时候也知道有多绝望

相信大部分人都对坐标转换这块有很大疑惑,我以前写过一个文档有上传到CSDN 链接:https://download.csdn.net/download/qq_32630565/10313672

应该算是写的简单易懂了,之后会慢慢的把这个课题的所哟东西上传,但是论坛应该不会怎么来


#53

我已经用双目相机做出来了,颜色分拣的。。。


#54

2-2


#55

推荐用X-VISION AI SDK 免费开放的视觉SDK, 实现视觉定位、测量、外观检测等功能。
兼容opencv
请联系QQ:514704465

X-Vision是自主研发的新一代AI视觉解决方案SDK,采用先进的机器视觉和AI神经网络等核心技术,能够有效解决传统机器视觉系统过于复杂、精度低、检测不可靠等问题,使得视觉自动化设备更加简单、稳定、智能、加速研发项目落地。

X-Vision具有以下功能:

物体目标检测

几何尺寸测量

外观缺陷检测

智能调焦

智能调光

pmsNet 神经网络瑕疵分割网络

丰富的图像底层处理接口(预处理、目标分割、特征提取等)

算法优势特点

函数调接口函数丰富、调用简单、统一的调用方法,算子实例分配–>参数设置–>算子处理–>返回结果–>算子实例释放,详细函数说明

消除人为误差 ,可以根据测量位置自动对焦,并且搭配智能光源调节功能,无论谁进行测量,任何时候都能以同样的条件测量尺寸,可以避免因照明条件不同而产生测量误差

物体检测,对于任意摆放工件,自动识别位置和方向,只要在视野范围内,都能快速精准的捕捉到目标,进行精准测量,误认为产生的测量误差

几何尺寸测量,提供UI工具找点,找边,找圆,坐标系变换工具,角度测量,圆度测量,提供棋盘格等标定方法 实现物理尺寸的,卡尺测量,间隙测量,半径测量,面积测量

高精度物体检测定位功能、简单、智能、速度快,在实际的测量过程中测量数据精度能实现在 3um 内波动

外观检测,根据正常工件模板,对待检工件进行瑕疵检测,输出瑕疵个数,位置,大小等几何信息,对特征提取困难的表面缺陷使用pmsNet 进行针对性检测

优秀的算法,采用了SSE,TBB,GPU加速

多平台支持:支持win7,win10 ,树莓派


#56

老哥能具体说说咋做的么?
互相交流一下?

我准备用python+opencv做这个 但是举步维艰