Spaces:
Build error
Build error
File size: 4,831 Bytes
967e1fd 0991dae 967e1fd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
import gradio as gr
from utils.cad_operations import create_cad_model
from utils.toolpath_generation import generate_toolpath, generate_gcode
import cv2
import pytesseract
import pandas as pd
from PIL import Image
import re
# Path to your Tesseract executable
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# Function to preprocess the image (grayscale, thresholding, etc.)
def preprocess_image(image_path):
# Read the image using OpenCV
img = cv2.imread(image_path)
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Apply thresholding
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# Optional: Remove noise (you can experiment with different kernels)
kern = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
processed_image = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kern)
return processed_image
# Function to extract text from image using OCR
def extract_text_from_image(image):
# Use pytesseract to do OCR on the preprocessed image
text = pytesseract.image_to_string(image)
return text
# Function to extract invoice details using regular expressions
def extract_invoice_details(text):
# Example patterns (you can modify them based on the format of your invoices)
invoice_number = re.search(r'Invoice Number[:\s]*([A-Za-z0-9]+)', text)
customer_name = re.search(r'Customer Name[:\s]*([\w\s]+)', text)
date = re.search(r'Date[:\s]*([\d/]+)', text)
total_amount = re.search(r'Total Amount[:\s]*([\d,]+)', text)
# Extract matched values or set to 'N/A' if not found
invoice_details = {
'Invoice Number': invoice_number.group(1) if invoice_number else 'N/A',
'Customer Name': customer_name.group(1) if customer_name else 'N/A',
'Date': date.group(1) if date else 'N/A',
'Total Amount': total_amount.group(1) if total_amount else 'N/A',
}
return invoice_details
# Function to save extracted data to Excel
def save_to_excel(data, output_file):
# Convert the data to a pandas DataFrame and save it to an Excel file
df = pd.DataFrame(data)
df.to_excel(output_file, index=False)
def main():
# Path to the invoice image
image_path = 'path_to_your_invoice_image.jpg'
# Preprocess the image
preprocessed_image = preprocess_image(image_path)
# Extract text from the image using OCR
extracted_text = extract_text_from_image(preprocessed_image)
# Extract invoice details using regex
invoice_details = extract_invoice_details(extracted_text)
# Save extracted data to an Excel file
output_file = 'extracted_invoice_data.xlsx'
save_to_excel([invoice_details], output_file)
print(f"Data extracted and saved to {output_file}")
# Run the script
if __name__ == "__main__":
main()
# Step 1: Collect user input parameters
def cnc_workflow(length, width, height, material, tool_size, operation_type):
"""
Full CNC workflow from parameter input to G-code generation
"""
# Step 2: Create CAD model
part = create_cad_model(length, width, height, material)
# Step 3: Generate Toolpath
toolpath = generate_toolpath(part, tool_size, operation_type)
# Step 4: Generate G-code
gcode_file = generate_gcode(toolpath)
return f"G-code file generated: {gcode_file}"
# Define the Gradio interface and layout
def build_gui():
with gr.Blocks() as demo:
# Title and Intro
gr.Markdown("### CNC G-Code Generation Workflow")
# Step 1: Input Parameters
with gr.Row():
length_input = gr.Number(label="Length (mm)", value=100)
width_input = gr.Number(label="Width (mm)", value=50)
height_input = gr.Number(label="Height (mm)", value=20)
material_input = gr.Dropdown(choices=["Aluminum", "Steel", "Plastic"], label="Material Type", value="Aluminum")
# Step 2: Tool and Operation Input
with gr.Row():
tool_size_input = gr.Number(label="Tool Size (mm)", value=5)
operation_input = gr.Dropdown(choices=["Milling", "Drilling"], label="Operation Type", value="Milling")
# Step 3: Button to Start G-Code Generation
generate_button = gr.Button("Generate G-Code")
# Step 4: Output section
output_text = gr.Textbox(label="Generated G-code File", interactive=False)
# Bind the button to the function
generate_button.click(cnc_workflow,
inputs=[length_input, width_input, height_input, material_input, tool_size_input, operation_input],
outputs=output_text)
return demo
# Launch the Gradio app
demo = build_gui()
demo.launch()
|