『工程項目實踐』條形碼的檢測與識別
擊上方“機器視覺”,點右上角...選擇“置頂/星標”公眾號
接收最新推文!
導讀
條形碼的檢測與識別
工件裂紋、裂縫的“終極克星”,確保工程部件整體性能
Basler定制高效解決方案,精準視覺賦能玻璃瓶檢測
高速下的極致性能,堡盟機器視覺技術把脈汽車尾翼檢測
使用 NVIDIA Jetson 和 VC MIPI? 攝像模組識別和讀取雕刻字符
科惠力Coherix 3D Mini微型膠條檢測系統(tǒng)
人工智能方向,金融還是CV?
條形碼的檢測與識別
前言
在日常生活中,經常會看到條形碼的應用,比如超市買東西的生活,圖書館借書的時候。那么這些東西是如何做到準確檢測出條形碼的位置呢?本篇博文的目標是演示使用計算機視覺和圖像處理技術實現條形碼的檢測。
通過本篇文章的學習,我們能學到的內容包括:
圖像處理中常用的一些操作流程,包括濾波、閾值化處理、膨脹、腐蝕和輪廓查找等;
更重要的一點,希望通過這個案例,能夠幫助大家建立分析問題和處理問題的思路。
需要注意的是,這個算法并不適用于所有的條形碼,但是它應該能給你一個基本的直覺,告訴你應該應用什么類型的技術。
一、條形碼的檢測
1.1 目標:找到條形碼的位置,而去除掉干擾的因素。
1.2 思路:利用條形碼的自身特點,一般都是矩形形狀,而且條碼的條帶是黑色的,矩形區(qū)域是白色的。
1.3 代碼
step 1: 得到只剩下高水平梯度和低垂直梯度的圖像區(qū)域。
import argparse
import imutils
import cv2
# 構造參數解析并分析參數
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="path to the image file")
args = vars(ap.parse_args())
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 計算圖片 x 和 y 方向的 Scharr 梯度大小
# 使用 Scharr 操作符(這里制定ksize=1)去構造圖片在水平和垂直方向上的梯度幅值表示。
ddepth = cv2.cv.CV_32F if imutils.is_cv2() else cv2.CV_32F
gradX = cv2.Sobel(gray, ddepth=ddepth, dx=1, dy=0, ksize=-1)
gradY = cv2.Sobel(gray, ddepth=ddepth, dx=0, dy=1, ksize=-1)
# 用 x 方向的梯度減去 y 方向的梯度 -> 得到只剩下了高水平梯度和低垂直梯度的圖像區(qū)域。
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient)
cv2.imwrite('./test_img/gradient.jpg', gradient)
step 2: 如何過濾掉圖片中的噪聲,重點關注條形碼區(qū)域。
# 對圖片進行模糊和閾值化操作
# 使用一個卷積核大小為 9x9 的均值濾波作用于梯度圖片。對圖片進行這個操作將有助于平滑圖片中的高頻噪聲。
# 然后將模糊化后的圖片進行閾值化,
blurred = cv2.blur(gradient, (9, 9))
cv2.imwrite('./test_img/blurred.jpg', blurred)
(_, thresh) = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)
# thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 5, 3)
cv2.imwrite('./test_img/thresh.jpg', thresh)
# 進行閾值化操作,更加容易的檢測出條形碼的“斑點”狀區(qū)域
# 核的寬度大于高度,因此允許我們縮小條形碼垂直條帶之間的間隙
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
cv2.imwrite('./test_img/closed.jpg', closed)
step 3: 進行腐蝕與膨脹操作,腐蝕操作將會“腐蝕”掉圖片中的白色像素點,因此將會清除這些小的斑點,而膨脹操作將會“擴張”剩余的白色像素,并使白色區(qū)域變長。如果在腐蝕過程中去除了小的斑點,則在膨脹的過程中不會再次出現。在一系列的腐蝕和膨脹操作之后,這些小斑點已經被成功的移除了,只剩下條形碼的區(qū)域。

