vinhngba2704's picture
First commit application to vinhngba2704/multimodal-image-audio
5654237
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"
)