sample.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # -*- coding: utf-8 -*-
  2. # This file is auto-generated, don't edit it. Thanks.
  3. import json
  4. import os
  5. import sys
  6. from typing import List, Tuple, Any
  7. from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
  8. from alibabacloud_tea_openapi import models as open_api_models
  9. from alibabacloud_darabonba_stream.client import Client as StreamClient
  10. from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
  11. from alibabacloud_tea_util import models as util_models
  12. from alibabacloud_tea_console.client import Client as ConsoleClient
  13. from alibabacloud_tea_util.client import Client as UtilClient
  14. class Sample:
  15. def __init__(self):
  16. pass
  17. @staticmethod
  18. def create_client() -> ocr_api20210707Client:
  19. """
  20. 使用AK&SK初始化账号Client
  21. @return: Client
  22. @throws Exception
  23. """
  24. # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  25. # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
  26. config = open_api_models.Config(
  27. # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
  28. # access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
  29. access_key_id='LTAI5tSreWTgmQoCNE8NwKqn',
  30. # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
  31. # access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
  32. access_key_secret='re273RJmgwt1Oh8uVZGweSaAggll9o'
  33. )
  34. # Endpoint 请参考 https://api.aliyun.com/product/ocr-api
  35. config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
  36. return ocr_api20210707Client(config)
  37. @staticmethod
  38. def main(
  39. args: List[str],
  40. pic_path,
  41. ocr_type
  42. ) -> tuple[Any, Any]:
  43. far = None
  44. ticket_number = None
  45. client = Sample.create_client()
  46. # 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
  47. body_stream = StreamClient.read_from_file_path(pic_path)
  48. recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
  49. body=body_stream,
  50. type=ocr_type,
  51. output_figure=False,
  52. output_qrcode=False
  53. )
  54. runtime = util_models.RuntimeOptions()
  55. try:
  56. resp = client.recognize_all_text_with_options(recognize_all_text_request, runtime)
  57. data = json.loads(UtilClient.to_jsonstring(resp))
  58. # print(f'data:{data}')
  59. if data['statusCode'] == 200:
  60. print(f'ocr_type:{ocr_type}')
  61. if ocr_type == 'Invoice':
  62. # 增值税发票
  63. far = data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['totalAmount']['Value']
  64. ticket_number = data['body']['Data']['SubImages'][0]['KvInfo']['Data']['invoiceNumber']
  65. elif ocr_type == 'TrainTicket':
  66. # 火车票
  67. far = data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['fare']['Value']
  68. ticket_number = data['body']['Data']['SubImages'][0]['KvInfo']['Data']['ticketNumber']
  69. elif ocr_type == 'TaxiInvoice':
  70. # 出租车发票
  71. far = data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['fare']['Value']
  72. ticket_number = data['body']['Data']['SubImages'][0]['KvInfo']['Data']['invoiceCode']
  73. elif ocr_type == 'QuotaInvoice':
  74. # 定额发票
  75. far = data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['AmountInWords']['Value']
  76. ticket_number = data['body']['Data']['SubImages'][0]['KvInfo']['Data']['invoiceCode']
  77. ConsoleClient.log("far:" + far)
  78. ConsoleClient.log("ticketNumber:" + ticket_number)
  79. except Exception as error:
  80. # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  81. # 错误 message
  82. print(error.message)
  83. # 诊断地址
  84. print(error.data.get("Recommend"))
  85. UtilClient.assert_as_string(error.message)
  86. return far, ticket_number
  87. @staticmethod
  88. async def main_async(
  89. args: List[str],
  90. ) -> None:
  91. client = Sample.create_client()
  92. # 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
  93. body_stream = StreamClient.read_from_file_path('uploads/20240301172645.jpg')
  94. recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
  95. body=body_stream,
  96. type='TrainTicket',
  97. output_figure=False,
  98. output_qrcode=False
  99. )
  100. runtime = util_models.RuntimeOptions()
  101. try:
  102. resp = await client.recognize_all_text_with_options_async(recognize_all_text_request, runtime)
  103. ConsoleClient.log(UtilClient.to_jsonstring(resp))
  104. except Exception as error:
  105. # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  106. # 错误 message
  107. print(error.message)
  108. # 诊断地址
  109. print(error.data.get("Recommend"))
  110. UtilClient.assert_as_string(error.message)
  111. if __name__ == '__main__':
  112. Sample.main(sys.argv[1:], 'uploads/20240301172645.jpg', 'TrainTicket')