Will talk about Linux, plants, space, retro games, and anything else I find interesting.

  • 22 Posts
  • 89 Comments
Joined 2 years ago
cake
Cake day: June 11th, 2023

help-circle



  • import cv2
    import easyocr
    import numpy as np
    from PIL import Image
    from collections import Counter
    
    # Initialize the EasyOCR reader
    reader = easyocr.Reader(['en'])
    
    def preprocess_image(image):
        # Convert to PIL image for EasyOCR processing
        return Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    
    def recognize_text(image):
        processed_image = preprocess_image(image)
        results = reader.readtext(np.array(processed_image), allowlist='0123456789')
        # Concatenate all recognized text results
        recognized_text = ''.join(result[1] for result in results)
        return recognized_text
    
    def format_number(text, length=6):
        # Remove non-numeric characters and pad with zeros if necessary
        formatted = ''.join(filter(str.isdigit, text))
        return formatted.zfill(length)[-length:]
    
    def most_common_number(numbers):
        # Find the most common number from the list of numbers
        counter = Counter(numbers)
        most_common = counter.most_common(1)
        return most_common[0][0] if most_common else ''
    
    def main():
        cap = cv2.VideoCapture(2)
    
        if not cap.isOpened():
            print("Error: Could not open webcam.")
            return
    
        print("Press 'q' to quit.")
        frame_count = 0
        text_history = []
    
        while True:
            ret, frame = cap.read()
            if not ret:
                print("Error: Failed to capture image.")
                break
    
            # Recognize text from the current frame
            recognized_text = recognize_text(frame)
            formatted_number = format_number(recognized_text)
    
            # Update the history with the latest recognized number
            text_history.append(formatted_number)
    
            # Keep only the last 10 frames
            if len(text_history) > 20:
                text_history.pop(0)
    
            # Determine the most common number from the history
            most_common = most_common_number(text_history)
            print(f"Most common number from last 10 frames: {most_common}")
    
            # if cv2.waitKey(1) & 0xFF == ord('q'):
            #     break
    
        cap.release()
    
    if __name__ == "__main__":
        main()
    
    


















  • Sometimes ill do TDD, sometimes ill do the opposite. When I know what something looks like or should function. Im not sure what the technical term of itis, but ive heard someone call it Scaffold testing. Its making sure all the parts work as expected (Unit and integration/e2e) for your future sanity.

    TDD lets you experiment and makes multiple potential solutions to a general problem. IE starting with the end first. Scaffolding lets you create a scaffold around what you already built so its more rigid. Both have their place.


  • Heh yeah. I feel that. Close to 20 now and Im starting to feel the churn. But its still a good feeling to give direction and see people grow. I used to be a team lead in addition to a senior dev…now im just a dev (being an individual contributor is fun again) and the 40 tabs bit resonates with me. I find that AI is good a surface level assignments like build basic CRUD/models…but it Fd up so hard sometimes its hard to come back from. Definition of spaghetti sometimes haha. I just go back to the old stuff that I know works.