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()