rambo před 1 rokem
rodič
revize
51bd2d3ea1

+ 26 - 3
python/api.py

@@ -1,7 +1,9 @@
 from models import *
 import datetime
 from services.SegmentService import SegmentService
-from services.deal_cutout import DealCutout,DealCloths
+from services.deal_cutout import DealCutout, DealCloths
+from services.other.module_online_data import GetOnlineData
+
 
 @app.get("/")
 async def index():
@@ -29,17 +31,24 @@ async def checkSelect(params: CheckSelectImages):
 
 @app.post("/api/segment_images", description="检查目录或文件")
 async def segmentImages(params: SegmentImages):
+    token = params.token
+    if token is None:
+        raise UnicornException("token不能为空")
     image_type = params.image_type
     segment_type = params.segment_type
     output_type = params.output_type
     need_cutout_images = params.need_cutout_images
     result = None
-    if len([x for x in need_cutout_images if x["need_cutout"]]) == 0:
-        raise UnicornException("您所选文件夹下没有jpg图片,或对应图片已扣图")
+    try:
+        if len([x for x in need_cutout_images if x["need_cutout"]]) == 0:
+            raise UnicornException("您所选文件夹下没有jpg图片,或对应图片已扣图")
+    except Exception as e:
+        raise UnicornException(repr(e))
     if image_type == 1 and segment_type == 1:
         raise UnicornException("服装暂不支持精细化抠图")
     elif image_type == 1 and segment_type == 0:
         deal_cutout_cloth = DealCloths()
+        deal_cutout_cloth.token = token
         # 服装抠图
         # need_cutout_images = service.check_need_cutout_images(file_path)
         deal_cutout_cloth.need_cutout_images = need_cutout_images
@@ -47,6 +56,7 @@ async def segmentImages(params: SegmentImages):
         result = deal_cutout_cloth.startDispose()
     elif image_type == 0 and segment_type == 1:
         deal_cutout_mode = DealCutout()
+        deal_cutout_mode.token = token
         # 通用-精细化抠图
         deal_cutout_mode.need_cutout_images = need_cutout_images
         deal_cutout_mode.output_type = output_type
@@ -54,7 +64,20 @@ async def segmentImages(params: SegmentImages):
     elif image_type == 0 and segment_type == 0:
         # 通用-普通抠图
         deal_cutout_mode = DealCutout()
+        deal_cutout_mode.token = token
         deal_cutout_mode.need_cutout_images = need_cutout_images
         deal_cutout_mode.output_type = output_type
         result = deal_cutout_mode.normalMode()
     return success({"result": result})
+
+
+@app.post("/api/request_hlm", description="检查目录或文件")
+async def requestHlm(params: RequestHlm):
+    token = params.token
+    if token is None:
+        raise UnicornException("token不能为空")
+    onlineData = GetOnlineData(token=token)
+    result = onlineData.get_cutout_image_times()
+    if result == False:
+        raise UnicornException("请求失败")
+    return success({"result": result})

+ 9 - 1
python/config.ini

@@ -1,4 +1,12 @@
 [app]
 host=127.0.0.1
 port=7074
-debug=true
+debug=true
+[dev]
+origin= http://my2.pubdata.cn
+host= mybackend2.pubdata.cn
+domain= http://mybackend2.pubdata.cn
+[prod]
+origin= https://pc.valimart.net
+host= dev2.valimart.net
+domain= https://dev2.valimart.net

+ 13 - 2
python/middleware.py

@@ -4,12 +4,13 @@ from fastapi.exceptions import RequestValidationError
 from fastapi.responses import JSONResponse
 from fastapi.staticfiles import StaticFiles
 from fastapi.middleware.cors import CORSMiddleware
+from starlette.exceptions import HTTPException
 import random
 import os
 from pydantic import BaseModel, validator, conint, constr, Field
 
 # 关闭文档
