首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • GM-3568JHF

        • 一、简介

          • GM-3568JHF 简介
        • 二、快速开始

          • 00 前言
          • 01 环境搭建
          • 02 编译说明
          • 03 烧录指南
          • 04 调试工具
          • 05 软件更新
          • 06 查看信息
          • 07 测试命令
          • 08 应用编译
          • 09 源码获取
        • 三、外设与接口

          • 01 USB
          • 02 显示与触摸
          • 03 以太网
          • 04 WIFI
          • 05 蓝牙
          • 06 TF-Card
          • 07 音频
          • 08 串口
          • 09 CAN
          • 10 RTC
        • 四、应用开发

          • 01 UART读写案例
          • 02 按键检测案例
          • 03 LED灯闪烁案例
          • 04 MIPI屏幕检测案例
          • 05 读取 USB 设备信息案例
          • 06 FAN 检测案例
          • 07 FPGA FSPI 通信案例
          • 08 FPGA DMA 读写案例
          • 09 GPS调试案例
          • 10 以太网测试案例
          • 11 RS485读写案例
          • 12 FPGA IIC 读写案例
          • 13 PN532 NFC读卡案例
          • 14 TF卡读写案例
        • 五、QT开发

          • 01 ARM64交叉编译器环境搭建
          • 02 QT 程序加入开机自启服务
        • 六、RKNN_NPU开发

          • 01 RK3568 NPU 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

          • ARM与FPGA通讯
          • FPGA开发手册
        • 八、其他

          • 01 根目录文件系统的修改
          • 02 系统自启服务
        • 九、资料下载

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 3.1 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 3.2 资料获取

            • 1 OpenHarmony 官方资料
          • 3.3 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 3.4 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 3.5 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 4.1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 4.2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 5.1 指南
          • 5.2 设备树介绍
          • 5.3 NAPI 入门
          • 5.4 ArkTS入门
          • 5.5 NAPI开发实战演示
          • 5.6 GPIO介绍
          • 5.7 I2C通讯
          • 5.8 SPI通信
          • 5.9 PWM 控制
          • 5.10 串口通讯
          • 5.11 TF卡
          • 5.12 屏幕
          • 5.13 触摸
          • 5.14 Ethernet(以太网)
          • 5.15 M.2 硬盘
          • 5.16 音频
          • 5.17 WIFI & BT
          • 5.18 摄像头
        • 六、资料下载

          • 资料下载
      • M5-R1

        • 一、简介

          • M5-R1 开发文档
        • 二、快速上手

          • 镜像烧录
          • 环境搭建
          • 下载源码
        • 三、外设与接口

          • 3.1 树莓派接口
          • 3.2 GPIO接口
          • 3.3 I2C接口
          • 3.4 SPI通信
          • 3.5 PWM控制
          • 3.6 串口通信
          • 3.7 TF卡插槽
          • 3.8 显示屏
          • 3.9 触摸屏
          • 3.10 音频
          • 3.11 RTC
          • 3.12 以太网
          • 3.13 M.2接口
          • 3.14 MINI PCIE接口
          • 3.15 摄像头
          • 3.16 WIFI蓝牙
        • 四、资料下载

          • 资料下载
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • 3.1 ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 3.2 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 4.1 环境搭建
          • 4.2 源码下载
          • 4.3 源码编译
        • 五、内核的外设与接口

          • 5.1 树莓派接口
          • 5.2 GPIO 接口
          • 5.3 I2C 接口
          • 5.4 SPI 通信
          • 5.5 PWM 控制
          • 5.6 串口通信
          • 5.7 TF卡插槽
          • 5.8 显示屏
          • 5.9 触摸屏
          • 5.10 音频
          • 5.11 RTC
          • 5.12 以太网
          • 5.13 M.2接口
          • 5.14 MINI PCIE接口
          • 5.15 摄像头
          • 5.16 WIFI蓝牙
          • 5.17 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • 1.1 产品简介
        • 二、快速开始

          • 2.1 调试工具安装
          • 2.2 开发环境搭建
          • 2.3 源码下载
          • 2.4 编译说明
          • 2.5 烧录指南
          • 2.6 APT 更新源
          • 2.7 查看板卡信息
          • 2.8 命令行 LED 和按键测试
          • 2.9 GCC 编译程序
        • 三、应用开发

          • 3.1 基础应用开发

            • 3.1.1 开发环境准备
            • 3.1.2 第一个应用 HelloWorld
            • 3.1.3 开发 HAR 包
          • 3.2 外设应用案例

            • 3.2.1 UART 读写
            • 3.2.2 按键实验
            • 3.2.3 LED 闪烁
        • 四、外设与接口

          • 4.1 标准外设

            • 4.1.1 USB
            • 4.1.2 显示与触摸
            • 4.1.3 以太网
            • 4.1.4 WIFI
            • 4.1.5 蓝牙
            • 4.1.6 TF卡
            • 4.1.7 音频
            • 4.1.8 串口
            • 4.1.9 CAN
            • 4.1.10 RTC
          • 4.2 接口

            • 4.2.1 音频
            • 4.2.2 RS485
            • 4.2.3 显示
            • 4.2.4 触摸
        • 五、系统定制开发

          • 5.1 系统移植
          • 5.2 系统定制
          • 5.3 驱动开发
          • 5.4 系统调试
          • 5.5 OTA 升级
        • 六、资料下载

          • 6.1 资料下载
    • EVS相机

      • CF-NRS1

        • 一、简介

          • 1.1 关于 CF-NRS1
          • 1.2 基于事件的概念
          • 1.3 快速开始
          • 1.4 资源
        • 二、开发

          • 2.1 开发概览

            • 2.1.1 Shimetapi 混合相机 SDK 简介
          • 2.2 环境与API

            • 2.2.1 环境说明
            • 2.2.2 开发 API 说明
          • 2.3 Linux开发

            • 2.3.1 Linux SDK 简介
            • 2.3.2 Linux SDK API
            • 2.3.3 Linux 算法
            • 2.3.4 Linux 算法 API
          • 2.4 服务与Web

            • 2.4.1 EVS 服务器
            • 2.4.2 时间服务器
            • 2.4.3 EVS Web
        • 三、资料下载

          • 3.1 资料下载
        • 四、常见问题

          • 4.1 常见问题
      • CF-CRA2

        • 一、简介

          • 1.1 关于 CF-CRA2
        • 二、资料下载

          • 2.1 资料下载
      • EVS模块

        • 一、相关概念
        • 二、硬件准备与环境配置
        • 三、示例程序使用指南
        • 资料下载
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 3.1 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 3.2 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 3.3 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 一、简介

          • 1.1 产品简介
        • 二、Demo简单操作指引

          • 2.1 智慧监控Demo使用说明
      • RDK-X5

        • 一、简介

          • RDK-X5 硬件简介
        • 二、快速开始

          • RDK-X5 快速开始
        • 三、应用开发

          • 3.1 AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 3.2 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • 3.3 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • 3.4 USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 3.5 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
          • 3.6 ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
      • RDK-S100

        • 一、简介

          • 1.1 关于 RDK-S100
        • 二、快速开始

          • 2.1 首次使用
        • 三、应用开发

          • 3.1 AI在线模型开发

            • 3.1.1 接入火山引擎豆包 AI
            • 3.1.2 图片分析
            • 3.1.3 多模态视觉分析定位
            • 3.1.4 多模态图文比较分析
            • 3.1.5 多模态文档表格分析
            • 3.1.6 摄像头运用-AI视觉分析
          • 3.2 大语言模型

            • 3.2.1 语音识别
            • 3.2.2 语音对话
            • 3.2.3 多模态图片分析-语音对话
            • 3.2.4 多模态图片比较-语音对话
            • 3.2.5 多模态文档分析-语音对话
            • 3.2.6 多模态视觉运用-语音对话
          • 3.3 40pin-IO开发

            • 3.3.1 GPIO 输出(LED闪烁)
            • 3.3.2 GPIO 输入
            • 3.3.3 按键控制 LED
            • 3.3.4 PWM 输出
            • 3.3.5 串口输出
            • 3.3.6 IIC 实验
            • 3.3.7 SPI 实验
          • 3.4 USB模块开发使用

            • 3.4.1 USB 语音模块使用
            • 3.4.2 声源定位模块使用
          • 3.5 机器视觉技术实战

            • 3.5.1 打开 USB 摄像头
            • 3.5.2 图像处理基础
            • 3.5.3 目标检测
            • 3.5.4 图像分割
          • 3.6 ROS2基础开发

            • 3.6.1 搭建环境
            • 3.6.2 工作包的创建及编译
            • 3.6.3 运行 ROS2 话题通信节点
            • 3.6.4 ROS2 相机应用
    • 核心板

      • C-3568BQ

        • 一、简介

          • C-3568BQ 简介
      • C-3588LQ

        • 一、简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 一、简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 一、简介

          • C-K1BA 简介

