Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import os | |
| import json | |
| from zipfile import ZipFile | |
| from io import BytesIO | |
| # Initialized Modules | |
| from modules.image_process import image_process | |
| from modules.audio_process import audio_process | |
| from modules.transformation import json_to_dms_excel | |
| # from modules.saving import saving_json, saving_excel | |
| # Streamlit app | |
| st.title("TOOL NHẬP ĐƠN HÀNG TỰ ĐỘNG") | |
| # Add a text input for employee code | |
| employee_code = st.text_input("Nhập mã nhân viên của bạn:", placeholder="Administrator", max_chars=20) | |
| # Add a button to confirm the input | |
| if st.button("Xác nhận mã nhân viên"): | |
| if employee_code == "": | |
| st.error("Vui lòng nhập mã nhân viên trước khi xác nhận.") | |
| else: | |
| st.success(f"Mã nhân viên của bạn là: {employee_code}") | |
| st.write("Tải lên folder chứa hình ảnh đơn hàng (dưới dạng file Zip).") | |
| # File uploader for ZIP file | |
| uploaded_file = st.file_uploader("Tải file Zip chứa hình ảnh đơn hàng", type=["zip"]) | |
| if uploaded_file is not None: | |
| # Extract ZIP file | |
| with ZipFile(uploaded_file) as zip_file: | |
| zip_file.extractall("temp_invoices") | |
| # Collect image and audio files | |
| all_files = zip_file.namelist() | |
| # Image files | |
| image_files = [os.path.join("temp_invoices", file) for file in all_files if file.lower().endswith((".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".webp"))] | |
| # Audio files | |
| audio_files = [os.path.join("temp_invoices", file) for file in all_files if file.lower().endswith((".mp3", ".wav", ".m4a", ".flac"))] | |
| if not image_files and not audio_files: | |
| st.error("Không có file hình ảnh và/hoặc file âm thanh hợp lệ trong thư mục file Zip.") | |
| else: | |
| st.write(f"Tìm thấy file {len(image_files)} ảnh và {len(audio_files)} file âm thanh trong thư mục.") | |
| order_counter = 1 # Initialize the order ID counter | |
| results = {} | |
| # Process image files | |
| for i, image_path in enumerate(image_files, start=1): | |
| st.write(f"Processing image{i}/{len(image_files)}: {os.path.basename(image_path)}") | |
| try: | |
| content = image_process(image_path= image_path, order_id= order_counter) | |
| results[f"image_file_{i}"] = content | |
| order_counter += 1 | |
| except Exception as e: | |
| st.error(f"Error processing {image_path}: {e}") | |
| # Process audio files | |
| for i, audio_path in enumerate(audio_files, start=1): | |
| st.write(f"Processing audio{i}/{len(audio_files)}: {os.path.basename(audio_path)}") | |
| try: | |
| content = audio_process(audio_path= audio_path, order_id= order_counter) | |
| results[f"audio_file_{i}"] = content | |
| order_counter += 1 | |
| except Exception as e: | |
| st.error(f"Error processing {audio_path}: {e}") | |
| # Display the results | |
| st.write("OCR Results:") | |
| st.json(results) | |
| # Allow user to download the results as a JSON file | |
| json_data = json.dumps(results, indent=4) | |
| st.download_button( | |
| label="Tải file kết quả ở dạng JSON", | |
| data=json_data, | |
| file_name="invoice_results.json", | |
| mime="application/json" | |
| ) | |
| # Allow user to download the results as Excel file | |
| # Convert results to Excel format | |
| df = json_to_dms_excel(results, employee_code) | |
| # Allow user to preview excel file before downloading | |
| st.subheader("Xem trước dữ liệu Excel:") | |
| st.dataframe(df.head()) | |
| excel_buffer = BytesIO() | |
| df.to_excel(excel_buffer, index=False) | |
| excel_buffer.seek(0) | |
| st.download_button( | |
| label="Tải file theo template Excel từ DMS", | |
| data=excel_buffer, | |
| file_name="invoice_results.xlsx", | |
| mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | |
| ) |