最近接了一个触摸屏玻璃盖板缺陷检测项目,计划用YOLOv5与openvino来完成此项目,全程用python语言,界面开发用pyqt5,第一次正式开始进行工业部署(目前针对大型玻璃盖板的检测,比较匮乏)。
1、首先根据缺陷确定检测精度需求,以及盖板的宽度确定分辨率,一般要求缺陷的像素至少3个,因此根据公式:长度除以精度,再乘以像素个数,选用1200万像素的海康CMOS相机。
2、光源选择:对于透光的玻璃,计划采用面光源与条形光源结合的方案,利用背光源检测如划痕,崩边,透光等缺陷,利用条形光源正面斜射光来检测如脏污等缺陷。
3、因相机拍摄的照片太大,因此我们采用分割照片的方法,将40003036的照片分割成640640的照片,同时每次切割都要相互重叠一部分。
将像素很大的图片切割成固定大小的多张图片,代码如下:
import os
from PIL import Image
def splitimage(src, rownum, colnum, dstpath, overlap_pix):
img = Image.open(src)
w, h = img.size
if rownum <= h and colnum <= w:
s = os.path.split(src)
fn = s[1].split('.')
ext = fn[-1]
num = 0
rowheight = h // (rownum - overlap_pix) + 1
colwidth = w // (colnum - overlap_pix) + 1
for r in range(rowheight):
for c in range(colwidth):
Lx = (c * colnum) - overlap_pix * c
Ly = (r * rownum) - overlap_pix * r
if (Lx <= 0):
Lx = 0
if (Ly <= 0):
Ly = 0
Rx = Lx + colnum
Ry = Ly + rownum
box = (Lx, Ly, Rx, Ry)
img.crop(box).save(os.path.join(dstpath, str(Lx) + '_' + str(Ly) + '_' + str(num) + '.' + ext))
# crop(left, upper, right, lower) 名字中带有图像坐标
num = num + 1
print('图片切割完毕,共生成 %s 张小图片。' % num)
def main():
jpg_image_path = r'F:\玻璃盖板检测\分割照片\1.jpg'
save_path = r'F:\玻璃盖板检测\分割照片\zhaopian'
row = 640
col = 640
overlap_pix = 80
splitimage(jpg_image_path, row, col, save_path, overlap_pix)
if __name__ == '__main__':
main()
4、一张图片可以分成35个小块,检测时间增加,因此需要做进一步的分析,等视觉平台搭起来后再确定最终方案的设计。