AI在线开发

实验05-多模态文档表格分析

实验准备:

  1. 确保已接入火山引擎豆包ai
  2. 寻找一张格式为jpg图片,作为实验素材
  3. 下载python-docx,命令:pip install python-docx (本文档以分析word文档为例,如需分析Excel等其他文件,请根据终端提示操作)

实验步骤:

  1. cd AI_online #进入主目录
  2. python examples/04_document_analyzer.py #运行示例程序

参考命令:/docx /home/sunrise/AI_online/assets/text.docx

终端运行结果如下:

TOOL
"""
文档分析器示例
专门用于分析文档、表格、图表等结构化内容
"""

import os
import sys
from typing import Dict, List, Optional
try:
    import docx
except ImportError:
    docx = None
try:
    import openpyxl
except ImportError:
    openpyxl = None

# 添加父目录到路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from utils.api_client import DoubaoAPIClient
from utils.image_processor import ImageProcessor

class DocumentAnalyzer:
    """文档分析器"""
  
    def __init__(self):
        """初始化分析器"""
        try:
            self.client = DoubaoAPIClient()
            self.processor = ImageProcessor()
        
            # 预定义的分析模板
            self.analysis_templates = {
                "ocr": "请识别并提取这个文档中的所有文字内容,保持原有的格式和结构。",
                "table": "请分析这个表格的结构和内容,并以结构化的方式描述表格数据。",
                "chart": "请分析这个图表,包括图表类型、数据趋势、关键信息等。",
                "form": "请识别这个表单的字段和内容,并整理成结构化格式。",
                "invoice": "请分析这张发票,提取关键信息如金额、日期、商品等。",
                "contract": "请分析这份合同文档,提取关键条款和重要信息。",
                "report": "请分析这份报告,总结主要内容和关键数据。",
                "presentation": "请分析这个演示文稿页面,提取主要观点和信息。"
            }
        
            print("文档分析器初始化成功")
        
        except Exception as e:
            print(f"初始化失败: {e}")
            raise
  
    def analyze_document(self, image_path: str, doc_type: str = "auto", 
                        custom_prompt: str = None) -> Optional[Dict]:
        """
        分析文档
    
        Args:
            image_path: 文档图像路径
            doc_type: 文档类型 (auto, ocr, table, chart, form, invoice, contract, report, presentation)
            custom_prompt: 自定义分析提示词
        
        Returns:
            Dict: 分析结果
        """
        try:
            # 验证图像
            if not self.processor.validate_image(image_path):
                return None
        
            # 获取图像信息
            image_info = self.processor.get_image_info(image_path)
            print(f"分析文档: {os.path.basename(image_path)}")
            print(f"   尺寸: {image_info.get('width')}x{image_info.get('height')}")
        
            # 确定分析提示词
            if custom_prompt:
                prompt = custom_prompt
            elif doc_type == "auto":
                prompt = self._auto_detect_prompt(image_path)
            else:
                prompt = self.analysis_templates.get(doc_type, self.analysis_templates["ocr"])
        
            print(f"分析类型: {doc_type}")
            print(f"分析提示: {prompt[:50]}...")
        
            # 执行分析
            result = self.client.chat_with_image_file(prompt, image_path)
        
            if result:
                return {
                    "file_path": image_path,
                    "file_name": os.path.basename(image_path),
                    "doc_type": doc_type,
                    "image_info": image_info,
                    "analysis_prompt": prompt,
                    "result": result,
                    "success": True
                }
            else:
                return {
                    "file_path": image_path,
                    "success": False,
                    "error": "分析失败"
                }
            
        except Exception as e:
            print(f"文档分析失败: {e}")
            return {
                "file_path": image_path,
                "success": False,
                "error": str(e)
            }
  
    def _auto_detect_prompt(self, image_path: str) -> str:
        """
        自动检测文档类型并生成提示词
    
        Args:
            image_path: 图像路径
        
        Returns:
            str: 分析提示词
        """
        # 基于文件名推测文档类型
        filename = os.path.basename(image_path).lower()
    
        if any(word in filename for word in ["table", "表格", "excel", "sheet"]):
            return self.analysis_templates["table"]
        elif any(word in filename for word in ["chart", "graph", "图表", "统计"]):
            return self.analysis_templates["chart"]
        elif any(word in filename for word in ["form", "表单", "申请"]):
            return self.analysis_templates["form"]
        elif any(word in filename for word in ["invoice", "发票", "账单"]):
            return self.analysis_templates["invoice"]
        elif any(word in filename for word in ["contract", "合同", "协议"]):
            return self.analysis_templates["contract"]
        elif any(word in filename for word in ["report", "报告", "总结"]):
            return self.analysis_templates["report"]
        elif any(word in filename for word in ["ppt", "slide", "演示", "幻灯片"]):
            return self.analysis_templates["presentation"]
        else:
            # 默认使用OCR
            return self.analysis_templates["ocr"]
  
    def extract_text(self, image_path: str) -> Optional[str]:
        """
        提取文档中的文字(OCR功能)
    
        Args:
            image_path: 文档图像路径
        
        Returns:
            str: 提取的文字内容
        """
        result = self.analyze_document(image_path, "ocr")
        return result["result"] if result and result["success"] else None
  
    def analyze_table(self, image_path: str) -> Optional[str]:
        """
        分析表格结构和内容
    
        Args:
            image_path: 表格图像路径
        
        Returns:
            str: 表格分析结果
        """
        result = self.analyze_document(image_path, "table")
        return result["result"] if result and result["success"] else None
  
    def analyze_chart(self, image_path: str) -> Optional[str]:
        """
        分析图表内容
    
        Args:
            image_path: 图表图像路径
        
        Returns:
            str: 图表分析结果
        """
        result = self.analyze_document(image_path, "chart")
        return result["result"] if result and result["success"] else None
  
    def analyze_word(self, file_path: str) -> Optional[str]:
        """
        分析 Word 文档内容(.docx)
        """
        try:
            if not os.path.exists(file_path):
                print(f"文件不存在: {file_path}")
                return None
            if not file_path.lower().endswith(".docx"):
                print("仅支持 .docx 格式的 Word 文档")
                return None
            if docx is None:
                print("未安装 python-docx,请先安装:pip install python-docx")
                return None
            document = docx.Document(file_path)
            paragraphs = [p.text.strip() for p in document.paragraphs if p.text.strip()]
            table_texts = []
            for table in document.tables:
                for row in table.rows:
                    cells = [cell.text.strip() for cell in row.cells]
                    if any(cells):
                        table_texts.append(" | ".join(cells))
            content = "\n".join(paragraphs)
            if table_texts:
                content += "\n\n表格内容:\n" + "\n".join(table_texts)
            if len(content) > 8000:
                content = content[:8000] + "\n...(内容已截断)"
            prompt = f"请分析以下 Word 文档内容,提取关键要点、结构和重要信息:\n\n{content}"
            result = self.client.chat_text(prompt)
            return result if result else None
        except Exception as e:
            print(f"Word 文档分析失败: {e}")
            return None
  
    def analyze_excel(self, file_path: str) -> Optional[str]:
        """
        分析 Excel 表格内容(.xlsx)
        """
        try:
            if not os.path.exists(file_path):
                print(f"文件不存在: {file_path}")
                return None
            if not file_path.lower().endswith(".xlsx"):
                print("仅支持 .xlsx 格式的 Excel 表格")
                return None
            if openpyxl is None:
                print("未安装 openpyxl,请先安装:pip install openpyxl")
                return None
            wb = openpyxl.load_workbook(file_path, data_only=True)
            ws = wb.active
            rows_data = []
            max_rows = 50
            max_cols = 20
            for r_idx, row in enumerate(ws.iter_rows(values_only=True), start=1):
                if r_idx > max_rows:
                    break
                cells = []
                for c_idx, cell in enumerate(row, start=1):
                    if c_idx > max_cols:
                        break
                    cells.append("" if cell is None else str(cell))
                rows_data.append(", ".join(cells))
            content = "\n".join(rows_data)
            prompt = f"请分析以下 Excel 表格的结构与数据,提取关键指标、趋势与异常,并给出简要总结:\n\n{content}"
            result = self.client.chat_text(prompt)
            return result if result else None
        except Exception as e:
            print(f"Excel 表格分析失败: {e}")
            return None
  
    def batch_analyze(self, folder_path: str, doc_type: str = "auto") -> List[Dict]:
        """
        批量分析文档
    
        Args:
            folder_path: 文档文件夹路径
            doc_type: 文档类型
        
        Returns:
            List[Dict]: 批量分析结果
        """
        results = []
    
        if not os.path.exists(folder_path):
            print(f"文件夹不存在: {folder_path}")
            return results
    
        # 支持的图像格式
        supported_formats = ['.jpg', '.jpeg']
    
        # 遍历文件夹
        files = [f for f in os.listdir(folder_path) 
                if os.path.splitext(f.lower())[1] in supported_formats]
    
        if not files:
            print("文件夹中没有找到支持的图像文件(仅支持JPG/JPEG)")
            return results
    
        print(f"开始批量分析,共 {len(files)} 个文件")
    
        for i, filename in enumerate(files, 1):
            file_path = os.path.join(folder_path, filename)
            print(f"\n[{i}/{len(files)}] 分析文件: {filename}")
        
            result = self.analyze_document(file_path, doc_type)
            if result:
                results.append(result)
                if result["success"]:
                    print("分析成功")
                else:
                    print(f"分析失败: {result.get('error', '未知错误')}")
            else:
                print("分析失败")
    
        print(f"\n批量分析完成,成功: {sum(1 for r in results if r['success'])}/{len(results)}")
        return results
  
    def save_results(self, results: List[Dict], output_file: str = "analysis_results.txt"):
        """
        保存分析结果到文件
    
        Args:
            results: 分析结果列表
            output_file: 输出文件路径
        """
        try:
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write("=== 文档分析结果 ===\n\n")
            
                for i, result in enumerate(results, 1):
                    f.write(f"[{i}] 文件: {result['file_name']}\n")
                    f.write(f"路径: {result['file_path']}\n")
                    f.write(f"类型: {result.get('doc_type', 'unknown')}\n")
                    f.write(f"状态: {'成功' if result['success'] else '失败'}\n")
                
                    if result['success']:
                        f.write(f"分析结果:\n{result['result']}\n")
                    else:
                        f.write(f"错误信息: {result.get('error', '未知错误')}\n")
                
                    f.write("-" * 50 + "\n\n")
        
            print(f"结果已保存到: {output_file}")
        
        except Exception as e:
            print(f"保存结果失败: {e}")