-app = FastAPI(redoc_url=None)
+app = FastAPI()
 # app.mount("/model", StaticFiles(directory="model"), name="model")
 app.add_middleware(
     CORSMiddleware,
@@ -34,7 +35,6 @@ class UnicornException(Exception):
         self.msg = msg
         self.code = code
 
-
 @app.exception_handler(UnicornException)
 async def error_throw(request: Request, exc: UnicornException):
 
@@ -45,3 +45,14 @@ async def error_throw(request: Request, exc: UnicornException):
             "msg": exc.msg,
         },
     )
+
+
+@app.exception_handler(HTTPException)
+async def global_exception_handler(request, exc):
+    if exc.status_code == 500:
+        err_msg = "Server Internal Error"
+    else:
+        err_msg = exc.detail
+    return JSONResponse(
+        {"code": exc.status_code, "err_msg": err_msg, "status": "Failed"}
+    )

+ 6 - 0
python/models.py

@@ -31,7 +31,13 @@ class CheckSelectImages(BaseModel):
 
 class SegmentImages(BaseModel):
     # 抠图
+    token: str = Field(default=None, description="hlm token信息")
     image_type: int = Field(default=0, description="图像类型;0非服装;1服装")
     segment_type: int = Field(default=0, description="抠图精细度;0普通;1精细")
     output_type: int = Field(default=0, description="抠图精细度;0透明;1白底")
     need_cutout_images: list = Field(default=None, description="图像地址集合")
+
+
+class RequestHlm(BaseModel):
+    # 抠图
+    token: str = Field(default=None, description="hlm token信息")

+ 24 - 6
python/services/deal_cutout.py

@@ -14,10 +14,11 @@ class DealCutout:
         self.lock = threading.Lock()
         self.need_cutout_images = {}
         self.state = 2  # 1进行中 2停止
-        self.get_online_data = GetOnlineData()
+        self.get_online_data = GetOnlineData(self.token)
         self.is_upload_pic_num = 0
         self.is_deal_num = 0
         self.output_type = 0
+        self.token = None
         # 图片列表
         self.upload_pic_dict = {}
         self.logger = MyLogger().logger
@@ -30,10 +31,18 @@ class DealCutout:
             num += 1
             upload_pic_dict = {}
             upload_pic_dict = DealOneImageBeforehand(
-                image_data=image_data, lock=self.lock, windows=self, num=num
+                image_data=image_data,
+                lock=self.lock,
+                windows=self,
+                num=num,
+                token=self.token,
             ).run(upload_pic_dict)
             result = DealOneImage(
-                image_data=image_data, lock=self.lock, windows=self, num=num
+                image_data=image_data,
+                lock=self.lock,
+                windows=self,
+                num=num,
+                token=self.token,
             ).run(image_data, upload_pic_dict)
             result_array.append(result)
         return result_array
@@ -46,7 +55,11 @@ class DealCutout:
         for image_data in self.need_cutout_images:
             num += 1
             result = DealOneImageBeforehand(
-                image_data=image_data, lock=self.lock, windows=self, num=num
+                image_data=image_data,
+                lock=self.lock,
+                windows=self,
+                num=num,
+                token=self.token,
             ).get_image_cut_noraml(image_data)
             result_array.append(result)
         return result_array
@@ -58,9 +71,10 @@ class DealCloths:
         super().__init__()
         self.lock = threading.Lock()
         self.need_cutout_images = {}
+        self.token = None
         self.output_type = 0
         self.state = 2  # 1进行中 2停止
-        self.get_online_data = GetOnlineData()
+        self.get_online_data = GetOnlineData(self.token)
         self.is_upload_pic_num = 0
         self.is_deal_num = 0
         # 图片列表
@@ -75,7 +89,11 @@ class DealCloths:
             num += 1
             upload_pic_dict = {}
             hand = DealOneImageBeforehand(
-                image_data=image_data, lock=self.lock, windows=self, num=num
+                image_data=image_data,
+                lock=self.lock,
+                windows=self,
+                num=num,
+                token=self.token,
             )
             upload_pic_dict = hand.get_image_cut_cloths(image_data)
             result_array.append(upload_pic_dict)

