MVP on OCT and webcam

This commit is contained in:
michaelachrisco 2024-08-21 16:35:56 -07:00
parent 5fc716c954
commit 6b17ec50d4
12 changed files with 145 additions and 0 deletions

BIN
frame_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
frame_10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
frame_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
frame_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
frame_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
frame_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
frame_6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
frame_7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
frame_8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
frame_9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

70
main.py Normal file
View file

@ -0,0 +1,70 @@
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()

75
requirements.txt Normal file
View file

@ -0,0 +1,75 @@
absl-py==2.1.0
astunparse==1.6.3
certifi==2024.7.4
charset-normalizer==3.3.2
easyocr==1.7.1
filelock==3.15.4
flatbuffers==24.3.25
fsspec==2024.6.1
gast==0.6.0
google-pasta==0.2.0
grpcio==1.65.5
h5py==3.11.0
idna==3.7
imageio==2.35.1
Jinja2==3.1.4
joblib==1.4.2
keras==3.5.0
lazy_loader==0.4
libclang==18.1.1
Markdown==3.7
markdown-it-py==3.0.0
MarkupSafe==2.1.5
mdurl==0.1.2
ml-dtypes==0.4.0
mpmath==1.3.0
namex==0.0.8
networkx==3.3
ninja==1.11.1.1
numpy==1.26.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==9.1.0.70
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.20.5
nvidia-nvjitlink-cu12==12.6.20
nvidia-nvtx-cu12==12.1.105
opencv-python==4.10.0.84
opencv-python-headless==4.10.0.84
opt-einsum==3.3.0
optree==0.12.1
packaging==24.1
pillow==10.4.0
protobuf==4.25.4
pyclipper==1.3.0.post5
Pygments==2.18.0
pytesseract==0.3.13
python-bidi==0.6.0
PyYAML==6.0.2
requests==2.32.3
rich==13.7.1
scikit-image==0.24.0
scikit-learn==1.5.1
scipy==1.14.1
shapely==2.0.6
six==1.16.0
sympy==1.13.2
tensorboard==2.17.1
tensorboard-data-server==0.7.2
tensorflow==2.17.0
tensorflow-io-gcs-filesystem==0.37.1
termcolor==2.4.0
threadpoolctl==3.5.0
tifffile==2024.8.10
torch==2.4.0
torchvision==0.19.0
triton==3.0.0
typing_extensions==4.12.2
urllib3==2.2.2
Werkzeug==3.0.4
wrapt==1.16.0