{"id":24171281,"url":"https://github.com/gitfrandu4/docu-scan","last_synced_at":"2026-02-10T22:04:10.481Z","repository":{"id":271161528,"uuid":"909816456","full_name":"gitfrandu4/docu-scan","owner":"gitfrandu4","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-12T19:44:36.000Z","size":78479,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-05T04:13:52.263Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gitfrandu4.github.io/docu-scan/","language":"JavaScript","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/gitfrandu4.png","metadata":{"files":{"readme":"README.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-29T21:22:34.000Z","updated_at":"2025-01-12T19:44:40.000Z","dependencies_parsed_at":"2025-03-02T12:37:57.736Z","dependency_job_id":null,"html_url":"https://github.com/gitfrandu4/docu-scan","commit_stats":null,"previous_names":["gitfrandu4/docu-scan"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gitfrandu4/docu-scan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fdocu-scan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fdocu-scan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fdocu-scan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fdocu-scan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitfrandu4","download_url":"https://codeload.github.com/gitfrandu4/docu-scan/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fdocu-scan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29319280,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2025-01-13T00:36:20.791Z","updated_at":"2026-02-10T22:04:10.460Z","avatar_url":"https://github.com/gitfrandu4.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aplicación Web de Escaneo de Documentos con Técnicas de Visión por Computador\n\nProyecto final para la asignatura de Visión por Computador de la Universidad de Las Palmas de Gran Canaria (ULPGC) en el Grado de Ingeniería Informática.\n\n## Descripción del Proyecto\n\nEste proyecto aborda la necesidad de mejorar la calidad de las fotografías de documentos tomadas por conductores de una empresa de transporte. Implementa una aplicación web que escanea documentos utilizando diversas tecnologías de visión por computador estudiadas durante el curso.\n\n## Características Técnicas\n\n### 1. Mejora de Documentos con OpenCV.js\n\n- Implementación de técnicas avanzadas de procesamiento de imágenes usando OpenCV.js:\n\n  ```javascript\n  // Ejemplo de transformación de perspectiva\n  function fourPointTransform(cv, mat, pts) {\n    let [tl, tr, br, bl] = pts\n    let M = cv.getPerspectiveTransform(srcCoords, dstCoords)\n    let warped = new cv.Mat()\n    cv.warpPerspective(mat, warped, M, dsize, cv.INTER_LINEAR)\n    return warped\n  }\n\n  // Ejemplo de mejora de nitidez\n  function sharpenImage(cv, grayMat) {\n    let blurred = new cv.Mat()\n    cv.GaussianBlur(grayMat, blurred, new cv.Size(3, 3), 0)\n    let sharpened = new cv.Mat()\n    cv.addWeighted(grayMat, 1.5, blurred, -0.5, 0, sharpened)\n    return sharpened\n  }\n  ```\n\n### 2. Detección de Documentos con YOLOv11 y TensorFlow.js\n\n- Detección en tiempo real usando modelo YOLOv11\n- Inferencia en navegador usando TensorFlow.js con backend WebGL\n- Pipeline de preprocesamiento personalizado:\n\n  ```javascript\n  // Ejemplo de preprocesamiento para YOLO\n  const preprocess = (source, modelWidth, modelHeight) =\u003e {\n    const input = tf.tidy(() =\u003e {\n      const img = tf.browser.fromPixels(source)\n      // Normalización y redimensionamiento\n      return tf.image\n        .resizeBilinear(img, [modelWidth, modelHeight])\n        .div(255.0)\n        .expandDims(0)\n    })\n    return input\n  }\n\n  // Ejemplo de post-procesamiento NMS\n  const nms = await tf.image.nonMaxSuppressionAsync(\n    boxes,\n    scores,\n    500, // maxOutputSize\n    0.45, // iouThreshold\n    0.25 // scoreThreshold\n  )\n  ```\n\n### 3. Extracción de Texto con Tesseract.js\n\n- Implementación de OCR usando Tesseract.js\n- Reconocimiento de campos específicos del DNI:\n\n  ```javascript\n  // Ejemplo de extracción de campos específicos\n  const fieldCoordinates = [\n    { name: 'DNI', x: 704, y: 181, width: 475, height: 73 },\n    { name: 'APELLIDOS', x: 634, y: 297, width: 541, height: 97 }\n  ]\n\n  // Procesamiento OCR por regiones\n  const processWithOCR = async (canvas, fields) =\u003e {\n    for (const { name, x, y, width, height } of fields) {\n      const region = canvas.getContext('2d').getImageData(x, y, width, height)\n      const {\n        data: { text }\n      } = await Tesseract.recognize(region, 'spa', {\n        logger: (m) =\u003e console.log(m)\n      })\n    }\n  }\n  ```\n\n## Detalles de Implementación Técnica\n\n### Pipeline de Procesamiento de Imágenes\n\n```javascript\n// Pasos clave del procesamiento\n1. Mejora inicial de contraste\n   cv.convertScaleAbs(gray, enhanced, 1.2, 10)\n\n2. Filtrado bilateral para reducción de ruido\n   cv.bilateralFilter(enhanced, denoised, 9, 75, 75)\n\n3. Detección de bordes con Canny\n   cv.Canny(preThresh, edges, 50, 150)\n\n4. Detección y validación de contornos\n   cv.findContours(dilated, contours, hierarchy,\n                   cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)\n\n5. Transformación de perspectiva\n   cv.warpPerspective(mat, warped, M, dsize)\n\n6. Mejora de texto con umbralización adaptativa\n   cv.adaptiveThreshold(cleaned, result, 255,\n                       cv.ADAPTIVE_THRESH_GAUSSIAN_C,\n                       cv.THRESH_BINARY, 21, 10)\n```\n\n## Instalación y Configuración\n\n1. Clonar el repositorio\n\n```bash\ngit clone https://github.com/tu-usuario/tu-repositorio.git\ncd tu-repositorio\n```\n\n2. Instalar dependencias\n\n```bash\nyarn install\n```\n\n3. Iniciar servidor de desarrollo\n\n```bash\nyarn start\n```\n\n4. Compilar para producción\n\n```bash\nyarn build\n```\n\n## Detalles del Modelo\n\nEl proyecto utiliza un modelo YOLOv11n convertido a formato TensorFlow.js:\n\n- Formato: Capas TensorFlow.js\n- Backend: WebGL para rendimiento óptimo\n\n## Créditos\n\nEste proyecto parte de [yolov8-tfjs](https://github.com/Hyuto/yolov8-tfjs) de Hyuto, que proporcionó la implementación de inferencia con TensorFlow.js. El repositorio original ha sido extendido con técnicas adicionales de visión por computador y capacidades de procesamiento de documentos.\n\n## Mejoras Futuras\n\n- Optimización de técnicas de preprocesamiento para reducción de ruido\n- Ampliación del dataset para mejorar la precisión del modelo YOLO\n- Integración de almacenamiento en la nube para documentos escaneados\n- Soporte para tipos adicionales de documentos\n- Interfaz optimizada para móviles\n\n## Referencias\n\n- [Ultralytics YOLOv11](https://github.com/ultralytics/ultralytics)\n- [Documentación OpenCV.js](https://docs.opencv.org/4.x/d5/d10/tutorial_js_root.html)\n- [Tesseract.js](https://github.com/naptha/tesseract.js)\n- [TensorFlow.js](https://www.tensorflow.org/js)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fdocu-scan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitfrandu4%2Fdocu-scan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fdocu-scan/lists"}