実現したいこと
・部品の数をカウントしたいです。検査ラインにおいて、部品が重なって出てくる為、
重なった状態の部品数をカウントしたいです。
前提
Pythonを使用し、ラズベリーパイでカメラを取り付けて
検査ラインに実装できたらと考えています。
発生している問題・エラーメッセージ
過去質問を色々参考にしているところですが、
下図のように部品が重なっている場合、次のどちらの方法で
実現したらいいのか不明です。
<部品のイメージ>
下図は部品検査時の例で、8本のボルトを検査している画像になります。
1)opencvなどで画像処理を用いる
2)深層学習を用いる
共に方法を勉強する段階なので、
方向性をはっきりさせた上で学習に着手したいと考えております。
追記:調査したこと
①Pythonでコーヒー豆カウント
→2値化、ぼかし処理、検証方法はここでわかりましたが、
重なった時のカウント方法はここでは不明。
②tensorflow 自動着色 + OpenCV 輪郭抽出で花の数をカウント
→深層学習が有効そうであれば、ここを参考にして進めようと思っております。
追記:試したこと
下記のフェーズ1で評価中です。
フェーズ1:重なっていない画像でカウント
フェーズ2:重なった画像でカウント
フェーズ3:機械学習を用いる
フェーズ4:実画像で検証
フェーズ5:カメラの動画で検証
<フェーズ1>
細かい部分はまだ理解できていませんが、
2値化して輪郭を探してカウント。の部分まではできそうな感じです。
参考URL:①Pythonでコーヒー豆カウントを参考に作成
python
1import numpy as np 2import cv2 3import matplotlib.pyplot as plt 4 5def display(img,cmap=None): 6 fig = plt.figure(figsize=(10,8)) 7 ax = fig.add_subplot(111) 8 ax.imshow(img,cmap=cmap) 9 10test_img = cv2.imread("phase1_test.jpeg") 11 12# 中央値フィルターを使ったぼかしの適用 13test_blur = cv2.medianBlur(test_img ,5) 14#display(test_blur) 15 16# グレースケールに変換 17gray_test = cv2.cvtColor(test_blur,cv2.COLOR_BGR2GRAY) 18display(gray_test,cmap='gray') 19 20# 2値化処理 21# 画像の特徴的な部分、関心のある部分を抽出するように変換する処理 22ret, test_thresh = cv2.threshold(gray_test,248,255,cv2.THRESH_BINARY_INV) 23display(test_thresh,cmap='gray') 24 25#カウント 26contours, hierarchy = cv2.findContours(test_thresh.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) 27 28for i in range(len(contours)): 29 if hierarchy[0][i][3] == -1: 30 cv2.drawContours(test_img, contours, i, (255, 0, 0), 5) 31 32display(test_img) 33print(len(contours))

回答2件
あなたの回答
tips
プレビュー