Streamlit集成Azure Document Intelligence分析PDF时出现InvalidContent错误的问题求助
Streamlit集成Azure Document Intelligence分析PDF时出现InvalidContent错误的问题求助
大家好,我现在碰到一个棘手的问题,想请各位帮忙看看:
我在Streamlit应用里做了PDF上传功能,代码是这样的:
import streamlit as st uploaded_file = st.file_uploader("Upload pdf file", type="pdf") result = analyze_general_document(uploaded_file)
之后我想用Azure Document Intelligence的Python包分析这个PDF,相关代码如下:
from io import BytesIO from azure.core.credentials import AzureKeyCredential from azure.ai.formrecognizer import DocumentAnalysisClient def set_client(secrets: dict): endpoint = secrets["AI_DOCS_BASE"] key = secrets["AI_DOCS_KEY"] document_analysis_client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key)) return document_analysis_client def analyze_general_document(uploaded_file, secrets: dict): print(f"File type: {uploaded_file.type}") print(f"File size: {uploaded_file.size} bytes") client = set_client(secrets) # poller = client.begin_analyze_document_from_url("prebuilt-document", formUrl) poller = client.begin_analyze_document("prebuilt-document", document=uploaded_file)
终端里能正常打印出文件的类型和大小:
File type: application/pdf File size: 6928426 bytes
而且用PyMuPDF打开这个文件也完全没问题,但调用begin_analyze_document方法时却抛出了如下异常:
Traceback (most recent call last): File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\streamlit\runtime\scriptrunner\exec_code.py", line 88, in exec_func_with_error_handling result = func() ^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 579, in code_to_exec exec(code, module.__dict__) File "C:\Users\myuser\Documents\visual-studio-code\project\project-ai-docs\webapp\app.py", line 79, in <module> main() File "C:\Users\myuser\Documents\visual-studio-code\project\project-ai-docs\webapp\app.py", line 61, in main zip_content = process_pdf(uploaded_file, secrets) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\Documents\visual-studio-code\project\project-ai-docs\webapp\app_backend.py", line 40, in process_pdf analyze_general_document(uploaded_file, secrets) File "C:\Users\myuser\Documents\visual-studio-code\project\project-ai-docs\webapp\az_document_intelligence.py", line 18, in analyze_general_document poller = client.begin_analyze_document("prebuilt-document", document=uploaded_file) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\azure\core\tracing\decorator.py", line 105, in wrapper_use_tracer return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\azure\ai\formrecognizer\_document_analysis_client.py", line 129, in begin_analyze_document return _client_op_path.begin_analyze_document( # type: ignore ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\azure\core\tracing\decorator.py", line 105, in wrapper_use_tracer return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\azure\ai\formrecognizer\_generated\v2023_07_31\operations\_document_models_operations.py", line 518, in begin_analyze_document raw_result = self._analyze_document_initial( # type: ignore ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\myuser\AppData\Local\miniconda3\envs\projectai\Lib\site-packages\azure\ai\formrecognizer\_generated\v2023_07_31\operations\_document_models_operations.py", line 443, in _analyze_document_initial raise HttpResponseError(response=response) azure.core.exceptions.HttpResponseError: (InvalidRequest) Invalid request. Code: InvalidRequest Message: Invalid request. Inner error: { "code": "InvalidContent", "message": "The file is corrupted or format is unsupported. Refer to documentation for the list of supported formats." }
我实在搞不懂为什么这个PDF会被判定为无效,后来我尝试把文件包装成BytesIO对象,代码改成这样,但还是没用:
def analyze_general_document(uploaded_file, secrets: dict): print(f"File type: {uploaded_file.type}") print(f"File size: {uploaded_file.size} bytes") # Read the file as bytes file_bytes = uploaded_file.read() client = set_client(secrets) # poller = client.begin_analyze_document_from_url("prebuilt-document", formUrl) poller = client.begin_analyze_document("prebuilt-document", document=BytesIO(file_bytes))
有没有大佬能帮我分析下问题出在哪,该怎么解决呢?
备注:内容来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

