How to count no. of boxes using OpenCV?

I am trying to find no. of boxes available in the warehouse.

I am using:

Here is my code for the same.

# Import libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread('box.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.imshow(gray, cmap='gray')

blur = cv2.GaussianBlur(gray, (11,11), 0)
plt.imshow(blur, cmap='gray')

canny = cv2.Canny(blur, 20, 50, 3)
plt.imshow(canny, cmap='gray')
# Here I am facing difficulty to draw exact lines for boxes as we can see small contours are also created in corner as well as other parts of box image.

dilated = cv2.dilate(canny, (1, 1), iterations=0)
plt.imshow(dilated, cmap='gray')

(cnt, hierarchy) = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2)
plt.imshow(rgb)
print("Boxes in the image : ", len(cnt))
#Boxes in the image :  1169(--Error in counting boxes)

So my question is how to remove small contours or remove noise to calculate exact no. of boxes?