xubo 1 год назад
Родитель
Сommit
025eaba253

+ 17 - 1
alibabacloud_sample/file_utils.py

@@ -1,13 +1,19 @@
+import sys
+
 from flask import Flask, request
 from werkzeug.utils import secure_filename
 import os
 
+from alibabacloud_sample.sample import Sample
+
 app = Flask(__name__)
 app.config['UPLOAD_FOLDER'] = 'uploads'  # 替换为你的上传文件夹路径
 
 
 @app.route('/api/upload', methods=['POST'])
 def upload_file():
+    file_type = request.form.get('type')
+
     if 'file' not in request.files:
         return "No file part"
     file = request.files['file']
@@ -22,8 +28,18 @@ def upload_file():
             print(f"Directory '{directory}' already exists.")
 
         filename = secure_filename(file.filename)
+        print(f'filename: {filename}')
         file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
-        return "File uploaded successfully"
+        # 识别
+        far, ticket_number = Sample.main(sys.argv[1:], filename, file_type)
+        return f'{far}, {ticket_number}'
+        # return 'upload success'
+
+
+@app.route('/api/ocr', methods=['GET'])
+def get_pic_content():
+    far, ticket_number = Sample.main(sys.argv[1:], 'uploads/20240301172645.jpg', 'TrainTicket')
+    return f'{far}, {ticket_number}'
 
 
 @app.route('/', methods=['GET'])

+ 20 - 10
alibabacloud_sample/sample.py

@@ -4,7 +4,7 @@ import json
 import os
 import sys
 
-from typing import List
+from typing import List, Tuple, Any
 
 from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
 from alibabacloud_tea_openapi import models as open_api_models
@@ -42,25 +42,32 @@ class Sample:
 
     @staticmethod
     def main(
-        args: List[str],
-    ) -> None:
+            args: List[str],
+            pic_path,
+            ocr_type
+    ) -> tuple[Any, Any]:
+        far = None
+        ticket_number = None
+
         client = Sample.create_client()
         # 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
-        body_stream = StreamClient.read_from_file_path('uploads/20240301172645.jpg')
+        body_stream = StreamClient.read_from_file_path(pic_path)
         recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
             body=body_stream,
-            type='TrainTicket',
+            type=ocr_type,
             output_figure=False,
             output_qrcode=False
         )
         runtime = util_models.RuntimeOptions()
         try:
             resp = client.recognize_all_text_with_options(recognize_all_text_request, runtime)
-            # ConsoleClient.log(UtilClient.to_jsonstring(resp))
+            ConsoleClient.log(UtilClient.to_jsonstring(resp))
             data = json.loads(UtilClient.to_jsonstring(resp))
             if data['statusCode'] == 200:
-                ConsoleClient.log("far:" + data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['fare']['Value'])
-                ConsoleClient.log("ticketNumber:" + data['body']['Data']['SubImages'][0]['KvInfo']['Data']['ticketNumber'])
+                far = data['body']['Data']['SubImages'][0]['KvInfo']['KvDetails']['fare']['Value']
+                ticket_number = data['body']['Data']['SubImages'][0]['KvInfo']['Data']['ticketNumber']
+                ConsoleClient.log("far:" + far)
+                ConsoleClient.log("ticketNumber:" + ticket_number)
 
         except Exception as error:
             # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
@@ -70,9 +77,11 @@ class Sample:
             print(error.data.get("Recommend"))
             UtilClient.assert_as_string(error.message)
 
+        return far, ticket_number
+
     @staticmethod
     async def main_async(
-        args: List[str],
+            args: List[str],
     ) -> None:
         client = Sample.create_client()
         # 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
@@ -97,4 +106,5 @@ class Sample:
 
 
 if __name__ == '__main__':
-    Sample.main(sys.argv[1:])
+    Sample.main(sys.argv[1:], 'uploads/20240301172645.jpg', 'TrainTicket')
+

BIN
alibabacloud_sample/uploads/20240417__14.pdf