Torsten Simon 2 жил өмнө
parent
commit
5ab8356384
7 өөрчлөгдсөн 123 нэмэгдсэн , 0 устгасан
  1. 1 0
      .gitignore
  2. 9 0
      Dockerfile
  3. 5 0
      docker-compose.yml
  4. 0 0
      src/requirements.txt
  5. 71 0
      src/test-cv.py
  6. 27 0
      src/test.py
  7. 10 0
      src/test2.py

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+*.jpg

+ 9 - 0
Dockerfile

@@ -0,0 +1,9 @@
+# syntax=docker/dockerfile:1
+
+FROM python:3.8-buster
+RUN apt-get upgrade && apt-get -y install gcc
+WORKDIR /app
+COPY src/ . 
+RUN pip3 install -r requirements.txt
+
+CMD [ "python3", "test-cv.py"]

+ 5 - 0
docker-compose.yml

@@ -1,5 +1,10 @@
 version: "3.9"
 services:
+  python:
+      build: 
+        context: .
+      restart: unless-stopped
+
   grafana:
       image: grafana/grafana:7.5.7
       ports:

+ 0 - 0
requirements.txt → src/requirements.txt


+ 71 - 0
src/test-cv.py

@@ -0,0 +1,71 @@
+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
+ 
+for file in ['test4.jpg', 'test3.jpg', 'test2.jpg', 'test1.jpg']:
+    print(file)
+    img = cv2.imread(file)
+    img = thresholding2(img)
+    print(parse(img))
+    cv2.imwrite(file + '_r.jpg', img)
+

+ 27 - 0
src/test.py

@@ -0,0 +1,27 @@
+import easyocr
+import cv2
+import pytesseract
+import numpy as np
+
+def thresholding(image):
+    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+    image = cv2.medianBlur(image,3)
+    brightness = 150
+    contrast = 3.
+    brightness += int(round(255*(1-contrast)/2))
+    image = cv2.addWeighted(image, contrast, image, 0, brightness)
+    #image = np.invert(image)
+    return cv2.threshold(image, 140, 255, cv2.THRESH_BINARY)[1]
+    return image
+ 
+img_source = cv2.imread('DSC_0099_r4.JPG')
+img = thresholding(img_source)
+cv2.imwrite('result.jpg', img)
+
+custom_oem=r'--oem 3 --psm 11 -c tessedit_char_whitelist=0123456789'
+d = pytesseract.image_to_data(img) #, lang='letsgodigital', config=custom_oem, output_type=Output.DICT)
+print(d)
+
+reader = easyocr.Reader(['en'], gpu=False)
+result = reader.readtext('result.jpg', allowlist='0123456789')
+print(result)

+ 10 - 0
src/test2.py

@@ -0,0 +1,10 @@
+from doctr.models import ocr_predictor
+from doctr.io import DocumentFile
+# https://pypi.org/project/python-doctr/
+model = ocr_predictor(det_arch='db_resnet50', reco_arch='crnn_vgg16_bn', pretrained=True)
+# Image
+single_img_doc = DocumentFile.from_images("result.jpg")
+
+result = model(single_img_doc)
+
+print(result)