test_qwen_ocr.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. """
  2. 测试通义千问OCR客户端(DashScope SDK版本)
  3. 用于验证OCR识别功能是否正常工作
  4. """
  5. import asyncio
  6. import sys
  7. import os
  8. # 添加项目根目录到路径
  9. sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
  10. from app.services.qwen_ocr import QwenOCRClient
  11. from dotenv import load_dotenv
  12. # 加载环境变量
  13. load_dotenv()
  14. async def test_ocr():
  15. """测试OCR识别"""
  16. # 获取API Key
  17. api_key = os.getenv('DASHSCOPE_API_KEY')
  18. if not api_key:
  19. print("❌ 错误:未找到 DASHSCOPE_API_KEY 环境变量")
  20. print("请在 .env 文件中配置:DASHSCOPE_API_KEY=your_api_key")
  21. return
  22. print("=" * 60)
  23. print("通义千问OCR测试(DashScope SDK)")
  24. print("=" * 60)
  25. # 创建客户端
  26. client = QwenOCRClient(api_key=api_key)
  27. print("✅ OCR客户端初始化成功")
  28. # 测试图片URL(使用官方文档中的示例图片)
  29. test_image_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg"
  30. print(f"\n📷 测试图片: {test_image_url}")
  31. print("\n" + "=" * 60)
  32. # 测试不同的任务类型
  33. test_cases = [
  34. ("advanced_recognition", None, "高精识别(内置任务)"),
  35. ("general_ocr", None, "通用文字识别(内置任务)"),
  36. ("table_parsing", None, "表格解析(内置任务)"),
  37. ("advanced_recognition", "请识别图片中的所有文字,按原文顺序输出", "高精识别(自定义提示词)"),
  38. ]
  39. for task_type, custom_prompt, description in test_cases:
  40. print(f"\n🔍 测试场景: {description}")
  41. print(f" 任务类型: {task_type}")
  42. if custom_prompt:
  43. print(f" 自定义提示词: {custom_prompt}")
  44. else:
  45. print(f" 使用内置任务: ocr_options={{\"task\": \"{task_type}\"}}")
  46. print("-" * 60)
  47. try:
  48. result = await client.recognize(
  49. image_url=test_image_url,
  50. task_type=task_type,
  51. custom_prompt=custom_prompt
  52. )
  53. text = result.get("text", "")
  54. input_tokens = result.get("input_tokens", 0)
  55. output_tokens = result.get("output_tokens", 0)
  56. print(f"✅ 识别成功")
  57. print(f" 输入Token: {input_tokens}")
  58. print(f" 输出Token: {output_tokens}")
  59. print(f" 文本长度: {len(text)} 字符")
  60. print(f"\n📝 识别结果:")
  61. print("-" * 60)
  62. # 只显示前500个字符
  63. if len(text) > 500:
  64. print(text[:500] + "\n... (已截断)")
  65. else:
  66. print(text)
  67. print("-" * 60)
  68. except Exception as e:
  69. print(f"❌ 识别失败: {str(e)}")
  70. print()
  71. print("=" * 60)
  72. print("测试完成")
  73. print("=" * 60)
  74. if __name__ == "__main__":
  75. asyncio.run(test_ocr())