0

How to coding to change support Python OpenCV Circle (Coin) Segmentation to support Square (Box) Segmentation and have File Select to select video before Segmentation ?

I learn Coin Segmentation : Python OpenCV article with article link https://medium.com/@kongruksiamza/coin-secmentation-python-opencv-9c7a9537002c and Source Code link https://github.com/kongruksiamza/Coin-Segmentation .

I have problem to count segmentation only circle (coin) segmentation (cannot count square (box) segmentation) and no file select to select video before segmentation.

Sample Code.

  1. CoinDetection.py
import cv2
import numpy as np
cap=cv2.VideoCapture("Coin2.mp4")

while(cap.read()) :
     ref,frame = cap.read()
     roi=frame[:1080,0:1920]

     gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
     gray_blur=cv2.GaussianBlur(gray,(15,15),0)
     thresh=cv2.adaptiveThreshold(gray_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,1)
     kernel=np.ones((3,3),np.uint8)
     closing=cv2.morphologyEx(thresh,cv2.MORPH_CLOSE,kernel,iterations=4)

     result_img=closing.copy()
     contours,hierachy=cv2.findContours(result_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
     counter=0
     for cnt in contours:
         area = cv2.contourArea(cnt)
         if area<5000 or area > 35000:
             continue
         ellipse = cv2.fitEllipse(cnt)
         cv2.ellipse(roi,ellipse,(0,255,0),2)
         counter+=1
    
     cv2.putText(roi,str(counter),(10,100),cv2.FONT_HERSHEY_SIMPLEX,4,(255,0,0),2,cv2.LINE_AA)
     cv2.imshow("Show",roi)

     if cv2.waitKey(1) & 0xFF==ord('q'):
         break

cap.release()
cv2.destroyAllWindows()
  1. Sample image to have count square (box) segmentation) with link.

https://inwfile.com/s-fn/uzr1at.png

  1. UI example to have File Select to select video before Segmentation.

https://i.stack.imgur.com/sd4By.png

1 Answers1

0

Update : I add code to have File Select to select video before Segmentation with my full source code.

I have answer credit with link1 , link2 , link3 and link4.

  1. Install pyinstaller / auto-py-to-exe / win32com with command :
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
pip install auto-py-to-exe
pip install pywin32
  1. Coding with sample.

2.1 BoxDetection.py

import cv2
import numpy as np

from tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
cap=cv2.VideoCapture(filename) # Compatible with box2 mp4 video file

while(cap.read()) :
     ref,frame = cap.read()
     roi=frame[:1080,0:1920]

     gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
     gray_blur=cv2.GaussianBlur(gray,(25,25),0)
     thresh=cv2.adaptiveThreshold(gray_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,21,4)
     kernel=np.ones((3,3),np.uint8)
     closing=cv2.morphologyEx(thresh,cv2.MORPH_CLOSE,kernel,iterations=4)

     result_img=closing.copy()
     contours,hierachy=cv2.findContours(result_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
     counter=0
     for cnt in contours:
         area = cv2.contourArea(cnt)
         if area<800 :
             continue
         # ellipse = cv2.fitEllipse(cnt)
         # cv2.ellipse(roi,ellipse,(0,255,0),2)
         counter+=1

     cv2.putText(roi,str(counter),(10,100),cv2.FONT_HERSHEY_SIMPLEX,4,(0,0,255),4,cv2.LINE_AA)
     cv2.imshow("Show",roi)

     if cv2.waitKey(300000) & 0xFF==ord('q'):
         break

cap.release()
cv2.destroyAllWindows()

and VDO box2.mp4 example file with link - https://doanga2007.github.io/box2.mp4

  1. Open cmd and use auto-py-to-exe command to open auto-py-to-exe program , Open python file and press compile button to compile python file to exe file instantly.

  2. Have BoxDetection.exe with link - https://drive.google.com/file/d/1tnnnDWRrg1NbPZ3hr9mhY-t_4zry21rB/view?usp=sharing