{"id":21485129,"url":"https://github.com/drew138/p2","last_synced_at":"2026-05-20T15:02:04.008Z","repository":{"id":63062749,"uuid":"533114845","full_name":"drew138/p2","owner":"drew138","description":"Transcript IA es un software para el consultorio Julian Leon Ramirez Zuluaga, el cual transforma tablas en papel en archivos de Excel a traves de IA","archived":false,"fork":false,"pushed_at":"2022-11-28T23:32:49.000Z","size":1668,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-23T19:24:22.215Z","etag":null,"topics":["aws","grid-recognition","machine-learning","text-recognition","textract"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drew138.png","metadata":{"files":{"readme":"README entrega final.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-06T01:20:42.000Z","updated_at":"2022-10-23T04:06:23.000Z","dependencies_parsed_at":"2023-01-22T12:15:44.202Z","dependency_job_id":null,"html_url":"https://github.com/drew138/p2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drew138%2Fp2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drew138%2Fp2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drew138%2Fp2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drew138%2Fp2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drew138","download_url":"https://codeload.github.com/drew138/p2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244013291,"owners_count":20383707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","grid-recognition","machine-learning","text-recognition","textract"],"created_at":"2024-11-23T13:14:11.308Z","updated_at":"2026-05-20T15:01:58.441Z","avatar_url":"https://github.com/drew138.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Info de la materia: ST0258 Proyecto Integrador 2\n#\n# Estudiante(s): Andres Salazar Galeano, asalaza5@eafit.edu.co - Julian David Ramirez Lopera, jdramirezl@eafit.edu.co - Ana Sofia Arango Gonzalez, asarangog@eafit.edu.co\n#\n# Profesor: Edwin Nelson Montoya Munera, emontoya@eafit.edu.co\n#\n# Proyecto Integrador Final TranscriptAI\n#\n# 1. Breve descripción de la actividad\nTranscript AI es la implementación de un software como aplicación web para el consultorio odontológico Julian León Ramirez Zuluaga, el cual recibe y convierte documentos escritos a mano con las tablas sobre los desechos de basura que se generan bi-semanalmente, en archivos de Excel, a través de Inteligencia Artificial.  \nEl software busca reducir el tiempo de transcripción del registro de basuras bi-semanal que tiene que hacer el consultorio, el cual toma apróximadamente 2 horas a mano.  \nCon la solución propuesta, la persona encargada deberá solo escanear las tablas y el software se encargará de transformarlas en archivos de Excel.\n\n## 1.1. Qué aspectos cumplió o desarrolló de la actividad propuesta por el profesor (requerimientos funcionales y no funcionales)\nDesarrollo de una página web con registro e inicio de sesión, carga, descarga y edición de documentos, fotos y archivos de Excel.  \nReconocimiento de texto de documentos escritos a mano y conversión a archivos de texto plano y archivos de Excel.  \nDespliegue de la aplicación web con dominio propio.\n\n## 1.2. Qué aspectos NO cumplió o desarrolló de la actividad propuesta por el profesor (requerimientos funcionales y no funcionales)\nLos procesos de fondo no corren correctamente, se arreglaron unos problemas que habían pero no se logró desplegar.  \nLas imágenes se analizan secuencialmente, por lo que el algoritmo no cumple con la eficiencia de tiempo esperada.\n\n# 2. Información general de diseño de alto nivel, arquitectura, patrones, mejores prácticas utilizadas.\n### Diagrama de despliegue y tecnología\n\n![image](https://user-images.githubusercontent.com/58788781/197372027-1069c108-2b37-45d0-82f0-7450c853d183.png)\n\n[Link a Lucidchart](https://lucid.app/lucidchart/a26e6175-a1c9-4822-9ebf-0c16f3885f39/edit?viewport_loc=-1565%2C-1253%2C5622%2C2608%2C0_0\u0026invitationId=inv_8d8c8282-7adb-4965-a41c-c551c363a794)\n\n# 3. Descripción del ambiente de desarrollo y técnico: lenguaje de programación, librerias, paquetes, etc, con sus numeros de versiones.\nLas principales tecnologías usadas para el desarrollo son las siguientes:  \n- Django  \n- Django Rest Framework  \n- Boto3  \n- Pillow  \n- OpenCV  \n- React  \n- Typescript  \n- Chakra UI  \n- AWS S3  \n- AWS RDS  \n- AWS Textract  \n- Gunicorn  \n- Nginx  \n- Docker  \n\nLas otras dependencias están mencionadas en el archivo \"requirements.txt\". Las versiones de cada una de estas son las siguientes:\n```\nasgiref==3.5.0\ncertifi==2021.10.8\ncffi==1.15.0\ncharset-normalizer==2.0.12\ncryptography==36.0.2\ndefusedxml==0.7.1\nDjango==4.0.3\ndjango-allauth==0.49.0\ndjango-bootstrap-modal-forms==2.2.0\ndjango-cors-headers==3.7.0\ndjango-crispy-forms==1.14.0\ndjango-filter==2.4.0\ndjangorestframework==3.12.4\nidna==3.3\noauthlib==3.2.0\npsycopg2==2.9.3\npycparser==2.21\nPyJWT==2.3.0\npython3-openid==3.2.0\npytz==2022.1\nrequests==2.27.1\nrequests-oauthlib==1.3.1\nsqlparse==0.4.2\ntzdata==2022.1\nurllib3==1.26.9\ndjoser==2.1.0\ndjango_extensions==3.1.5\ndjango-filter==2.4.0\nPillow==9.2.0\ndjango-storages==1.12.3\nboto3==1.24.2\nnumpy==1.23.4\nopencv-python==4.6.0.66\nopenpyxl==3.0.10\ndjango-background-tasks-updated==1.2.7\npandas==1.5.0\n```\n\n## Cómo se compila y ejecuta\nPara realizar desarrollo local, únicamente es necesario ejecutar los siguientes comandos, ya que la aplicación entera se encuentra dockerizada. De este modo se construyen todos los contenedores y dependencias de la aplicación.\n```\ndocker-compose up --build\n```\n\nAparte de esto, para correr los procesos de fondo de manera directa se debe correr el siguiente comando, una vez que la aplicación entera se encuentre desplegada.\n```\ndocker-compose exec django python manage.py process_tasks\n```\n\nCabe aclarar que es necesario contar con un archivo de entorno  `.env` para que estos comandos puedan correr. \n\nEste archivo debe contar con la siguiente estructura:\n\n```.env\nAWS_STORAGE_BUCKET_NAME=AWS_STORAGE_BUCKET_NAME\nAWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID\nAWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY\nAWS_TEXTRACT_BUCKET=AWS_TEXTRACT_BUCKET\nAWS_TEXTRACT_REGION=AWS_TEXTRACT_REGION\n```\n\nEstos secretos deben ser configurados apropiadamente en AWS para que el proyecto funcione correctamente. Estos hacen referencia los siguientes servicios de este:\n\n- AWS Textract\n- Dos buckets de AWS S3\n- Una cuenta AMI con acceso a AWS Textract y a AWS S3\n\n## Detalles del desarrollo\nComo se había mencionado previamente esta aplicación fue desarrollada tanto en React, como en Django, lo cual implica una separación de la lógica de negocio de la interfaz de usuario. La aplicación consta de un diseño por capas muy similar a MVC (modelo, vista controlador). La única diferencia es que este también depende de otras capas y servicios para funcionar correctamente.\n\nEn términos del backend, se implementó el registro de usuarios, inicio de sesión, y las operaciones CRUD tanto para los archivos como para los reportes. En el caso de de los archivos, una vez que estos son creados, se registra un nuevo proceso de fondo que estara encargado de separar la imagen subida en cada una de las celdas de manera que se tengan recortes sobre estas. Posteriormente, cada una de estas imagenes es subida al bucket de S3. Una vez esto este concluido, se itera sobre cada una de las imagenes y se realiza la traducción mediante el servicio de textract para poder generar un archivo csv.\n\nPara los reportes, se cuenta con proceso similar. Cada vez que se genere un reporte para un nuevo año, también se crea un nuevo proceso de fondo que se encarga de filtrar los archivos creados en el respectivo año, y realizar una compilación que incluya las traducciones de cada uno de estos.\n\nRespecto al frontend, se implementaron diferentes vistas para que el usuario pueda accedar a las funcionalidades ya descritas de una manera amigable. Entre estas tenemos: \n\n- Creación de cuenta.\n- Inicio de sesión.\n- Página principal:\n\t- Cuenta con una tabla de archivos la cual permite visualizar, crear, borrar y modificar archivos.\n\t- Cuenta con una tabla de reportes la cual permite visualizar, crear y borrar reportes.\n\n## Detalles técnicos\n- Se utilizó Django para el desarrollo del backend.  \n- Se utilizó React y Chakra UI para el desarrollo del frontend.  \n- Se utilizó PostgreSQL y AWS RDS como base de datos.  \n- Se utilizaron servicios de AWS como S3 y Textract y OpenCV para el procesamiento de imagenes.  \n- Se utilizó Nginx y Gunicorn para el despliegue de la aplicación.  \n- Se utilizó Docker para el desarrollo de la aplicación.\n\n## Descripción y como se configura los parámetros del proyecto (ej: ip, puertos, conexión a bases de datos, variables de ambiente, parámetros, etc)\nTodas las variables de entorno utilizadas en el proyecto se pueden visualizar aquí:\n\n```.env\nAWS_STORAGE_BUCKET_NAME=AWS_STORAGE_BUCKET_NAME\nAWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID\nAWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY\nAWS_TEXTRACT_BUCKET=AWS_TEXTRACT_BUCKET\nAWS_TEXTRACT_REGION=AWS_TEXTRACT_REGION\nREACT_APP_BASE_URL=REACT_APP_BASE_URL\nDEBUG=DEBUG\nNAME=NAME\nUSER=USER\nPASSWORD=PASSWORD\nHOST=HOST\nPORT=PORT\n```\n\nAparte de las previamente mencionadas relacionadas a textract y los buckets de aws, es necesario incluir la variable de entorno `REACT_APP_BASE_URL` la cual es utilizada durante el proceso de construcción de la aplicación en React. Las demás, son concernientes a la base de datos en RDS.\n\n# 4. Descripción del ambiente de EJECUCIÓN (en producción) lenguaje de programación, librerias, paquetes, etc, con sus numeros de versiones.\nRespecto al ambiente de ejecución de producción, este no varía respecto al de desarrollo. El único cambio fue que las aplicaciones ya no se corren dockerizadas, sino directamente en el servidor. Para el caso del frontend, no se corre el servidor destinado a desarrollo. Se realiza un \"build\" de la apliación que es posteriromente servida por el servidor de nginx.\n\nDe igual manera, para Django, se corre la aplicación a través de Gunicorn, el cual es un servidor WSGI usualmente utilizado para despliegues en Python.\n\nAparte de esto, se utiliza nginx como proxy inverso para enrutar las peticiones dirigidas al frontend, y las peticiones dirigidas al backend.\n\n# IP o nombres de dominio en nube o en la máquina servidor\nEn el despliegue se cuenta con las siguientes IPs o nombres de dominio relevantes:\n\n- IP de DCA: 192.168.10.213\n* Nombre de dominio de la aplicación: pi2transcriptia.dis.eafit.edu.co\n* Bucket de aplicación: arn:aws:s3:::django-bucket-p2\n* Bucket de aplicación utilizado para interpretación de imagenes: arn:aws:s3:::textract-bucket-p2\n\n## Descripción y como se configura los parámetros del proyecto (ej: ip, puertos, conexión a bases de datos, variables de ambiente, parámetros, etc)\nTodas las variables de entorno utilizadas en el proyecto se pueden visualizar aquí:\n\n```.env\nAWS_STORAGE_BUCKET_NAME=AWS_STORAGE_BUCKET_NAME\nAWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID\nAWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY\nAWS_TEXTRACT_BUCKET=AWS_TEXTRACT_BUCKET\nAWS_TEXTRACT_REGION=AWS_TEXTRACT_REGION\nREACT_APP_BASE_URL=REACT_APP_BASE_URL\nDEBUG=DEBUG\nNAME=NAME\nUSER=USER\nPASSWORD=PASSWORD\nHOST=HOST\nPORT=PORT\n```\n\nAparte de las previamente mencionadas relacionadas a textract y los buckets de AWS, es necesario incluir la variable de entorno `REACT_APP_BASE_URL` la cual es utilizada durante el proceso de construcción de la aplicación en React. Las demás, son concernientes a la base de datos en RDS.\n\n## Como se lanza el servidor.\nPasos para correr el proyecto como usuario:\n\n1. Inicialmente se debe instalar docker.\n2. Se debe clonar el [repositorio](https://github.com/Drew138/p2) del proyecto.\n3. Únicamente es necesario ejecutar los siguientes comandos, ya que la aplicación entera se encuentra dockerizada. De este modo se construyen todos los contenedores y dependencias de la aplicación.\n```\ndocker-compose up --build\n```\n\nAparte de esto, para correr los procesos de fondo de manera directa se debe correr el siguiente comando, una vez que la aplicación entera se encuentre desplegada.\n```\ndocker-compose exec django python manage.py process_tasks\n```\n\nCabe aclarar que es necesario contar con un archivo de entorno  `.env` para que estos comandos puedan correr. \n\nEste archivo debe contar con la siguiente estructura:\n\n```.env\nAWS_STORAGE_BUCKET_NAME=AWS_STORAGE_BUCKET_NAME\nAWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID\nAWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY\nAWS_TEXTRACT_BUCKET=AWS_TEXTRACT_BUCKET\nAWS_TEXTRACT_REGION=AWS_TEXTRACT_REGION\n```\n\nEstos secretos deben ser configurados apropiadamente en AWS para que el proyecto funcione correctamente. Estos hacen referencia los siguientes servicios de este:\n\n- AWS Textract\n- Dos buckets de AWS S3\n- Una cuenta AMI con acceso a AWS Textract y a AWS S3\n\n## Una mini guia de como un usuario utilizaría el software o la aplicación\n1. El usuario ingresa al link de la página https://pi2transcriptia.dis.eafit.edu.co/ y lo primero que debe hacer es registrarse.\n\n2. Al registrarse podrá acceder a la página principal, aquí encontrará todas las funcionalidades. Para comenzar, el usuario deberá subir una foto del documento desde el botón de Subir Imagen, después de unos segundos esta se verá reflejada en la tabla de Lista de Archivos.\n\n3. Desde la tabla de Lista de Archivos el usuario podrá descargar la imagen que subió anteriormente, descargar la transcripción generada por la página, la cual es un archivo csv que se puede editar y volver a subir, además se pueden eliminar las filas de la tabla.\n\n4. En la otra tabla Lista de Reportes, se pueden generar los reportes anuales correspondientes a las imagenes y descargarse.\n\n## Resultados o pantallazos \n![image](https://user-images.githubusercontent.com/37346028/204393885-2cadc128-2ef4-4280-8f2b-f7d12c6e13a0.png)\n![image](https://user-images.githubusercontent.com/37346028/204393859-ffb377ff-bf5d-4f35-bb47-c0ca12e21d1d.png)\n![image](https://user-images.githubusercontent.com/37346028/204393773-3afa2752-9d9a-4e47-ac2d-480aaccc2d59.png)\n![image](https://user-images.githubusercontent.com/37346028/204394006-919ad509-8979-416a-86ac-b7af2eff2372.png)\n![image](https://user-images.githubusercontent.com/37346028/204394048-391fe84f-c225-4f43-b16d-c454f88dda95.png)\n![image](https://user-images.githubusercontent.com/37346028/204393951-f6245567-0c89-4966-9c02-f290375c34d6.png)\n\n# Referencias:\n## https://docs.djangoproject.com/en/4.1/ref/files/uploads/\n## https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/\n## https://stackoverflow.com/questions/7514964/django-how-to-create-a-file-and-save-it-to-a-models-filefield\n## https://docs.djangoproject.com/en/4.1/topics/files/\n## https://docs.djangoproject.com/en/4.1/ref/models/querysets/\n## https://stackoverflow.com/questions/2997433/django-filtering-datetime-field-by-only-the-year-value\n## https://www.youtube.com/watch?v=90sYmk4oAUc\u0026list=PLlM3i4cwc8zBRQOGXuLrCLNfpVOuVLuwZ\u0026index=3\n## https://www.youtube.com/watch?v=_MbZSSXdM8s\u0026list=PLlM3i4cwc8zBRQOGXuLrCLNfpVOuVLuwZ\u0026index=6\n## https://chakra-templates.dev/\n## https://chakra-ui.com/docs/\n## https://codesandbox.io/s/e0e6d?file=/src/index.tsx\n\n#### versión README.md -\u003e 1.0 (2022-noviembre)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrew138%2Fp2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrew138%2Fp2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrew138%2Fp2/lists"}