+ 8 - 6
python/services/deal_one_image.py

@@ -15,12 +15,12 @@ from middleware import UnicornException
 
 class Base(object):
 
-    def __init__(self, image_data, lock, windows, num):
+    def __init__(self, image_data, lock, windows, num,token):
         self.lock = lock
         self.image_data = image_data
         self.num = num
         self.windows = windows
-        self.get_online_data = GetOnlineData()
+        self.get_online_data = GetOnlineData(token)
         self.file_path = image_data["file_path"]
         self.file_name = image_data["file_name"]
         self.file = os.path.split(self.file_path)[1]
@@ -118,8 +118,9 @@ class Base(object):
 
 
 class DealOneImage(Base):
-    def __init__(self, image_data, lock, windows, num):
-        super().__init__(image_data, lock, windows, num)
+
+    def __init__(self, image_data, lock, windows, num, token):
+        super().__init__(image_data, lock, windows, num, token)
         self.r_pixian = RemoveBgPiXian()
 
     def run(self, image_data, upload_pic_dict):
@@ -317,8 +318,9 @@ class DealOneImage(Base):
 
 
 class DealOneImageBeforehand(Base):
-    def __init__(self, image_data, lock, windows, num):
-        super().__init__(image_data, lock, windows, num)
+
+    def __init__(self, image_data, lock, windows, num, token):
+        super().__init__(image_data, lock, windows, num, token)
         self.r_ali = RemoveBgALi()
 
     def run(self, upload_pic_dict):

+ 63 - 44
python/services/other/module_online_data.py

@@ -9,17 +9,26 @@ import numpy as np
 import os, io
 from PIL import Image
 from io import BytesIO
-Authorization = "Bearer e4ffe8dfe772670ca9c9d234104a7be67a31d689"
-Origin = "http://my2.pubdata.cn"
-Host = "mybackend2.pubdata.cn"
-DOMAIN = "http://mybackend2.pubdata.cn"
-Headers = {
-    "Authorization": Authorization,
-    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
-    "Origin": Origin,
-    "Host": Host,
-    "Content-Type": "application/json;charset=UTF-8",
-}
+import configparser, json
+
+# ===============默认数据配置=====================
+config = configparser.ConfigParser()
+config_name = "config.ini"
+config.read(config_name)
+debug = config.get("app", "debug")
+if bool(debug) == False:
+    origin = config.get("prod", "origin")
+    host = config.get("prod", "host")
+    domain = config.get("prod", "domain")
+else:
+    origin = config.get("dev", "origin")
+    host = config.get("dev", "host")
+    domain = config.get("dev", "domain")
+Origin = origin
+Host = host
+DOMAIN = domain
+
+
 class JsonEncoder(json.JSONEncoder):
     """Convert numpy classes to JSON serializable objects."""
 
@@ -33,10 +42,11 @@ class JsonEncoder(json.JSONEncoder):
 
 
 class GetOnlineData(object):
-    def __init__(self):
+    def __init__(self, token):
+        self.token = "Bearer " + token
         self.s = requests.session()
         self.post_headers = {
-            "Authorization": Authorization,
+            "Authorization": self.token,
             "Origin": Origin,
             "Host": Host,
             "Content-Length": "0",
@@ -46,7 +56,7 @@ class GetOnlineData(object):
 
     def refresh_headers(self):
         self.post_headers = {
-            "Authorization": Authorization,
+            "Authorization": self.token,
             "Origin": Origin,
             "Host": Host,
             "Content-Length": "0",
@@ -77,7 +87,9 @@ class GetOnlineData(object):
         # 查进度
         url = "{domain}/api/ai_image/client/search_progress".format(domain=DOMAIN)
         data = {"generate_ids": generate_ids}
-        _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=60)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=60
+        )
         response_data = _s.json()
         return response_data["data"]
 
@@ -85,7 +97,7 @@ class GetOnlineData(object):
         response = requests.get(url, timeout=30)
         pic = response.content
         if out_path:
-            with open(out_path, 'wb') as f:
+            with open(out_path, "wb") as f:
                 f.write(pic)
         else:
             return Image.open(BytesIO(pic))
@@ -93,9 +105,13 @@ class GetOnlineData(object):
     def remove_background(self, images_url):
         url = "{domain}/api/ai_image/client/remove_background".format(domain=DOMAIN)
         data = {"images": images_url}
-        _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=30)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=30
+        )
         response_data = _s.json()
-        return response_data["data"]["generate_ids"], int(response_data["data"]["balance"])
+        return response_data["data"]["generate_ids"], int(
+            response_data["data"]["balance"]
+        )
 
     def get_current_menu(self):
         def get_menu(_menu_dict, _data):
@@ -110,6 +126,13 @@ class GetOnlineData(object):
         url = "{domain}/api/backend/basic/get_current_menu".format(
             domain=DOMAIN,
         )
+        Headers = {
+            "Authorization": self.token,
+            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
+            "Origin": Origin,
+            "Host": Host,
+            "Content-Type": "application/json;charset=UTF-8",
+        }
         _s = self.s.get(url=url, headers=Headers)
         response_data = _s.json()
         try:
@@ -127,41 +150,33 @@ class GetOnlineData(object):
             root_path, file_name = os.path.split(file_path)
             e = os.path.splitext(file_name)[1]
 
-            __format = {"jpg": "JPEG",
-                        "JPG": "JPEG",
-                        "JPEG": "JPEG",
-                        "jpeg": "JPEG",
-                        "png": "PNG",
-                        "PNG": "PNG", }
+            __format = {
+                "jpg": "JPEG",
+                "JPG": "JPEG",
+                "JPEG": "JPEG",
+                "jpeg": "JPEG",
+                "png": "PNG",
+                "PNG": "PNG",
+            }
 
             _format = __format[e[1:]]
             if _format == "JPEG":
                 buffer = io.BytesIO()
                 im = Image.open(file_path)
-                im.save(buffer, format='JPEG')
+                im.save(buffer, format="JPEG")
                 buffer.seek(0)
             else:
-                with open(file_path, 'rb') as file:
+                with open(file_path, "rb") as file:
                     buffer = io.BytesIO(file.read())
 
-            files = [
-                ('file',
-                 (file_path,
-                  buffer,
-                  'image/{}'.format(_format)))
-            ]
+            files = [("file", (file_path, buffer, "image/{}".format(_format)))]
         else:
-            files = [
-                ('file',
-                 ("1.jpg",
-                  buffer,
-                  'image/{}'.format("JPEG")))
-            ]
+            files = [("file", ("1.jpg", buffer, "image/{}".format("JPEG")))]
 
         url = "{domain}/api/backend/upload".format(domain=DOMAIN)
 
         headers = {
-            "Authorization": Authorization,
+            "Authorization": self.token,
             "Origin": Origin,
             "Host": Host,
         }
@@ -174,20 +189,24 @@ class GetOnlineData(object):
     def get_keys(self):
         k = "pxnib99dbchtmdm"
         s = "ub9uj5678gs4m2bnrass1t3tn6ughlk065ianosk06akagolcr2u"
-        return (k,s)
+        return (k, s)
 
-    def dispose_point(self,_type):
+    def dispose_point(self, _type):
         # 扣分 sub;add为增加分数,每次操作一分
         url = "{domain}/api/ai_image/client/dispose_point".format(domain=DOMAIN)
         data = {"type": _type}
-        _s = self.s.post(url=url, headers=self.post_headers,data=json.dumps(data), timeout=10)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=10
+        )
         response_data = _s.json()
         return response_data
 
-    def send_message(self,text):
+    def send_message(self, text):
         # 发送钉钉消息
         url = "{domain}/api/ai_image/client/send_message".format(domain=DOMAIN)
         data = {"message": text}
-        _s = self.s.post(url=url, headers=self.post_headers,data=json.dumps(data), timeout=10)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=10
+        )
         response_data = _s.json()
         return response_data