def main():
    """主函数"""
    print("=== 火山引擎文档分析器 ===")
  
    try:
        analyzer = DocumentAnalyzer()
    
        print("\n可用功能:")
        print("1. 单文档分析 - /analyze <文件路径> [类型]")
        print("2. 批量分析 - /batch <文件夹路径> [类型]")
        print("3. OCR提取 - /ocr <文件路径>")
        print("4. 表格分析 - /table <文件路径>")
        print("5. 图表分析 - /chart <文件路径>")
        print("6. 查看类型 - /types")
        print("7. 帮助信息 - /help")
        print("8. 退出程序 - /quit")
        print("9. Word 文档分析 - /docx <文件路径>")
        print("10. Excel 表格分析 - /xlsx <文件路径>")
        print("\n[路径提示] 可使用以下示例路径:")
        print("1. 绝对路径: C:\\Users\\Administrator\\Pictures\\image.jpg")
        print("2. 相对路径: assets\\sample.jpg")
        print("3. 当前目录: .\\assets\\sample.jpg")
        print("支持 JPG/JPEG(.jpg/.jpeg)、Word(.docx)、Excel(.xlsx) 文件")
    
        while True:
            try:
                user_input = input("\n请输入命令: ").strip()
            
                if not user_input:
                    continue
            
                parts = user_input.split(" ", 2)
                command = parts[0].lower()
            
                if command == "/quit":
                    print("感谢使用文档分析器!")
                    break
            
                elif command == "/help":
                    print("\n可用功能:")
                    print("1. 单文档分析 - /analyze <文件路径> [类型]")
                    print("2. 批量分析 - /batch <文件夹路径> [类型]")
                    print("3. OCR提取 - /ocr <文件路径>")
                    print("4. 表格分析 - /table <文件路径>")
                    print("5. 图表分析 - /chart <文件路径>")
                    print("6. 查看类型 - /types")
                    print("7. 帮助信息 - /help")
                    print("8. 退出程序 - /quit")
                    print("9. Word 文档分析 - /docx <文件路径>")
                    print("10. Excel 表格分析 - /xlsx <文件路径>")
                    print("\n[路径提示] 可使用以下示例路径:")
                    print("1. 绝对路径: C:\\Users\\Administrator\\Pictures\\image.jpg")
                    print("2. 相对路径: assets\\sample.jpg")
                    print("3. 当前目录: .\\assets\\sample.jpg")
                    print("支持 JPG/JPEG(.jpg/.jpeg)、Word(.docx)、Excel(.xlsx) 文件")
                    print("注意: 路径含空格请使用引号: /analyze \"C:\\My Pics\\a.jpg\"")
                    print("Word: /docx \"C:\\Docs\\test.docx\"  Excel: /xlsx \"C:\\Docs\\table.xlsx\"")
            
                elif command == "/analyze":
                    if len(parts) < 2:
                        print("用法:/analyze <文件路径> [类型]")
                        print("示例:/analyze assets\\sample.jpg auto")
                        continue
                
                    file_path = parts[1]
                    doc_type = parts[2] if len(parts) > 2 else "auto"
                
                    # 统一路径解析(项目根优先 + 当前目录)
                    project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
                    candidate = os.path.join(project_root, file_path) if not os.path.isabs(file_path) else file_path
                    if not os.path.isabs(file_path):
                        if os.path.exists(candidate):
                            file_path = candidate
                        elif os.path.exists(file_path):
                            pass
                        else:
                            print(f"文件不存在: {file_path}")
                            print("路径示例:\n  - 绝对路径: C:\\Users\\Administrator\\Pictures\\a.jpg\n  - 相对路径: assets\\sample.jpg\n  - 当前目录: .\\assets\\sample.jpg\n  - 支持: JPG/JPEG(.jpg/.jpeg)、Word(.docx)、Excel(.xlsx)")
                            continue
                    elif not os.path.exists(file_path):
                        print(f"文件不存在: {file_path}")
                        continue
                
                    lower = file_path.lower()
                    if lower.endswith((".jpg", ".jpeg")):
                        print("正在分析图像...")
                        result = analyzer.analyze_document(file_path, doc_type)
                        if result and result["success"]:
                            print(f"\n分析结果:")
                            print(result["result"]) 
                        else:
                            print("分析失败")
                    elif lower.endswith(".docx"):
                        print("正在分析 Word 文档...")
                        result = analyzer.analyze_word(file_path)
                        if result:
                            print("\n分析结果:")
                            print(result)
                        else:
                            print("分析失败")
                    elif lower.endswith(".xlsx"):
                        print("正在分析 Excel 表格...")
                        result = analyzer.analyze_excel(file_path)
                        if result:
                            print("\n分析结果:")
                            print(result)
                        else:
                            print("分析失败")
                    else:
                        print("仅支持 JPG/JPEG(.jpg/.jpeg)、Word(.docx)、Excel(.xlsx) 文件")
                        continue
            
                elif command == "/batch":
                    if len(parts) < 2:
                        print("请提供文件夹路径: /batch <文件夹路径> [类型]")
                        continue
                
                    folder_path = parts[1].strip().strip('"').strip("'")
                    doc_type = parts[2] if len(parts) > 2 else "auto"
                
                    project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
                    candidate = os.path.join(project_root, folder_path) if not os.path.isabs(folder_path) else folder_path
                    if not os.path.isabs(folder_path):
                        if os.path.isdir(candidate):
                            folder_path = candidate
                        elif os.path.isdir(folder_path):
                            pass
                        else:
                            print(f"文件夹不存在: {folder_path}")
                            print("路径示例:\n  - 绝对路径: C:\\Users\\Administrator\\Desktop\\AI\\assets\n  - 相对路径: assets\n  - 当前目录: .\\assets")
                            continue
                    elif not os.path.isdir(folder_path):
                        print(f"文件夹不存在: {folder_path}")
                        continue
                
                    # 批量分析支持的格式: 图片(JPG/JPEG)、Word(docx)、Excel(xlsx)
                    results = []
在 GitHub 上编辑此页
上次更新:
贡献者: wuziqing
Prev
3.1.4 多模态图文比较分析
Next
3.1.6 摄像头运用-AI视觉分析