Przeglądaj źródła

opencv + camera

Torsten Simon 2 lat temu
rodzic
commit
104370b426
2 zmienionych plików z 100 dodań i 0 usunięć
  1. 1 0
      .gitignore
  2. 99 0
      data-writer-opencv.py

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+camera/

+ 99 - 0
data-writer-opencv.py

@@ -0,0 +1,99 @@
+import numpy.core.multiarray
+import cv2
+import pytesseract
+import numpy as np
+import time
+from datetime import datetime
+from picamera import PiCamera
+from pytesseract import Output
+
+import cv2
+import pytesseract
+from pytesseract import Output
+import numpy as np
+import re
+def 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 None
+def 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 image
+def 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 = 60000
+camera.iso = 800
+while 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)