| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | import numpy.core.multiarrayimport cv2import pytesseractimport numpy as npimport timefrom datetime import datetimefrom picamera import PiCamerafrom pytesseract import Outputimport cv2import pytesseractfrom pytesseract import Outputimport numpy as npimport redef parse(image):     custom_oem=r'--oem 3 --psm 11'    # https://github.com/adrianlazaro8/Tesseract_sevenSegmentsLetsGoDigital    data = pytesseract.image_to_data(img, lang='lets', config=custom_oem, output_type=Output.DICT)    print(data)    results = []    for i in range(len(data['text'])):        text = data['text'][i].strip('.,-_')        text = re.sub('[^0-9]', '', text)        if text:            results.append(text)    if len(results) == 2:        results = list(map(lambda x: int(x) / 10.,results ))        if results[0] < 100 and results[1] < 1000:            return results    return Nonedef thresholding(image):    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)        pixel_values = image.reshape((-1, 1))    pixel_values = np.float32(pixel_values)    print(pixel_values.shape)    # define stopping criteria    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2)    # number of clusters (K)    k = 3    _, labels, (centers) = cv2.kmeans(pixel_values, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)    # convert back to 8 bit values    centers = np.uint8(centers)    # flatten the labels array    labels = labels.flatten()    # convert all pixels to the color of the centroids    segmented_image = centers[labels.flatten()]    segmented_image = segmented_image.reshape(image.shape)        # disable only the cluster number 2 (turn the pixel into black)    masked_image = np.copy(image)    # convert to the shape of a vector of pixel values    masked_image = masked_image.reshape((-1, 1))    # color (i.e cluster) to disable    cluster = 2    masked_image[labels != cluster] = [0]    # convert back to original shape    masked_image = masked_image.reshape(image.shape)        return masked_image           image = cv2.medianBlur(image,3)    #image = np.invert(image)    return cv2.threshold(image, 140, 255, cv2.THRESH_BINARY)[1]    return imagedef thresholding2(image):        image = cv2.medianBlur(image,7)    #image = np.invert(image)    return image def crop(image):    top=314    left=230    height= 150    width=400    return image[top : (top + height) , left: (left + width)]camera = PiCamera(    resolution=(800, 600))camera.awb_mode = 'off'camera.awb_gains = (1.5, 2.0)camera.shutter_speed = 60000camera.iso = 800while True:    file = "/home/pi/solar-monitor/camera/" + str(datetime.now()) + ".jpg"    camera.capture(file)    print("Captured.")    img = cv2.imread(file)    img = crop(img)    img = thresholding2(img)    print(parse(img))    cv2.imwrite(file + '_r.jpg', img)    time.sleep(2)
 |