step 4: 最后尋找一下圖片中條形碼的區(qū)域的輪廓。
# 找到閾值化后圖片中的輪廓,然后進行根據區(qū)域進行排序,僅保留最大區(qū)域
cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = sorted(cnts, key=cv2.contourArea, reverse=True)[0]
# 計算最大輪廓的旋轉邊界框
rect = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)
# 在檢測到的條形碼周圍繪制邊界框并顯示圖片
cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
cv2.imwrite('./test_img/bar_det.jpg', image)
二、條形碼的識別
識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強。
step 1: 導入所需要的包
2.1 正常角度
2.2 180度旋轉
2.3 45度旋轉
def barcode(gray):
texts = pyzbar.decode(gray)
if not texts:
angle = barcode_angle(gray)
if angle < -45:
angle = -90 - angle
texts = bar(gray, angle)
if not texts:
gray = np.uint8(np.clip((1.1 * gray + 10), 0, 255))
angle = barcode_angle(gray)
if angle < -45:
angle = -90 - angle
texts = bar(gray, angle)
return texts
def bar(image, angle):
gray = image
bar = rotate_bound(gray, 0 - angle)
roi = cv2.cvtColor(bar, cv2.COLOR_BGR2RGB)
texts = pyzbar.decode(roi)
return texts
def barcode_angle(image):
gray = image
ret, binary = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((8, 8), np.uint8)
dilation = cv2.dilate(binary, kernel, iterations=1)
erosion = cv2.erode(dilation, kernel, iterations=1)
erosion = cv2.erode(erosion, kernel, iterations=1)
erosion = cv2.erode(erosion, kernel, iterations=1)
contours, hierarchy = cv2.findContours(erosion, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if len(contours) == 0:
rect = [0, 0, 0]
else:
rect = cv2.minAreaRect(contours[0])
return rect[2]
def rotate_bound(image, angle):
(h, w) = image.shape[:2]
(cX, cY) = (w // 2, h // 2)
M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
nW = int((h * sin) + (w * cos))
nH = int((h * cos) + (w * sin))
M[0, 2] += (nW / 2) - cX
M[1, 2] += (nH / 2) - cY
return cv2.warpAffine(image, M, (nW, nH))
image = cv2.imread("./test_img/test03.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
texts = barcode(gray)
print(texts)
if not texts:
print("未識別成功")
else:
tt = ''
for text in texts:
tt = text.data.decode("utf-8")
print("識別成功")
print(tt)工件裂紋、裂縫的“終極克星”,確保工程部件整體性能--機器視覺網 2022-12-28 11:13:13

2022-12-28 11:13:13 來源: 中國機器視覺網
馬波斯Tecna泄漏測試解決方案
對于車間生產而言,能否控制部件上的裂紋、裂縫、孔洞或通道等缺陷對生產過程十分重要。這些缺陷會影響工程部件的整體性能。同時,未檢測到的泄漏也很可能危及產品的質量,產生不合格產品,進而引發(fā)一系列的索賠活動。
泄漏測試的目的
檢查、預防和解決質量問題:檢查零件的好壞、預防和解決質量問題是泄露測試的首要目的。在初步的質量實驗過程中,及時發(fā)現有缺陷的部分,可以大幅度提高生產過程可靠性,提高產品質量,避免造成工件浪費、或引發(fā)商業(yè)索賠。防止出現安全問題:同時,泄漏測試也關乎安全問題。對含有氣體或流體的部件進行測試,可以防止材料泄漏損失、避免意外泄漏造成的爆炸、環(huán)境污染。
泄漏測試的應用
當前,泄漏測試幾乎涵蓋了大量生
......長按二維碼訪問原文
Basler定制高效解決方案,精準視覺賦能玻璃瓶檢測--機器視覺網 2022-12-28 11:32:15

2022-12-28 11:32:15 來源: 中國機器視覺網
應用背景
在原玻璃瓶生產線中,經常需要人工對玻璃瓶品質進行檢測,但由于生產線速度快,晝夜不停工,工人很容易視覺疲勞,同時伴隨著檢測精度日益提高,人眼難以充分識別瑕疵,從而造成漏檢,嚴重影響產品質量。
佛山市三力智能設備科技有限公司使用Basler產品和視覺方案,研發(fā)生產出視覺檢測設備,可快速精準地識別多種玻璃瓶外觀缺陷,實現 24小時穩(wěn)定的產線檢測工作,極大地提高了產品出廠品質。
檢測需求
瓶口破損、雙口、口不足等缺陷;瓶身和瓶底結石,雜質,氣泡,臟污,裂紋等缺陷;瓶身尺寸測量。
應用難點
檢測速度高,每分鐘檢測不少于250個玻璃瓶;檢測內容復雜,需要多工位多相機同步工作,對觸發(fā)精度要求高;生產車間溫度高,視覺檢測設備在高溫環(huán)境下作業(yè)
......長按二維碼訪問原文
高速下的極致性能,堡盟機器視覺技術把脈汽車尾翼檢測--機器視覺網 2022-12-28 13:30:43

2022-12-28 13:30:43 來源: 中國機器視覺網
新年將至,你是不是在想著是時候給自己換一輛配置更好新車了呢?在經歷了三年的消費降級后,我們迎來了全面的放開,消費對經濟的拉動正在成為明年經濟發(fā)展的主旋律,而汽車正是拉動城鄉(xiāng)居民消費的重要商品之一。堡盟工業(yè)視覺產品在汽車行業(yè)中有著諸多行業(yè)解決方案,而今天我們要介紹的尾翼導流板檢測方案正是其中極具創(chuàng)意的解決方案之一。
讓汽車性能發(fā)揮到極致
汽車尾翼導流板,也叫擾流板,是一種能夠在汽車高速行駛下幫助汽車獲得穩(wěn)定姿態(tài)的性能型配件,近年來廠商為了能夠讓車輛擁有更極致的性能往往在出廠即加裝了此類配件。
因此,車輛尾翼的選材以及形狀設計相對而言就變得非常關鍵,對于有效降低車輛風阻和車尾空氣形成的渦流有著至關重要的作用,但如果這時尾翼出現形狀或質量的缺陷很
......長按二維碼訪問原文
使用 NVIDIA Jetson 和 VC MIPI? 攝像模組識別和讀取雕刻字符―技術與應用頻道- 視覺系統(tǒng)設計 2022/12/27 23:49:36

挑戰(zhàn):難以讀懂的字符
識別和閱讀用過的和經常臟的機器零件上的刻字,戶外裝置中的煤氣表等。
解決方案:深度學習和 VC MIPI?
Vision Components和日本 MITECH 集團開發(fā)了一種基于 NVIDIA Jetson 納米處理器板和 VC MIPI?IMX296 相機的解決方案。
MITECH Group:尋找和閱讀刻字
在這個手持邊緣設備中,VC MIPI?IMX296 相機拍攝物體的圖像。NVIDIA Jetson 納米處理器板上的深度學習算法可以查找和讀取刻字(字母和數字0-9),并將結果輸出到顯示器上。該設備將用于識別金屬零件上的數字和字母。特別是在戶外應用和在潮濕或骯臟的環(huán)境中安裝了數年的設備,這些字符通常很難被肉眼識別出來,因此尋找和識別需要花費很長時間。深度學習有助于快速
......長按二維碼訪問原文
科惠力Coherix 3D Mini微型膠條檢測系統(tǒng)―產品聚焦頻道- 視覺系統(tǒng)設計 2022/12/28 9:49:47

Coherix 3D Mini微型膠條檢測系統(tǒng),針對0.2~2.5mm的小型精密涂膠應用,能夠提供100%穩(wěn)健的3D在線檢測。系統(tǒng)在涂膠的同時實時檢測,并提供有關膠條三維數據和位置的實時信息。利用三維可視化技術,更好地控制和優(yōu)化工藝。
Coherix 3D Mini能夠測量膠條的高度、寬度、體積和位置,提供優(yōu)化點膠過程所需的重要數據。Coherix 3D Mini涂膠檢測,安裝在點膠噴嘴的周圍,配備有四個高速3D傳感器,在任意點膠方向提供360°膠條視圖,不增加機器人編程的復雜性,也不需要額外的計算機。
Coherix 3D Mini采用特制“光”技術,不懼膠“透明”;強大的3D防錯系統(tǒng)無需進一步驗證。
結構緊湊,重量輕,機器人攜帶式安裝;支持各種工業(yè)協(xié)議;不受零部件顏色和環(huán)境光變化的影響。
......長按二維碼訪問原文
人工智能方向,金融還是CV? 2022-12-27 01:41
東南某cv組,現在在家學python
cv已經完蛋了!完蛋了懂嗎?師兄師姐找的啥工作我都不想說了,不知道cv能不能去研究所之類的,以后再說吧,總不能東南都失業(yè),做個cv是真emo了,天天調參總覺得啥都不會是個水貨
師兄原話:cv算法崗清北華五可以一戰(zhàn),其他的沒實習沒頂會趁早滾蛋轉開發(fā)。
今年組內情況:師姐找的軟開,師兄沒找到滿意的準備選調了。
都這吧,不要再給我推這個話題了,現在看見cv就煩。
更:連我的python能力都質疑,我雖然覺得自己渣但也沒各位想的那么水,現在晚上一點多了我還在練代碼。
信院就那么幾個做cv的導師,我也不能再多說了,不過目前我們cv整個組背地里情緒都有點暴躁,原因可能是當時進cv組的都挺優(yōu)秀的,然而現在卷不過通信的又卷不過計算機,夠不著算法崗,旁邊IC幾個組都是60—70w
......長按二維碼訪問原文
004:Facebook 開源計算機視覺系統(tǒng),從像素水平理解圖像(附論文及代碼)
009:從洗衣妹到谷歌首席科學家,她靠孤獨改變了人工智能界!
019:機器人控制系統(tǒng)相關知識大匯集
020:機器人的工作原理,史上最詳細的解析!
021:光源選型知識點
022:這才是機械手,這才是自動化,你那算什么?
023:攝像機和鏡頭的基礎知識
024:物聯(lián)網產業(yè)鏈全景圖(附另13大電子行業(yè)全景圖,必收藏)
025:日本到底強大到什么地步?讓人窒息!看后一夜未眠
026:德國機械用行動驚艷全世界:無敵是多么寂寞
歡迎轉發(fā)、留言、點贊、分享,感謝您的支持!