diff --git a/docs/modules/document_loaders/examples/image.ipynb b/docs/modules/document_loaders/examples/image.ipynb new file mode 100644 index 00000000..7f0f3108 --- /dev/null +++ b/docs/modules/document_loaders/examples/image.ipynb @@ -0,0 +1,145 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f70e6118", + "metadata": {}, + "source": [ + "# Images\n", + "\n", + "This covers how to load images such as JPGs PNGs into a document format that we can use downstream." + ] + }, + { + "cell_type": "markdown", + "id": "09d64998", + "metadata": {}, + "source": [ + "## Using Unstructured" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0cc0cd42", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders.image import UnstructuredImageLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "082d557c", + "metadata": {}, + "outputs": [], + "source": [ + "loader = UnstructuredImageLoader(\"layout-parser-paper-fast.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "df11c953", + "metadata": {}, + "outputs": [], + "source": [ + "data = loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4284d44c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(page_content=\"LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\n\\n\\n‘Zxjiang Shen' (F3}, Ruochen Zhang”, Melissa Dell*, Benjamin Charles Germain\\nLeet, Jacob Carlson, and Weining LiF\\n\\n\\nsugehen\\n\\nshangthrows, et\\n\\n“Abstract. Recent advanocs in document image analysis (DIA) have been\\n‘pimarliy driven bythe application of neural networks dell roar\\n{uteomer could be aly deployed in production and extended fo farther\\n[nvetigtion. However, various factory ke lcely organize codebanee\\nsnd sophisticated modal cnigurations compat the ey ree of\\n‘erin! innovation by wide sence, Though there have been sng\\n‘Hors to improve reuablty and simplify deep lees (DL) mode\\n‘aon, sone of them ae optimized for challenge inthe demain of DIA,\\nThis roprscte a major gap in the extng fol, sw DIA i eal to\\nscademic research acon wie range of dpi in the social ssencee\\n[rary for streamlining the sage of DL in DIA research and appicn\\n‘tons The core LayoutFaraer brary comes with a sch of simple and\\nIntative interfaee or applying and eutomiing DI. odel fr Inyo de\\npltfom for sharing both protrined modes an fal document dist\\n{ation pipeline We demonutate that LayootPareer shea fr both\\nlightweight and lrgeseledgtieation pipelines in eal-word uae ces\\nThe leary pblely smal at Btspe://layost-pareergsthab So\\n\\n\\n\\n‘Keywords: Document Image Analysis» Deep Learning Layout Analysis\\n‘Character Renguition - Open Serres dary « Tol\\n\\n\\nIntroduction\\n\\n\\n‘Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndoctiment image analysis (DIA) tea including document image clasiffeation [I]\\n\", lookup_str='', metadata={'source': 'layout-parser-paper-fast.jpg'}, lookup_index=0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]" + ] + }, + { + "cell_type": "markdown", + "id": "09957371", + "metadata": {}, + "source": [ + "### Retain Elements\n", + "\n", + "Under the hood, Unstructured creates different \"elements\" for different chunks of text. By default we combine those together, but you can easily keep that separation by specifying `mode=\"elements\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0fab833b", + "metadata": {}, + "outputs": [], + "source": [ + "loader = UnstructuredImageLoader(\"layout-parser-paper-fast.jpg\", mode=\"elements\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c3e8ff1b", + "metadata": {}, + "outputs": [], + "source": [ + "data = loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "43c23d2d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\n', lookup_str='', metadata={'source': 'layout-parser-paper-fast.jpg', 'filename': 'layout-parser-paper-fast.jpg', 'page_number': 1, 'category': 'Title'}, lookup_index=0)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/langchain/document_loaders/__init__.py b/langchain/document_loaders/__init__.py index eb3a7c2a..764dd826 100644 --- a/langchain/document_loaders/__init__.py +++ b/langchain/document_loaders/__init__.py @@ -16,6 +16,7 @@ from langchain.document_loaders.googledrive import GoogleDriveLoader from langchain.document_loaders.gutenberg import GutenbergLoader from langchain.document_loaders.hn import HNLoader from langchain.document_loaders.html import UnstructuredHTMLLoader +from langchain.document_loaders.image import UnstructuredImageLoader from langchain.document_loaders.imsdb import IMSDbLoader from langchain.document_loaders.notebook import NotebookLoader from langchain.document_loaders.notion import NotionDirectoryLoader @@ -52,6 +53,7 @@ __all__ = [ "UnstructuredPowerPointLoader", "UnstructuredWordDocumentLoader", "UnstructuredPDFLoader", + "UnstructuredImageLoader", "ObsidianLoader", "UnstructuredDocxLoader", "UnstructuredEmailLoader", diff --git a/langchain/document_loaders/image.py b/langchain/document_loaders/image.py new file mode 100644 index 00000000..668b211c --- /dev/null +++ b/langchain/document_loaders/image.py @@ -0,0 +1,13 @@ +"""Loader that loads image files.""" +from typing import List + +from langchain.document_loaders.unstructured import UnstructuredFileLoader + + +class UnstructuredImageLoader(UnstructuredFileLoader): + """Loader that uses unstructured to load image files, such as PNGs and JPGs.""" + + def _get_elements(self) -> List: + from unstructured.partition.image import partition_image + + return partition_image(filename=self.file_path)