settings.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. from wsgiref import headers
  2. from dotenv import load_dotenv, find_dotenv
  3. from pathlib import Path # Python 3.6+ only
  4. import configparser, json, pytz
  5. import requests,os
  6. import pillow_avif
  7. from utils.common import message_queue
  8. import hashlib
  9. from pathlib import Path
  10. import os,stat
  11. TIME_ZONE = pytz.timezone("Asia/Shanghai")
  12. from numpy import true_divide
  13. from databases import (
  14. create_all_database,
  15. DeviceConfig,
  16. SysConfigs,
  17. CRUD,
  18. batch_insert_sys_configs,
  19. SqlQuery,
  20. batch_insert_device_configs,
  21. batch_insert_device_configsNew,
  22. )
  23. # 追加配置参数 machine_type 拍照机设备类型;0鞋;1服装
  24. MACHINE_TYPE = 0
  25. # 初始化数据表
  26. create_all_database()
  27. session = SqlQuery()
  28. device_config_crud = CRUD(DeviceConfig)
  29. all_devices = device_config_crud.read_all(session)
  30. if len(all_devices) == 0:
  31. # 如果配置表中一条数据都没有,就将初始化数据全部插入到数据表中
  32. action_tabs = json.load(open("action_tabs.json", encoding="utf-8"))
  33. actions = json.load(open("action.json", encoding="utf-8"))
  34. batch_insert_device_configs(session, action_tabs, actions)
  35. sys_config_crud = CRUD(SysConfigs)
  36. all_sys_configs = sys_config_crud.read_all(session)
  37. if len(all_sys_configs) == 0:
  38. # 如果配置表中一条数据都没有,就将初始化数据全部插入到数据表中
  39. sys_config_json = json.load(open("sys_configs.json", encoding="utf-8"))
  40. batch_insert_sys_configs(session, sys_config_json)
  41. else:
  42. # 查询数据库中缺失哪个数据,进行补充
  43. sys_config_json = json.load(open("sys_configs.json", encoding="utf-8"))
  44. for sys_config in sys_config_json:
  45. photos = CRUD(SysConfigs)
  46. item = photos.read(session, conditions={"key": sys_config.get("key")})
  47. if item == None:
  48. config = SysConfigs(**sys_config)
  49. session.add(config)
  50. session.commit() # 合并事务提交
  51. session.close()
  52. # 初始化数据表---结束
  53. def get_config_by_items(config_dict):
  54. __config_dict = {}
  55. for i, k in config_dict:
  56. __config_dict[i] = k
  57. return __config_dict
  58. keys = ["面料", "里料"]
  59. def getSysConfigs(key, item, default=None):
  60. session = SqlQuery()
  61. crud = CRUD(SysConfigs)
  62. one_item = crud.read(session, conditions={"key": key})
  63. config = json.loads(one_item.value)
  64. session.close()
  65. if item == "image_out_format":
  66. default_format = config.get(item, default)
  67. if default_format == "" or default_format == None:
  68. return "png"
  69. return config.get(item, default)
  70. def get_dict_value(_dict, key, default=None):
  71. if key in _dict:
  72. return _dict[key]
  73. else:
  74. return default
  75. # 鞋设备为1 服装设备为5
  76. MCU_CODE = 1
  77. MACHINE_LEVEL = (
  78. "二档"
  79. if getSysConfigs("other_configs", "device_speed", "二档") == ""
  80. else getSysConfigs("other_configs", "device_speed", "二档")
  81. )
  82. IS_TEST = False
  83. IS_MCU = True
  84. IS_LIN_SHI_TEST = False
  85. PhotographSeconds = float(
  86. 0.5
  87. if getSysConfigs("take_photo_configs", "camera_delay", "0.5") == ""
  88. else getSysConfigs("take_photo_configs", "camera_delay", "0.5")
  89. ) # 拍照停留时间
  90. MAX_PIXIAN_SIZE = 12000000
  91. def moveSpeed(level: str = None):
  92. config = {
  93. "一档": {
  94. "camera_high_motor": {
  95. "max_speed": 10000,
  96. "up_speed": 800,
  97. "down_speed": 700,
  98. },
  99. "turntable_steering": {
  100. "max_speed": 6000,
  101. "up_speed": 500,
  102. "down_speed": 400,
  103. },
  104. },
  105. "二档": {
  106. "camera_high_motor": {
  107. "max_speed": 7000,
  108. "up_speed": 600,
  109. "down_speed": 500,
  110. },
  111. "turntable_steering": {
  112. "max_speed": 4500,
  113. "up_speed": 350,
  114. "down_speed": 300,
  115. },
  116. },
  117. "三档": {
  118. "camera_high_motor": {
  119. "max_speed": 3500,
  120. "up_speed": 400,
  121. "down_speed": 300,
  122. },
  123. "turntable_steering": {
  124. "max_speed": 3000,
  125. "up_speed": 200,
  126. "down_speed": 200,
  127. },
  128. },
  129. }
  130. if level is None:
  131. return config[MACHINE_LEVEL]
  132. else:
  133. return config[level]
  134. config = configparser.ConfigParser()
  135. config_name = "config.ini"
  136. config.read(config_name, encoding="utf-8")
  137. # 应用名称
  138. APP_NAME = config.get("app", "app_name")
  139. # 应用版本号
  140. APP_VERSION = config.get("app", "version")
  141. # 是否开启调试模式
  142. IS_DEBUG = config.get("app", "debug")
  143. IS_UPLOAD_HLM = True if config.get("app", "is_upload") == "true" else False
  144. # 应用端口号
  145. PORT = config.get("app", "port")
  146. # 应用线程数
  147. APP_WORKS = config.get("app", "works")
  148. # 应用host地址
  149. APP_HOST = config.get("app", "host")
  150. # 应用服务启动名称
  151. APP_RUN = config.get("app", "app_run")
  152. # 日志名称
  153. LOG_FILE_NAME = config.get("log", "log_file_name")
  154. # 最大字节数
  155. MAX_BYTES = config.get("log", "max_bytes")
  156. print("Max bytes is", MAX_BYTES)
  157. # 备份数量
  158. BACKUP_COUNTS = config.get("log", "backup_counts")
  159. # 远程服务器地址
  160. HLM_HOST = config.get("log", "hlm_host")
  161. PROJECT = config.get("app", "project")
  162. # ----------------------------------
  163. mcu_config_dict = config.items("mcu_config")
  164. _mcu_config_dict = {}
  165. for i, k in mcu_config_dict:
  166. _mcu_config_dict[i] = int(k)
  167. # print(_mcu_config_dict)
  168. _config_mcu_config = get_config_by_items(config.items("mcu_config"))
  169. LEFT_FOOT_ACTION = _mcu_config_dict["left_foot_action"]
  170. LEFT_FOOT_PHOTOGRAPH = _mcu_config_dict["left_foot_photograph"]
  171. LEFT_FOOT_ACTION_1 = _mcu_config_dict["left_foot_action_1"]
  172. LEFT_FOOT_ACTION_2 = _mcu_config_dict["left_foot_action_2"]
  173. RIGHT_FOOT_ACTION = _mcu_config_dict["right_foot_action"]
  174. RIGHT_FOOT_PHOTOGRAPH = _mcu_config_dict["right_foot_photograph"]
  175. RIGHT_FOOT_ACTION_1 = _mcu_config_dict["right_foot_action_1"]
  176. RIGHT_FOOT_ACTION_2 = _mcu_config_dict["right_foot_action_2"]
  177. NEXT_STEP = int(get_dict_value(_config_mcu_config, "next_step", 6)) # 下一步
  178. MOVE_UP = _mcu_config_dict["move_up"]
  179. MOVE_DOWN = _mcu_config_dict["move_down"]
  180. STOP = _mcu_config_dict["stop"]
  181. # camera_config_dict = config.items("camera_config")
  182. # _camera_config_dict = {}
  183. # for i, k in mcu_config_dict:
  184. # _camera_config_dict[i] = int(k)
  185. # _camera_config_dict = get_config_by_items(camera_config_dict)
  186. # LOW_ISO = _camera_config_dict["low_iso"]
  187. # HIGH_ISO = _camera_config_dict["high_iso"]
  188. DOMAIN = (
  189. "https://dev2.valimart.net"
  190. if config.get("app", "env") != "dev"
  191. else "https://dev2.pubdata.cn"
  192. )
  193. Company = "惠利玛"
  194. is_test_plugins = true_divide
  195. OUT_PIC_MODE = "." + getSysConfigs("basic_configs", "image_out_format", "png") # ".png"
  196. OUT_PIC_SIZE = (
  197. [1600]
  198. if getSysConfigs("basic_configs", "main_image_size", [1600]) == ""
  199. else getSysConfigs("basic_configs", "main_image_size", [1600])
  200. ) # 主图大小
  201. Mode = getSysConfigs("other_configs", "product_type", "鞋类") # 程序执行类
  202. OUT_PIC_FACTOR = float(
  203. 1
  204. if getSysConfigs("basic_configs", "image_sharpening", "1") == ""
  205. else getSysConfigs("basic_configs", "image_sharpening", "1")
  206. ) # 图片锐化
  207. RESIZE_IMAGE_MODE = 1
  208. GRENERATE_MAIN_PIC_BRIGHTNESS = 254 # 色阶是否调整到位判断
  209. RUNNING_MODE = getSysConfigs("other_configs", "running_mode", "普通模式")
  210. DEFAULT_CUTOUT_MODE = getSysConfigs("other_configs", "cutout_mode", "普通抠图")
  211. CUTOUT_MODE = (
  212. 0 if getSysConfigs("other_configs", "cutout_mode", "普通抠图") == "普通抠图" else 1
  213. )
  214. import importlib
  215. OUT_PIC_QUALITY = "普通"
  216. GRENERATE_MAIN_PIC_BRIGHTNESS = int(
  217. getSysConfigs("other_configs", "grenerate_main_pic_brightness", 254)
  218. ) # 色阶是否调整到位判断
  219. SHADOW_PROCESSING = int(
  220. getSysConfigs("other_configs", "shadow_processing", 0)
  221. ) # 0表示要直线和曲线,1 表示只要直线
  222. LOWER_Y = int(
  223. getSysConfigs("other_configs", "lower_y", 4)
  224. ) # 鞋底以下多少距离作为阴影蒙版
  225. CHECK_LOWER_Y = int(
  226. getSysConfigs("other_configs", "check_lower_y", 4)
  227. ) # 检测亮度区域,倒数第几行
  228. IS_GET_GREEN_MASK = (
  229. True if getSysConfigs("other_configs", "is_get_green_mask", "否") == "是" else False
  230. ) # 是否进行绿幕抠图
  231. IMAGE_SAVE_MAX_WORKERS = int(
  232. getSysConfigs("other_configs", "image_save_max_workers", 20)
  233. ) # 批量保存的线程大小
  234. COLOR_GRADATION_CYCLES = int(
  235. getSysConfigs("other_configs", "color_gradation_cycles", 23)
  236. ) # 色阶处理循环次数
  237. def recordDataPoint(token=None, page="", uuid=None, data=""):
  238. """记录日志"""
  239. if token == None:
  240. return
  241. if page == "":
  242. return
  243. if uuid == None:
  244. return
  245. headers = {"Content-Type": "application/json", "authorization": "Bearer " + token}
  246. params = {
  247. "site": 1,
  248. "type": 5,
  249. "channel": "aigc-camera",
  250. "uuid": uuid,
  251. "page": page,
  252. "page_url": "/",
  253. "describe": {"action": page, "data": data},
  254. "time": 0,
  255. }
  256. return requests.post(
  257. headers=headers, data=json.dumps(params), url=DOMAIN + "/api/record/point"
  258. )
  259. async def sendSocketMessage(
  260. code=0, msg="", data=None, device_status=2, msg_type=""
  261. ):
  262. data = {
  263. "code": code,
  264. "msg": msg,
  265. "status": device_status,
  266. "data": data,
  267. "msg_type": msg_type,
  268. }
  269. await message_queue.put(data)
  270. def calculate_md5(filepath):
  271. # 打开文件,以二进制只读模式打开
  272. with open(filepath, "rb") as f:
  273. # 创建MD5哈希对象
  274. md5hash = hashlib.md5()
  275. # 循环读取文件的内容并更新哈希对象
  276. for chunk in iter(lambda: f.read(4096), b""):
  277. md5hash.update(chunk)
  278. # 返回MD5哈希的十六进制表示
  279. return md5hash.hexdigest()
  280. __output_dir = config.get("output_config", "output_dir")
  281. path_obj = Path(os.path.abspath(__output_dir))
  282. OUTPUT_DIR = path_obj.absolute()
  283. print("OUTPUT_DIR",__output_dir,OUTPUT_DIR)
  284. def handle_remove_readonly(func, path, exc):
  285. os.chmod(path, stat.S_IWRITE)
  286. func(path)